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

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

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

7 Y0 A; f* S/ T 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 & O) J) D2 [$ m

) ]4 {: l% L0 p* n/ p7 u

, R; S, A" d/ m5 C2 E$ \7 G vshapes= 0 ]1 J0 H/ x; B9 k. |

2 O5 O% v" b) Y$ h! G! p

; P G, ^& s) ]4 g" t   8 s, J) J# P+ L) h5 ~+ `: {/ G; z

2 v7 j5 B2 ~) Y% w' e% G& v3 c2 C: T

9 W+ I$ h% ?/ ~8 I 下面就以开发者角度进行解析下这个APP的功能的实现原理。 4 R6 q: i, ]$ J% \& N5 M

9 a' F" m0 c) c' N2 y

! X/ t; ]5 y9 B) \4 R$ v% f0 v   * u6 \1 f5 f" U7 v. ~

( B( r) X4 Z1 i. K6 s6 ?( p7 V

* U7 K! @ p# u- n' y 基础信息 7 F3 p: W. w& k/ t& g+ a: [8 ]

$ C2 s2 ?* ?, y/ K5 P& [" P' k F

a W/ \% g% H/ h; } 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ; ^2 F9 }5 O* t" Q' A3 j% ~

! V, h0 g& T+ K$ ?/ w* V

; ~+ W% p) b& L3 ]1 _% P vshapes= ) S1 Q" k) A% x _) r& h/ t

1 z* ^1 U) ~( S$ m: G) ?# u# O" {7 C. f

$ g, t7 e2 y5 J   7 r5 \ Q4 u; v- P, s) M3 L) I

& `! ~; ?; T/ M

2 x/ a, E- F, w0 S9 W6 p 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 + w0 w' N& h7 r4 f6 M

' a. l c5 w1 _! z* x* K

5 p( a4 S+ A$ H: { vshapes= / |& r$ y( Q8 V

+ ^/ O; l! N6 p' Y4 m& G0 Z4 {

9 Z6 t: T! W3 J# I& F' i   9 |/ J/ B, T$ k3 a

$ s" c& b& A8 _

* V5 `, @$ C5 ?+ ]/ M 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 : p% Y" n; @& o" Y

- N8 b( j' S/ N' Z

$ K6 G. w. S9 D- @4 l9 r' M vshapes= " Z8 l. ~8 I7 Z) O

5 E8 n1 G/ `& q( Q

0 M, ?( |! S* n! _8 _   1 }0 Y. D/ o( i3 A: f/ P6 x

5 G% S( E& M5 x) t1 J( Y* ~/ ] U

5 J& P3 @/ O( _ 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 + u: ~& i5 s$ {/ T. X# [, Y

4 I8 ? V$ ]" h

( c1 U3 H! y: t u6 }0 [. _ vshapes= z" S$ P! G6 N" i

$ x) F- d5 Y+ J/ D

8 P( y3 }$ @. [: V   6 l; c6 V9 q5 @: d8 U

) P% `& W2 n( x/ N

/ y5 k! F' w% Z6 H 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 . n6 K% `5 D, r$ L$ Z

$ j/ p4 g: o3 r6 M

: n2 c: S3 b5 t" {. `; M' F vshapes= ! x: @8 L3 Q. h5 O8 ]% j$ I6 @% f

{1 I) @/ a1 @: G

$ n% ~5 `' T; \) x4 T; T   & t/ ]. z7 ~7 D0 o$ C

0 v7 w6 K5 l4 C

, R+ q5 h6 Z) b! z4 v   ; [' g* Z2 X1 D( S9 h0 d

- t+ ]( d: t* j( ~% y5 ?, d

) c& U/ p: u \8 F" ?, n% h 签名信息 ; ?$ G& i* K$ E* m9 v

- }6 B1 o7 ^. ]3 H& [: n3 Q4 p3 U

3 t) x0 |# D( T+ y6 I5 ? c9 Z( w 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 6 |+ _2 V! Q) }% z. ^1 z7 a

0 e; e. S+ Z. C1 M( [1 H

( n7 l F7 g" C+ b. D9 e9 K 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 : J7 a) X& R$ R' s( U6 A+ Q/ g2 p

Y" i* ?- \- [1 q, c9 A" r9 [

/ h# v* L+ A' B5 h% N androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 l1 q6 p# l! p+ F ?

A0 f" q7 n4 s0 N) B5 W

; f4 z1 o2 p# m vshapes= ' G5 I8 i( y. I8 E

- [; w1 |1 H! r4 `, h# l

) y- Z6 q& p [   ; h" p1 |) s! n2 Y/ @+ X& s

4 t0 T) v0 V& \% o- s* V4 c

# o# i6 S. _) w- `; b7 ?* u android签名的数字证书的一般都是采用 X.509的国际标准。 ! D$ Y K9 t5 n Q- P

% _9 S' l5 h# p

! I" r5 a, x" e. i e( j' X' Z X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 - @8 H: q" u; c2 [3 m( ~( O

& f& a# n% x: U( O5 S1 c: I& h5 V

4 a8 d0 ^- _9 q& J 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 : \/ C* G. E- X- G* _. Q. J# v

0 E3 V1 \ K) c7 `

+ r% U& a4 z$ e: _0 v! ~$ K vshapes= : d+ t9 H3 ]! V, u$ t- Z

/ ~" W* ?% a. ]+ P

3 E/ l4 A. H& I. x. d h/ s2 W7 g   # W0 ]8 e1 G, \/ x3 p

$ z; k* `! U$ g

$ Y$ y1 t5 Y3 H3 H; X8 J3 f 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 9 O# m% C( @4 t! \* {7 s( t2 v3 K

$ u7 J; z- V- ~9 q' E

2 o! V( |# C% u; {5 E vshapes= . _) U( k! f! X) y+ ]7 J$ K: \

1 {% p4 @. }- Z4 q5 T4 J9 `

! S4 X; O( w% l h! |( J 2 ?, v& `' e3 _0 O

) i5 z2 }$ R" A2 ]" Z7 j$ D- Z; ]

$ T" Y2 P- ^. v; O) K   % Z T8 y4 w& A! P4 l* U" `

! ^9 J; P" V! K9 S

6 _8 Z' Q: X2 ], Q* b; H( J/ S 权限信息 ' T: n; C; w. C( C

7 h8 X/ {7 l$ b( n; q: I) M

6 N+ R9 j/ s* t) o( X" [; q 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) % d0 v. i/ O! [( H' R

" l* l# \3 v" M

/ s' W. J' F2 ? android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 & v+ |# b4 {5 x3 S6 E+ L

$ D% C8 y5 ]! c$ Z m$ Y

, D# A K: |1 k: K9 e2 [% w1 ` vshapes= ; F% b4 Z7 V. ^( m: Y; }5 }. q/ K

4 o% V" ]/ m6 |8 t4 p

: K: d; u, s7 X4 E+ x3 m   ( s. g* h- ?/ D u% x( a1 B

3 I; J4 v( C- i

% h) k: m; j9 _" c- ^2 H' o 下面对这个APP的所有权限进行详解下: 4 K W4 Y+ y" @# N& w9 u

, a, P$ w1 j6 t" k3 A" V9 j+ [

7 E2 D( J+ R ^- c! X& \ android.permission.INTERNET :访问网络连接可能产生GPRS流量 & P. @ ]. w0 {$ {5 g

6 G1 v3 o' v8 l) \4 w1 H. D1 k% l6 n

0 u& ]& M8 ~1 t* ~ android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 . ^* u, u1 E1 W8 Y1 i- {" ?

, S2 h, k3 S8 P

$ c' y& z0 `) x' m; T$ d! r3 A2 c android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ; m; o# G) ?% M# l

" k. ]. F0 B) b! d

1 o( \) w2 O% a2 ~ android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 9 F: O$ Q( V. q7 O

: D2 G. H: W# V5 X+ g* y e

! h; y p4 V& Z( N. O( x android.permission.WRITE_SMS:允许应用程序写短信内容 - F0 b! k- M! u5 Y

# l! n6 x- K' I# ?0 K' ?

4 m# J9 J- l. z* D android.permission.READ_SMS:允许应用程序读取短信内容 * ]3 v# o9 v. O* P$ |

& m1 C T g. t- B

0 n7 f8 ?! R" M y android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 9 v) b4 ~" R; D/ U

; i. v0 T9 L8 D6 u

- V9 L9 |8 Z w7 m* i" T android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 ! C% I' x7 p) B6 X% s, e

6 z+ ]% y7 w$ D; g6 K

- |; R/ v0 Q$ Y' q android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ! e3 I9 q1 G# Q

+ |& d. s9 D8 Q# P* k5 ?6 o' m+ E! {: J

9 K" y2 r3 {$ X h1 l5 J android.permission.VIBRATE:允许振动 4 {8 f; A9 |! ^0 J& i/ d% d }

~9 T! ^- U# f l" c( G

9 f2 r- j& W2 J9 v/ B! {, N android.permission.READ_LOGS:允许程序读取系统底层日志 3 \; {' P; C2 l/ R$ v T$ q

" c( r# }$ ]$ |2 G

; X1 B: B% c# R/ e android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  0 I& x# K, S2 Q+ f

1 V$ b; ~9 ~$ l! G* C

2 ]; x& g8 V+ p8 V+ z   8 z( j+ Y' i7 K7 z7 I- i

% @! H7 t7 ?. b& Z v; u

2 U! h: ^, F( |- D' o4 m5 S 功能信息 1 B' a1 y4 u& C& Z% F) Q

! d( a& ^: P: g4 y

, x. b- \: {5 T3 B2 x) d   2 j. d! H- s$ k5 X

1 S0 v7 L" l- ~0 v# w0 M8 X

# S& Q, P1 E# M, M2 R% T 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 $ M4 ?% J; a/ P5 c

s& T6 b8 d& H1 ~+ A$ ~) e

4 d. `; i' X9 o' ~9 | Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 1 O M, i3 ]' Y+ K, S* f

7 M) Z' O" d" Q# d

, l- _- r. a4 [$ W* ?( }" B 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 8 y: n6 Q4 ^( V# g' V+ o1 t

+ }) X0 G5 c' a. c2 i

1 a+ z. @& C' b4 M8 \ 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 ' B' n, L% {" p2 p/ S2 l4 I0 W

0 k9 d8 l- ~4 y1 _

$ K/ G0 q+ w. \5 I9 z/ t$ v" E! r vshapes= ' b( w. i. ~% g3 e, N- p

# Z6 S. c) D; E& t

) V5 B% {2 O4 P! ?/ f   0 i% B% `: O. }5 z+ l

& G$ P$ j7 p; }* [

# E9 U: Y; m A$ ] 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 & @2 ]0 s; W' \+ P8 R, K

0 a* n) y% G, d

/ v# l+ j% d- n% B* R+ V vshapes= # X, x7 U5 v, \: h) B8 @9 F

/ o* v( j. u. B- \) B

# l' j* b5 l" [ e% o# x   4 M6 z7 y, O2 E: ]( ^; R2 c

. ?+ O/ b6 ~- r1 f" k0 W5 b, r

5 `! T! T) r! p3 b lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ) n) d$ h9 q! e" N0 x* l

7 Z2 Y" N8 K! }- Z* P4 w) H4 h# Z

+ R3 W% V$ F+ n+ E! e; b vshapes= : b: F: n G! b3 [6 p& ]5 N. C* ~& v

9 d" b: _1 P, C" _; ^! B" k- ~2 ^

9 u# P& Q( J3 Q4 `9 r8 p4 W1 z1 N 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 $ k+ y3 T! l' C1 b' x. R

5 v1 `2 P( ?( Q( R$ I# [( o9 k5 j

- Q- U- |' W4 T vshapes= 2 r: r! H2 b! I( j6 o9 M

6 D8 G3 K( }# o z3 L1 [% t" a

- Q1 W0 x% C5 o" o   + l5 u: C( V; a/ B

) d6 n* H/ ?# G7 s: [9 f9 H( T

" I3 Q. S7 q8 d7 s' z 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 7 |" f1 G) u$ O+ K; F _3 p

& D/ D0 J, l |3 M/ I+ v/ P/ Z

/ t. o; z% [. p4 q, i$ n2 s$ R LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 & Z0 N* R8 `' h* K }6 } w$ y

, i/ C. h5 x- f5 y; B+ o+ j

7 ^" H, G2 j/ h% q 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 3 ]& m6 X4 H7 S+ w0 o1 \

1 V7 j# }! e& a1 T# j; d$ v* |

. U0 q/ l5 V- l 源的luasocket代码可以参考学习下 0 B% h; H* u) X4 y+ b6 s# i7 W( E( b

+ F8 p# V( Z$ A

/ }; A! o' p: T* P) L( t% v https://github.com/lunarmodules/luasocket & i( X3 m" C+ X1 x) t

# j9 ]' F3 y: m9 J1 T% W, O. {

- P$ M& @% r$ h' Q' w$ E https://github.com/fengye/luasocket + D- G$ r; h6 X9 I7 y. P7 t) L

& c9 y' D; v3 {( D4 b2 G8 ?

- m9 k3 C, w Y5 [! N   6 p" J4 U5 z& g6 }

. q" W- [1 w" {% c( P

+ h# C& w+ h9 ~* q9 x1 R3 u3 N# L vshapes= ' B& a# G" S3 [( \% |

9 n! d6 |8 C$ U* u/ j d0 |+ ?' ]9 |

- |+ r- }2 m2 {4 r- Y   7 p6 A. e a1 P7 n Y8 {5 v

+ C3 H& o1 o' F! b6 I& }

d8 Y) f! I4 D" H: h   6 C1 f( b! r* s2 B9 S2 W: [, a& Z. H

- f: k W* I, G# {

# W4 D1 D. ^2 k+ a 总结 * t1 B- C1 C' K% n+ E

1 J8 |! ~4 m3 n9 Y1 O

0 Q3 S7 u; [1 E9 m! h: S# L" k* ^ 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 5 b% C; k4 k0 z

: m. \/ i% Z- X C( T6 W T* W

* N& n' }. E4 m0 Q6 j 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 7 ]6 L; ]& ?* q' k! c

% B$ T/ K; |) Y' P# r" h$ E: y

0 o/ x" |# ]7 s; A# @ 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 . _8 ?$ r p( G! ?( _3 E

1 p) V- J( A! Z

" C- A+ N$ O! r9 J- V" R: A 结束 - J* s5 X: b+ V( u; o2 u

0 u! l9 C" Y' s- S @% f7 F) X+ f4 C

- s5 c+ C) G# J4 l: f) c5 x8 `  【推荐阅读】 7 ?8 u) k) J5 t" a6 L0 J

# y/ E( E+ I( Q% f0 I4 d

9 |$ B; ~& G/ f# \) d1 L: }; A 对吃鸡APP的分析 # ?$ e4 n! F0 c; E3 v

6 b7 v1 v+ f) a6 _

, ^ [6 O4 n! Q, o 你需要了解的APP安全 Y* @' A' S1 k/ r3 P0 |4 _

$ q, p6 g( ]4 z( s! T9 A

D* R L9 \, q) ? 你需要了解的APP安全 + @7 b1 c. F- q5 f& N, O/ H" w

6 _& a1 S% x9 {; o, u' ^4 m4 z

4 o( E5 m- I1 U, l6 `   ) ^2 O5 l) s8 G& b! V( }

回复

使用道具 举报

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

本版积分规则

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