找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 4353|回复: 0

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

[复制链接]
发表于 2022-7-8 21:25:07 | 显示全部楼层 |阅读模式

, I) n2 \' [ a: \8 L2 Q9 q6 t( u 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ! h& A- z1 P: r- i% m2 k

. [5 b7 y$ r+ Z* b* b2 r

2 u. Q: H T, l# X/ G6 { vshapes= + X, x0 C3 s* o. b

$ F M$ n! F7 p# B( ]

2 z- C% d. r; R   + g' s: P9 V, \: o, [0 y

" S( J' K" M: K8 r

0 O, \! v* F1 R1 v. z 下面就以开发者角度进行解析下这个APP的功能的实现原理。 5 H4 _/ q6 l0 e, Y( y3 n

- x/ a" f: j# V7 ?

1 |, N/ n. r/ [0 I* d) C. O( r6 f   2 k* U% d7 `3 q V5 G; c

( \* L* r- y- m/ F# s% M$ Y

; w& \9 A+ [7 F. _+ o 基础信息 ; [% ^6 L2 Q, l

% x+ p! o+ f4 M+ H

, E. Z+ U/ D! v) S 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 . Q3 d. r, u. N

7 r% z: l8 f5 t3 X t9 K' w- e2 P

|, P% T7 s5 D2 x- h; w* r vshapes= ' |7 K7 ^: C6 U x* l; a

, J u, C, c! ^5 o% y

" A( |" c7 \6 E! M   ' K$ g6 z- p5 L

) C' J! ~3 ~( B2 N) H7 Y* P. ~- R

; U- q m' E5 D8 k; i 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 * g0 Q% P9 m \- v' t

+ V6 @2 r- Z9 x

3 f3 B! c W) j( ]( t" \( A vshapes= / F& B& F2 c- T7 P2 J( c

3 L) M+ o; N( }7 a7 B1 f( [

- ^" D" x" d4 U$ N; \3 Y   * V, c+ n" c) n) E. E* q

# U+ J; [0 x/ B" g) N5 s7 W" N, O

\& X3 \ J: ?) \ 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 + x# b- k6 M& ^' h& r1 c( O

7 M9 M$ Z. ?- z% `4 H% Y

6 I+ [6 J. e7 v4 s vshapes= ! p9 k) W3 Y6 O, w, X2 W

0 _4 S0 q" \$ I5 j+ \( y; w

: V; X; V* E8 R5 _2 X   $ E4 A2 g7 }* o( e

}. \9 t# a, ]1 Y% G9 r& ^+ B

3 g: B" H e5 ^. U# D! ?4 q2 j 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 + I' ~6 h1 C% S! X6 G

: M r4 |( r# z: Y, R: q

) e( }7 A' c5 o8 h- \+ M2 Q8 Z vshapes= ; {9 M9 _- X: H! z9 ?5 G

; I) [) Y' H: q8 W

$ M7 a' Z7 T9 s$ q   4 z" ^1 T) a: N# H1 J" ^2 @

% T6 R4 F+ o& V3 g

: V# Q. e" |" D- L9 P t, H: h: K 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ' I2 q; G4 x" i: Y4 l4 c+ I

, ?; [" Z4 A$ I* j. v, p: B

. w$ x9 k+ M( F# n2 z$ X& T vshapes= ! y. h5 h- f6 d9 @) p

# f& o) ?& g' V* z# \% Z

( Q9 r) A! r5 Z& I$ v, D5 I   # q/ k/ K7 s( h) F; T g

6 d8 M$ R: p) U( V& w2 Y

: {, X1 P( j* [' O) P   6 r& E0 ]* [; E6 @

- g( h. e$ v! K# C) c# `

7 E! U+ r/ U. T m- D 签名信息 1 e/ \4 E9 @* \/ q; F& J, J e

; T" |5 e, G% Q5 H! l0 O& G( X

0 T" z" w# r% I+ N- \) h 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 * Y8 T1 a; b/ ]3 m: w. X& K9 I

; D- n! D# x8 ~/ ~

1 c( [* R$ s" U M# c2 _ 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 * y7 r; @. E0 F5 h7 H* [: M

1 W W0 }/ q4 F5 Q( C4 M0 x

, T3 r$ ]5 X3 t; x' W5 w" R& ] androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 7 @% d, S( H y x) m9 i5 d2 T; _

# r; `# | B% g, w3 q- Z1 W$ {

# e2 w2 y. ~/ x. G vshapes= 5 M0 y4 h+ c4 p- j& g, k/ g s

/ D1 V( [9 j7 r. `5 ~( G

2 q4 k9 ?+ _& v& m5 ]   % P! D2 r, ^! z7 W5 ?6 R

4 s7 M# P* o/ K2 e v" q; F2 c( _

4 L6 ~& _4 \5 \" O# r/ r( W* T9 \9 I android签名的数字证书的一般都是采用 X.509的国际标准。 0 d8 O2 v, Q- x+ `8 z

& C) Z! C1 `& B; |

; }- }7 Z2 r; q" z3 i+ y; t3 u X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ) p/ F0 n5 [" n( D3 e

% h. x0 H8 ~* R, V2 Q# U

n, s0 A& m9 }! V 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 ) A0 F1 n2 A: d" E

6 c$ N; v3 ]. m" g2 X. l/ H' {) ^

3 k$ `0 |" C( s vshapes= $ [+ ]$ h7 P# L2 ^. J" b

; m! I5 h" F, c) @, i: |

+ t) M {, a. c$ f( \& }' Q4 r   ( m! S' P0 t N" w Y6 k7 S7 m' J+ Q# ~$ d

; {, p' ~6 N m; M: Q

* f! O8 p( ?$ Q: V 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 4 N0 u$ @# l* ^4 [5 D; y& M

: |5 @9 R7 ^# W

2 Z$ C9 r% q: L3 ?' A1 h vshapes= 8 w% W( J7 M) S3 {+ ?. e

- l& E4 P- y y: O5 L

- N- y, s" _) S9 G" _4 X+ i 3 h: t) [1 z% y/ [' i; B: w

& J5 f3 }8 u5 t0 j& L( I3 `

1 `9 A& J* z7 i- T3 R0 Q1 b' j' D   ' D4 [6 d" j* `. K% T1 H7 X0 S

! d' Z0 ]6 J' `8 U9 z; f

0 Z! w+ Z& [4 e* z2 i: g 权限信息 : x* `. R6 g* n4 p& Z7 L- i: ^; W

8 J8 V# t) [6 _$ G$ q

% C" h0 y2 P3 e% k R e 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 5 o4 F/ C$ C$ t$ V, Q. D

1 w( j' w% T3 A' r ]5 O

- t" _4 R* h( X l android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 - p$ T) V- @, s2 d: `5 j

i: p/ l- o. V6 T# `% @

2 } |2 k* Q' F$ ~+ H0 p% N vshapes= 0 w9 p# G x. S4 t

6 x+ q; _5 L- x2 i& A7 |! v: y* }

0 o* g+ z' [6 n$ z& {( S: p1 E& R   : |. t3 T) Q: o5 s% m% @% }

$ S! J. @5 X. m/ k. `

6 M$ J! z. n$ ~0 B0 l7 U+ N# d2 U 下面对这个APP的所有权限进行详解下: ( e. I0 T( f, t3 l3 i f* O3 l

n; g* ?) h% D

* L: D) r3 \; ?8 p8 A3 ?0 Y android.permission.INTERNET :访问网络连接可能产生GPRS流量 + T2 _2 ~: X' H. e; a2 B

& t6 t l' q( @, |; u% X: G

5 l4 ~! V8 w! _, q: C, [* F android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 2 w: K& K$ [5 F5 @! V! l' ^

: U3 O0 E# Q* q' L- t3 x- q/ I( S

& ~. K& P8 O! \# ]: X/ a0 o. C* H android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 : @; E- Z+ a3 X% o9 }

8 I6 q8 |6 Y h6 }7 I

8 Y( w3 z" E9 ^/ O android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 8 j. H& D# V7 l9 C# p% [: i

, T! l" q- j2 C) F

+ a0 @) K3 ~7 f% Q/ Z android.permission.WRITE_SMS:允许应用程序写短信内容 F# f4 t8 V0 Y; M4 F. i! G& u

0 U3 l2 ^# e) H# W3 ]3 a

3 v5 s% M0 i. H* C8 M4 u! D# {+ c android.permission.READ_SMS:允许应用程序读取短信内容 : H* y5 [+ J8 C7 m( x

- j3 I" W6 Q; Y- H* a" ]/ _0 T

# G; L4 ^) y1 y% X# q, ? android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 1 x2 m5 S7 t: p

_4 B$ b. h6 j' Z, s

7 g+ Q% s+ {& E1 J android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 4 B9 d7 A* G1 G, s% M/ R! B

0 h0 [0 `& u# l1 y c8 I9 G3 z( F& U4 K; K

/ [" u V, Z" Z8 W5 U android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 6 H0 t$ N% R' v. V# b

* L, g9 z$ Z3 D R- d) ]6 H

0 v# K% ]* U8 o, t7 |8 o* _9 S2 }* ?, U android.permission.VIBRATE:允许振动 0 q; r( z; R+ h$ a% Y1 ~, t& |/ y

' n4 m, L* B2 q1 ?" R* F

N# ?0 b% ]1 X2 d. V* j android.permission.READ_LOGS:允许程序读取系统底层日志 9 t: |/ r% v: j7 \

q' e* W- H1 y1 |

7 L ?1 H# |4 C7 x0 G' P android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  7 {. h+ r2 Q- e) |# p1 |$ n6 K/ S

4 b* k) Q) N7 \

3 z3 A$ `4 s- E4 \4 K; R8 k2 q# ]   ; Q+ {8 d- o0 r! O6 ?, @ H$ }

, q" O& n8 }5 z$ p. w1 ?6 o4 E6 `

6 r( c- G) C" p6 v, N 功能信息 2 ?' g6 E+ @6 I; d9 i3 u* s9 g

. A0 g B: H# R

; @3 s; k# j- Z7 c1 v3 F   ) X3 R: P w" \

/ y, D" |9 u- t

; H g+ U6 o' X/ {: i4 }- P9 q 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 . K9 x4 y6 c. C. }

: Y' k; s" P7 O- E- k* Q

7 F2 m" L2 d, k+ y Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 6 {- r: e& ?; j3 ]2 F# T- b$ `. Z

. Y- I( E& ]$ n4 O6 G

, I; s0 V5 @! s: q4 k: M5 c 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 7 m" B, D0 r! t. U: P5 A

) v4 k# S# _1 P8 x1 M' ^( K

1 ?, Z* z4 u# w+ A1 O* J! n 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 + X8 [7 p0 f6 n, g: M

w# p; g' G5 |" c# Z' f8 R

9 ]4 P' G/ |$ L! Q5 s8 q vshapes= , k2 I8 N4 Q1 H7 m4 [7 x

* q9 k- R9 V& _( q) S

% _! F5 K3 |0 [6 g   / w! B5 ?$ a( {% g

! V0 R/ B( s! V7 S" j/ i

5 G- l. l" l7 F, Q* G 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 3 {1 S9 Y+ ]* I7 T

* E( p7 Z+ w: X2 `4 b* T) ^2 F* H

6 E' b. [' `6 ~8 l) v7 F, d" X# R vshapes= 7 ?. o/ K; u$ o2 m, _7 P

" E0 ?8 p, v! a6 a' H0 H6 b

. i% x {" [7 r2 r6 L   3 q% m G9 a! z9 }! x

. ^% M" u6 ^3 f9 a$ d0 l

# C* I! z# ]) ^" }) ~' a" M ~ lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 + C! w" Q+ q8 F7 X5 w! j

& r, X0 l1 V# d3 f

1 r) P1 P g' y3 o2 i" p vshapes= # C, Y# I& K+ I j% j% J7 _

' \% _0 C3 q/ D

; A7 F! k7 B9 {/ y- ^" n1 B 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 0 S7 K1 E* Y( R3 o0 g0 m: |

0 S! t! a `: @" ^2 p( B

5 j. `5 Z/ `1 A7 J0 u& B; F/ g vshapes= 1 F# g7 o0 H/ j2 ?, k$ x( v

7 W" F5 w' l+ _% k7 \; ^+ v5 e1 a: Q

/ R1 y S- Z5 w- d2 K5 K5 [- m   6 V6 w# r! v$ _! k; u( L @! R

8 D- ]8 ^ d' i7 L6 o

/ l. q- }# r4 k- k$ @3 S. g 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 1 O d3 U/ ?1 s( A& P9 _6 u4 I) ]

# i1 e& b- I# b3 s E4 Z- E M2 q

. H% [( t) z0 p8 C; A5 u LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 5 Z7 e6 x1 \ M" G

}# I0 X, F4 m1 ]* H3 w/ _/ h

; a) `% P# ~/ Y/ v& k; B 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 , Y3 ]& l- A% Z8 c

+ r8 v$ w g# [# L: r

% T K; Y( F5 S! f k 源的luasocket代码可以参考学习下 8 s _: F) j& A4 M

9 n3 p; e& y0 p. ]4 z% J

+ z% S+ f- @+ |" c https://github.com/lunarmodules/luasocket - V7 O j8 {8 ^2 f

. M* F1 l8 P9 _# c. y! C4 h: W

3 e7 l5 S" O/ |/ S: J+ t( r+ I C https://github.com/fengye/luasocket 1 ^. J7 Y1 ?1 }

& Z3 [9 C/ D( E5 l }; G, w. t2 q4 z

m5 }" N1 j# l% w6 r   , g2 C- U) Z* G( x/ m0 a. T4 t1 |

- ]" B. H$ O/ _# r e6 c

9 f4 Z9 d7 h# W% i vshapes= 1 G+ }+ E& g# h5 t/ S1 A& j) F

& y: |8 H2 H8 u! I% X: }

4 F6 u5 r4 Y* E3 H   8 b1 R( H. l3 m4 d9 ~

& Q$ b$ C" z# r+ N( d

/ i% B; G- z; c3 N; _   \, ?7 m2 ^1 b: G9 M7 @

! H3 N0 |1 Z% t

7 A6 r$ @% j# [& d7 R- D6 T% \6 O 总结 ! ?3 j2 g( P- W4 k+ w4 Q

! `7 X9 ^- `2 L5 {( V* X

0 S! A2 M1 p9 O! g4 b6 P. o 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 6 y% N/ ]7 ?2 ^7 p( z( y+ `

% W: G3 L. r0 G/ Q8 P

' b. o* Z5 v; o1 y+ j; Q9 | 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 4 b: S% S. M/ c

! @- N* O6 M0 h; G# f6 o

2 b% [* ~% R8 p/ ~ } r 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ( f+ Y. M% H4 j( h( B

" | O% B/ A3 h

3 S: A g7 s. U5 D i/ h- k 结束 - Y0 N Z" O) N3 O$ v+ l- b9 g% i8 p

2 N+ V4 F: e/ B) Z5 H2 f$ S

$ b8 h" j |2 B: j, ~3 Z% {, C  【推荐阅读】 ( f# u: W$ a. K$ p5 E

$ K1 d9 s) J% }0 }# a% t+ s

( J& Z9 y2 X, I# n/ `+ `# ^ 对吃鸡APP的分析 8 M8 a; o& P$ t

2 U0 [/ V' ^3 E3 y3 v3 v" e

/ Y p! P% e3 x0 T) s/ y 你需要了解的APP安全 ! o3 N3 q; l0 K

% W1 R# D& v7 p) ?7 Q( q- P& [

$ C8 {$ n7 G) @ 你需要了解的APP安全 7 s, K: g) N# p) c6 v, j

! i3 C/ f9 J' H1 [4 D. R! _

2 {- X S9 Y. d4 k7 n& _# H1 @   6 u* r( [( ^2 n/ U

回复

使用道具 举报

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

本版积分规则

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