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

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

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

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

+ v; s; s7 O4 S I

! l) y$ C2 m1 U( W7 z vshapes= ! _ K, N% \9 y' Z3 T6 M H

5 D! I. O2 S; b2 D

5 R, u4 x8 y/ _3 h0 ^, O* f. V) g, ], P   6 H" ~1 {5 w3 `# v; A7 ]

+ e( h5 p( O4 V; N; {# k2 x

1 E v1 D) u! z& z3 g4 m' x( d 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ' b! q& T7 R+ c* `: X4 K& @/ P+ ~9 Z7 x

& ?2 J" D9 o) w2 b# ^1 W

+ j6 N5 b/ a. n2 B   , \+ i7 U& _! h: Z( i* z: `

7 a4 |4 u. l, f6 P

2 Y/ U& }3 I9 i M2 T* [0 a 基础信息 4 C9 b' F: t2 ~$ \- f

+ U G# q# l( u3 s

9 c; I$ G: A* M 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 2 A3 N# ~4 j2 p! @7 y/ e, G

+ |5 O: d3 T: h) w% x2 z

1 F r' X' ^% x: D vshapes= + Q. T% m- s+ }; k

3 |" J ^- E" U3 T( m

: c# v# P W2 a( Q8 S: r2 F   ; _! A6 @& W; m& W* r: Z! [

' c" k2 Y2 S. Z. u' f! q, y3 ~1 N

* C. R; P$ r* h 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 7 o8 [0 L+ L0 A; R. Y

; d- H, ]2 K3 d4 G2 X$ [2 K9 q ?

4 \9 Q: a! j* f vshapes= ! a$ `$ _6 l0 K3 q u( X! S; e

$ Y9 p E. X6 R: U# n

; e) z+ u: A! K# u   - X$ T; P3 ^/ s. O

2 ?- @. E( A1 T. i: [6 l2 x- D6 b

3 v2 g) W+ z8 ]! ^7 [ 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 8 m; H1 E h1 G s( R% E1 Q$ u$ @3 O

& Q! G) y" P. {

2 O# g( ]9 X k3 m6 _( b t vshapes= ; H# h6 {, x/ p |0 w+ z) R# Z

. I- j. B" F/ M3 D, O

5 a3 Q# L7 s+ t7 }   / f& S5 a1 O' l3 [1 p+ M

; @0 J9 ?. u) s7 O6 J1 D1 H2 @

+ q4 ]7 [7 E2 e 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 / R# a( E2 S$ A, V; ~' r

; C0 m/ d* g# N

+ Q6 M" P1 M3 l! L" r | vshapes= % t9 W2 ~: i# {- j& y( r9 T1 X+ {

( W- v" Z+ z: C$ h, v Q

) D$ C, c7 F7 k2 Q   z/ u0 H1 B$ x) \ d! r- z8 `

0 F6 F7 K* k$ O3 x6 S, w

7 t2 R8 O8 {7 H# h( |" ?+ t 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 " Q4 P& \4 E$ S- ]9 o3 G

0 ~+ C- A2 {, u B

5 i6 f! I$ e! n) m% c& ~2 i; W2 Y vshapes= 4 w/ j; L0 f0 l* l( }. n

8 B9 _; b2 o1 c: @2 V0 \3 L

8 `6 h4 P! m; V" s3 w* t- f   3 M! x/ ~3 g8 j% ^1 z% g/ W

; C) P$ T( { x! x/ e3 }

0 `) j9 b& y N, K/ }   : ?$ d& G# G m( \! @9 ]

, k% `" |/ v9 z

) k$ [2 \8 F' f: C3 G3 i. p! B% o 签名信息 + ]4 H7 j" A# r D/ f+ O' c

M0 R3 b) R$ S- |) \1 i

" `" `: R3 b2 Z: ]' ] 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 9 ]7 w5 q) E% W5 Z

& p" v4 h- H! D/ \) L* `

& k$ W" d& t: w9 B% h# A- x+ O8 }3 w 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 + g6 o$ W+ Q' u# a* k0 |, S) K, k

1 `) \$ h0 X! S V0 M$ z

3 n5 K. o. O) X" @; V" g" m androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ) _1 H3 V# Y0 C- d( o

* J- ^. S/ L6 C* E- w: o. ~

2 R' S" ], T2 J$ a( m vshapes= $ K% M8 S+ Y( J. {. h' }

I0 F+ q: ~1 }# U

& g( Z3 p `) _ l5 M' n9 E   : }5 G. `( f2 M

; F* E5 W2 z. J/ t5 ]: B

9 U9 n a' z2 [3 [7 d; Y1 l android签名的数字证书的一般都是采用 X.509的国际标准。 3 C" h' u4 v9 U; T

, U h/ `1 L# v; ]0 H. k5 [

8 }- l( I6 D: [7 V' s* T4 ?2 ] X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 8 `! z8 I2 G3 D# d

4 @+ E! r2 w7 J7 E: R- R& k' I4 Y

6 j8 A: ]/ ?* U 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 $ d: [* x3 T2 H; w

- K0 j/ a; i! I$ `6 B4 s

8 r6 }6 p% m8 |/ { vshapes= 9 d x! @* R" } d

3 ~3 E1 W% S: b9 t* a, U9 S+ M$ z7 w

3 L7 U& A. m' @   ( G% N9 y0 F c6 g+ e3 {# X

2 B5 C5 w1 ~) d3 O2 z9 u& l" c

% D1 @6 u- s6 B 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 % R* X& [ Q j( P9 J% `) g) x

* e& M) k/ O/ y0 o+ J7 k8 e) ?

* \# B. O/ k& N0 x& D) D: M vshapes= 1 ?' C& l) v6 P/ @ Y! N

# o/ ?( h. ^" v

* Y3 B* \; [9 ^, x& H9 ~9 b/ I . c4 W4 \) k- `5 L

' h9 C4 B B; l+ X7 z

3 t9 ]# S8 T% C9 T   % G6 {* A. Y8 N) l/ ^

( _8 n% s9 [% c. d8 Y

4 }5 p- ~* K* X1 |( T' O5 N3 d 权限信息 9 @& m. q/ a9 z" E$ }" g4 F% O F& \

' z+ b: ~! o! C- U

0 w" x9 ]. i9 R% |4 `0 b& y7 k# P 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ; i" S5 h; p8 w

( @% Y# M3 l9 w# ~* G5 }, S( ]0 s

) C) W) {+ N$ b android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ' d/ d; R% T1 e1 M: m# B: B" q

% m, w! |, C- T+ [& k( `) M

' w+ Q6 ] l5 e. {% D+ n/ a vshapes= % h9 Q" }0 [2 t4 U P8 k0 r$ o

9 M- T: x0 g+ G8 d& S* x9 B

7 I2 T% K1 r. p% M' \' x) U   + Y, z9 l0 c) D$ O1 n5 M/ u

$ N6 }" J, ^7 J* w/ I6 C! _

, s* t: y* W% C* G2 m0 L) P 下面对这个APP的所有权限进行详解下: % t- g4 q) }7 |- f* p, O+ c

! `' x! f- C1 ?

" U: q! [8 I' U" w# g android.permission.INTERNET :访问网络连接可能产生GPRS流量 + T8 e. v' E4 {) m; v i

' M( G% p, D% ^2 | j6 A b; D' h

+ Z+ Z* k8 g+ _5 F2 N android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 2 `. A5 ^" o9 x! }8 o+ M- G

1 r9 a6 g' Y1 }+ u8 @, _

, Q# W$ o+ f: D( ]$ p android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 / d4 Z9 t4 K/ u. a) W5 \' q

6 c/ I- f+ b- a7 f" `3 b: z

: c4 w& I( @; f% R8 c4 b: g4 r android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 . [6 \( A# R* P% }' y$ F: D

$ G; C6 S: P' K3 D" d; ~

1 v+ d" J2 l u, }3 w n5 _ android.permission.WRITE_SMS:允许应用程序写短信内容 / y$ p! t( W W9 v$ v% z

8 b- P: Q" V1 u& l

) `" [: n; t) g$ d* |0 Y# f android.permission.READ_SMS:允许应用程序读取短信内容 ; Q5 t1 ]# A0 |& S5 E

$ f/ y f) k+ \- K

1 ]( z. ]+ F1 c* s% U- I& |9 X android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ; n4 A( n3 q( K; @

3 ~, C1 `8 N4 e+ }/ {; o( ~

$ y+ M/ Y* V% `$ l android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 G, f5 q) a0 V* W( Z8 r

) |) i9 [& A5 s1 C, C

& ]8 k/ P0 u+ l android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 % c/ l/ M" v/ J; w

# n) N' y! g3 A$ P% X0 @* D

7 m, l6 M6 K$ W( ?5 _5 b) \0 } android.permission.VIBRATE:允许振动 0 Q: }. R% F( u) r' t. y! z! z" d1 M

8 X# {- H% j% J& @) Z' g) D8 _

Q6 m8 \, X4 @1 O! e: ]1 i4 N android.permission.READ_LOGS:允许程序读取系统底层日志 , }& I* w& ?, q ~5 O

6 H+ E R+ g& o' B

8 ^8 K [" E3 k android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  # I I% J3 }' D, z

$ ~+ l. R, \7 R$ O* O

4 x8 p# C5 l) p! R6 _3 {. Q, ?   + X. ~) o& [1 F$ Z- y$ e

. Z& ]( H( J. K! F% }

; H; |( a7 b' g 功能信息 ) ^9 E) u$ T; I2 a) T/ i2 N5 F2 b

& x. G' ~8 i- P& @% g U' }$ [7 K

5 Z( r: b' K+ F   6 Z* ~5 W- h7 H6 j1 q7 c

% a" {: Z; I; F. {* h

0 k+ `3 s6 \ x6 S0 N: [ 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 ' _0 z! p4 j1 ^: Z; b2 h9 I4 q

3 F1 H; Z7 {+ z3 M T& b6 e

- p7 o: T. N% O2 ~ Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 3 v- E; J/ f+ W4 g5 ]7 k. M

' H+ R0 M/ N4 G( H% k: d

r# g p) _2 S; {: I% @% }' i( E9 m* A 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 $ \0 ]) L# Z7 I. s8 _* ~

7 x. n: x% t2 ]. q* N

# P0 u9 d8 H& p% O 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 4 H2 I' D' j2 f) k+ G9 X6 K' W

" c$ V$ I8 U( Y9 h, b$ y# B( E4 N6 {' s

3 Z" T4 D5 X$ \4 Z+ E vshapes= 8 T `: A' |- z1 E' Q

- c3 K ?# ^0 `$ A# L. y# n3 ^# H

# U2 w' N5 k# ~ p- z   , R3 N5 T, U4 C

8 m; ~: b* N2 w

9 H A; d+ J9 ^ 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ( ?% y+ s3 \6 A7 `6 q

9 M# q0 Y* Q- N: g

( m8 Y% w: Y3 w vshapes= ! M! s _; J$ N& e6 l

! j! ?# d, [9 b" d' e: Z/ a

- P: d- M$ R- ~1 n/ d   9 Q& {- H4 N: G* h2 ] U

' r% I) _# p- M4 ~' h* B! k5 ~

5 R, ]/ |6 |; e4 A( X lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 % N6 F2 t- |- L2 O3 _

: a3 X2 y) J5 ?0 m# ~8 y* t5 ^5 G

' a5 O- V, j; P( Q8 { vshapes= 8 f2 I4 ^0 \% L" k

$ }! V6 i8 `7 Y( E% W: ?3 M

( R2 R. X& u) {6 m! ^- v1 d 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 ' l+ W0 t# a: t! T/ A3 O1 T

# u- s/ @; y' ~, ~7 _+ n8 q# L$ I

' X$ g; w) }7 _" q% U" d6 S: y& y: v H) s vshapes= % T+ s* t e* c! o( d0 a

) Q& Z+ }1 C8 m. t" v# Z8 O% q2 r

4 ^& @' Q7 s+ |2 |   ; u) ^; u8 h1 U% F3 I2 ?" O/ L, }+ V

, y' ~% e) [5 q/ v' v& U4 k: f

! r& a+ A- n" g8 S& ?; E' ^ 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 1 e8 a$ j8 }6 I# ? {7 @- L& w* Y4 ^

& | H% C7 j8 k# n1 _9 P

. ?9 b6 b& b# g' ?( U4 Z LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 2 t# H$ e; |2 O: f S& r

/ S* l) M2 F8 C7 [+ C" x7 e- u

1 X; g( ]/ J- w3 q- P* R 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 7 ], n( B1 E9 m* r

$ [# o5 k5 u; ?, G% N m1 C

9 q1 c$ W# W* \; v 源的luasocket代码可以参考学习下 & s1 o% P6 X+ c/ D) R

1 C8 i9 p4 J4 i8 @) K+ ~

6 S; ^2 j9 ]0 ^& d- s https://github.com/lunarmodules/luasocket 7 B& D$ Z1 l' {4 i, L" O

' J4 E+ @9 t( [6 Y- r3 |

$ Q! k& l( A7 S( M https://github.com/fengye/luasocket - ]" f) |! D Y9 l+ l% c

6 W' l2 y S+ @$ h8 V( r" s

2 T/ M6 ^+ ~1 O O6 b   * g. z1 a- \: K+ K' Z2 {

1 z+ V) [- E5 o, F) o& R5 O& y& L9 n

. q2 V' N" V/ J0 \ l2 ~" D vshapes= 8 }# Y- S, h7 l3 O

# H2 r4 R+ |3 S. ^/ L; k$ D* s

- R6 I/ B0 d7 ^4 X   ) D5 W H" ^5 d

1 ~) K3 A4 F, Z' @7 ~

7 w& x. g# K% ]8 f1 k2 b   ; T) h/ X. Y. X1 v/ ]/ p

9 f: X5 c2 f. d& [6 e3 R$ l

* d1 Y; k' j) o ]/ n& B# o! ~ 总结 8 V% `' n/ b/ g% Z

( W( z! n% S; y1 i

9 q* Z9 G' t1 z! a* A 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 ; m# Z* F( u: G1 H$ C( J

) A2 C1 G! _, s

t3 w2 |3 f0 J0 z 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 * W5 M2 |9 A4 K8 z, C6 W

' Z3 E& t4 u$ L8 A6 d1 d

; l5 B, a# _6 U6 ` 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 , w. z' W5 n3 g8 O

* l3 D+ y1 L4 S& }( h7 G& V

/ x) X4 [7 Z9 @7 r; q# S 结束 & b* ]; L6 W2 Q. V& s$ D

V8 g0 |, _) E/ y

- Y3 j/ y+ Z5 V  【推荐阅读】 6 d: h+ L* a2 _7 h* d. F

! E! ]8 r7 H: M% ^ I; t, _! @$ L: ~5 v

1 r. f- I& a! ~! v 对吃鸡APP的分析 , f% V7 e& m# l$ y( A

8 Z5 i4 s4 L+ R3 G

6 P$ j) T1 R7 @' D7 C0 p& I+ A 你需要了解的APP安全 " ^( l. E. v& G8 H. }5 D

0 T W, F0 v ?' K6 N% D

1 n1 k0 A4 x% M0 g0 ~! U6 U& b 你需要了解的APP安全 ) U$ j6 ~- l) {- s" v6 C

* t9 n: l3 y* _ ?. i5 c6 H/ B

1 S- q U; ]# y* ~   - Q4 o! k$ L2 b9 x" ]

回复

使用道具 举报

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

本版积分规则

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