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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2022-7-8 21:25:07 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

4 J6 b) J- \, K5 U/ q 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 , O& {: H* a. W# i! s# |

+ b# a- b9 [ \! t# b

) `! l5 i! W9 e5 u1 T; } vshapes= ! I2 v& \! y a- g+ ^& N

+ l7 ?4 E7 ]0 j! r4 ^0 w

7 ~( q8 X. Q7 @. B0 t   3 g y& R! K- ]# C$ S7 [* p

7 s) `2 c/ a, f1 g( y# c$ H

! z$ F Q; u2 F& H* L 下面就以开发者角度进行解析下这个APP的功能的实现原理。 4 @8 H+ ]) `5 f2 H, f

5 O1 G8 L! N! J6 ~! t3 {8 H# ?- g* O( o

0 v* |* x# J0 {: Y; e0 T+ ]   1 W# S" _0 d2 g( _: g, k

K6 v4 H( O y- g

4 j Z, W0 O2 h, ? 基础信息 & c1 f" G. l& r% }, s1 q. x; p

3 @3 |" Y$ r+ D, {

4 s: y4 m; T7 p' o5 W- I1 W6 k 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 0 s6 H# [( g, E4 J) Y( ~' m

8 J1 Z3 @: `& G4 u# X6 k1 Z

) I* U# z+ g6 }2 x vshapes= % x) h- @4 i3 V9 O

0 j5 @( V: W6 ~! N' F

0 T# T! [" I) Y y9 p4 B1 S   $ v! l' G! J: S- ]4 `: V

8 i8 S4 `) G5 V0 q5 F

9 t0 Q+ |6 @" ?% T7 j! ^, C 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 1 v! v5 C( W% d: w* M

) Z+ w$ ^+ _, h

/ Q Y' Q, m/ ~0 s6 C vshapes= i( r! `9 |! t0 G0 l

. l5 j; X& _8 Z; T7 p m, k

5 p* n6 Z( Y4 F, h' `' H   9 `% m9 ]2 s$ q9 y) W- P6 Y

7 |# I* ?) R; T8 y6 F

3 O' h0 l: d/ \1 `0 L9 m 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 " l1 O' B0 d* {; p5 V2 b/ _

! n" H. X# L4 R% X1 |

/ `; P8 h; w7 j: x5 E vshapes= ( w# P6 b. ?+ I- o' D0 H

3 T+ r# ]- L4 a# B8 o6 \

' U9 a5 e0 X& A& G   3 M; e+ H9 W; o, W

9 J7 y I% d7 d

9 S* a1 |! W5 b: r, J) d 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 , e" s' a* q* n5 H/ ~

, ?3 }7 ^( d2 [+ M! c9 Q" |: i% H& ^6 F

: f, z3 `) l1 {1 l! j6 [8 h* t vshapes= $ n+ n8 h0 I4 l: K( A- n

. [$ c* o0 G$ [. _# L0 R# M9 w' j

9 C* S4 u2 F2 O, c   * |% U" I7 Q+ q1 T- x1 m& ?7 j

: w7 X6 x7 H% U% l1 k& G

6 d/ z' t. t. x0 K5 c- r! ^" i$ ] 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 * l8 D/ h7 _5 e Z3 w

: P8 W% e$ p8 R) p4 V5 Q; b

! }. T* a4 O: G3 J6 r1 g9 q% v9 @( {& A vshapes= 8 t* o' T7 b- V: ]; c0 M

: M0 e/ U, D: m8 ?: j9 U* ~; e% ~

9 E# r P! R: |   6 E0 n+ {: K, h4 K- P- | q

4 `) R! ]3 I, p) h& Z+ K; ?- y

, S" y/ u. u* p$ B; V) c: ~   : T! ^4 o$ d' L. R+ \# V3 W0 r

6 I3 l9 Y3 @% {/ a* R5 f$ g

7 h% f/ Y" k9 \- ?; t 签名信息 $ ^7 @. G7 O. A& ]( ?0 W8 Q

6 X% [. e7 a. U. o& t6 A# m9 i

6 x! C; x" z1 T 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 / G" b. j# @: g- y" k0 |

3 X4 x! {! y. k: C

, s. M' m! c3 o. ^7 W9 N7 \6 k 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 / }. p; Q! W" r; d6 ^; T

9 K* h, j& t7 v/ i6 K

' d* U+ e j$ X5 F( b. P# @2 t androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 $ S* G' B2 C' R! @/ P4 p0 ^

( W, `: K. i/ Y$ M+ [, k+ }

* S/ j- @+ s( `8 p" c! x vshapes= & N6 H- K" I2 `

3 ?; B- E% q. @' {# @3 N6 Z

0 {1 u0 m2 I$ y7 `$ g   % D; n' O8 y* D3 ?6 w9 t' \

$ W! N+ _9 M# v& O, \. r

4 a# Z* { |; m" F/ b( ^ android签名的数字证书的一般都是采用 X.509的国际标准。 - _; _* m$ Z! |6 m" j \' K

) n- P# \: I0 H2 i

# w2 f: e+ N, I% R X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 & ]" x/ }& }- K

8 B* ^% B3 f( _, I1 n

! Z$ V9 \ y) q+ _3 } 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 $ O- H- a" u' x0 f

- D- B3 v4 S$ ]* W

3 c0 b$ K9 t3 \1 W A" ~ vshapes= % c+ B1 A: O3 o- Q0 @& H1 a7 T

; v7 h5 u8 A6 Z6 D/ t

8 f, e- j9 O+ k; N& P& b9 ?, b   $ w/ ^+ S5 M5 A# z

1 {; [: i$ q2 ~

6 m1 ], I! Z1 w/ @. F3 { 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 : S& f, N! N) K: }! W3 Q9 ?# d

' C- O7 i6 B- v5 b. v! w3 G6 v. o

$ Y& U8 F2 f8 P6 U/ \/ _ vshapes= $ k% s5 O7 s1 [7 b- _

3 e# ^7 ~0 a4 }6 I0 e3 `5 ^) E9 X l

; l3 N0 j) C- J 4 _, ~1 [3 b& `" B. ~

1 [, v: V4 V$ X! g$ e5 @5 ?4 N6 x

8 N3 T7 [7 d6 }) x$ w/ f w   9 H! E* ~& X, R. j- G" D9 n

" E& m; f. O' U' I

8 T. v, I `- Y( C 权限信息 8 j9 G6 {1 v2 |+ ]

: Q; H9 ]+ ^/ o6 |# C! u

. j6 t+ f" m2 D; _ 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 0 C+ A: j, _6 @* Q8 }2 K

/ q! b4 O) B% b4 |% K0 I

. I* Q7 Z S0 i( n; o. y android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 5 {, g$ [. K( J' g+ P; E

9 Q0 \1 R; l( `

' t2 g( K. g2 m/ C# n5 J vshapes= & w; _0 D$ u# O3 g! ?

3 G+ e7 I) Z/ x. J0 q7 C: S) r! W

+ ?$ p. {, m- t# n" M0 _   6 r# H, O5 y2 t0 U( E; c( P$ k

% L( T3 F3 v+ R3 G5 ?; @

1 |4 x5 t" o- [/ M6 @ 下面对这个APP的所有权限进行详解下: * X$ s/ q! b2 `8 u4 @: J

. M, [* L9 Z U6 P8 {. m# S; L! Q: n0 [

1 u& t+ s8 L& {+ g1 H* n" g android.permission.INTERNET :访问网络连接可能产生GPRS流量 ; Q0 l6 e- e0 D8 W# i& \

+ ~+ G+ C0 e& i% }+ c0 x: T

4 |% B5 i$ ^; o# s' m7 ~: }: f1 ~ android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 # u8 j, J" H3 [' L/ \; [6 _) e0 x

2 ~8 I$ Y) h5 g% \

# h. r1 P. {9 t/ ~! z. \3 G android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ) K- G' r3 k" K2 Z0 t. A' J$ b

. P5 @! u4 j& h5 l( V

$ R# R, T$ Q6 E! Z; G android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 " w D9 Y, }9 I8 x! g3 x

. r- e* j! @9 ]$ P$ X+ Y

) U$ `5 i5 S- O: I+ V | android.permission.WRITE_SMS:允许应用程序写短信内容 1 O' f) L( M. j8 F: c0 S; E( S- P

$ r$ K2 O; }5 h. @, b1 X( K3 s1 p

5 b% n! R( Y, T+ ?9 V android.permission.READ_SMS:允许应用程序读取短信内容 - r/ S; _, [1 J' }5 L' {

5 X) U5 Q8 C9 U/ Z) P8 ]

% I* r1 ^* c: d" b* a" ] android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 2 |3 _+ E0 q) R: ]: i. {% b0 x

9 m6 F% `& c! i Z- z1 {- u2 K

! d# k( y9 Y$ q1 n- c. S android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 % G9 m9 F* i. U' N [. j- F

6 |8 M, I+ N& \9 _2 I

& k4 \" T- F( _5 f6 } android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 3 k# ~1 U; B% h/ ]0 h

0 [' k! L% o' {+ V

7 A+ [# R0 r6 k# ~- [; l& c2 F+ K android.permission.VIBRATE:允许振动 2 l9 {# b( J9 Q% {8 r

& s7 f; P) G: j$ m. y/ o

4 \( V. O" z, _1 ` android.permission.READ_LOGS:允许程序读取系统底层日志 9 v5 l3 i& N, O4 l

8 [ [5 J) k4 p0 `5 y1 Z6 f( S8 ]9 R

* H* f, b1 T t8 \5 ~" | android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  & ], ~, Y/ B9 t9 _

& M& D. g j6 H5 S* h4 f

6 k9 C/ W; E0 w1 S4 Q+ [   2 c& W/ b. ]5 W+ o' o' _3 D4 @/ x

/ b9 p. l0 e+ x, A" _9 N2 V# G' Z

9 W: D5 n' x! q4 [* b 功能信息 * A* B; E' \; f: P

4 j2 j4 U) _# j2 Z$ X' M# X

4 ?' Q/ E! C! `5 L" `3 X   & s \' N3 M, G Q# |$ @9 E: U3 Z

' U/ x5 R9 }- z

+ R+ E7 ] B0 N 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 + _ d& j3 @9 a4 E- L

* C& B, W7 ?/ Y8 N D$ g4 ]) R

% I- e! r c; `, u& M2 p Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 : g8 y3 p5 B1 R$ x% C

- u# Y3 t7 u% K! @. z: Q

# G$ C7 t( t/ b" i; j6 V 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 9 b4 h Z1 @9 }+ A( `6 Y

/ D: s$ F1 r# Q5 E+ @5 {' b4 {* ^

! d, |0 B3 p7 U# E. U& f- x5 @5 j 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 , O3 w, S/ ?( V$ l% u( C

2 l- W8 ]% h& X

, S, g x# ?% o }% H- C6 n vshapes= , N( u. G! a5 d/ ]' l& ?0 G, U2 Z

! ~0 [) I+ ` p T, b9 v( }% Y3 b) p

; I9 D/ ^! I4 _   # V% p$ o, [& q, X9 l' c

7 G+ C- a+ C& ]- d/ D* U$ j! G

" Y& G6 N9 m, h8 i5 d 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 . G0 K3 n6 j, I. ?' k! W4 J

$ a1 t& U/ f" A& c, V+ _4 P& V

5 ?: q+ _* X, }" z$ N vshapes= S% O6 | ^7 I

, D" l. a6 ~( X' ^6 k

* `( o! `! C1 ~1 F7 T" t! _   : Q6 U/ S# z) C

+ Q0 d( f$ ^( S3 S

# x2 g$ ~/ S2 j* y D1 B5 }; L( I lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 5 k: B9 I3 p; e0 @4 l

- X( ~: h- w5 `1 }5 l+ H

$ R- o/ k- n7 T vshapes= 2 c6 U' ?& N6 w0 _

, S8 _& z' x) \

|4 i8 R% p' u/ k, z7 Q0 H; @ 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 5 @ W. d+ `6 X5 r

1 ]; a8 L& V0 |% {: `* l

9 w8 R1 b M- }4 m* y vshapes= + |1 V- R+ a& R) S' p4 U

/ d% k' i2 K" I' I

3 ~/ V* F- u1 {6 W$ C   - D' v; R8 j" |0 [$ D% A: k/ X

1 T5 S: l: D. ?0 O' ~& F

/ X- @$ A H1 V% O 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 6 T6 g! E* d8 {6 i. j7 J

) a. u3 j- R; L, i+ T

& p: K" o) A @ LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 / r0 I0 @5 ^) N: C2 z1 v. W/ A& N

: c; S+ ?2 ^6 j+ }2 V

1 U+ h* i' z: t V$ A, n 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 3 m' U+ ^# \& h

5 \: K: t( X' I

: X+ a$ B, `8 b; Q& C1 _ 源的luasocket代码可以参考学习下 & \3 J& E+ ^) h" Y% f

/ r' H4 ^# o6 i" M* ]( ^8 w3 o

8 z5 C: A( ]# k, M1 g$ j0 Y https://github.com/lunarmodules/luasocket - G( Y3 [% V. E, k8 m

8 [; l. q0 o7 d; f# b9 s

' s8 F1 p/ N6 ]/ J https://github.com/fengye/luasocket 0 a7 W' `- t' ]* k# O/ S0 y; L

' G, D2 c1 B% x+ h, c( x" z

8 {5 n$ J) a. A/ N" T   7 F* W$ m8 @3 t' f

- o& I8 k( R: U4 m( p( l

+ p$ {6 ~7 r$ @" v, `5 ^ vshapes= 6 Y; P" F1 W7 m. T1 `3 {5 h/ ^5 t

. ?. B4 K' W4 y) }2 Q

- p, V! y0 ^4 c   $ j6 y5 R/ q6 T- K2 E

* A, E. w5 K! d: r* }5 N

4 F" m1 ]- e8 J& w0 S5 y5 e   & g, |5 w% W- o1 |. ~* c4 E

M p* c C2 M" [( J

0 y4 S( f* f( v! q, ] 总结 - b- `9 z( o+ M4 q3 [

1 C& c& f- N3 y2 ? H

' |. |* X3 {7 D# G 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 6 y7 l$ J% V3 V4 r

D0 j6 X! N: P6 M4 x) L$ H+ E

- z6 T" r5 ~+ X6 Z 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 , l* }; Q$ o l4 `# ?

5 Y* z% z* c& b7 D: k7 l b: `; N7 A

& E! `3 [6 F9 X2 o7 z* I 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 2 }9 |! L1 h) M/ E8 r6 P

! u( `/ `* G# u

, Z. N, G5 u, o) r- N* T 结束 0 i$ Y' q) x3 {# k \2 ]2 g8 U

/ g1 p3 [4 y8 H8 Z7 E5 }4 K

4 u& | a4 `7 F4 y6 j P  【推荐阅读】 ! l7 t9 `! |3 Q' w2 k3 `

8 W5 j& A8 P! D% u0 q

7 [. n0 e" m9 P& I- q# f. } 对吃鸡APP的分析 5 a8 p3 K. C$ A/ u8 `# f' R* [

9 o7 M f2 @# [% A) ~3 g% G

, Z! }! G2 m" F4 z2 Z3 X+ _3 s& T3 S 你需要了解的APP安全 3 z9 O( y/ t7 Y# k

9 U3 U1 M& S/ I7 e6 Q

3 n- a$ V5 i. X9 H/ j 你需要了解的APP安全 " N2 S9 Z0 g ]4 Y8 K

, u. }+ d, h; z' U+ y

8 V0 D4 K8 D% U& m   / M \6 k! d# l& p7 h5 ^

回复

使用道具 举报

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

本版积分规则

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