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

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

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

: y( N k) T) ]! W( q: t 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 # r8 a. C; j! F" E7 I$ o% M

3 l( j7 a; s( p5 e0 e5 O+ T9 g

7 u3 B5 ~8 ^' a$ l vshapes= 1 Z1 ^+ k4 m4 i! G: l

+ W' k" f& u9 K

5 |7 S. L7 @0 Y! D: F0 U   2 Y+ I* u+ \" m0 s

) a! q2 @" Q+ i6 x: K* U; z9 A' D

u, W6 C$ d, X1 N$ a 下面就以开发者角度进行解析下这个APP的功能的实现原理。 % x( V) T, t5 y9 o$ S& y$ h- e

0 S) t5 j& ~* `: M

: U9 M' J; {/ H$ s% w6 g2 s& k+ M   , ]. M0 I- }4 w7 e# v

! t" M5 a) ]* w' q9 Q( y; B2 \! i

; m) ~5 q; u5 L4 m T 基础信息 ! H) v0 U( _2 d y- `+ ?

" F f& [* h0 W$ G/ A* |5 ]

. K( i: x1 N) W; q* s) X 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 0 t: R& [2 ^- D6 }

5 @! \ m% |" h6 q

' ~* ~9 V7 D& g1 F% X% ?3 H vshapes= 2 p4 S5 ~% U8 A

9 x/ A8 _6 v- a& F: b4 b) Y

+ E7 x& \- w Z1 j8 n   1 L3 z* f0 B3 M( m, V5 Y" Z1 {7 F! P

& o- F/ q' v+ [+ |% n

/ P0 _& A; f2 u) d% I 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 , b# ~* o: E9 P/ r' ]

8 F9 u& S/ V3 B7 S5 M

- k$ {, T/ {2 y0 @ vshapes= : f4 B1 m0 W! |: R: g$ I

2 Z/ A$ i# g5 v3 t

# P+ |0 ^7 U/ C8 P   . f a/ l5 _- T6 T% k

6 W+ h" j8 m, `1 r

+ l/ n4 Q# C- L' B: v 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 # y+ V" J3 b" ?* j, D! c; d; i7 k7 {1 }

- E8 i/ d0 `# h& B- q

7 S% G6 [# M1 ]. ] vshapes= % N8 L i- M8 j# Q& |" O/ @# z

. }. K5 P+ g. h/ S

3 ~) B5 f' Q2 C7 W+ \   - G4 ?9 v* g9 Q S

3 F7 K1 u% D W

, K, {0 P; `. h* f9 f! _ 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 6 W5 h1 e I- \# R. m

: b5 D+ Q$ D& v# E$ T1 |) T- t) l

5 V0 t. X- f, M- b* b: J: u vshapes= 6 ]" } d; @9 T# O6 C* U

2 ~/ U; [3 e0 ~5 q0 t1 c

. g& ~) K, n7 `6 i Y3 ]   ! V( K4 r; W& W, x3 ]

- M% E0 u$ L2 k( b- ]) M' J, F

9 m9 z% u8 X4 a* X& ?1 z6 _& K: y 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 # q, y' }4 F$ R: E

# V8 C$ X9 ~/ h( c* s. T

; f$ u" }9 Z6 \: r% Z vshapes= ! D# s# ]' {: i: {9 O( G, F

$ D! P- A7 F8 t4 l/ A, h

- x( @% f" k' j* d6 Q' `" Z8 P3 F   , D6 k/ o! _. {+ R9 J( Z

! M; q5 A$ T4 q. ?, v ^2 o

6 g: N+ `# g1 x: {# p   . @9 b' r8 J' J

: o) n7 x' j$ V

& J/ [, C$ j F7 W; x& T- l+ u& V 签名信息 8 r% k1 L2 a# f8 p1 ~* m5 w; n

U. i7 G, ~& V1 d

1 I: O& z( K1 x# s 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 - I, [9 L5 n8 a7 i- J5 w

3 z) ]# {* g0 w2 U3 h F4 }/ J

! R' g8 `6 {/ c5 r2 V; ^ 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 & H2 N' [5 e% C/ F; Z9 Q+ B

; c3 R+ k7 x$ u

; F7 @+ `( q8 k androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 2 e( e+ a' n+ B

6 @' _# I% d' |: i: E$ I3 j E3 A

L! r. e1 p3 T vshapes= ' ]' ^8 ^4 D2 P0 Y

# q* c% j, Z1 ^3 f

- r# S' t/ F. \% e$ x' T   , Q: _: ~7 R- T9 m* w; b

& y$ e+ M) N8 F( [; W

2 W( ]5 S4 u3 _! b6 Z android签名的数字证书的一般都是采用 X.509的国际标准。 " m: z6 P; r" j

" {' U+ Y5 ?5 o

" \2 P1 q5 L0 \, d; j X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 , @+ [+ M* D& ^) G; ]. T4 a. u K1 g

9 }3 y9 m% \! q C: s

3 a/ O( [2 g' V0 J" F 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 4 B2 H: R/ u. W7 X% X

+ J! L2 D! J" y: r0 U9 P

! E, r/ \# o' x/ U7 H vshapes= ( Z3 k, b A# \2 O# | t* c0 Z6 |

+ i r' D% L7 w9 h# {4 T# M

/ b. ^3 s) K$ v: p2 I$ d& e0 k' Y   8 r M+ E, C, n! a) x6 u0 ~

. z4 l d' S0 b

. Q+ q1 T* W0 n$ Z 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 7 H: e1 T* ?* M# r, p) l

- |7 F$ c- t' L) g; `9 `* W

6 C* D5 m, {8 w4 s1 h vshapes= ' u ]6 y" M2 j" F

, k+ b5 z" A$ ^: B; x7 W

( R/ s9 U9 q0 |/ `! u5 _2 a ! h4 _2 A4 U6 m. Z

: b, s+ y4 b) t& K4 C! R8 S

4 ?2 S$ L7 H" c5 ^5 T6 I   % M( t' f; C) L2 J9 k! G1 G7 U

7 x, l8 O) r1 }3 u+ q% q+ z% ~6 D

8 m4 o+ w' U+ z) f0 H 权限信息 - N$ W, L( }( ?2 ?

' u; E; Z+ Q4 ]% n' O: y

3 J* a* d3 a4 ]' f t 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 6 |5 j. j1 {$ A7 Z- c

+ q4 F6 U* M$ K8 i$ W

4 y. P' M- j. i$ G1 W# ^& | android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 . }/ ~' n$ n' U# F

: } q' y0 P9 \3 R" l. ]; c

0 j+ ?) L- H( C# i4 g, T2 F vshapes= , r/ Z( l( n6 r- q' ?: o; L! W

' N- E2 F2 D v0 D8 T( B; R2 o

# R J7 a. y( i& L   " Z$ P' k* \8 r* b( Y

2 L9 e9 d8 B8 z- [ h( u i# f, T

- s" V N- P+ a$ e; L$ S 下面对这个APP的所有权限进行详解下: Y9 b; ^* b7 ?; ]/ ^

7 ~* V% @3 ~1 d9 g$ o

5 Q- h5 |2 D0 t; L5 } android.permission.INTERNET :访问网络连接可能产生GPRS流量 ; e5 D( q" E4 A t* S0 a

6 Z. }) k: j% F

5 z: W( R* N- N! `: a0 Q9 D: k android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 6 A/ G v6 c4 {9 c

' ~6 J7 L( L. F( T

% x6 ^9 m* z# m) {# L/ C android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ! e; Z5 c1 J( A

7 J) ^, y% q E: |

4 c3 V% }# e$ z4 s) n, g android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 , p/ @# `- n3 x

7 {$ J, U; e9 w4 j8 F) g* O

z# s' S$ U( l" o1 [ android.permission.WRITE_SMS:允许应用程序写短信内容 $ i: F+ [, `+ C7 T* B8 H$ F

# g0 `( `1 P4 h) B0 T, b. ]

, Y2 R: t; f, E7 s android.permission.READ_SMS:允许应用程序读取短信内容 & o! S0 K. _: S4 p! C9 }8 J

& p" z$ ^: T$ b! C1 @" ^9 c) X4 m7 T

* |' [& @$ I$ _ d% h$ |! j! m7 l$ c android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 # A: j2 ^- i* [! K

+ m: K% G& q& |7 v

- S9 i# F$ z& c4 M6 _ android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 / t8 \+ v: F+ i. y0 F% o

& X; R* }$ D m6 x7 Q2 i* E5 W

; ^/ P) s; Y( C- e android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 2 M% @% X: L! Q5 q; j6 F

( w/ t/ f5 z8 H: r% _8 C, O" ?

. ^9 N+ ~7 \4 K/ U1 z: ] android.permission.VIBRATE:允许振动 # H5 L% y, L) z( Y% ^( D3 r. ]8 w

) m7 h/ ~& g/ Y' D6 o

$ W; y1 _8 G# w( Y7 b) Y+ L" f android.permission.READ_LOGS:允许程序读取系统底层日志 2 c% A, N7 N$ \0 s

; E" Q6 Y9 \' O! ~

+ b9 u2 U: N( h' V. @1 c. L android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  / P% L% i# }+ B: e

- H% o5 V) i( P7 Z* f" O

8 p; y; \6 S T, u   + t& }; \ o% A/ Q# f! m. h+ b

) ]- y' b8 y0 G3 ^

- U! o! U& h) ^# K 功能信息 % _0 x: s/ y. {: W }4 T7 x* C

- N6 }0 S, T4 @# @

5 \& w: Z1 r# E$ i   $ \. |& X* w! A+ {$ z) P0 W# T

7 I$ H1 \7 Z; J) S+ A( U" M

/ ]2 X7 H. j" H9 E# T5 J# y; n 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 3 r& K% P6 z6 J# B

6 D& s9 N0 N0 R6 c# X% q

; h5 D* y' }6 h8 I3 a5 G5 U) K Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 5 E3 u7 X% I5 G5 C- d8 O

# @6 w3 @7 @+ Z( z" l- `

) H" `. K4 v) F, f' h/ f 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 8 {6 R. T" q- y; b9 U2 N; v

4 L6 ]4 I |3 w5 h' K( l4 S

1 ?! U$ Z, m- G! p; A) K 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 % P/ ]9 a$ a5 ?8 C7 w5 |

4 D% `: l" G# ~$ U! m, r- s

- h2 ?4 Y7 d( \% y6 R9 r; B1 g! ? vshapes= 7 [2 i& z6 H; w- \

/ w- _' g/ c: U" x# J

, @0 Z; A) F- y' M, c4 J/ X) _) F   0 K. a6 [1 W7 j5 E7 R0 N% [

% f2 T2 l9 {% M) v

1 X/ K( A% }+ @( o0 B3 j 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 % d; q! E( d) S& W2 u

, l& m3 F8 U7 K3 a

. ?7 |: {2 z; D' Y# i; R5 \: B, w vshapes= % m' x7 j0 w( o- T1 B

* {/ V& \: F: A; `$ B

! P8 W9 D* Z4 q7 b( h) b/ Y   - z7 P- Y6 B3 ^* P' {6 F! s

# ~2 R6 n# M) o2 o, G. J

. l% ]- k5 U% x' s: s lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 8 g3 v3 D0 b+ b7 ^% R6 D

/ k9 ?: e: S& w8 o; G

* P9 R' T3 b8 r' F vshapes= . N% E8 B0 s' d# P# D

( z$ q) N% Q/ Q) y: c& f

2 B/ @" [/ \& Q 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 ; ^5 K& x l: ]$ q4 K

z% J! b( y9 Q' n+ z! v$ f

; f+ D2 I" q; C+ A vshapes= 0 T P* N0 C3 { w+ T. K* H3 ]

! K* b j5 q( P/ p

+ g! j( @& N% d0 o/ |0 Y   6 R5 h9 ?/ I9 i8 p

. M! |/ [3 `. u4 |! [/ }

/ ]& z/ g5 c* j9 U$ q4 c 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 . v3 x$ e7 U( c; X8 ~4 U

: K& [( p8 F, H) b2 L/ K# Z

% H1 x4 X8 h" ?+ X LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 % D2 z4 F! ~3 h& b& v( ^

6 h9 J) s* W9 F* Q( n

% }- `; M, d8 ^0 W9 g 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 6 t- y5 ~( L7 N9 c6 g( r" s$ o

% R; a( H! a+ M1 e. g; a/ j( q

$ Y- Y- }, Q2 Y/ h/ ^! R N+ ^ 源的luasocket代码可以参考学习下 & ^" m' G7 W1 ^8 r

% M2 Y0 f" z1 a3 \. q( y- `

, ~' V& x" q; @+ _4 ] https://github.com/lunarmodules/luasocket 3 y: h' d4 _ z+ L8 x' C

s- j8 T9 }1 s1 ]9 L

: V9 q; h3 ^, o https://github.com/fengye/luasocket ( K x- E$ i7 w7 q

) P0 u9 z/ H. Z3 P/ B/ i6 P

6 A" l0 c$ |! C- s) `   ( U0 N; ]* k1 n0 l* k/ [& n

# \, k$ b2 a2 n

; o. z. M4 i0 t5 T* o: X! x5 m vshapes= 5 X+ Z) y1 R( j* [* M4 B) k

" {$ a' q& B! A9 n0 V( a p

/ E% E6 N6 s/ o& @! G- O/ j   0 ^# O' r: Q0 p; c$ f) s

; f W! d0 V/ z \9 M$ M# m

: ]; Q2 h3 X8 V c0 d, m4 A& p   3 w2 O G0 H& b; H! O; f

, z" f' H9 r6 U3 f2 r- K6 s

# r4 @' K) J2 A% w1 I1 W 总结 - i. T* w: o. b4 J

" c9 U2 H0 [/ k: }" ~, }3 ]

3 r3 y9 |! K9 U* i 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 7 S2 e# |! x! H

5 \# Z% k% J) | J

! n8 R" ], e( k2 j9 J- z$ _ 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ) R3 E% `6 k: _: J- D8 j. Q

& {8 U5 J1 J6 o( ]0 P2 ?

( [2 ^- e& r5 i! ] 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ; l0 E& i6 }. s" e% v( b* k0 \

# O# G/ M! r7 d' B- x

$ b1 f' L. P" B: c; K; f 结束 3 m) H! h* x0 W' [0 o: g! H

" a2 V1 D5 ?2 L: A0 Y) |

B% A0 A! C6 l  【推荐阅读】 ' k1 ?0 i7 o( F4 |: q) i- O( m

* b/ q8 v5 p+ o- ?2 u/ G

?& ^! t. X: \7 @7 `3 e 对吃鸡APP的分析 3 W- h+ d. e) N8 s _

: g! Z( z2 Y: c) B" f3 i, }7 n" O/ I

( D/ z; Q3 L1 p, f( E+ d. p 你需要了解的APP安全 ' Y$ N. @5 g( y4 q2 ]* t

; \) [8 a+ P# L' I) u

* u7 d& |& |" d- O4 t. w8 V 你需要了解的APP安全 ! d5 n9 K! ^. ~$ T! |

( E/ r5 u, a1 e' H; E9 G, y

3 V1 v# K7 a, S5 o$ h   7 }1 i( i+ y' z/ o% ~4 @; R

回复

使用道具 举报

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

本版积分规则

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