找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 4279|回复: 0
打印 上一主题 下一主题

转载对小绵羊的轰炸APP逆向分析

[复制链接]
跳转到指定楼层
楼主
发表于 2022-7-8 21:25:07 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

) n: d9 u4 ]& E5 I' S 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 3 B/ c% }, O j

$ S7 v1 C, C* T' N3 g

; C6 l+ P4 F$ n0 K vshapes= , F2 ~* N& N3 W9 S& f; M/ ~6 _* ]9 h

5 W, Y9 M; _+ E; {

2 e5 t j' o( r4 N( b1 U2 @   7 t1 ]$ p6 _# ?2 j2 R

0 s+ X! R8 f, r+ ?8 ^' W% P4 h/ Q

% `( f) w' ` s1 l/ q: {, @3 o 下面就以开发者角度进行解析下这个APP的功能的实现原理。 + }. `. ?2 P8 Q1 m% Y

$ E. o* A4 H1 M- G; z+ s

3 a8 m( `" f6 l: g( y   " S7 J7 Z. V" Z

. ]. C: y) i! Q( ^. Q

. X3 O+ |. F4 g9 ]: o( I# H 基础信息 ! b) D- Q! R8 I6 u6 K/ |! U

" ]* I) B1 p' a

4 X& k' E9 X4 x 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 6 L* s+ ?; t& i R

5 ?$ P0 h* V' }. X0 m; ~

" J& b. ~! |: v6 U- C( }& k2 I% { vshapes= . D7 q/ C! u9 _; U, m; r' z

) B J0 Y: c) Y; H

2 L! ?* u9 b( m! ?9 _# m- _4 M3 G   ! W; ?( v/ l- N5 m5 n

$ ~8 L `& v2 r" v( o* z! ]+ h- o

. u+ ~. C, l6 ^) a# K$ N" R 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 % z! z4 @6 M4 p# ~4 F/ J. ~

4 J9 C4 |9 W+ i' ^, _+ ~

' X- L# G, @5 `- W ^! U7 d vshapes= + c2 P3 ^3 P! g1 T3 h+ b( ~

8 U6 C6 w4 w( }* g+ P6 N

6 B& z! S+ {8 Q   ( k& _5 A" S7 h) A6 b" Y

. d6 l. p7 M d- T" p) C) M& j- k

1 ?" V6 n( C' [. g 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 " M* v. k, T; Y

" r/ M! D2 d7 J8 A& }- q

- [. w9 N6 X* @$ r vshapes= - A. w( T+ S+ c9 r/ q) D

0 R* v* a* ^3 u$ T, z

Y3 m$ \. q9 o5 D7 L& `   - S8 l+ q7 d2 `

; \3 D( `+ D# u+ w+ P. ~- S( [5 `- y! X

8 Z7 d. A8 U, e5 B; A( l, p% u 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 - G- s; a2 |: e* Q1 f) e# X

& A: r( n8 G, u) e0 Q) s

9 F d( z* q( K, w6 w# `8 { vshapes= # M/ l Q- y; S% _2 M

! i0 T! K8 e5 E, H# W7 @

( R6 E5 C) S" d z   1 p) M0 v1 v3 y9 ]$ R

' M c% x% H! J# X

, O9 Z! J/ k7 Z; x3 d! i 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 & x5 c2 \$ }; T1 {5 n* d. l

, b( D( d: _" @4 b$ N

: \: I5 P0 i x ]; Z7 t( R vshapes= ) |7 W; O8 T- W3 S( x) }

5 W+ h9 I" d' Y+ I7 m

) @/ z" N4 v- V. k1 y   7 V- z/ {% @$ R

7 b6 ]. B3 s5 V5 W, j

( q3 F! t S+ ~- D3 f   " U1 A* g4 z& S m- q3 y

# M0 g! M* n' k

j# v5 ^% m2 M* g1 i) o- K7 Y+ a 签名信息 1 Z3 O) e6 b( k, [! T1 |" i& W& P

- r4 t/ A, b0 C7 Y5 L5 g

6 ~& p: `+ R" I0 ^, k 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 2 c, z+ q* S! A

9 ^- ~6 Y0 u0 M' ~; M) j# `2 M

9 P( t; ]6 S. z' H: j9 ]9 f 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 0 R# u) c% H% e4 Z2 c: Z8 U

( u. j/ N4 n' s1 n9 r- g

& i, i' @* V* x# {. E1 o androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ( [: u, f6 a7 w2 N/ w3 R( ]

c$ q# C7 {# H1 N4 t% R+ ^

4 Y6 P G0 _8 S/ I) N2 Q vshapes= 5 J0 y! n0 j9 O* R

# M- X" {, Y4 |' d6 l7 X0 G

3 |, s! R' N, D5 I3 r   2 W5 ]. c; G# M' W1 j; G

2 C# }' X6 j# s/ R) f8 H

' N, x/ a {; B1 I% a# t android签名的数字证书的一般都是采用 X.509的国际标准。 ' [, k, k" x; Q" v% M) E

. y9 E9 }8 c1 a6 n7 j8 _

; s" I; y7 o' n X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 : z, Z9 d4 _$ Z$ h; }" f6 M7 W

9 l% f4 I- R0 z d D, o

; W5 p7 T3 S0 X: @! {7 i 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 3 h. J3 w- \6 j6 M7 F, X

5 m2 s' k) H2 Z2 G

3 l, U6 }% ~" Y N vshapes= 0 g9 L6 \/ m1 n% M; |

& \6 K3 h& p z9 e1 j

) f% u$ ^" u2 H, T" U   & d! w! L8 i% f! \! `

! G7 y4 g( |1 c; T/ B p9 i

! E3 K9 N/ F9 J7 D! x. g 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 2 T9 `0 v0 K) N

# A0 L# u: m! l1 K4 P. f1 ?

1 R b. f" m: R8 c0 C vshapes= 2 ?5 x3 e T. R6 k3 l. X" f

9 Q8 _: m4 V; ^ W7 V5 y6 C

9 ~& o) X0 l* p) `- o" p3 H' x . P& B7 M, {- q; c

5 x: L, T- m, w! _6 s1 ]

! \# A" E9 @; f* l& ^) d. r   ) [& i3 q+ R8 o& `5 H# M9 F

5 a, P0 U. A% i; ?' p

" l A* e( j5 C1 \5 f 权限信息 + a$ K. d1 \' w/ {' u

; [& Q, _& D' q' `9 R$ S" J3 w

8 p3 d6 n1 j5 N- K1 n 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ) w e0 O3 g/ D

. W( \: i! Q, i1 U u+ P6 X

! i2 s1 {0 M* U, J android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ; E" Z7 W7 Y5 u8 ~9 {+ i4 c; S F

+ P/ e5 S9 ]6 @/ H0 F

/ r4 \3 X s+ z vshapes= 9 G- |1 F9 \& k/ T! O: p5 W" @

# F6 Y, a5 x5 B; ]% v+ O

' [7 R* ]( |5 k) P1 l) h& X: k% u   8 A9 H" ?# r, C8 n

! f+ j% G& J8 \: s7 h

- h6 S' C3 ^ _. o$ e3 ^4 B 下面对这个APP的所有权限进行详解下: / O3 P. B& d% V4 V

0 a/ Z6 M! [8 z( g' N

" j& d" ~& r. y( a; |, l android.permission.INTERNET :访问网络连接可能产生GPRS流量 % c2 f: A/ I% Y b% m

% u% o3 s" c& X7 G/ o7 X5 u

: n3 v/ D2 b+ [: Z/ K4 ` android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ' Z+ E Y E8 J1 c

4 @+ |% ^+ o/ [0 W7 {

2 s/ g" g* o2 R& k5 | android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ; c' Q6 V" f5 ^ C; b# D, e

4 T$ }1 a5 x: }8 C# U$ N

) [: j6 p0 v. z" v android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ! K/ Y5 f) U7 T$ x

8 C/ j4 y- ?2 r3 h% Y

* T, J: n9 X& [% P" H android.permission.WRITE_SMS:允许应用程序写短信内容 1 J" r6 o5 J; e# j

F8 J! z$ L- P" G

4 x9 P$ ^6 B/ |, D. T7 o6 t android.permission.READ_SMS:允许应用程序读取短信内容 ) B- s1 u6 G7 a* `3 ~1 _& x1 u6 x

! f: A3 T" U, d. U2 s! S3 \2 s

( Q- c& J; A9 D: F& R- | android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 5 C. @% b2 M) v# h, B

1 j, V, W- V; o7 ?' P& l+ O

2 Q) O" ]$ k" o1 z/ P% i android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 " ~4 H: d7 |0 G( B* \+ K2 X

$ Y4 [; K( W7 W

- k1 x7 A! n9 ]+ [9 G% ? android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 , Q B2 O% B% E) N4 J$ v" q# g

6 Z) A% d2 `' D7 g

" \4 T) N+ @" C! o; @2 H. x android.permission.VIBRATE:允许振动 5 H/ c L9 j# \3 S( a, F$ w- P

3 u9 X# f: a% P! R& A9 [9 p+ C8 \

+ h y* q1 J7 ?! n& J android.permission.READ_LOGS:允许程序读取系统底层日志 4 z+ K& h/ G+ y# v8 g

( N7 X, W- _7 S$ ^" Z% F

: L, }/ H) Q+ Y9 ~) k android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  / G% W% ~1 v$ f& o3 @

& i+ }! g" A9 j. e9 P$ T E

( D$ `9 u) g! b0 e* S( q   ' ^0 n' X$ s5 w1 P8 I2 K7 M: K

8 }( G2 @7 j* _0 Z. x

( w! e* D8 A, _7 J/ y/ A0 ] \ 功能信息 ; w9 V0 c2 ^" O) `8 p' c& F

3 c- v, U F2 W/ a2 v. ~

; \! Y/ G# F7 n# _$ i# I   , J f3 b, y( J* E& y( h

3 E: P0 ]+ [) Q* d! ?/ u Z

e, g$ Q6 |; @! C9 t 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 " S, t! z, Q) T+ F3 B( p! O- m1 D

/ P4 c; `" N5 M% e) Z

5 ]8 G9 p9 l6 s& H Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 , K$ n3 A% a6 G X

' _, ^+ c1 j% j6 E: Z4 {

) H7 W; g& m. e; } 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 , ^% c% ?1 ^. J1 r/ v: X( k- b7 k

% e0 ^+ T$ U: d9 t5 G6 A

+ M: C+ L5 v7 K( ~/ ^8 ? 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 0 O+ {7 }1 L, l3 l

1 h5 ?( n# {" p' i

1 C6 M$ {3 @! }3 _2 g, o& i% \( P5 m vshapes= * j8 G5 H$ ~ p) W' t5 R) n7 Q% M

" u0 o, o' k3 ~! Z3 y0 u( g. T

+ @6 e) W$ n( S/ t   ! f T7 C# V% r q

6 u; q8 o$ p* @

" R& M' }1 l4 j; @ 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 3 h6 g9 B, O# }

) ], Y* w9 f: k) n

8 ?$ W3 T+ c# } vshapes= 2 I2 S4 N( s6 @1 @

- L* P" ]/ L: C; _5 _

/ b7 V* s! m- K" i" s0 X4 D2 K/ d# i   8 j( ~4 P/ B5 P4 y0 P- @

/ z, U" d, K, A, J( c) u

" l# E. i0 i8 P/ Y lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 - `8 G6 F/ ~2 k# O: P4 H7 w3 ^

0 {4 Q) Q4 x* I# j& d' k: v' a0 g

; r5 P- Z& C# [: b, N* k4 T1 h vshapes= / N3 X2 l& ~+ d6 Z' k. `) x6 z0 Z

0 A5 r; A g4 M/ G' w- E

) _3 ?0 C8 G$ }! ~6 O 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 " A7 ?$ l. Q$ J9 d* c& f7 r+ f7 |

8 ^+ |, X& A( H5 W) X2 K( Q

2 d+ [# e e5 o5 J" j0 @ vshapes= 2 q! D/ `( l# t' g4 j

$ q0 l# L4 z0 N, u4 b4 I

7 _$ N" C' D. n3 ~; o: u! J   4 o% _3 D5 z% w5 d6 w

+ h6 i9 R# A1 F+ X

! g9 ]7 j7 u: n- b* u1 A" `! N 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ( W4 B' f$ C7 Q* c- V7 ~4 a

. c9 e! X [+ Q- R! ?

% }* o2 d6 E+ h8 [: a7 A! [ LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 + x% m, ~ q7 u+ n- V9 X0 y8 e

/ h$ F c. Y8 x9 B" T5 |# u$ W6 D* \

! i9 s$ J6 ~% u 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 ) Y# q& L2 m+ m

2 ?4 d& |$ P0 V9 p8 F

0 F3 d' ^" B' o/ r6 X9 g+ h 源的luasocket代码可以参考学习下 5 V H4 A) l4 k' k" ^9 u

( z! \9 E7 ^4 K' t8 S

; u0 t0 A; A# f9 y https://github.com/lunarmodules/luasocket ' h. b1 l+ G. h; ~$ V

; M( V$ G8 z2 A0 R$ c

% G+ s5 I1 z$ h0 a2 ?9 ? https://github.com/fengye/luasocket ; P4 o8 S" B# C7 j9 h9 n

9 z5 ~7 M/ ]/ k

8 ^, O) H& g! k. r4 {4 L   * P4 F9 t* k2 l1 Q8 T) d

& j: C3 q" Y1 S% r" L: L* k

, I2 z% i: S5 E1 G' o& p vshapes= , N0 u5 @! Y$ b5 o5 }! H) u

) O! k( k+ D8 {+ i

5 D# n/ q4 Y8 @1 L; w$ l O, y   ! e4 ~- P6 M) I/ l; V6 w6 e! M

( E! t K1 }/ z2 a& w# ?

6 \) a2 ] p. z$ t/ I) N   9 W6 L$ l" ~( i& b( C; J; N# i1 z

4 u+ x. B$ f, U3 `% p

4 P: \4 V2 \/ z7 M0 B' M P/ a E3 R0 E 总结 * X1 |0 P7 T- w+ l

8 L: F8 g! c8 ]2 V" F! t

/ t f- H- L# J8 D' ]- z 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 2 [* U/ t1 ~7 G3 d. ~

9 ?* L5 j4 v6 U! `) g5 N% {6 T

4 F0 [+ D1 V, O) K$ l: {9 d 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 # X2 Z0 [: H" i( x. y7 h

+ `, \) x- R) T0 E

1 R& N! w- A6 G6 X! O% J 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ( C R. o: q" ~4 D. U6 A! _1 r9 v

4 q: ]) u1 l% n, P4 b0 X) z2 F e

& y# M2 L3 Q- k; M8 f 结束 ; Y& j; E2 c4 W/ \

$ M( Y7 I4 v: {3 e* r* c

4 f; ^2 L4 v) t+ t. E1 h% n+ t1 ?  【推荐阅读】 2 H$ ?8 M9 J* B$ ]+ B

" w% R1 k5 F8 G

: [2 | N M9 v3 K2 a7 k" j 对吃鸡APP的分析 ! s* ]* ^4 i- V" M# F6 |

5 w( R2 `( Y5 k. X

2 u# o# c: f, f* q4 E 你需要了解的APP安全 1 M6 T! L% q. Q

' V% p2 q$ L4 W# O4 t- v7 L

! Z2 Q f1 y" S" ]- A! u 你需要了解的APP安全 1 q# h c$ ?/ [1 z0 t( s8 U. l$ X

1 @% T% x) ~3 A j

1 N) B) k% i. v7 ^   + C6 p. v* Q# n' G, M: G1 B

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表