找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 4799|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2022-7-8 21:25:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

3 I. r- P$ Q, v. w 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 & w$ T- W# c: C& k- c' V& h6 y

. u0 v( s; r2 \; D" L# n% h

: i' S# `7 {9 \1 d, Q8 | vshapes= 5 k. {& O3 m( C' {8 D

2 {8 f2 P: R8 p8 |" q, L1 m

3 [- i. p( W# b' w! l   + |- q4 Y5 g3 b; q3 J/ r, P& N3 d

4 i9 L' Z6 i. P2 ]; ^% r

$ D3 s9 \' N& X' Y$ i) w6 \ 下面就以开发者角度进行解析下这个APP的功能的实现原理。 6 Y/ F# @" {; q# K7 G; ]9 J

+ {6 |% i+ q; P

) {( J; @6 k6 P3 c   C1 F; @! H' o/ s2 C1 X0 }

4 j9 ]- O1 e7 q

7 X) ~& s( @6 m 基础信息 8 o) o' }# R& j$ I0 G0 P- |

9 K- D5 A) ?' H: z) t4 B' Y3 v

# v& }6 K$ U6 }# G 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 4 l3 W! r" ]/ ?$ `

* B! U! p: d% r) x( d' ~, @

- z) \+ h9 G1 U9 P vshapes= # M+ d/ D: U: ` Z; l. ^6 B

+ v1 ]1 |6 H Q% ?+ Y4 U

; M, j1 S% \1 @& f: L( Q   ( u* z6 M) X g

% \+ `+ H6 w j, [: Y

0 f, V+ J) `2 M1 A9 R. p; N- q 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ) E* m! {7 g0 P6 |9 R, f

* {' _- v% ^& m0 j. P- G; B, p

; b3 Z$ }( F7 A$ B2 S* _ vshapes= . w7 N& T& A1 r- n8 A9 F2 D

: b# `$ @3 u9 k& z& E8 A7 P/ T/ z

* O. D" N( S8 Z   z) m- J$ D y0 Q, _

3 u& O: @' `, g

5 o' ?) h7 g) r5 D' ? 通过jadx工具查看,该APP的Java层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 5 J( A7 _* l+ u4 `* w$ k) ]

4 i: @5 W) W1 k4 \( M6 V8 S# v

6 R/ j6 @& Y7 L& C) p vshapes= ! c a' V t0 x- Z- l

# w, s0 [0 p* J/ c( o

' T7 J( ~! O, l% f6 s4 J# E- Q* s! n   5 S2 {7 P: ]( A4 q, _

. ?* T) `5 [& S4 e: h5 C) \1 Y

0 V( t. Y3 k* J0 g" D& F 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1个EditText和3个Button控件组成的,也就是下面的截图信息。 E# ?0 {/ i0 X9 |7 a* Q

4 f0 P( P! K7 d9 @# N9 F

+ O/ I( b0 i4 i9 i! w; |# D vshapes= # F$ v" n; A) x; A

) B' ], N% j( S; f) ]

6 ^% F+ q* \9 t" V; d) s: S( o   - U6 |$ e& Y3 H) w/ a4 n

+ a' P0 @! ~1 D" }

* E# w/ J! M# H6 k 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 e7 m. P ]8 Q' \: U# |

6 A1 t% w e* @' p# h. I

$ a' Q9 X5 y3 Y: f3 O& F( D vshapes= 3 b) N: B/ B) j5 Z2 J

) B- ^6 ~ E2 Y6 {

w# n: G: \+ y* T- T) R9 R   " A# M# h0 \' f! N

9 u0 K/ ^3 i9 G$ R: A: O

2 I) b# Q3 C0 G) Z4 m" x% p( ^0 b   E/ L/ a& l& d7 X! a& \

9 H- r9 J- ~0 F. Q \

5 k/ }4 e* y A2 _( p9 t: Q: { 签名信息 - `' j6 b: k+ d @" a, b3 R, H

4 S1 l: P% [) p* p% c, Z3 [5 f

# ~7 R* m8 q4 z6 o 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名。 ' S& g4 c3 G2 J* t

% n6 |; T4 \6 Z

" ` n! H: p, M2 b1 G# z$ N 目前APP中大部分都是通过V1和V2签名相结合的。并且这个在签名过程中要保证按照V1到V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 & r3 p) n3 Z* a# n0 k: I& d5 I

( W# @7 ]& l) ^4 I

1 B, `6 o8 ?3 @7 V9 T 在android的app开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 + C4 M5 N4 c* C9 R# H) B- S

5 r% {- }9 V- C5 Y# X

! n% L( C: i6 B, ~4 d: j, ?+ Q* t! ~ vshapes= 5 l% I9 O0 h6 H& o% a1 u

0 \ w1 U2 T+ c" d# |% {

2 Z! q: f7 |3 x! |8 I6 ]- t b   0 l1 B# ~# |# i7 ~

6 d# s$ i0 d, z1 q- d: `6 ]

) @- k Q; o! p9 }" k android签名的数字证书的一般都是采用 X.509的国际标准。 6 o/ x5 ^: w w' A* J9 |

, j+ u$ D1 b" n6 S

8 m8 n1 m8 I7 D5 j 因X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ( m$ E9 I2 n: k& a8 O1 I) M \

% {5 U" _$ K4 t) s8 V8 R

' U/ ?1 `1 e8 f4 | 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 & x# o7 m2 F& B3 C/ q& k

% s; i5 a: i# J. }# i* `( a

5 \! I( E9 O1 j vshapes= 5 P& e5 v$ U5 \6 h" k. g

6 @2 z; N3 q( K- i7 Z' z

9 t$ h9 t- I& d1 z' |+ l: P   : @ l5 }7 [1 q

) `% Y4 ?9 l) O; d" O' |

. {$ ]# t* a0 \% }* ], d3 ^ 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 * }5 [7 V2 Q! [ z: d

/ K1 S. v5 ^ b8 `9 O1 M

0 c' J! l$ x/ i- q vshapes= 6 c! t5 ?) n/ } ?4 T. C. l

4 z. e9 N' D7 Z1 y ^5 H1 x

0 v3 ]% K6 `3 a) o( b) p 、 4 H: M6 J+ P/ u1 q, ^. \ `1 F

8 \ N9 @. O( s% u6 {- a0 i- z' |4 x

6 N/ Y- I4 c2 d' }   0 N2 @' u( d4 i7 k) k1 v4 c' [

# V9 r) h, g5 c: M( V6 }

8 ]5 R) \% L' J4 j } 权限信息 * T, k2 ~6 f1 s& b

% R" b& K& O8 d; V: k* t7 n, A. U2 O

2 V0 i8 M0 P. f. z 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) # m. r% |1 H; @% g( H- z5 J$ J

4 y: X) t) [, W) \3 |: A

8 m; T# @/ @. ?7 |- q android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 7 z6 r8 W5 A' [% x A! |

% u- l( @! ?! B- U, ~* t# r

' @7 f6 X5 A% H8 c/ P# M$ r& g vshapes= * e! n) A! `' v% Z1 [: D

9 _% X' a$ k& k4 v/ y- x: p

! ~) u0 ]& C* U f/ I( `) w Z   0 @# P( F0 t' s0 E/ r) Z. M

; h* B) r+ U [4 @+ e% Q7 h7 b7 x

/ q* j. U. p! m 下面对这个APP的所有权限进行详解下: . b& e3 M H( z/ Q% K% R) s* j

6 O; t6 }$ V! F

# B& F& x, H* O$ W6 c. n android.permission.INTERNET :访问网络连接可能产生GPRS流量 1 o9 P, | p9 ?# g; l+ |1 @6 [8 x$ \

c0 p4 j; s4 q" N# A

; Z: F/ g- _( b9 c. k! P5 E2 B. r android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 0 v N1 p7 b8 V/ s

2 h& U& h, B( o0 T% L& t

* D# V! L# l5 ?/ v' n android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 : h( M6 ]% p9 S* a! O0 \3 h

) i* \- d; X7 N5 W7 k

! {1 r. P) _/ t. D1 d$ b! ]1 J android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 5 I, i- \' L2 y5 h" o) N1 {4 w8 n

7 r* J) ~# r- i# Y g. A

7 [, w* G0 L. s1 P/ h9 B android.permission.WRITE_SMS:允许应用程序写短信内容 . t% [& A4 v/ Q3 T8 |/ i3 R

T4 E6 D+ d( L. a8 M; k7 u. P

/ k/ D3 J* K- }: @) k/ i android.permission.READ_SMS:允许应用程序读取短信内容 5 b; D/ j' P/ P h; Q) M

1 o$ W/ s- K% x+ @

. o W. n t* A6 x3 H s! S' q android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 - J5 x) ~; n% r2 ^& p

' G; [4 x- y9 {3 X3 Y ]

% q# J$ ^: h6 e6 L. Z android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 % C6 f1 z# D& ?, B: f8 }

1 p1 i! f0 j! I K" {+ D

; E4 m! e: H7 n; N- W% ~; J. ^. S android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 . y1 X" {9 Q' ?- V) S# B2 u! b

- q2 l. |5 j; ?- F2 X, r- ?

, V6 r" e# a! e% D android.permission.VIBRATE:允许振动 7 R$ c! R5 r: r! I

6 ?, k Q! \% `, r

, \1 I2 W5 G1 {8 L' a/ q9 b android.permission.READ_LOGS:允许程序读取系统底层日志 + C+ `8 e% @, z2 _$ ]' l

1 L2 v1 G/ |0 v

8 Q3 M, T1 L' T4 ]$ F android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  / |8 Y6 j& Q n6 _

: z- W: N8 N @( @+ D

! E) q2 a9 @% u8 |. J% i" q( P" r5 c' m   ( w" E, v3 L3 ~ z/ F

) {' H% r7 V+ \/ A' V

r/ f% {& S" T2 H 功能信息 $ [6 B: q3 c; V5 K

1 k8 d5 c1 v6 g5 j, V2 l% ?8 |7 Z

( \2 W1 y4 s9 e# |' `   - T9 R9 O5 u6 ~5 Y3 D, e

; ]: V! f1 ?: O: M) ~

2 t y; t. y3 N7 }" t( j0 t 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 . J; P, j/ ~( I

2 B9 i+ G& Y/ {4 l9 R

8 c Y8 Y+ R H1 r Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 4 C \7 r g" } I5 w

$ q$ B) J4 d5 m& G

# r6 M" ~+ p1 y% ?2 F7 Q6 g 1、需要用JNI为Lua的C库进行封装,这样才可能在Java中使用。 - |. i, h' z# |8 m

0 x6 d0 ?. t: \/ N

3 a. s0 n7 n+ J2 A5 f2 K 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 ) Z( \% s- R8 V" }+ R

( F# v$ e4 ~, Z8 q0 }4 K$ Y: V1 I

7 Z7 T; ^/ S4 v vshapes= + T& x6 R8 M/ \ u7 D- q

d* ]" L* j1 }* [

$ H6 D' q% ]$ E   ! w$ j4 `& e' a+ `! a- w" u E. X

" d: u$ v; {2 M5 I+ `/ d

: ?9 q7 s& @3 d8 M2 h% s# k 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 3 Y0 \5 s6 H$ ~( h, @* q7 V

9 z; Y( a( \ J, x6 z$ v

; T7 x7 k- ^1 m7 J, ` vshapes= & I7 F! c; w! k: Y1 n3 i

, q2 L% n+ m, M8 W9 a |- P2 @

% K$ s+ T! n+ {9 [' _6 R   1 F8 C% h5 e8 F+ U0 X# _9 j% S

$ r; B# U- ?1 B2 h

9 V1 ]# w M/ \% K8 ] 在lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP。其实破解这个验证很简单,直接将文件的禁入信息清空即可。 $ g r- U! O$ z' X

( T1 y7 U) Q8 ^! V

( z' N/ _8 S/ S* B vshapes= ( f- O0 f" U. J: G4 W

7 M# e" v. U; j6 v6 s k9 p) ~% Y

/ d6 F& P8 v9 ~- {( b1 d" L 下图的这几个so是网络上lua和socket通用的so文件,并没有什么可研究价值。 8 ?( B8 `$ o0 Y+ B

! _# h$ B% ]: D2 T7 A% X* ?

0 R {1 x# \/ J+ C# p6 N! ^0 ^7 L; ` vshapes= # u* M4 F8 V$ S- ~& }. M

2 B/ C& M/ {: o9 j

$ _' `1 U, x- ]7 b1 v4 ?# A   2 C4 p4 S! z1 y- p6 _- m

5 W+ P( c! n' b

$ w0 ` C5 F! F* I) u% r9 a: m 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ; t( ]: x0 u: |/ w# J; t

3 D+ t, r' D% J

' K$ m- T5 M; s LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。 ) M/ w3 A d( d* H' ^+ O. o B" T% z

1 s6 ^: v7 |: L

: _2 L, V& n; T* L' @ 这个luasocke一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 ' W# L. O, a! S0 G7 e

" ^+ }$ D: u3 Y4 M/ O; N

$ p- Q7 ^- T. X: t3 m# ^' @ 开源的luasocket代码可以参考学习下 ; W( ~: P2 ] d& k3 `/ a

( K) D" R7 ]. K( N, t8 Y2 x) c( a

# Z# O$ ]8 _9 Q: m https://github.com/lunarmodules/luasocket : ?1 Q, a" a7 ~- z

! x' p! r: X) D: u" x1 p

" }' h* _, U0 X& M https://github.com/fengye/luasocket 1 I$ _5 R! R7 ^5 m4 {

" N2 h, A, [7 A1 c* V2 z& n9 E

$ g' ~5 v6 V: I) R' S6 J& g0 t   ; U# ]! F. M+ d, C: P$ f s

, ]! O1 o" t' _

5 G0 [6 k9 r; K% T& N3 o vshapes= 1 {$ \6 k: C" K2 v+ q& o1 ]

1 g' C3 ^2 I. o& p" Z2 P3 {

( f8 \! d4 W$ W   . \" Y- F: w, X4 L9 [. L) B+ d

0 @& Y& y: ?; f5 _% `

. A+ m( ]5 s( {2 V* }1 ^, ]$ m   0 D" [# J Q/ X7 \) b

n) p- C; ~( {# B

, ~! m- j' s w; [ 总结 , G$ V& }- }: E* b7 w7 m

1 C0 Q6 ?- V8 @* N# i# u" H

4 N% v4 T2 G- c 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadx、charles、ida、uiautomatorviewer)工具就可以将功能全部分析清楚。 % {+ n5 i" h9 \' E7 k: k: q

: Y# t( Q: N$ [2 T4 I8 ?

$ o: S1 \" F8 n @, f; O/ x/ ? 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 # p& D+ i8 T! G2 P' {

; E; M, m8 W# E2 e% K, u$ T' R

" X! R M( u9 h$ u @; H! c) [( | 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 $ j% k7 N$ `1 Y

, k0 P k- ^- w7 n4 M6 k

* Z' J, c( w$ e9 T2 A1 O m* k 结束 ' U; D. u4 S" c+ ~

. Q2 ?$ A$ x( H" W% |; N

* O1 H; g- n+ V: F! C' _( g0 A  【推荐阅读】 9 M: t g$ a& M0 r

0 }8 r9 M; c$ ~3 G. H0 c

: G0 v/ a3 W: \/ t 对吃鸡APP的分析 * v. g& c2 L( q% f! {

4 X- P1 I6 B: i* A

. v) j% N# [9 l# o C* ?' m 你需要了解的APP安全 6 A. t; L& c$ h& G j

) [3 H, A9 D! K7 Q. f4 Q9 I& C5 O# u T

; y' f* X4 a/ ^" V( ` 你需要了解的APP安全 ' o9 b: r! a1 x' x- R4 v+ f

% r) C$ E2 a8 }% z" ]; I, b- l O/ V w

8 Z0 p' B6 S, \' p/ ?& Z! n   . ~3 a. l( c% i1 e3 }/ H

回复

使用道具 举报

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

本版积分规则

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