中国网络渗透测试联盟

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

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

3 I2 U# V3 y8 O* y$ W1 f+ J6 t 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 / ~2 f, v* |* M' W

5 |' {' ^$ h7 N* ?

, v; A. z. m+ i0 i- w6 |7 y& M: R% Q vshapes= ! n9 g) ?9 ^( X" R

9 u: {: \( z9 C6 y, v

. g; y8 J/ C; X# k3 B   s% Q* m% h" {

- v6 E2 D, c6 \4 B, S

" ~, y3 R2 p+ p) \ 下面就以开发者角度进行解析下这个APP的功能的实现原理。 9 K" Q9 u: ?# x3 r' b7 b" x- }, N

8 m+ s7 ]5 y; ~2 g

. F* C7 m& Y* y! x v, @3 L   - O& h( c/ T- ]1 Y g# w

4 f, u$ O, ^7 u1 f' d% O

. d0 a6 T/ W. r" T 基础信息 9 }$ M2 G# D/ X0 P' I6 `

+ h1 M8 i3 g& s' o5 Q: t

9 T- m4 }% K3 V$ W 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 2 V3 A, P5 C0 `8 {

4 A, E$ Y" o% j) a# z

1 \/ h: J4 x3 f3 {' t# a vshapes= 3 J' u' @5 g' p9 R5 U

6 m4 I& @: Z7 }

/ w; S* J% I) q( M% d   ( a% z/ M9 ^( B+ A2 z0 k2 Y n

, B1 R/ b& `: @1 k2 k, g7 I; u

$ ~" V V) x, Y6 e7 ^' S 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ' `- c7 e: I9 e3 g; K5 I. A/ {

8 h- J6 {. V; g. j3 q {" Y0 o# X

5 K8 n3 g: ~4 x3 N' m vshapes= ; B* S s z( J1 ^

2 h9 c. ]9 u& }$ o+ ]7 m- T

4 r3 q6 n* u$ `   4 H7 G j+ P7 k

; ?& m% k% F* u& v( |+ `

E1 c6 e4 {6 V5 V+ ^ 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 - u2 N5 K8 t5 i

1 O2 w. v3 S" e

5 i1 | o5 G# P. C" z) n, I8 K8 p vshapes= ! t# e. u3 Y' a

! G4 b! }# W& a$ U6 n, Q( M9 Q

: O* P% W6 x+ b/ z1 J1 P2 P ^   + s8 F, z+ g7 x% L7 g+ R. Q

+ y0 }2 c+ v' s+ d7 Z% a3 _4 R. P J

$ D1 }/ H' `/ h/ m7 Y 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ) X7 h0 s4 v8 W; f! ~

: c% ^- |' C, C9 ^1 k

) ^- T! e- o( k vshapes= ) a: `( {$ d, N' z

$ [4 e- f* y+ ]1 j) D% L

: y$ J% ^* H3 g2 x0 Q6 O   ( T* w% m6 F' H

6 a3 T- r4 p% D0 a7 d: ]

) s; a( z6 W E& Q, K 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 % b+ M! V) B" U" F& O" }7 c! ?& D

0 [6 R5 v& P+ l! u

! q1 u5 o" Q- {' b+ e2 { vshapes= 2 n8 X ~& p$ Y6 }

3 e, [) s9 q8 `! {- @+ I0 S

5 x% M. p! S/ ?) ?9 z   7 O) ?2 ]: V; D0 ~

K* {$ S. f A# O- `8 s0 h

' {4 z* {% m# U2 g3 s# T" o   + l5 \# U3 B! n, c2 z b$ x

; n; ~- c. L# Z3 ~) l" \, w

0 _/ L @, ?' }7 T V0 j' I+ F+ b 签名信息 + a, [. M5 s& F3 f1 H* h4 m: k/ F

! s. z9 \& B' j6 D y2 K$ Q0 J

- N# q8 G `; C6 R' h7 w- K. C2 U2 S 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 # D' k$ {" P6 ^( \9 M3 P$ R6 `

- Y" @8 u% h$ R

# @9 p! n& j$ p# S# Q4 a, p 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 + ^+ R9 L4 ]% Q

6 c8 O1 b' x( \! C c

9 v# t7 J7 R) J6 Q androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ) |+ d; s1 C3 s$ e" i4 B

$ n) ^2 {* I+ \1 ?/ w

# D0 \% H4 _* C( M' W6 \$ `( K5 ^ vshapes= + J: r) I2 l g% {! p

A+ r. u$ Z% N8 z% Y

# ~# ^+ k9 J. o9 Q   5 N& g" v2 _5 h2 T" K6 B

4 k+ M2 t% S" I: k

1 ]& }, G* K. t d8 t' { android签名的数字证书的一般都是采用 X.509的国际标准。 # Z/ Z( T' j5 h/ x9 |4 V9 T

6 K$ b/ I7 M! f9 C$ H

6 b7 ?3 k% U- A+ i X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 1 z g! |) d" H, [

* r! }4 J' H/ P- D" J9 F

0 J( n9 n5 T$ c% c8 { 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 + _6 |/ G, r5 L# Z" ~* X+ b

, W4 {- S) `: y" r

; r/ e: k, i6 T. r" A2 M3 x' ^' { vshapes= * x5 ]& U1 a' U# x! @

9 S' W |6 p3 }# O4 a

, p9 \: g6 e! d C9 f   ; ?( S. }. t9 p) a3 w* F- `, B

2 l0 c' q+ U) M

* e& p7 z( ?7 q$ o! ` 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ! k1 }+ r3 m2 Q2 H4 u

( z) V( D' t' c

~) ^( e2 V1 S s6 ^8 c& P vshapes= 0 y: y4 X8 @3 D8 o. L

) v* L6 r7 s! t

% {3 m( l2 r6 | 9 O4 W( d2 d- d3 m

6 l8 ^: R: g9 h. S# J3 w

" v% L) ^4 |+ S: k: m! l7 K   / I1 G, M, H/ Q9 ^ `

" k3 q+ V5 z. K+ K/ Z8 c- n

* U0 b! {0 M. Y( e$ [0 m 权限信息 3 z: K5 S4 M1 k, c2 P

! @! ?2 R( q$ G

1 i E7 f: r6 y 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 6 c2 e9 P. r1 X7 Q

* `- o9 Y) J! n% ~# `$ m$ m

& m; k! r9 J% Z8 n android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 K% d1 \# d$ S; p( W

, R6 O8 w! o4 l( }( G% a4 Q+ @/ D

$ L3 |; r# U" R vshapes= 0 {0 @* ]& O8 w' E& l, M7 C, @

6 Z1 D1 R. }& A% g& Y

! `3 c- j( d$ Q3 D   + B, j5 l+ o3 L. K5 I" J

* {" X" a3 I4 d7 x- l! f/ {" B

1 ? c2 p# O: W7 Q( F 下面对这个APP的所有权限进行详解下: ) L8 r2 l9 m* Q# |% H

w+ G; q0 q4 E1 Q9 v

6 _* I- Q1 c6 y0 w; l Q8 X5 r, i android.permission.INTERNET :访问网络连接可能产生GPRS流量 6 }0 E$ W" L: y0 F4 d/ K. r

9 n0 s Z I0 H3 `; q9 ~, x

1 k7 f, y/ [9 b9 U! X# {8 w- a android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 4 v& S) O0 p9 p0 D; A

" o1 W6 D* W$ p

3 S6 e% M) A$ ?; I- P& l$ H+ r android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 1 }) ^! V' R: {

9 f' v& [7 P( z% \3 e

9 k9 c; }6 q/ ^! { android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ) M: c( F+ W: S7 W

' ^/ t0 o& w3 g* Y* C

- z9 [4 b5 C. k4 ]/ b# n% Z6 @5 t android.permission.WRITE_SMS:允许应用程序写短信内容 8 v- d0 {2 M* e1 t" A" C4 R- n

5 B6 K' j8 [- u3 @

5 D6 ?1 v x7 T/ a$ H1 e android.permission.READ_SMS:允许应用程序读取短信内容 , T1 y: h$ E |7 G

# {7 O6 Q8 z* G5 O3 h9 q) g

% p) U% h( {% b; m android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 + b% O: w% t8 D) J- |, \) z( y9 ]

% M" _! m) q* d9 A0 P' y/ m( M

; n1 l3 ]% Q' V' E! Z' g android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 ! P" ~$ f9 F/ _1 b$ U/ o

5 b, N# O0 m, w* X

9 w# q5 m) w4 e0 A& M' G4 L android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 1 l+ ^" r; Z+ }! N* W" h

2 U4 M3 R/ X6 w1 |6 f

6 w5 P' \" n* C. ]+ E, I android.permission.VIBRATE:允许振动 ; t$ F* C0 D) M3 s$ W) Y

) U$ H2 x/ X$ X: Q8 u

0 Y( L# e! @* a1 `- a% `$ ?1 @2 ~ android.permission.READ_LOGS:允许程序读取系统底层日志 * t, O4 H& s: p' g

/ a7 s9 u# G7 {4 @1 j' U0 h* R8 ]

2 }- J! \0 T8 Z5 j9 g4 o android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  # @6 @" l5 B9 d3 f7 g

) q5 N% p" K0 T- Q% R

s [+ O9 h6 I. y   / f0 t8 h2 O0 d+ R1 r+ K

T- t) O5 ~' i* U/ h/ b' q2 u% O

6 X) j7 Q O7 [' W2 ] 功能信息 U* o4 e+ _" H7 m' G

/ [! r1 `0 y! F. d

) F5 V" s. `+ a0 v# g: p. b: ~1 D6 w' C   " x) W$ y( a: s" m0 m) a

7 U8 T d- }5 m( e1 y

, T1 [ c* ?, `5 a 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 ) s& e1 F- H2 p8 n9 T

# v6 Y" m" B2 g5 y& g/ H

7 r' F$ E2 u7 A4 v* f3 F Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 . _. Q+ r) ]# q' M1 w3 }

- k/ t- j- e* g

) q' P( J' `1 M! i2 g7 d 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 0 v0 U* @$ ]$ W' b. b; R

. _ h, a7 b8 A4 q$ ]

7 r- E2 w% r0 h 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 + T9 L' [6 w9 L; S

# A1 s& p1 n/ ]* {% G

" R% K& U' E3 X# U* S4 C+ m vshapes= 2 W+ f! k8 |* ~$ o

+ n; Z* p* t. e9 |4 v" e

' G: o/ u q$ V. W5 g1 y5 I   3 i: }2 p% O: l" N1 E4 E8 t D

; Q$ @9 p4 p C! S3 S j; S' X

* ?4 z4 A3 D" i0 p 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 % ]7 A% Y# m7 F) W0 ]

1 T! ]6 P' {. g7 p. J8 ?+ U

( X% X1 P# K% A* O0 V8 { vshapes= * f. a8 ]9 |! {9 A3 w

" {1 W! f. L9 n ], F2 [8 V- \' L

* _. _- r5 ]# ~+ |4 _- S# @   & g9 |2 |& }) }0 v! P& g+ W3 S

9 X0 G: t% V0 w7 |7 K# H

* w8 h. v7 A9 O+ }- i: Y lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 $ w1 h0 z0 A$ G

4 q+ P. I: {7 I0 M; U7 n

' q! X$ l+ }. f( _' L# h- a vshapes= & V. s) |+ p+ n. g E4 ~( `( i

# X! X* e/ T5 s. g x. E' @

" ]. g; J5 i% }0 _6 e+ R; T& e2 M 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 " A- F- E3 |: a2 g6 \

: \# h0 m7 e! A& E

6 U: P( ?( A1 Y y4 P4 m0 T4 B vshapes= . y# N; f8 }! O3 d- ?, i$ M

( F1 J+ P& N Q0 s0 E3 L

/ ^# p' z- a! f   / z, e# d- x# }. k$ r2 P

( ?7 c. D! l5 }' q9 w

$ U! z3 V, r Z7 ]. l 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 / G8 k/ a( X! `# Y5 c

5 g H. ^9 `( }1 X' A

2 P- W) n( b i) ~" ^- a& U LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 ; s, W" G; ~. |' a T! B; v9 P# h' ~

8 R3 R' C; b5 g( W

- B6 m9 i9 l* K 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 5 @0 {* B. e. h; y l A

9 ?: P: c7 b2 f: [. M1 \4 c

# }6 a& M9 d' ^4 ^5 d+ B 源的luasocket代码可以参考学习下 ; @! C. B: v/ o0 a. E) e4 B( f

" L+ b0 X5 n; S* [ p+ S

) b0 [& B3 Z! J8 c5 q, d6 k8 | https://github.com/lunarmodules/luasocket ) Z* C# o; \- V, k& n

' G/ r, e6 X. R7 n8 b. ]; Q

0 ~' N+ Q' z0 l" k0 A9 a; k0 l0 T. \ https://github.com/fengye/luasocket + _. q9 N+ E% {$ T- L, P% J$ c

! J# N6 X7 G7 X( B$ ?5 o

: d8 @" U( Y9 I$ L" h2 y; ~   # ^5 X) C3 }: b; d9 W

# j, d2 H+ M7 g, k$ A) e+ k4 V8 ^" g

1 |% H0 T+ q6 }$ p' a5 o vshapes= ' O" g1 ]2 @3 x5 G0 O

Z/ J0 @8 q5 e

& \. s4 b/ ]& T5 b3 S9 [   , d1 P1 r) t0 a Z+ {, p+ I7 ?6 Y9 y

) r# L. Z }: h) I9 \+ L9 y# }+ o

1 i) C% ^5 `- m( L   9 U, b/ ]0 \) O) }" {

6 ?4 [" a K6 j4 s) V) O6 ^0 I

. X+ j( f6 i4 k) u! ?6 S d 总结 1 Z, G5 G6 n N+ A$ s! g) d; C

) D# i, I6 B( S4 c8 E2 T% Q

% r5 P! n+ h" {( y% x 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 2 n4 F! ^. r9 ]4 e ^1 P2 m

' a4 H4 a% {3 f

3 S( P5 n: l& O, ~$ W5 I) s0 y 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 1 \$ Y8 g8 L6 Z% R! e

0 Q! Z4 ]9 ?3 u% ]3 p

7 H# N; p% N/ P0 g 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 , q& Z; V# F0 }9 L$ j7 Z' B* ~( X- _

3 q& T* {4 Y' B' i

" B; I( H) B5 o& Z& r/ O 结束 ' e p: U* y! q7 v+ k G/ Z

- h9 s! d% ^0 S2 I* _* Q

; ]; A$ E9 d6 G R  【推荐阅读】 ) A$ @$ q5 d( r, [

1 Q, q3 _7 O9 B0 f8 j0 q

2 q& G. o* G1 K! k9 ?- O A+ h3 [ 对吃鸡APP的分析 : [" W' q6 l( X- g

1 [3 Z" l: \) e

/ Y& F) Q8 `$ n, Y 你需要了解的APP安全 ; g# f; h& S# R) f- N) }

6 S0 ^7 U" E, @- I

- V* \) Y/ u8 Q# L0 H5 h0 q6 { 你需要了解的APP安全 " k5 T2 P: S1 `0 c: v) Z+ h, Y

: C/ i! v; q. V) _

! S3 J0 `: u1 P0 j   / e( Y2 j4 {: u# j7 n






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