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

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

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

; t" z* {. T/ n" u- @ 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ( g3 p! @8 P) C" O$ _% i

& t+ i- }6 r. g, ^7 U* O

1 c- J9 K: z% }& j) v1 Y; G vshapes= X4 b) x7 K1 s5 G: `- e

) _% l3 U; E# I% c% ?& v' E# Y

$ L8 y" E: z+ s& P8 z" S# U   # q$ A* [. P# Y; w0 k

, R9 f1 L0 R! D' u" S# B/ V

# q" F9 z: J& ^, w! s% E 下面就以开发者角度进行解析下这个APP的功能的实现原理。 / R- }6 i" f& T( E% r0 z

( b* V# i; D. \3 }; D" d

9 B* Y: b' R( V; Z; }" M   ) w0 ]" |2 d; a1 ?+ {" N7 K& `

Z7 x8 V: g( x8 A% V

3 Q$ e W% e+ u- G/ U6 F 基础信息 ! W U- D1 U1 ]: ? n6 o

! E) _. G5 W/ i6 u8 w/ P! |. n

* Z+ C+ n0 i# q0 R1 h% {) z 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 + Z9 @9 K: i) n7 P3 P( U

1 ^; R! J. N; E+ t

, ^+ C I1 M/ X, e$ L vshapes= 0 M, g& j, E' Y, v4 x5 Y

H l1 j C x9 o9 d

. P1 F, o5 M5 R+ h8 f% z& [   $ E5 \4 D4 L" x+ F5 C

- M. c1 a$ G, ]/ e7 `+ Y8 ]

) L6 v1 C& c% C3 E0 \* R 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 6 K c& C# R$ K/ Y6 R: z/ ~

; p6 _% u9 c3 b3 J4 [( h/ d

0 E( c1 t% c# b9 F/ C2 B vshapes= $ }4 ~/ u9 ]2 `; e8 N1 Y. i

# [- i2 d, _9 v1 m/ k. O! X$ R

8 V! G1 d% x- O   4 Z& p. N% y( N& i( T3 r4 H; J

) `5 u% _" E* M

8 t, q1 s3 S; G- U 通过jadx工具查看,该APP的Java层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 2 g* ]; M/ A' M. c" G# `* i

1 R. h9 b. H8 M( S

8 |1 W( G1 V1 R6 S vshapes= . `/ m* M( ^1 E$ l6 `2 b A

% g3 F3 L) N+ J: i' T5 x

, b5 q1 p/ E5 k* [6 e   8 t8 S+ r8 D$ F S& K! g5 w

$ G4 z# s8 A7 e+ K& k4 M

4 H, B/ F2 N n2 }* H 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1个EditText和3个Button控件组成的,也就是下面的截图信息。 8 I0 W2 t0 V4 H

, G3 w3 f" m# s: x

, A' }9 v+ _& x vshapes= 0 ?: v) Z/ _: A6 p8 e

/ S- F2 h; _) Q# F

% f5 t* ? s' u- L" `2 l. c* a   # x- t1 p3 s- N* X: O' J$ P& [( b

" J- T" z [$ p8 C

+ v- S1 c' U6 z$ W 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 . [3 h3 w9 t; |

5 r* x/ c3 z7 q& `4 j! B" L' t

. K. ]/ L2 H0 O vshapes= ! _2 m8 N2 p& {8 F# X$ S& }& b

0 V5 @% N8 E7 W2 E

: N2 l) L1 x( C) X6 v7 ^   0 y: l/ B& ]* m

4 n& y7 O3 u* I5 |7 z

) z9 ]' j6 R; L6 W) w2 l   ! S6 v- g. @# s; ?1 m- [7 Y# y

+ H$ I7 I D* s9 {, Z; H- `& ]

5 k% s0 F- z9 V/ q* ^7 r 签名信息 9 Q u- ?0 [: v# \- |

* j5 t% N5 s. H/ O q1 H

: O' F) c7 s# g# M- E) B. H) T 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名。 " ]1 r* M9 d8 x0 w

6 z1 u4 F) y+ V3 i

+ m/ w1 s5 [2 q# M: Q3 J- t 目前APP中大部分都是通过V1和V2签名相结合的。并且这个在签名过程中要保证按照V1到V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ) p/ ^( R. T4 C+ K$ n

+ \! Z, u/ e" H( l% ?/ |

) n: H4 _4 J8 w' b8 g# u" d# I8 p 在android的app开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 6 ]* J4 ]0 @6 k4 ^# i2 c

+ U, y3 z( B5 q' d# d/ w

4 E, a7 }7 m7 F% z& d" i$ V vshapes= 0 v5 R( R: s. J4 `/ F

/ _, @& L. x1 u% A* _

2 \$ N4 ?7 q: f! s+ _* u   6 M: F+ L) V( M+ y* [/ \

`. S# e/ w, r: e( U+ d8 Y4 P, V

4 j; Z: Y' \- p2 A5 ?, U% s F android签名的数字证书的一般都是采用 X.509的国际标准。 ( C. c4 d% D, d

( L4 v0 o8 r0 ~5 T

( G9 |- O& j" h/ i! J 因X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 % l4 ?6 O# O$ D2 O

- b, [: H) x+ B# D$ }5 @5 j0 a

$ F& _; j" J7 [1 G 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 9 a6 i: i+ b" m H! q8 v

) m F" _5 ~3 B Q( X9 S

/ Z/ x* T7 _# |9 w( Q vshapes= - O* e/ D$ l6 A1 H/ f5 A

: x4 f, _2 l: \ N% K0 l) r" x

! J" W0 P+ m4 ]! y   ( U, F3 R* r9 g s8 U$ ~: n* v& M

9 m/ B; U3 b' P8 W* t9 `1 P

! [0 f( q% R9 d- i# t6 U 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 5 w( W1 V. k2 @

: `) L7 B' l6 R" G% ]: t; d

; {5 T8 K; m5 V9 J vshapes= / b, u: I7 q3 [% o5 b5 y7 M

/ h3 P" Q0 J9 ]$ x5 E1 y

. k j0 w+ G( C, K2 u4 G 、 4 n; C, X/ [& w4 z9 Z: x2 G( g

% N ^3 a: \1 }6 d5 [3 T5 a

1 Z* d; ]& P: O7 f: V% C: H* b   $ J h3 u/ X5 e; Z/ D- R# s

3 Q* O7 ]' D2 M9 P* h* h Y

B3 U+ U: g0 D# n% I 权限信息 . g7 t- [0 v. N; T( l

6 v# M' T2 n' |# S& R0 \/ n# {

7 G& u1 W, l% B. s) T 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ) g% i ^8 E8 A5 Q6 V a+ {

7 w7 n0 Y U( p1 c2 _+ f& |

0 k$ F) i( `2 h( p/ O) f android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 $ `) o8 u# Y- y

+ J! }$ e& D: _, p

1 ^0 |( @$ k. D6 W4 ] A/ S; N' t vshapes= - o* Z8 m1 D# P# o5 a2 }% U

8 o, z. }* G' R( H1 I2 V

$ u7 w- b9 w. p j- w/ B! s   & F! l( y. Y6 Q% P

7 f: M7 Q0 R( s; j0 b

3 e7 a L; D: R 下面对这个APP的所有权限进行详解下: 2 B- I& K2 u; d; [. F& Q8 V3 h

' W ?( y3 b3 I7 W& ~

3 E+ e% P+ @0 q8 D* }# P) D android.permission.INTERNET :访问网络连接可能产生GPRS流量 8 L9 k% ~( n& \ V2 N9 A" d8 G

. b( M! e% v; c4 Y9 n

- b5 ` ^) f- U1 c android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 . ?* W$ G0 l. H0 w5 G

' @- U; o6 f j2 U6 G4 {' G2 t1 L9 `

; [$ P- T+ z0 p0 x1 |% t$ n s+ J5 n android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 - `! V8 b8 J$ ~+ y

! D: y6 \5 s* U1 f8 t# I) I

# g6 j8 B3 S4 Q5 G3 z1 X android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ( b4 X8 z0 N3 z

& l, T* R; v) V0 l0 v$ F0 O

: B4 I- u, X# Y% s9 u! { android.permission.WRITE_SMS:允许应用程序写短信内容 ! V+ N" M$ G4 o

$ t5 M# K: o% T9 T7 ?6 ~0 H

: w( o/ R' e) O7 C: y android.permission.READ_SMS:允许应用程序读取短信内容 , d6 a+ `: S$ _0 W8 x% [5 \

! s( z4 r- t7 }9 r# E9 e

; k- n- m8 V, p1 x! @/ r android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 % ?- I' F: Z. x9 V' w

* U/ x; P/ c G9 ^( x

" m2 b3 m5 | ?$ H2 p' v android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 . F) V3 @& p* d

. v' w! D$ {7 p! ^3 t4 L* ]* w; J' u

2 G7 E/ j" t/ r7 `% E android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ; G7 \/ v+ k$ K$ A) e) J

3 u# S5 r H+ P( f5 K! L

7 o# f1 b1 \ b) Q1 h9 I android.permission.VIBRATE:允许振动 8 G5 W: Q1 b: v- |3 {) Z6 v

/ f. r& r$ m2 q+ A: l

. E T. S0 W, o: t android.permission.READ_LOGS:允许程序读取系统底层日志 / j# [# Y X8 o$ Q8 B9 ^+ N

! k ]4 b2 m9 r5 q, f( E

; @: Z1 O8 O1 Y( b5 M6 I' z, A android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ' X6 v4 w. R/ j0 l7 I* Z! l+ m

; J: T4 \& E( ]. o

t/ Q& f' d H; }' d. M   7 J4 J% F$ |2 u$ o; R1 ]

7 Z+ {% R4 Z/ [( Z* E

0 m1 c/ |4 i1 N P" F5 Q9 k 功能信息 1 Y. t2 L6 A) j3 L2 F$ n

! {$ C" B' s* ]. I) h

9 S+ U( a0 e6 @1 s( ]* g   2 L* x! g0 M6 S" R* G" _

) E% ?+ a$ y) s% ?0 @

, p5 C% y( i* F2 ^+ t6 {. S2 Y0 b 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 8 f- x& ]* G6 V

- h0 Q2 J# _2 o5 Y, {

' w n+ K5 t& B" Y Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 , x8 J1 o: h& W

* F% W/ `* U7 q7 m) ]# |, R

; b1 G- z6 |( _3 D; O5 M6 {; M 1、需要用JNI为Lua的C库进行封装,这样才可能在Java中使用。 9 ]* l8 Y( C/ Z/ E# i. t! p

; w2 `5 g, X* G& N. r4 W/ C9 Q

/ T% R3 k5 {5 _3 e 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 " C/ E- I8 o6 I' {$ @% X

, I2 G5 C# X7 U8 i: J, c2 z- e) u

2 J$ c( _3 Y/ O; {; O" l& W& _6 h( e vshapes= ' u' v {1 X* F2 n6 b

' f1 B; Q; k6 J8 p2 k, M' ~# x( [4 q5 q

{0 K) ~' ^# H9 r0 R0 b! c   $ b0 r7 Y& I1 a: G

]; s# z7 ]* q+ ^/ T- O

) ^# F# n- ?8 |4 m: O 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ' ~$ f; E+ B% J) _* u

& n; D1 a4 l$ p. {% ]/ k

5 n1 c- D, r w# z% l6 x( h3 o" A vshapes= 5 k3 y4 w M# w1 J" g

) W7 C v% u O$ p; L

) }5 k" E; ~& }- v, y+ P+ S   C3 G: u; S. X0 l- B

+ C, b1 u0 c4 O0 N

" B! m; @4 \: D. j0 ~# t! I# J+ ~ l 在lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP。其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ) d5 P2 I) U3 P2 ?/ l! U

, {/ W3 [/ W( X- M% R9 G2 H

- S1 l: A( I: \ vshapes= ( M5 ?' {, [1 _* j- o

. F! y/ @/ E; Y

3 Z' Q& g8 t: `! [6 P 下图的这几个so是网络上lua和socket通用的so文件,并没有什么可研究价值。 # X* j7 K6 G( `( Z. ?

2 U9 I4 A2 `' ^. l

6 y6 s# K% q1 ]9 r( ^ vshapes= ) s% G' F0 B- D, J% b

/ W* Y9 [6 }* S

7 m; u- d5 ~1 \. M0 O& u( j   7 _' m$ n% S, i# J, F, N; R" O

9 [- `* f/ P8 n$ Q/ F5 S

, J% F8 Q# m. l) t0 M 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 t6 a6 J+ c% }. P/ M, {

& T: M4 y i/ h& c5 i3 T

- y7 @6 C: |2 l/ B" F: j2 A LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。 1 v7 K3 Y' V; \3 `: @# f; e: n: K

( q8 M( C7 E# `% V8 `8 P

6 e4 h8 `, T4 _7 K. `0 s' E+ j 这个luasocke一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 ! ? W5 D4 ~0 Z8 J3 D

% h; ^) J7 x; D5 v- F

3 F$ K( _+ v6 k: e: {4 U7 o 开源的luasocket代码可以参考学习下 ! x6 z6 O; |5 L+ ?+ [) v

8 X6 N/ x) w4 v7 @- ?

; I& \: E4 }/ Q f. | https://github.com/lunarmodules/luasocket 6 w' O1 B/ _ \& l9 k' t

( A' ^+ ] v0 l: D; Q, g5 e2 j6 A1 l0 s

2 @" L; {0 V$ e x. N7 Z- q https://github.com/fengye/luasocket * v" A9 |0 O8 u- p: H

9 b. Y1 }, }9 N2 |

9 R% b$ D T/ M7 g: c   * T8 B" j/ b8 }! O g0 A% S

1 q( u( x) ~2 Q9 Z9 [5 V

1 N O# e% l( X- t! I b vshapes= , f: H% \) w D$ ]

' {2 d" `6 |( T! q* c% f( J" _/ i' t3 N

6 z8 a. M. ~& d6 ?   % R4 d" G1 w3 O! ^# I

8 N( O. ?# _) }, @7 F/ }/ @- g

" g6 x& r: _) J- D4 r# `- a& m   & ?* ?) @/ ]; d. i3 O2 _

+ i2 j a- G$ Z6 ]& I, H' Q$ J7 N

6 ^1 t, D) |; @& F: w7 T 总结 " ^6 a/ i) D8 i0 x6 }- G

* |4 s. b( B8 u. T' A, s

7 ^$ d' ~3 O9 m, k9 S' r9 d% ~ 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadx、charles、ida、uiautomatorviewer)工具就可以将功能全部分析清楚。 " q2 r' }% b/ i( r( s, Y

2 M8 J w' R& _6 b8 H) f

2 {& t" _7 F# J3 D 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ( u0 r& x. Z9 \+ `

1 j- u h. k1 i% z) z, k, o

" G7 y+ Y) w3 W' a4 a 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 4 m( I) ^2 W& B' j8 ~2 B1 N

2 W- ^8 w: e5 @7 K0 m1 W

: q. V4 o! W b3 b9 j 结束 * q1 l4 v9 `& s* b4 x7 `

& }8 F' s% S+ s

$ C. U. H' R+ F6 l* r' \  【推荐阅读】 9 N* d! S9 K8 ?6 C) e! O: h) G

' _2 B# W5 |+ z2 u3 c

/ t' |+ G: V7 T* U 对吃鸡APP的分析 ' N0 Q* P4 ]' q

, _4 E: @. f% B& r

. v' x2 G/ q+ Z. o7 J 你需要了解的APP安全 9 ^/ @, ?% @# P* D% |0 |( O

. m) n" }# c4 r" }/ C2 J( y

( a0 Z- E! \% q 你需要了解的APP安全 + X. a8 a+ y5 ?( U9 r

3 B" |3 H D6 X0 _9 A: [

" l4 \' d5 e; v% g: s   * t* ~2 b, ]7 e) I" e+ \

回复

使用道具 举报

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

本版积分规则

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