中国网络渗透测试联盟

标题: 转载对小绵羊的轰炸APP逆向分析 [打印本页]

作者: admin    时间: 2022-7-8 21:25
标题: 转载对小绵羊的轰炸APP逆向分析

1 K+ a* ~$ [, B* D$ Z6 c* m6 k& _ 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 6 Z2 S) a0 i1 @ J7 `5 e. Y

5 y$ n1 O! L/ L" ]; B9 J

# l4 }- S; x }1 v/ I) ` vshapes= 1 q. F: I+ h' x1 ]2 m: n$ W

6 O }4 ^. y. v8 c5 T( q4 Y

! X& V7 K2 s7 l0 f( b& |   4 }8 ?& p; E) S

' H% N( r% V! Y2 g7 w5 L

2 V! u; @0 X4 Z$ c5 ~4 f3 t 下面就以开发者角度进行解析下这个APP的功能的实现原理。 4 B+ d# [/ P# b2 m2 W, V, L

1 M- ~6 b3 d9 g5 k

5 u6 F* f& e; _& Y- |5 k   / b! a9 y0 m# k* U4 x) f

7 B; Q4 s" r6 j; Z5 @

- X) z) ]* m5 y$ K/ ^ 基础信息 ' p+ l7 e& i! o+ h {2 [5 s

7 M, l; p$ e0 p

& E1 T. Z- L: @" r# w 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 7 x9 Y% w1 Z. I

. c$ R4 o1 D f) d3 M! Y5 t, }& Q

; u, q6 R( u! J i0 E vshapes= " Y. C @- }5 }; k5 L% ^

7 D! d3 q' m+ m6 a' o; T

, q1 r9 I. _4 Y5 R. m8 `   4 f' T! z J$ h# A& t

; a0 v4 g" e7 |3 ?" V* k

& K" d- O, ` g 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 / z8 k- A1 X, `

6 o4 Y9 h1 F& O% j6 @

r. R, F( N* @( e# z4 G vshapes= 0 e& Y6 b* ^5 b. D( z) L

. x" V+ }( g: ?- R- _. Y

( U2 }. g4 [6 }1 A) Y   ' L# J' y9 A* Y! ?# R9 |" E. h8 ]9 K5 C

9 {' r- @* q$ i# H

9 _5 t+ g- N' m0 p 通过jadx工具查看,该APP的Java层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ! d! [3 O( b5 C- d- F! G) k

. k( w+ m$ e, b4 D( s# O" G

4 U; `# B/ x# I4 `0 h vshapes= ! ~4 X( C9 i, j5 c

7 }( V3 _) d, c! B( _

$ ^! w! B. D1 O7 \9 n! ]6 X3 n   - k% I: ^1 _& x- D P

; q$ t* U: m3 [# V+ f0 q

3 N" \1 m$ D( u8 B! H. a! A8 X 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1个EditText和3个Button控件组成的,也就是下面的截图信息。 3 A4 F/ g }* p |# M4 q) X$ k' {$ y, B

) [9 n7 t* K# q* f4 y, M3 n

- V4 G9 _0 f, U+ E+ U; e" x( ^# i5 v vshapes= 1 \; Y3 A" ?0 ~, u9 K0 }/ L' M

! z+ C. @5 |) Y# S( D

~9 ^9 h4 \1 u+ L   4 `. l! y2 N! ]% _$ L/ ^# J* M6 g

8 q. l( Y( m! F. u7 Q

7 V/ B$ h5 Y( K) E" x! R+ @, g 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 8 f; i5 k1 y' ?) i$ u& y5 m4 I# E w1 Q

# t5 l/ k$ k+ j8 G, l% k9 Z! }

- V+ `5 X6 ]" u5 P6 z5 a9 B vshapes= , s: ^5 a6 h1 }$ C/ n( I$ m

- ]# F8 ]) M7 t3 ~3 \

9 b& I/ G6 O! K+ d& z. Y3 i   ( n' n7 f0 J( w7 b- S# l

7 t4 o' E: Y# s0 M7 ]3 v; @' E

( |. `3 h" w/ D$ K3 Y6 u0 M6 p   + Z, ~# G- ]' C J: ?9 a

5 i4 {& s0 S) k# C8 g' p

7 h, e. _- a7 t9 `/ t: J 签名信息 , N8 |: {/ y/ E" o

( b" w1 J- _) f3 ?% d6 W

* O" h1 m9 a2 e 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名。 5 Y7 |$ x3 a8 E: A" ]

* @% L' U2 l7 n. d

& ~/ R! t7 U2 L7 ?( g( d' p 目前APP中大部分都是通过V1和V2签名相结合的。并且这个在签名过程中要保证按照V1到V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 . N1 _6 S" e4 b$ m& T" w

& A& O# P/ f* }

- D) J& J$ c: {# {1 ]+ w! T7 v/ e4 `& e 在android的app开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 - i2 P( b6 ~6 N0 U/ {

, O; Q: K5 f( M; k6 E& K/ `. J

& P' C% E& E" O; W* L vshapes= ( a0 ~* H& M+ Q

9 r2 |. L' P9 C1 H! R8 A

. i: `5 E! L3 d+ ~" `   . V# [' \% J) e; B6 [3 s

! ]; k6 J! X' A G8 I" v3 ~

* s6 b2 c+ B2 e! g: K) b: { android签名的数字证书的一般都是采用 X.509的国际标准。 ! e" J3 s4 \# ]7 t

0 S' x# X. o! }3 ^+ i

. V/ I# [0 X2 h4 c 因X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 0 K" h( R. [3 Y$ X

" k9 q3 Z) L/ s& x1 S7 _. p" E% z6 Y

, J! G$ M/ J! [ J8 m. O5 D8 h; @2 U 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 5 V: J/ E% m) ?: F2 |2 D

7 V. ]& N4 e2 N# A. V% P

) l. m" p5 j" ? vshapes= % u% m$ Z' s; F

* p4 i9 s* j, |- G

+ R3 ?+ F8 _) _' ~) Q3 w! @ ~   ' N9 o! c m. W" z

* t( w+ J6 W: y. `8 N8 r

; B# T( p: b$ Q3 W6 I _+ x; [6 ?' N 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 }+ J; {2 h/ V, s4 j/ t

; `9 W9 U9 ]6 E2 q, V Y

; o3 T" M: V- P; l+ ]# e) f! X vshapes= 2 q2 c' }5 w+ E5 [* u

! U6 E0 W/ }4 }0 g

: b& j# d6 g" a) d" m% J 、 2 ?7 m: i5 F$ \/ W

, @# e% N g( r" P3 q1 ~6 H

+ p8 j" K4 U( B1 }5 D) e' s; S* C0 O   ( g: Y3 g& j4 P

3 p5 Y7 x$ r/ ], G

- f$ n! T R) H; _ 权限信息 $ U# l) D( i1 n1 s8 V# Z; Y* u3 Z

! f5 O3 n5 Y/ D9 E. i6 h2 o

, s+ s$ n, _5 e: _) F8 K. L; m* \ 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ) V0 Q# G H( A* H5 e. j7 O

( i& _0 s7 p2 u1 r$ T3 q

! Y, \7 I$ l0 }! n! w% k1 O3 R$ |- V android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ; g7 a1 z( @9 Y

/ ?5 g1 F: Z" F6 z* k

|* J# k- u# X( X0 ]2 z3 U% w9 c vshapes= 6 o+ \" m, k. s. l

/ D \! x: h" d( u4 G5 G+ ~" _

! U5 c& ~( ?: a   7 U3 G: F0 ]& N7 y/ E7 E) R

, B9 `9 ~5 R5 m' Z3 k" t0 `8 Q

) Z5 S+ B- E0 D3 p$ Y/ X& ?' O 下面对这个APP的所有权限进行详解下: 4 E+ @* t+ v& O" O

1 S) b0 v7 p" K

5 x9 _9 p% Y/ |- N5 h+ |7 O) y$ v android.permission.INTERNET :访问网络连接可能产生GPRS流量 : X+ v% ^" G6 l* r# o

! _* r* p# y6 U4 _9 C# v# ]6 q

! W* o* e6 W+ N# r android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ) W. L/ ]2 ~. {# h8 R

; }8 k+ z; N& N* p* k& A4 J$ e( j

' \8 _+ i4 r$ O' k( |6 c android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 7 @* j# c, n c* L4 G; W

$ p" D* r1 Y* P. q9 _$ q+ _1 ?* f" \

. A6 k8 b- \* E/ l* A; A android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 - m! J& R2 i# C( P- U. K

- R3 w" H& Y# k; l! |6 W

7 T" u3 X8 X! j android.permission.WRITE_SMS:允许应用程序写短信内容 2 f( n0 j+ Y, V$ C/ F4 G x

5 h5 {5 n; \; d2 S) R# |

! ~8 D' ?6 ~* s' r$ y! ]; v android.permission.READ_SMS:允许应用程序读取短信内容 & P) q# h x: `( b8 N

, u8 L5 J" R6 M: l( p/ C

+ f% x; ~+ Z: s$ A( O7 ^7 n android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 # c: H6 Z7 Y: |# F! j# I

5 d1 H* U. C" p0 j% Y

: }9 t! g: C( A; [; f android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 8 G6 R6 D- H( X! s: \" x% t# n

2 e! D, P; _0 P4 Q1 v, v" }

2 B1 d* @8 A* U" j. G android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 9 e6 l ~# G0 |- u( p* z8 v! j

# s' M% Y! \( X; Z/ q3 p1 Q c

: ^0 G2 ?& O ~! L. ~( V android.permission.VIBRATE:允许振动 ( J& H( Y: l7 X) Z) J5 z5 b: j4 o

X: h3 G- h7 w& l9 o

! \; y7 D! m+ v9 ~# { android.permission.READ_LOGS:允许程序读取系统底层日志 7 \6 \# n6 f$ P1 v/ o

* O* U. J& L- f+ t

7 z) ]. Q* E; Q3 }- D, R android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ( m& Q% W, H: D* s5 e6 \

. @# i; y7 \" i# n! i3 E; y/ J7 z

D7 y8 O( i% u9 x   0 G; L. A- l& `2 Z+ Y) E

, I# c8 I& K4 ^% ^$ A8 t# g

! l8 f, x# V0 ?7 d' Y4 s7 k: Z1 ~ 功能信息 4 ~- r/ _2 L' ~1 t

% C, p' U$ l* b7 P( h' ~8 n

" L9 g, y) L' C+ J1 b6 I   & c2 h! g e$ i$ y+ I. m. o* m

/ y7 k5 H% i$ X8 Z9 T

& S, e) y5 Y# e! t1 \ 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 1 F6 ?( a' i: U" ?

: L: O! \5 t8 O8 Y% ~ d9 m$ ?

6 O3 Y c- I6 L( x# o3 I, { Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 7 Q3 O3 q% C) q" k

0 T' y/ w- n5 I6 ]4 x+ W5 n( l

- ~& w& c* q" _8 [) e# R5 L 1、需要用JNI为Lua的C库进行封装,这样才可能在Java中使用。 3 W* O+ |) ~2 P% [/ l

t) v: U) i# q% l& i; e3 A* g5 |

* O# T% X( y4 V6 t# V$ N 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 $ g& x- U& I" I9 P$ A7 c

$ K+ `6 D4 M8 h4 l: X$ P9 v/ o

1 ?9 w p2 N2 ^- |1 U- m( _6 c% s vshapes= 7 @. S \- {4 m4 U

| m) H* m7 U p

6 O/ t E; A% V" g+ B0 B   8 y: K9 O0 }9 o

" G' m( c4 ~+ b) i* I6 g( u! z

- \6 z4 t* o7 {6 J/ { 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 3 _3 s8 ~, t7 b/ ~" J/ {

9 D1 i8 b' R6 y9 n/ S6 f9 I

& H E; P, a# z/ Y; m3 m vshapes= 6 I7 s/ \5 ]& B

) W0 s! G! r( A8 f% D. R

0 k* j) r7 }& G' |   ! H6 W- t1 z$ f3 W; N6 ?: J5 d

" y0 [; c) R% t" u. L- r; t

. a) B+ k: x1 c! ]8 R( X 在lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP。其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ) A/ v9 ^% ~" v! x9 a; s

- c& s. a% f8 P4 Q! m

" L, D( Q1 @. B) S2 @/ i; J: E vshapes= 3 O8 a6 F9 b; i# {

8 ?- K8 Y4 A6 C) n; P

t; }, I6 V, L3 J 下图的这几个so是网络上lua和socket通用的so文件,并没有什么可研究价值。 & h4 l/ W2 j( W6 _$ F* g

! S/ q9 x( n; F

/ i# w4 S. Q: R. s4 I9 f3 @4 N vshapes= 6 _8 H v' o, E* u3 R0 L5 @

3 e+ X( ?" |5 {1 X5 x

5 ~' r/ K5 e; J, T* b   3 R3 \% C1 g7 `* W0 V

0 F/ Y3 A |- B- s- _/ q! M' N

4 W+ a1 |+ Y1 [& U: \: v 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 3 k1 R m8 q- A0 [$ T L( C. q& W

! I8 V' M$ r' G9 ]+ n# f9 Y* Z% W, G

: q. f4 e, r2 X( a* x0 o2 f LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。 " Z' N3 F& V4 `7 ^ E8 f

6 K7 S {( J" U: j

9 [: _6 x- f; Q8 D 这个luasocke一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 1 w. L& c5 T' |" |

" i; Y0 R- g ?0 n

& v9 C: [- ~( G$ W; p4 E 开源的luasocket代码可以参考学习下 6 h3 G+ W Q" b0 k" Z

, b9 q: { k7 I

0 C5 }' i% j; U3 }: [- D! n7 p9 F https://github.com/lunarmodules/luasocket ; W4 s) T' @3 ?$ P! {/ H) l

" t" r E2 M @; Q+ s) P

8 U' r# Y ~+ s% E& ]5 k https://github.com/fengye/luasocket " M: p& m2 O& @1 M w5 I8 k

" I$ v C6 ~8 j! l, N: Q3 `

7 N3 @( @4 k( V1 N- U' `   0 ], _8 i, a) D0 {. s2 m

# [1 K2 `% g/ X

/ p) E, q! j8 V, D1 Z: y5 T vshapes= " D5 c" _& e& {) ~0 y& |& k

. {. ]5 S+ A9 _8 Q9 p: P/ Q

- J4 A: ~+ e! y8 @" w. C2 C   7 h; c# t% d! P' V( Q, H0 F0 L) ^

8 y: \0 z% F) u9 D

' x5 Y2 d2 V. y& s' [4 ^   1 n/ N$ B9 a& s7 g7 P- w

4 y$ L5 {+ l" E- p3 P3 H

1 `! Z5 z! y; G7 [' ~* _' B& [% [ 总结 7 t# X9 |; M* c5 Q

0 P: X" n! R3 I% A) F# Q L

( C* L: X. T! w- F1 n8 j 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadx、charles、ida、uiautomatorviewer)工具就可以将功能全部分析清楚。 9 V2 @: ?6 u4 v( j: e$ w* g

9 R. V- Y: l3 X# H# k- v+ @

3 _% o' L, O) |0 @$ q9 t+ o 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 5 Q. w! M9 k: h! s7 j- c

) \6 Q7 G: k4 q0 J, x! ^4 Q$ j1 S0 J

$ {3 Z! h- `+ n6 {7 m: d 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 - w) R; C G6 E8 P# o0 X) r9 t% O

! X, r7 {! x0 i7 Z7 M

+ ?4 p: R4 z( \( t( O# w% g 结束 9 r6 d( ?7 L, a' ^! Y

# g: v8 d3 p) ~4 D% L4 a) q3 u

) `# w9 v( g3 h! e' a  【推荐阅读】 4 y3 Z7 p5 `% i- Y8 i" r/ U2 @/ C( }

o" m; O5 N9 D

' p, F) ~& U7 Z' o& j 对吃鸡APP的分析 ( v6 Y2 ^) [5 D6 C9 z

8 i1 V7 L5 e1 E2 r- I

' ?! ]' T6 p& z( o1 ? 你需要了解的APP安全 & ? K7 q0 O" e& \+ E: C5 K m) V) R

% ?7 Z3 |- N1 l: }9 ^

# P1 |4 h+ J6 E! T6 O1 f3 x" i 你需要了解的APP安全 1 W: H+ w6 E) a1 `" [1 B$ H

8 Y, @( W4 r: p2 G A1 S" i( R

( G8 \0 {! m; F0 n% ]- ^; [   / m2 C0 u/ C4 Y7 m4 _: q0 V






欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/) Powered by Discuz! X3.2