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

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

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

. J) x1 _: X( H* O4 p 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 + K! `: O/ b `+ }9 q: F

/ k/ _& Y" ^+ V% Y# v2 X

4 n- b7 D; U) J# m! G& C3 U: t vshapes= 8 R, q0 l3 @) Y

, Y7 Y5 c8 |# s- y' b$ w& z n

0 m, p- O& r, z   2 K5 M$ z% ] F% R0 ]: n

3 A2 e/ Q2 d" ?% T' |+ C% s

. x3 s/ _$ ]! b% H/ f 下面就以开发者角度进行解析下这个APP的功能的实现原理。 8 N0 V% Z1 l$ A( A. ~

0 a: m9 g2 T5 L8 f$ p

% {7 l9 h' P# v- J4 G* V8 s/ `2 S   3 O. x- d# F1 [( e7 o

6 w t+ k2 P" z3 u/ E8 {5 R6 s) f

" e1 H9 k' F5 v, S4 l" X4 J 基础信息 0 y l7 H: { J; M7 p

; ]9 w$ H9 }- k W7 c4 }! `' b

" L. |) \8 L6 J7 }) n G2 { 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ) A( p- e+ g( T; J; l

* u4 ?; o7 D. M r$ R

2 X; {4 r! D& O) n8 M) p! P" A vshapes= 0 Y) w8 M- V1 m' ]

' N9 y8 B! K6 s

( q; q8 _0 L! N& `   ' [0 C. h2 i, c X8 j1 W

}0 Y' a6 _2 X/ x2 Z

- @6 _% U8 L5 a% i, ^ 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ' O2 y' n& {5 i) N9 _- J

$ _# z; Y$ u& m9 C- ?$ R6 Z, r$ F

# u" I9 X8 F1 w8 e: F vshapes= 8 }: v! J4 q# ?* ^

; g) c+ U+ s0 V& W" i

; {. g$ m* ~: Q9 X! l8 @5 v7 H   + M8 v+ l( |, P' i. I* p

# h8 g- V0 b4 ?

% Z% d. F0 @* U$ T5 k& c8 R 通过jadx工具查看,该APP的Java层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 1 [! n V: k8 R7 }

: _7 E; {. n. v$ C2 C p

; y1 P1 C: g+ m! ^7 ]( [7 w vshapes= 1 e6 }" ?8 \& m: Z: j

# \% V2 k, U1 M' q1 ?

" z' ?6 }1 v2 a+ s. K   - ]. B, t) _& G3 J$ T' |6 J h

7 j% A# _. q/ R% T2 A8 C

, v8 y; n# d7 J 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1个EditText和3个Button控件组成的,也就是下面的截图信息。 . s* O' \+ r5 e7 v$ q

% @) l( b0 J% j8 d0 @2 l

) o# y: J% K; v# K vshapes= - b6 \& A; N V+ q( U9 C$ S

0 I% J- g2 r1 g: x. ~; {

2 x- }3 \: m# W4 Z% E0 s, M- @   G" @# p2 ]) e1 ?

3 R( T6 K- b% ^% h {

7 S, ^8 a: x0 c; u L+ x 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 . ^% ?8 C0 A8 M- }

3 g! U! x' a, ^. W: \( S! p

6 l" U6 f2 A% V vshapes= " z+ L8 C9 y( h- T1 ]! R: ?3 {

# M7 B2 n- ~1 E% w

& J' P. E7 @& H# R- a( h, ?1 Z# T   ! w! N& P: Y2 U* U

. M; O1 P; @( n7 z' j! ~

; u S/ p2 w! d/ M8 I8 A& a3 e   & B7 b; Z' _ v/ @( s* D

1 E& L+ ~& d g/ q1 f( K% t

% z6 I% ^3 }! v# y7 o 签名信息 ! s- ?: w5 D6 h9 y2 j; V

# K: {* [& B5 s4 L& \8 }8 c7 U

% c6 F! z% K3 ~) k$ ?! ?$ ` 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名。 . n# {( w" B- j7 p7 F

/ Y5 M: S- [( @! Y; W) j3 @7 D- l( E! V

) T+ E6 Y" p* H 目前APP中大部分都是通过V1和V2签名相结合的。并且这个在签名过程中要保证按照V1到V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 0 D' ~. _% N S

+ X7 z+ P3 j* [- o

9 ~ N( P' u R# G 在android的app开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 3 ]# F6 I2 u P4 A

! k d( v& y8 G* [3 Z

/ m U7 n# w. P. o vshapes= 7 P3 }6 I5 n# `4 E

5 z% Y* D! R: m% e4 R$ v2 `! I

6 W$ l% k0 [3 Y( z   9 K" U6 \' ~; _+ p0 d7 E& @) M. B

# u; ^( @: [# a3 |7 |

) \: Q' s- S$ d/ A, V/ F: h v j android签名的数字证书的一般都是采用 X.509的国际标准。 8 U& w7 u U8 _9 {

& p# Q4 y' H( T% z' L9 m1 Q8 s7 z( q

# {1 Y/ `+ ], S 因X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 8 }- ]3 s+ ?3 K, ^ \: z

N1 z. J6 ^! y2 d" B+ ?9 M, `

+ y- _8 j1 }: r+ m6 j 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 / }# X g/ `& D! z

6 D6 }6 G- E8 c* G

0 s6 g- l0 E/ M8 e. `4 ` vshapes= ! B! `! Y1 p+ I/ \/ q* ^! H

/ Z6 B9 i* f( X: S+ a4 ^& [$ T3 c

, h7 @- z X8 a: F0 f* W; m   & B2 T4 X, a, Z* O2 j; J* v

8 s `- S/ b$ C% j7 I

0 ?, e3 v% Z' I4 s4 l/ c+ R9 C 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 , ~8 G' ]# ^1 e( t K' V

8 @6 R' H: O5 [- \ J7 K

5 s) F* q6 f \6 b5 D) u vshapes= 9 I+ b+ `8 o" V% s2 M3 _

* {) [9 y l5 J6 \' U

- C6 q7 h! l- I3 a0 V 、 4 h8 N4 M0 t& f

1 U! ?+ }7 J. S6 t7 `" B$ v3 Z4 i

8 S# i4 q2 M/ W. ]3 Y   ! E% R' e. e2 ^+ G2 S5 e y

) K9 B- s3 v6 q7 g+ L

2 V/ U7 E) E6 l$ _ 权限信息 / V1 n7 H9 T) [* M+ T3 K

! b% ~3 H% o, w6 O9 k6 d

3 B9 V4 t, q9 Q 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 6 t3 J3 d, E8 W

, _5 G5 @0 W: ]+ f& B

; B! _$ h# F8 m! t* Z. | android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 : n, Z' u _1 i+ Q

; e6 h i5 k R7 L1 L6 t

% o5 n$ o4 p: S2 J vshapes= ' _; k3 E/ h- o0 U$ F

; G9 h* w2 P3 W/ n, `1 p

$ n. H( _( d6 c6 S- F: r: U5 G   " A' a3 h( U' h: H

# f" V+ d5 }7 G1 ^8 `

- h! F4 D; ?5 T7 ^0 U 下面对这个APP的所有权限进行详解下: . ]) \ Z4 {( C5 U% T' L1 J- h

+ X0 p; Y7 t; U- Y8 n9 n

( p$ a- x+ d& B$ I android.permission.INTERNET :访问网络连接可能产生GPRS流量 1 i; |7 v g: Y

9 w7 O9 x, V( ]

f/ z; h7 c1 Q1 s6 _8 m% e android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ) x0 ~: y) ~5 Q( d$ Z6 m6 G+ J

: J, N4 A. ?% w r2 d+ M% e

5 T; o, J. r; ~' |7 v% a android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 8 o4 h- w w8 F. b6 d: J

' U- j7 [) _; ^% ~& Q' P, p

: H7 X1 g7 F. W6 x8 _ android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 / X/ H% H5 s- P4 ~- |

) b% t; d* I$ V8 D* B

0 ?1 w5 e& Y/ } V9 W0 f' Q( ?5 } android.permission.WRITE_SMS:允许应用程序写短信内容 + j& u9 P! _2 B: e1 R6 X3 `7 |

3 T! Z2 D& N* M/ P+ @

. ?8 M, e3 I& H+ w) h android.permission.READ_SMS:允许应用程序读取短信内容 9 _ n8 D/ \! Y2 \# E1 a

' ~8 N2 w( s2 c) ], \

+ @: j: k0 C& s; C4 a' Q" T android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 0 @( G% m& U1 A _

: `' r7 g2 @7 G/ Z! [

+ s! E& \ M* r( W; Z android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 , D7 b" u8 d- F' {, @

7 F( i- r# \7 b( c9 `1 ^0 X9 z

" A9 l. ?" J2 |# @+ o: @4 F android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 " C: J) `; G( n4 B: c

: i( z& h$ e7 ?( @9 z, |# V

1 {8 n" N3 ?; p android.permission.VIBRATE:允许振动 ; F, b7 z' @% E: V" g, _$ w

& Q% L1 }' V8 I) f

8 n& v+ s# b: o `- b' G7 S% E# { android.permission.READ_LOGS:允许程序读取系统底层日志 ( S2 H2 }# G: z( t1 X/ o3 W# y0 L

8 Q# Q: Z2 D+ t5 ~. {0 N& g

' a; o$ {. A' }: p! D( P, r$ \ android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  & ?# G2 Z, t6 g! f* v

: p/ S& w* V% F) Z

. Y4 Z% n7 N: ^. s6 [" P$ i   + {! t8 ~* t5 e4 s* v$ H

# M5 E3 c" }% n3 W- h+ W; E6 A

% w- D, C- N5 k* E* u- ~9 Z 功能信息 & T& a+ j5 i9 Y6 E" _6 d

- b2 T! ?3 p' M' X

6 c$ O3 f4 O; s; p( Z5 E   7 r& k0 m0 u6 o# e" w# B

3 T# e& D* \4 a. d

( o2 {( F$ z$ F ? 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 , A/ Q' x& v* l% t* h

+ g' K& `6 z2 c$ Z" B

& j* Q( [0 E/ B: W! z6 U Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 " w' T$ x) Y4 I& \( A; F7 B; [- r

) p* Q" e0 q% {7 P+ }: M

7 _8 N' p( h9 _6 T5 y7 G 1、需要用JNI为Lua的C库进行封装,这样才可能在Java中使用。 L- {: S! k# {1 C' F) n, c

$ ?' W7 R! N) a

0 P& k, @2 \7 f3 f4 F: ? 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 - O( T3 | Y" w9 \0 F

5 i( S; c$ j/ _7 T( g

1 Z; n, o) B5 ]; w2 y; u vshapes= 6 X; I9 W) z8 i: z1 U

- V# q! ]2 T% S+ o$ {/ f, q# k! ]

/ D2 F1 |0 D$ ? n: T3 e0 T   1 e5 i& l& f( h) E' `

/ g0 h9 o: e" `0 [& \$ u8 Q; A

, x& Q7 b2 S d& E 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ( ]- F* |; e Y! Y3 ^8 s

+ X9 |' N; O" ~/ a# K1 C

! A6 |5 t! W+ H$ g vshapes= / I( w3 r1 G+ A5 ~

& x F; q* f- C9 G

) H9 I5 O p- w+ A( i7 W   ( U% i' e- L- p6 a$ }

8 @* a% t$ m6 x6 Q& Z$ S4 }" T$ Q

9 m/ V! K6 [5 S! K( R+ F. X' j 在lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP。其实破解这个验证很简单,直接将文件的禁入信息清空即可。 - r) \' F* n7 y8 k7 Z: S

' \& @7 p3 H: t: ]' F. R: c5 `

8 A' J5 I% b- A% d% V8 W1 c6 N vshapes= ' _ f) Y$ G5 N( T3 E! R" B6 [4 S

% W8 L6 U) t+ p" E W3 C

7 r* U' e* B! T# P T 下图的这几个so是网络上lua和socket通用的so文件,并没有什么可研究价值。 0 e7 a% m7 R# q. W8 E% q

5 F0 ]) T, c, |; I6 A) \

( b* z9 l; U2 l( D' ~( d vshapes= , ^" }6 ~% O) c8 z _; d! W

8 E0 b1 D, g! h& J" x& F8 g

( {! H8 z; g: e2 y. h; b5 Y+ o   ! `" p, G! R9 H$ v& b4 {$ d& x; G

: L0 U$ I# B" ]3 H: p

& T1 N1 A* m% A0 h1 }' Z 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 9 V/ u% ?0 Z9 Q" e# p$ Q

# a5 D% o) N1 F( E" A6 l

0 U) z/ m6 p8 ?' d" F" ^! i c3 D1 G LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。 " y& H9 _. N# D) f1 F; h

) F/ y7 p, n; t; x9 P, S5 N. G

6 a h1 C! J2 R; n8 w* t6 t) C 这个luasocke一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 & u$ q3 c- [9 F4 s, U

5 }) _7 q0 v& g- t

+ \; o: l' \# i, }4 F) ^. b n1 f3 v 开源的luasocket代码可以参考学习下 n$ ]9 D, }! T

: l }- n7 _6 _

" U1 F! V) b7 Y+ \% |& {; z4 E$ w https://github.com/lunarmodules/luasocket 2 _& Y [6 o& Z" L& I: z

& T: g8 z0 `! d* }4 H7 m/ B1 c# M

6 V4 Z: @& T; ]( @4 a3 p9 t https://github.com/fengye/luasocket : C) @9 \& j( Y2 Y! z9 e

, m3 _( L3 L1 X8 \+ j

6 d% g! S% r4 I0 \- b( O   & d* }, Q' K6 k! C5 u. l0 }

- ~% F% Q U) x! x+ m4 s9 e, G7 H

* t: s5 c$ Z" L1 ]) ]' R5 |5 G6 y vshapes= 3 E0 L; `/ i& |' ]

: v: l- [/ m: W) x( t

h% i7 H4 E( C; a3 _3 D1 d# s   $ p: W2 O( X6 n2 G% s8 r

' E( o" ]" ]& x/ z

' q) w: x# ]# Y$ g7 n   . g: D; {: l6 j! |5 h/ p

* a: v5 o6 h/ v9 z1 `" n

L7 H/ m( W5 j" |9 n1 {* Q 总结 , P- ?8 L; Q" H- x

; A, A! b0 T! m1 y+ ?# T7 \4 E7 u/ {

8 {& K- i r# { 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadx、charles、ida、uiautomatorviewer)工具就可以将功能全部分析清楚。 y( {' e9 n8 x3 p+ Y8 C

5 L$ i2 T/ f; G& x5 z! \

5 l% P1 b6 Y6 B3 C1 l 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 - I+ C5 v+ L* U! w! B; S

5 @! I f. S& e: i6 s1 p

% [. J1 H9 q, f! b 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 . [+ v5 r! j4 V ~) y" `" e

2 O; R* K& u. |! A! C4 M

3 p' F! D6 |' B5 W4 F T2 h" f 结束 2 H( i* x8 l' M! C8 c6 _1 Y1 l0 ]+ a

; {3 O0 J! `" I, M& h

$ Q+ b5 G5 P9 l8 K  【推荐阅读】 , N7 ^$ \) S5 W3 R- [6 O$ v1 D

6 ?" e" T/ V& j

; D* S: z/ V7 |( a 对吃鸡APP的分析 $ k( b7 W) X# g- x

d0 w, w8 ^) Q' g

/ V# i. C* D0 X 你需要了解的APP安全 : q s1 c! g' B4 u1 n3 l

+ s2 m/ d: o6 e" r

# s2 o9 p5 W7 g# [( ~3 Q' \ 你需要了解的APP安全 & E8 j- K! O9 A1 l; \8 U

9 t- y# l( n6 ~' p9 D

# q& r+ f, @. k9 G% o8 d# x   ! `9 q' R! f1 f* p. S. ]* g

回复

使用道具 举报

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

本版积分规则

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