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

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

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

; T; B( O6 L4 t$ ` s 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 o" I! c& w% U2 [. G3 x2 ^

+ ?5 S) e& [' v4 B, q" j

9 h, n* p$ i6 y2 u. V o vshapes= + V) r& t: @- B! O+ ?

2 w9 r$ G' C0 W8 W

: v! s* N" R. G. n2 c   . F0 Q) c. m) A, E0 @- a5 H

/ V4 F0 r2 s0 p* B ]" M* `+ t

: i- j! Y& ], ]9 @8 O: a7 o7 k. ]- Q 下面就以开发者角度进行解析下这个APP的功能的实现原理。 3 Y" l+ y! [4 b8 G$ x, H

5 R& S4 h1 c, k0 `' N* f7 |& u1 s

* V6 c9 T$ c6 b) u# r   4 L! j" i, F3 V& M5 w4 R: V

9 D' U6 w6 o; ?. _$ {# W9 h: T& h

; k$ }) J$ C: c" {4 g( m 基础信息 . B4 b$ l7 a" R- h9 |$ b

3 R; e7 g( O5 a* Z

& P) X# F9 C0 F8 g5 e9 X 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 # {8 O5 u# J! w s+ C3 T4 p

! I3 E; u- X v4 k+ E& d

9 a, D4 f2 y2 q/ p# D0 H6 E3 Q4 d( Q vshapes= a' {" C4 n5 z. `$ [# |9 Z

1 S' Y, H& O& B' \2 [% n( `

# y4 \' ^, w" B7 d   6 w+ J/ I. }# n# Y( O( a

4 _( S& y$ ~) r% e

' Q! o+ H0 ] Q" ?. U Z6 [ 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 4 R( c1 o% Y3 ^9 r* ]) h6 [, y

! m) _0 |0 a& j* G3 M

' k& C: Q! t0 G7 `7 i2 J vshapes= 1 C$ g1 R, k1 \( L/ r* @' \1 Z; L

5 c7 J( _, c5 ^8 \6 d$ ]) @+ |* c, C

' a9 U( l8 M0 @4 ~" E% r Z   2 }+ s) e: E- T1 U! Y' ^

2 l2 o3 N% j. F+ o" q: A n3 r

; }$ d e( K) f* W) s9 [6 U& z 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 # r% h9 n3 b1 _. n; {5 X

4 q- q r3 H2 c7 I8 U; ^% l+ ^

q" Z1 T. k }' q; H. h: U4 m5 L vshapes= 9 C% `0 s/ E$ _ c! y9 [3 Z" W

% u( }6 k# A+ @% a1 x

+ d) g2 U1 ?$ T# e' m l# Q: h& R   $ z5 _4 L0 n4 ~( ^ d$ g

2 A8 ]( U' V, }. P

0 L9 z9 ~5 m1 ^8 l: d+ S7 d 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 4 f8 |4 b4 g: Q( N% }: J

+ ?9 Y. o) `3 O- y# f2 e" W

9 S/ D3 m" _4 \% s vshapes= 1 u% K$ y# y0 e; ^' ~

9 I* |9 G* a; F8 c

, w6 n- b1 c, t1 C7 l   : h) H& I4 ]5 L% C

/ Z' X) ~ z& j+ U: Z/ e+ o

% ?' R/ `) Q. _$ p+ _ 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ; y* F, j% K( E- f

# P8 E. x0 y' I$ w7 [! _

8 j' x( ~7 t; Z vshapes= 4 {$ M* K0 o; C. i# J( z( h

2 u& H4 |5 O+ B

( m- W4 ?: ~) q6 ?: `   , p- }. Q& b+ P* v9 Z

- U7 O+ H! [: J8 b, _+ f/ F4 @ B

+ `" B7 j g7 F3 q# y3 r   1 i; X1 ?4 Z @! v% V

: e0 A4 N9 A& M/ `" _0 J2 Z

0 ]( V$ U* A7 l/ x# l# w 签名信息 ; [8 \: `% q- ]# }" k

+ q- ^% a6 ^8 Z5 C

z6 S; Z( O7 N' m 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 7 e& m8 l0 n9 ~8 O P! ~- r. Q

+ Y1 P8 b4 m+ O/ {

6 A4 m+ [/ c& }9 n 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 7 p3 Z/ _ g$ J2 H! `

, H, ^% a1 L( I$ N

' ~. Q5 o. S) m' g3 t androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 1 G1 A: ^3 q2 a

9 `+ l) C M; A! q) I Q

, N" y! E' W/ X1 G' W vshapes= ! [0 v" p6 K# }

1 M$ I a( e5 D. t0 L I

* R+ @' P$ L$ D5 K1 p( [3 @7 g   - G! ~& _6 l6 g+ o( u' k. X

. h+ |- o1 }, g

; d# z8 a( b- B, A& v android签名的数字证书的一般都是采用 X.509的国际标准。 % _* J5 t) W7 V0 W+ m

" W. X) z3 A! @' B8 D* V& ~$ h0 V

8 _+ t; j. o; K; R5 e6 g9 U8 s X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 0 y/ i7 s8 f0 n. j; ~# x0 J

- ~6 i, T# S/ v8 R1 ?$ ?6 T4 r

2 p: m0 H/ f9 @$ M% E 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 ) p& q% X' [1 z- l

7 @- i3 H- U) f% x

1 t% M* g' h/ M& H& D3 ^% N3 { vshapes= ! Y$ o$ e, j7 C8 M

7 C/ o1 T; e% S0 X4 f) l5 @6 x

8 o; G5 s4 o7 f; F/ e2 x6 e- L2 i   / E1 l0 m# n5 l* j& |

- H6 h/ d* b, ~# c0 p; }% Q

7 `% }+ h$ m3 v4 K6 \0 U( g. g 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ; ^: o4 L/ e% Y/ h

& `5 L* \3 c& V

9 a7 `" R' J+ S& |' } vshapes= 6 P( r0 D7 f# r1 ^4 v( i/ \( g6 V5 r

! P i* |) h! r- y# W; t

3 D8 D: ?4 c# `2 c, g0 e3 [ - ^9 Z1 d9 s2 A) ?3 y

}4 r, u7 ~/ |# v

1 i3 v% t' ]' v" Q$ ~ X8 y   0 Y# D; \: g' r* q+ b

4 T* a7 ~) J2 z' D+ K! Q5 e' m" C

( c- {& j) D1 b {5 v( s; Z9 z6 i6 X( e 权限信息 / h$ Q" y# R; Z: g' S- [; e; s9 b

# D1 U6 z& W" P

# o' C# H H4 y9 q$ g8 \8 B 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) : d5 Z, c% i9 R! t

4 }" q; ?/ z4 Q% A6 a

: X* {! V3 i9 A9 }# A android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ; ~- n! }0 s. ]! z& S& T, L5 m

5 {4 h3 L* Y$ Q* K* v

$ p/ H% {: X0 k- @+ ] vshapes= 5 r8 B9 ]# V7 Q% h$ ^

* C) ?6 W% s. M( _: R7 w4 p0 u

% L: G1 y' R! c# z! u7 w5 G   2 i( H" _: a$ s9 E% }

( h1 M0 P2 D" \; W1 t. q

* @, [+ [$ @$ c5 G6 i8 q 下面对这个APP的所有权限进行详解下: 4 }' s/ D5 Z1 R. B9 |

0 J# R: H C7 l j+ b# i

t3 M5 Z2 S" ]5 U6 i2 q; E/ _ android.permission.INTERNET :访问网络连接可能产生GPRS流量 , S7 h! Q8 ]/ z% v* i( e

5 [7 ^1 S' I9 Z

0 U& K( l' Q6 ?* e& X9 ~, p0 B android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 3 x8 g5 O, d9 O0 M

% i6 `; ^9 j/ [( m7 S, i4 u

( P2 f5 o2 d3 L5 [4 x android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ! Q' g; O7 |& B, e3 h6 a

; v3 A4 E9 ?6 t2 P# R# B' k: u

' f' T# \1 v0 Q) C" M android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ( q9 F `$ {+ N+ D* M- V( w

- n5 V! j* d. h8 E5 w5 V( K

" i5 X1 G+ l4 ^! u6 O5 G% r android.permission.WRITE_SMS:允许应用程序写短信内容 : i* O2 \# @; B6 _

8 X0 Y6 y; c1 A9 J- w/ H n

$ D7 v( h* a( I ^ android.permission.READ_SMS:允许应用程序读取短信内容 ' d8 F& h( _; ~* Y9 q! K

+ j+ B3 [8 g/ S0 Y, |' w

) Z2 J, q( V$ V9 r0 j- R android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 % y: r$ r# [( `8 j5 S1 n; s9 C

; L' d2 b O& ^" r

, ~1 S! y% \* D9 Y- | C$ X android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 8 K [* q( @( F+ p

& o; f0 [9 X1 {- K0 f

+ E* ]' ]& z* E; k android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 $ x0 |' b# D; U6 e/ I& G7 k& \

v: p8 q5 C, Y& P3 I8 @

% f. B$ j2 c. s1 l4 n5 E android.permission.VIBRATE:允许振动 7 P! H( D$ _5 Q4 T$ @1 ]1 c% H" |" v

, {: x1 t" Q+ b/ z6 h" U0 N

7 [! n2 f! _; O5 h; K5 U6 w android.permission.READ_LOGS:允许程序读取系统底层日志 " @( ~3 D' z& w9 D- t- B' ` Q

# v( Z7 P. l c0 h

; V4 m" M. p* k1 m: k. I( E3 `$ r android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  % h( S4 I) h j( w

- e/ _6 ^5 s0 j2 l) O

2 H6 x) W2 ~. k' \) j2 Y3 _5 H3 z   2 [( {+ h) C9 e+ f

; W1 C Q6 o" n0 _

: N* t! N+ g5 a, _% O4 O7 ] 功能信息 9 X2 O ]* I6 i1 B0 q# L# `

+ e- n9 i i/ k9 A( x

8 g' K: b! u$ D! t5 ?- x ]   - u+ C1 I# K! F0 p

3 Q, O$ i: f$ \$ d& m$ t5 P

" K1 B8 p3 C4 r O$ H, Y2 I 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 . ^: J% K c0 D" H* w | e8 R

( e6 M6 V7 W S4 |# B9 |

# M3 z; D4 F! x# M# ~6 q1 d5 { Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ! z# M4 j5 \& U* z

! b6 B+ S0 T5 c+ K& m1 ]6 A

0 A1 X7 P) J6 c7 T5 D! g6 N0 [. C 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 . e/ `) F0 D$ t" M

+ {0 M8 i/ u/ i8 p* T; s& Z7 _- T

' h! a( ^" v( W% i* G- h 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 8 e3 U, n) L* P1 L s: F

& D. @# O# M3 o M; z+ k( W+ ]

1 S4 g) q. P+ t4 L vshapes= 4 ~8 G7 s! Y/ y2 s8 n3 f! ?5 o0 r

; |& v! Y7 X4 X$ M

% G V( A+ s u$ j   1 ]: \$ }5 U, r& d/ \

8 l1 W/ O6 B2 F' l) w2 C

7 N6 W: `% K* X4 p. k0 z( J 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 / B& f7 N) P O

) s0 l$ Q% v+ U$ m# ]

) p; o' b7 I9 T! U7 l; p/ C/ h vshapes= : m$ y0 y' j% I3 s6 v

, P2 [! B8 o7 o) B3 g5 B; P0 v2 V0 j

. Q% I2 z/ d7 F0 F   " k$ ?- H8 V% V2 h* x' M

- B4 D* M% y! o* P

+ \9 L0 K5 m0 @ lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 + \, n4 n$ l; Z" l {8 a' i2 s3 [9 ^

$ V& F$ d2 S3 {% a0 i

& E0 i E0 w' ] vshapes= # d) [: d" \" S9 F2 M: q. D

, k: ?& x2 Y0 T

; C+ P1 d0 [$ G3 O8 Z 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 0 N6 Q9 y9 {0 {* d

+ l1 N3 M* }( a# Z& D: R

5 T' b/ e- T% L# O vshapes= 8 Y; S+ v ]+ G' a( G

$ h7 H( }3 b M8 Q5 x- ^' n* V2 B

+ s. U. |/ Q1 y+ t3 t   ! o7 a/ j7 ]& s+ n- {/ o

# K' `+ T0 A) S+ V+ \% W* r

$ Z2 c @7 ~, E# f- f& C' y: _ 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ' \; N/ Y ^9 Y' W

6 m/ n5 P1 l3 z# w& o

; W& E7 [- y4 ^" P& M LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 ' P: I: n- y# u

, i1 W( @4 U# [

/ `# ^/ d: F, `* o1 T! Z 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 o6 o0 F9 W' r8 T$ k4 z

( m, k( F6 Z/ V6 C% ?

) |0 H! f- f+ }$ E 源的luasocket代码可以参考学习下 5 h- L0 y- \5 k& ?2 e

% c6 U6 E( A' m

! G6 Q9 o% b9 H2 n8 V! D0 d7 i https://github.com/lunarmodules/luasocket 6 w8 e2 c }# S# q

! W# t9 {5 @5 H- D: {0 b( d

$ m0 ]3 Y( J& v8 }$ [ |/ L https://github.com/fengye/luasocket 6 ^5 ?8 m/ O% h1 V/ [9 w

1 V. O& [4 ?6 } w

/ N. X( U/ e p( B# D. O   7 z0 Y- ?- M% `) ?3 s* [# _7 n

3 L$ Q E0 ~' K Q* j5 y4 q

+ l- E6 f$ s5 q* Y5 j! y. O vshapes= % x& r1 u- W, r5 ]6 s8 _

9 t3 j: T; C3 f; N% [- [: K; x

) c$ I7 |: x1 W2 i% ^% R   6 P9 z! H5 d( d# `1 l! y! f

) n* G" {! ]# w, W" \

- J/ f# R8 I. R/ q# @   7 J& I3 b8 D, g( Y) u/ e

9 O2 Z) l2 a) k6 l4 d0 q; q

% ^5 A m+ T1 f 总结 + Q- C5 H1 M$ m# Y, D

* W7 \, [+ X r6 I% Z P4 [

1 s: I' Q2 [, Y2 V9 A4 g! E# g 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 $ z& X, H2 w: l* L/ \; Y6 v/ ^: L

- [& r3 \, t h# m/ \- n0 ~

. h& m8 H+ b9 N, q9 R 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 $ R6 E j$ B0 D+ S$ V8 T+ M

. r, H2 O9 e3 Y& ^7 f

6 r% T' o9 X, ]3 U1 W! f* N 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ! P1 `. u' m" }. u

2 @5 e( y6 F5 D9 i _

1 a8 z4 L1 k1 h+ [ 结束 # i+ y; V/ o, x% b! @( B$ x

9 O: l; o1 ?' m3 L8 v

* p# j8 R0 v0 A6 H ~% j5 U  【推荐阅读】 ( N0 r* p! F& f' o; _6 ?1 N

?! B: m4 Y' r" v

) }; v$ q, i+ f$ t1 R2 ?/ H* q; ^ 对吃鸡APP的分析 / n, U7 ~3 R# s$ {

$ [( f- q3 h8 a- g

; Z0 w- S# P8 o# N+ _7 v 你需要了解的APP安全 # [- i0 f$ ~( l. E2 H/ @

6 u) z: j6 A& d) h

* {* G& a- i' e) E" M$ e( M- r 你需要了解的APP安全 0 l- ?: P" N0 k2 b* ]

0 C0 a% n+ s- | k& p* H1 g$ W

}0 b: H$ u4 s/ z   6 B5 S5 R9 T7 C) y

回复

使用道具 举报

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

本版积分规则

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