中国网络渗透测试联盟

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

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

) A% q' h. \' b* B3 @ 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ) H9 y- r- j5 y: T# Z

/ i9 u7 o) {. `; R6 x: z5 B0 w

4 I; w% M0 [) x: @9 ~8 ~: j vshapes= , ]7 U( O/ J) k7 x& I

. _0 C E# F0 F; V8 G

) n, i+ O/ O. }: c3 M/ m   + D/ c8 I) B3 O/ m

0 j# K. v$ U. o) r0 `

4 ^5 L! t# r3 P8 G8 R- `# M7 S 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ' Y3 Z7 [. y# L) R

: ~# k9 V6 U" [0 I

( |% P |( J7 C5 l' B$ ~   p7 Y( g2 u- j/ e

3 \" }# z t) a& @, n

8 @" Z7 l0 ~9 i5 W, E! x( ` 基础信息 & J" w) J5 ?4 s' I z4 {+ N3 B

# H- ^& S3 F/ P! d* S+ p' a( [* d

7 j0 B: h) e$ ?/ ^; \. d+ q 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 - H. Z5 z& _" c; }

! i2 ]. K; n% J

) {3 \, T E, W vshapes= 2 O0 ?8 @- Q i1 _) o

- Q+ J0 O f9 y7 [8 I h

* [0 U; j' x1 e8 C( X   ' p! c6 b% f$ B2 a1 g

, {; N5 U( T) B5 v; K3 e9 k2 K

7 B" O# m$ `! T* y( A3 X8 R* D 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 7 n9 i9 d4 @3 J, C

4 A; ]; p* z! _4 p5 P( p- S

' a* `9 r3 d3 q8 a q) ]6 J vshapes= 8 m/ K6 \" y0 E6 k, g6 m1 L

; s" H7 _4 O$ w0 O# t# H9 f2 H% t

( ~! R1 Q" d3 S: [( Q   6 ^ R, k* Q; Z

n, q. R3 y* @) h8 ]8 ^: e

, w+ ]2 i g2 C2 c5 p 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 4 H% y/ u8 `" `' L2 f0 \

" y& _0 i" F& g- J

# q. L& s0 \( L. K* ?0 q vshapes= 2 X* r- Y! @+ _) n0 O$ v8 g* d

8 \. i8 G5 ~/ I

( _9 \7 L: r$ }* y   S( X9 a) \. o( V' _! h( K% a

/ r" H v( }) M& c

& _: H- P7 v" ?6 `3 @6 }' k% ` 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 5 Q8 [8 X, k2 K

6 d- z. Y: z# V" m; J: t

7 n8 T, q/ I0 S7 D" F; f% u) x vshapes= : r5 q* A4 E/ ?, Y1 ]+ p

4 u/ r$ x& s5 f

6 ]/ x" M' L) C& Q3 ? }/ c- i. K. a   9 F' L" O3 [0 E5 |2 {6 B

0 U) p' g" G5 m6 C$ @

* A! \$ Q4 L7 l3 C( O% b 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 # r9 P5 [4 E0 ~9 F5 X' j' S* p

4 E9 {4 d* |8 i3 Z0 a

`- y1 O ~9 o+ W* m vshapes= & R- W7 P: p/ k: _+ F

5 F# ~, ^& U+ T1 U1 l

& W4 F2 C. a& ]* e3 ?0 g1 Q   1 p6 P: O# j: P6 k

/ G& H( M( v' u7 ]

2 R a2 a1 |0 Z# W   ' A# e3 `. _9 n8 T0 D

1 u0 Z0 k- k5 D6 p

! L P; r3 K" ^" Q* v L1 x: T- n" ` 签名信息 2 l, z3 ^( d. O# m

- g9 S6 x" s% W9 J) F* G3 h! H

9 @: ?( ^0 `- w$ T3 l* M: A( x 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 # C! E3 {8 ^6 s0 b

3 k' {. {, E" T& o1 r

, v7 T% L8 {3 J4 J$ T, c! E 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ) V [* `. W; j

! G- v% w% C7 i& `$ j) Q7 h

5 l. [7 y. @; \/ V, [, X4 m- i+ j androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 , \( U6 L3 @# @+ R, k) T! l

0 w! f$ g0 B" A( c, ]

/ d# p6 [% c) p' f) }3 b' ~- [: u vshapes= # U( U; l0 B4 l2 ]

+ R! E$ T b* ]9 c+ n3 T1 p

3 X9 Q& ~' X y   3 o. G) l$ a, `% J- n( Y$ S0 T& U

/ Y3 [, U2 L: j7 o7 W

+ C Z6 [" h& b l! w$ \ P android签名的数字证书的一般都是采用 X.509的国际标准。 ) |& }/ P& @1 U

* C. e( g9 p5 g

- ?& p# M# N0 b$ P X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ! q0 n0 e) G( s

' _ y1 }3 E/ v) D9 D4 I

7 U$ e9 n* T. c W 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 & b' N1 P4 T4 e& M$ T- R* q

* }% x. n3 L% T9 D' L- c1 x

4 w; {1 V* I$ g7 z vshapes= 9 r% i* w5 v) V7 Y

u9 E) c% F, t

( X4 G9 h+ {! y4 K1 r0 n& i) Y   + J) b* C8 ^; g* o2 P9 I0 [: y

4 a/ Q7 ~5 `. `5 e

7 w7 R$ g* m, h6 S3 Q4 t. o 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 * M$ ^( B. n+ g6 z$ m: o

" q. [) k+ U8 {

, R; b* y+ L6 R6 y% @ vshapes= 4 m; }: t, `6 J; i( @% H' O

0 A0 b c" m" Z, ?

+ q& J( c$ S$ z& P0 L6 ?1 b% U + F! x7 V9 p) o" f! S

6 @, t, j4 ]+ e+ e8 d6 Y

1 d) `, A4 L, W- m9 E   , U7 t( H; i3 d

0 x2 w, Y; b' e5 `" E$ `

4 C% v D6 _0 O 权限信息 2 x. {& R2 B7 P- |% a

/ j- h5 M/ D5 t" x1 f6 f7 c( A

2 l1 A0 {# b6 w. T4 y8 H6 {1 K 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 3 B% o3 E7 p! o

! B( F5 B8 t7 C' ]4 F0 |

7 U, J0 u( }/ V7 f. l android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 6 Z$ W; w! Q) M: K6 A

$ a% }& L' @* Z N0 A" V

' S- X! k& K" c: v0 Z; g8 v; Z; r vshapes= ) j& O4 F; s/ [- G

" I- x: t" {, n6 ?/ p

$ q; t+ ?0 G, o( W   / }6 P0 y: m, T. S

% V7 \$ N" K1 X; |

y5 X6 q; s! X& z& U 下面对这个APP的所有权限进行详解下: 9 O# l( A k0 n* |$ D7 p4 Z5 Z9 [2 v

! C; o2 d7 A8 t. }* O: H

" W, o8 H# @ {6 a; B! _" X android.permission.INTERNET :访问网络连接可能产生GPRS流量 1 [" \8 a& |& b. ]# W

3 Q [4 @9 ]8 C$ r' F+ |

5 G$ B7 t# v4 N) \& p; N android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 5 e8 I1 O; h2 [7 x4 x

$ w3 F7 P, b! s

1 s+ l8 [6 c! ^& R$ O android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ( C! s% v& ?+ g; ^/ V+ s

: m7 N, B# E% o' `* e+ Y0 }: s% E

+ }/ x+ }3 p i( N% L* U8 `$ @ android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 % Y" `' F5 O8 ~2 S9 f* h5 T

1 b( Z3 l1 {8 }% f; S0 T

8 ~" g- ^" B5 k2 E7 B/ z7 n android.permission.WRITE_SMS:允许应用程序写短信内容 / m% N7 y# a7 ^; z* W

/ _. Y& y1 e$ m6 v

* Q# s/ T* m5 ^& Y* t# I' j0 U2 E android.permission.READ_SMS:允许应用程序读取短信内容 9 n7 q& p: n5 {. x! G" O9 i

, m3 c+ C6 @$ m: M/ v

' ^4 }; E! c( h) i android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ' N3 M! M1 q8 k" F; B

! k6 M8 f; d& n, G# I

+ y# I- L5 U0 T. P, b android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 : z5 W' J+ e0 G) w5 t- t: g

: F; B% v7 w4 v7 j/ a8 I$ U

& Y; [& A* N* l* f5 \) d$ G android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 / B* p6 m1 M; V. B4 D2 T& r

) E) |5 u h: v

+ A" l1 \* W4 [5 m+ F0 ^ I0 N9 ` android.permission.VIBRATE:允许振动 3 ]+ C7 Z. o0 _

8 _ R% z' a. n% u. T

, P7 E/ R5 |" N) y, Q7 n. K android.permission.READ_LOGS:允许程序读取系统底层日志 0 B$ D0 _( l/ V: O

8 X0 a# r* T9 z- P

, N* r* B! H% I8 c1 f android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  + Q/ O+ @8 B& ]' d/ p

( J ]: Y7 |( A, D

( _, @% C2 }- _5 {1 H6 {1 U   $ r; T+ i* \9 `/ Q0 o( O8 L7 t4 I5 F

& q' X2 V" [4 r0 o( x$ t

- p" z+ v7 S4 W# R* q2 ]/ @ 功能信息 . X; ~1 h; {+ A! {9 {+ c: Z" U

1 x/ H6 q2 Q% e R0 x: S7 O

% ^. G2 [0 Z; `+ i' t/ ~3 n   " q; w. H: P! c. T% Q, C; F: \

6 z& R' P0 c) b$ A$ N

/ p9 H3 ^0 P, ` p1 s" A; U2 I9 e& z 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 % X1 L: r1 g% b) l0 Q3 F( X) k4 ~

" L# u. `. B L) J# }: M

" ]" t) a4 i* d, S; ]' Y Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 9 d ]; j3 v, Q3 T1 M/ A1 ^+ k

; r; N' ^4 O) Q! D5 r: o

' t* T/ D3 T' v& [- v 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 6 w. V f3 n! T3 J( V/ T) m

' L/ w+ `8 I- p: T+ B' A( d O* F

1 X4 W7 u9 p2 l, C* ? 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 - U Q5 d9 _% b0 Q5 x

, u# f2 S2 ^: k0 J

; J X5 j) {* k( l; P1 F vshapes= - w6 X+ E8 W/ I; i: G7 F

$ W4 \7 ~! R5 e! i- D

) `# C9 G( I. p1 |   % ?2 W) d' B) ]) B1 |1 o# b9 a

$ o1 G" e$ h, D" K0 I8 |" N# w

9 l( D# F+ ^, J# [ 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 4 U( J+ i. e4 ]0 }1 C& S

5 R' y9 E* w6 m. _4 H

) Z7 T! G2 k3 k! @$ `$ a0 ` vshapes= 9 D- N) g; a8 ~1 s/ j7 P

" s, ]; W9 _9 U' }( I$ j4 L

. J( s. h" Q/ u0 ` ?' A- c7 }   3 m' i2 c T$ g: M# M. Q/ M

3 d2 C4 D7 ]! N) f- A& j5 x$ I

- G- Q# s2 s( S/ e lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 $ L$ U/ @+ G( C9 l3 b

. ^% d- M- B4 M

0 ~9 j9 ^2 G2 W- e* z$ c! O vshapes= $ r/ i; _& j V! k: J! K5 `& I

, [( d$ U: W1 z% g8 g

! b8 I. D" m) |: F7 r' w/ v1 G 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 4 o9 i& |: J6 @2 J+ \& k$ r# I) I

( m; H% H5 U# y8 w$ r7 M. o

! _6 o' \& K3 e3 w9 K# z+ Z vshapes= 8 p, D8 j% [. e$ G5 r

+ u( o5 l2 ?& m7 _

' ]" e+ M7 H# r+ A# ~$ j   2 D( J! A5 b; x( @+ _2 N

% r# U% D1 _+ _1 M7 G9 u X. C

4 I! p2 b% `3 g( F% J) p 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 * x! W( a# Z/ M% v$ w

" S! [5 g; Y$ { _2 t* @/ ^) B

7 f0 @6 }. n+ a# T5 s% g LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 & @ x0 ]# I2 Y* F' j& o5 }2 I% ]

4 X1 P! S/ n9 F7 C; j

( Z. p' f* Y+ l7 { 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 1 Y9 b/ Z, u0 N) }# y( c0 ?

7 z f' Y) H3 E

% M) z; P9 F$ M" b5 r 源的luasocket代码可以参考学习下 + x/ D: h+ ]& N. f

7 w. k) z W' W) h% b; J

. Y, [+ {% X, ?7 `* o+ m https://github.com/lunarmodules/luasocket # D t- j5 l8 w

3 ~' C" K) Q% t3 _

7 }6 a$ f$ m0 j2 T- g) g; I; t https://github.com/fengye/luasocket , J7 Y7 u# y" ]% N. u

$ X/ b1 B& t3 P9 V$ C% D; F5 ?( d

* \) O# T; t+ Z) T4 s   " _ B. h) M) U5 l: v

3 ]! R7 Y) J3 F+ F

# d) C& D8 l# V9 X4 B vshapes= ) q) Q) F! j1 o. E

# |2 v" `- o- |5 E0 }

0 D) @' a4 \+ ^8 _! K   , s( I; i+ u+ _$ E2 z. K, g

' R; B& J5 W+ S, V

6 [, H. Z; x3 P5 [   % V `' X- }9 T

% z* N5 I$ k f

5 x. v% Z1 Q% V 总结 " f/ `% r; h* w

' q/ S8 J# C- i; W2 ]

9 e+ ?5 O; C0 h$ a) F& h 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 # i! \- s$ l8 ~) l ^2 ?, W. u

: n' m3 l8 F$ d; J( O. c

: d# y2 F' j \4 a9 u/ K( o) b 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ! e& o2 I7 o% V! h: i: O; Y" I* T

0 v% Q2 L; _" O- j

$ |* p Z L' W3 R8 p7 t 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 - X0 C* U& G' M

# i: q6 N' X2 {" N: s' X

% K; v0 E# f4 C# c( z 结束 e6 _* B* m {3 @; q% a

) ~% R1 O0 w/ n8 U! p- f/ G8 v& g

5 D$ `8 r& k3 o7 I, U. k+ \' C  【推荐阅读】 # j- a4 ], y d/ q' j

8 p7 E+ h* p! N; ~7 r, R- U

1 n) B$ w k: s 对吃鸡APP的分析 . @1 t5 ?1 X) S4 N/ O& l6 j

2 O! |& @ g) K5 F- c' k3 x

0 Q/ K6 }( u6 Z. @( T; ] 你需要了解的APP安全 8 C' R+ s! [5 A0 [- s- H7 X

5 ]! T1 r6 Q2 o: b

* H5 ]+ [' i4 [. Q 你需要了解的APP安全 + v+ @- f- l+ u7 w/ ^: a) f* ?3 Q

/ w" J7 N1 q% T, T% _* s

2 `6 b' B+ M9 A. D' I* G   : P2 w: n; b$ V






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