中国网络渗透测试联盟

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

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

0 h) m6 b8 b/ Y 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 - l6 z/ Y- t* [+ ]: _, m

7 J" d3 [- [* t6 P4 M/ q3 S, i

; y4 T! V7 G5 A1 n4 [4 Y, u8 j vshapes= % P3 u/ `% @% G* y

3 F. a/ x" v6 H- |% G

( s& T" k8 S. c. s' r: \' G& d   & i! v' {4 o, h9 D) n6 u

, ]$ G( N1 b9 S3 x1 l8 }

; c& M5 m+ F' Z! n% G 下面就以开发者角度进行解析下这个APP的功能的实现原理。 * H& _+ J5 }( y- F

6 }" b0 j( D- U- x7 ~2 s7 J0 O' x4 q

- y% F* k+ K8 e2 g9 O; b! h   , G+ T0 f* d5 Q! P! i

+ z) g$ n6 e+ r" x+ H5 h0 ]

" h# ^- M4 @& f% C# U+ ? 基础信息 # u' g1 m7 w3 j/ A) t+ E

* O8 q% K. N- V' E, {& y7 ~

# d, z& H5 h( o- B& K0 L! y) N 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 8 _% `- [+ c: R6 h

5 y/ T9 c1 J' o& _: X

$ l5 u& n3 M" @% J1 C vshapes= 2 E$ t6 L; W( a1 x8 {6 R: t2 `# V

, r' V5 c9 s/ k$ \& d

* s W: ?1 h$ d" G+ S4 K( ]   ~1 p) T3 z2 q2 Q5 P* {' l2 d

$ g; n. a. A( S: i M- p: \# \

, [5 ^0 _; N6 l; G Q1 `+ A. ` 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 * |% V* P! t: {( \' R. M. d

8 H0 C6 t7 T; C- h) n! l

/ I* C# M. p7 O4 d6 @ vshapes= 1 a; l& ^1 v7 G% d

+ }* Y" K8 H5 s

& {- K& j3 A. V6 Q   ; ]# H% l0 r8 e5 _2 }7 \# o# H/ p L

+ ?' \2 ^- j1 f' n( _4 p

. {& {* Y3 m; o1 }' L7 r8 s 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ; o6 d w3 f( P- p8 X

6 ~% u3 ^/ D( S- b( i R

# A2 v: F6 g/ r4 d7 i0 _0 v3 V vshapes= & l( ~' b9 x, @' {& I% g

- E. K8 C1 A3 {

0 n# w7 h, g4 n2 A! H   5 k7 V7 f5 r6 @9 `2 r( k( H. ~

: K4 g3 A' M+ x4 s) g: k1 N( F; v3 D

8 b' I" ^) _5 W& E6 j 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 9 ~ U6 i: w; ~( E; a: n" f

1 E3 Y* ]# j" P+ _% i' z2 K

Y% b# V t; w; }! k8 c; _ vshapes= - `6 _: O0 }1 s, F

; P% {' @; [: g

9 S$ }/ Q4 d( _. l# h/ L   3 a% f9 I/ E; T9 _! s& v8 ~

; \$ p4 d$ q6 T M5 U5 Z0 s

9 P6 X: ]& Z, Y! a4 e3 P6 w 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 1 c4 G5 A0 F6 R# H! x

. b3 U& F( z; R

+ {) B( |- R$ R7 _$ W vshapes= 0 P4 f- X0 x! p# R: n

7 R* A+ c' p. ^. h* s: O

/ I! N5 _% O: u9 D   , X! e+ k& }! f9 g( y& ~

( H$ o; o5 Q8 Z

! S5 V: y7 @; Y" n% h( Q0 n: a   4 z2 ], P* b0 g7 i4 G- t2 }& P. q

# @# V: O% L7 {6 `6 g) F W

/ M, F# i# h, N4 `" x 签名信息 . g# Z! k: S- ?( x/ s# t/ e

4 y. c4 k. D/ ]: r' T2 \

! z$ `, |' F5 S 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 9 ?% U. Y1 j) H. B

0 R: G2 Z' U( h) O: b/ I) F# d: I

8 X v4 x. R m9 @* } 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 7 Y! x! F# V1 y3 M( i- c: H! h

& f6 f4 g: |' W) C+ t4 D9 E

/ I# e' k8 l2 D$ y/ u" ? androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 , g9 a* Z, l. z. G2 d' N

( ~- n6 l" \+ a) }, W) A" a

4 S3 w/ G& \1 l! `7 H vshapes= / |% s) m0 R" z$ c! j( U) h

" o3 U$ E9 I6 J

: A& Y9 B* M! g y' p( I   & P* {3 `; |+ N. H

/ c" Z$ r7 S) \6 |$ z l

; _3 Y$ \$ ]) J& ?% d9 g& \3 N, R android签名的数字证书的一般都是采用 X.509的国际标准。 7 V" L: z# _$ ]- k4 T; D+ H

! i" |9 `3 F% A# S7 F8 a; B

4 V: o, Z! c/ G; s5 D X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ) p$ P" O5 q. D4 P. O5 ^

) j/ D! \/ S" D) J1 {

9 K/ _* x* Z% Z& V' m8 G( i 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 , ~) r3 T# R" g

7 f0 K2 z4 z' H4 g0 r2 S# [7 Y

, S3 i# G8 l5 k+ a8 O vshapes= 3 }. Y: |1 ]1 c, h

' L, h% T# T% o

$ ^; E! l, V4 s, \' n1 t( K$ k   8 R( L# G: b+ D/ v$ j1 K: Q: j

9 q+ n0 z( C: T' p) d5 i

, B! V2 l& E4 P8 S; F0 f$ ~ 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 5 ^& j2 F" ~, H \* Y: q

$ O; Q& k4 }! e5 }* Z# P

5 b% }2 ?! L1 F; L w% V vshapes= % Z. e. y7 f X, h

8 h- f! }' F6 d

* C7 q5 B" ?% I' n' I ' ]3 E4 j4 F$ a

5 y7 G6 M3 g' h0 _; n, W

, Q2 t4 Q- ` F   6 @' O4 F% k6 |! D2 H, F

0 w, Y& J" l( c# L: A6 d

. S' z9 M2 D* t 权限信息 % k& v2 {7 I1 z8 B2 A

( o, q* `6 ] j

9 |( ?: a% j7 |" u 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 8 G0 L& d% y8 r+ X. H1 N- b. B

, B9 e1 k9 C4 D s

" v; {2 ?) Q5 o& ]( }% h android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 7 T Q! G3 h- k5 c4 I3 f# n

: w6 Z8 Y, z2 q9 C

5 y3 R- J. T$ i0 ^1 R vshapes= + K6 \: S5 U! w5 W

2 N4 I+ A) q8 h5 @

, `3 L Q# x6 @, a- W+ h   ( f: O3 ~; R% k S6 h

* q& X) ^$ R8 a7 A+ @' t9 a: n0 T# G

6 f/ v/ I' t1 m5 g9 U1 G 下面对这个APP的所有权限进行详解下: 4 F( n! W, J$ J7 x. n3 Z$ R

2 Y, Y& ~* R; s* |: Z! l ]$ G% J/ h

5 q! N/ h3 Q6 F4 A android.permission.INTERNET :访问网络连接可能产生GPRS流量 : J1 Z+ d6 P7 p7 w, u" g

, B! j! Z( a( O8 ?# ]( _

5 i! h9 Z+ P! Z android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ( w2 P% B9 ] ^- c# S$ |' ~& f

5 G; s+ V3 M. C4 W6 H, g

* K- p M4 @' r% l% d+ W android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 # K: O7 _! r$ ~* e G- Z! ?

; }" ?# V& h* u3 B

3 w( \" }6 S! f2 x1 ] android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 3 d! W( w; `. j% @! G* p

5 s- s5 I- g: n8 z5 }

7 g3 V4 Z! j( S' V: t0 D2 { android.permission.WRITE_SMS:允许应用程序写短信内容 # m% V* G) y* ~. ]5 F0 E

7 C# H, F4 x5 g. p2 d( `; ^7 c

! V# y$ [, }2 g; b6 z android.permission.READ_SMS:允许应用程序读取短信内容 ; t' G5 z g4 q+ y4 P

: P8 }% F1 {' k9 n1 Z6 L; [$ F

5 o& q: i1 P" e) L android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 3 o7 X6 p8 |" b) r3 f* p5 p3 C& ?- E

$ V) T# `9 K) Q/ R, T

: A( o+ J) L% t6 O% z; T9 I! A; g0 R android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 2 \8 }; `( g* d# g8 k1 y

% d q( l; l6 i

7 [; |9 M! E$ q' c1 Y% O android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 * c L, d1 N: f& l6 ~

& E7 z L* r% @& u

. j4 a) j8 o6 I- z2 A L android.permission.VIBRATE:允许振动 ( q# d9 T& I2 N3 I2 v

' g- U7 c7 x, c

+ ?( J7 n& V" }( ~/ j% O7 I+ Y1 v android.permission.READ_LOGS:允许程序读取系统底层日志 ' V( l) J- r3 f- m; @: T* q. j3 I

3 p: I' J' \ w2 K1 b0 _

- a5 ]0 d7 P* a, l android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  & ]1 _. e) n/ v4 D

- ^0 P4 y0 g- L! g8 I

; c5 C/ O6 \9 A7 D+ t9 J6 M, j6 R   1 x( b" v* m( P, z

4 B7 G+ a/ j1 P% k& X) X

; h. s7 o7 F4 q+ d 功能信息 7 Z7 a" Y: F* ]" @, M

1 R" M) G# n C6 N9 O

% m+ [4 I3 C# I0 @4 @2 t   3 |! G; P. R# x. h* x7 m

5 x6 ?- D) |) W" h4 V% J

; J7 d, M: N/ _- l% j0 V 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 % P& V7 k2 ]& N$ K# [& u" H1 x

/ f. a0 _8 h7 o6 z

; V3 \' w% n, _" l" \3 [- h0 R Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ; Y, B! |' v, z4 ^

/ C0 Q& v8 m5 v) p$ y( D# B5 L! }

0 ^0 F: w& A( W7 s1 B' o+ l 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 7 ~& R9 t7 S- b& _

& ?2 `! g% R g; L

5 _; K8 E! w6 e. l; Q: i- X 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 5 F- T4 U& I: M, J' b# V$ l/ X% V

6 U& B7 o' Q$ G# s/ h e

1 N. w+ b7 \$ d& v vshapes= . [; j2 w# A! m7 P0 l; M% \

% E: t& }) t$ f# |1 W) T8 H

j- A& v: F! Z$ \. B" e# W   6 O. D0 C4 S, v4 {% v# U" a* l

3 A7 [8 _0 x* O8 s, O# B' Z* k% W

( f5 r6 {3 N$ p 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ; C: Q1 [ f1 E* Z! o1 ^% p8 v& `* P

J3 w2 [ a" Q, M- E ^$ r! H* j1 M2 n% @

y9 r0 b" j- w! [ vshapes= 8 U. @, Q* ~# J' ^7 ?

& v- e( v+ [% u& g1 G# f! @0 y

& O( D1 m; F4 F% V0 K' k   0 d: h3 _) K. v" k

# S( P, I# E5 \ O5 X& a, V

1 K- U$ O& k _& D! A* O2 ]3 z lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 9 r0 ^& N5 p2 L. y) H8 k9 t& j

4 }4 Z: g) {' `/ l8 E/ I

0 ]2 r9 ]( x% A3 ] vshapes= " f' e* K8 ?# T% ]

. r$ b, Y2 b _6 Z0 E/ |$ g

* W& G: x; y' p4 N2 v: \% E 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 % R) s8 N" h0 l, D7 \

2 R( h( X8 m& f

) A/ I& M) }9 Z vshapes= 8 T+ P1 m7 g: f; Q6 ]

3 @; z! j! e$ P

5 ~" f% K( A) n' b6 \, b   3 q: j% k) l; M; E

6 O8 d# [3 c$ g- D

0 \8 \- |& }4 `1 D, |! L 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 - w4 G& o+ ^& x6 w" g* y6 `6 o; R- h" g

1 S9 A# V( J( M+ u( I0 p) s

U% K( Q2 j& a7 A2 E* v LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 & F, z/ p2 ?* t

' L. W `9 s% N3 O, l

# g' p2 w5 R6 B, M2 x2 C# F9 g 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 / A- x. @: x. l0 U5 R

4 ]- B! V) C& G: c

8 ~: k9 Q$ X+ Z: C( f 源的luasocket代码可以参考学习下 & A+ f4 c# `1 R, ^/ ^( i

0 t0 l) E7 y# j+ _8 f

9 w( q3 `9 k$ H7 `5 ~/ a https://github.com/lunarmodules/luasocket 0 l/ O: }& o- u: L5 T& P0 q, H

8 l5 b8 o: A$ O* p% X

! B5 P$ P6 f: n+ X* O6 ?8 `' @ https://github.com/fengye/luasocket ; Q& n: ^. f2 ^& j/ g, N1 N) W" U" ~

+ l( p3 x0 r- g3 h% T

$ r# j8 u6 a, C, f   # p( [$ ?6 B, R* F4 Z

# B8 {8 S/ L2 l4 k& H$ B

8 [$ q) Z! b7 D6 d3 |' i vshapes= - q4 H( o/ D" L

2 y* d. p4 i9 z% P8 r+ s

3 A! {' u4 T5 ?/ B   % B0 _5 F9 n& R& g

; h' g; O' ~, l

6 r" O! ~8 w. g8 J: K. V   ) `" Z! H6 Y0 x1 Z; U5 s3 ^

/ e, |( ?) Y6 \

d3 U5 k7 k: u2 C) d* h 总结 5 b) t# m" H B$ m

2 s' S! s2 Y4 F! Q/ d( _

7 q, X/ T* J2 i8 K 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 6 t4 ^: S6 O1 C0 ~9 S- e2 V! J

- O( N- C1 l4 T0 W/ E' R# \

9 r# E/ t3 P5 ^7 h ? 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 4 W2 t1 U! i" i

; i/ D7 {3 D" _+ q; x

5 P) c% n* u4 B3 h) H$ q9 i 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 4 u9 Y/ N$ Q9 N! F2 d- l6 ]3 I

3 }+ A m/ ^. a9 ?

. {: X7 [7 m1 p; O7 j 结束 3 }5 P% I2 Q# e

& F* q- C: G7 x

) F0 c* |3 M. x* Y7 t& I  【推荐阅读】 7 a9 g: v3 w! Q! E. e+ ^: A

% u$ s: \( {0 a

- [; Z* S D' }+ T 对吃鸡APP的分析 9 p! Y, Z0 d: `' w+ u0 I% F

0 n' {/ W/ ]; R% {4 }6 G

( R h, t- `2 ]9 a 你需要了解的APP安全 - a" l |& a# {7 ?- g

. N9 K2 z1 o: m3 G: R

1 g3 [3 S6 H- G! V7 @7 ~# _" g 你需要了解的APP安全 & |/ K) x2 V9 G

) q, T$ r0 j8 d2 ]

2 Q( C2 ?+ T g- \/ \1 ^   " u/ \' s: Q2 z5 ^( `- Q; [






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