找回密码
 立即注册

QQ登录

只需一步,快速开始

欢迎中测联盟老会员回家,专门使用25年老域名强势回归
查看: 2977|回复: 0

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

[复制链接]
发表于 2022-7-8 21:25:07 | 显示全部楼层 |阅读模式

6 M8 ~( j7 b/ C 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 8 Q( U: l2 H4 l1 i( U& q

2 ` I+ @" Z8 R @# [4 Z U

' A. \9 k3 `( q+ i. T$ U5 ? vshapes= " O9 v$ X* g. Z, o# X, o

- q w2 X9 z J3 c% j

5 Y, U, Y6 |# [& R& M H   6 z( p. R9 e5 ^; d! }6 H

$ _$ m7 X5 j1 T& m* S

5 H! v* f/ a0 D0 I 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ' c9 Z4 f' D f3 x3 O

0 ?4 p7 B( r) T0 \5 }8 |0 E

+ m6 W' w# C! m+ D; o   7 v. |$ }, b& [1 R

+ _+ H2 l2 }) x- w+ t& T

) x2 [( J1 L5 h7 m 基础信息 $ b9 w5 w( D2 i4 n5 o3 h& f

6 _4 H0 c1 v* v; G

; V9 Y. n: X) T8 G9 [5 x 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 5 M& P7 f' i/ j: h- q

+ S1 O1 X6 H; g

v# V8 o( r; V vshapes= ( y$ f& \# K8 x! @: \& i% S+ |5 q

0 F, ] A' @" c, Z

% A2 j$ |+ j7 m5 D7 j! u   1 r" S1 \5 P6 p# P# G& k

& g7 L( \( v0 l' \5 y

% b" t3 D# L) D2 _) k 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 $ v* y5 W2 X% y3 @$ x+ C

3 x U: [! Z3 m9 |7 \$ `% X/ R

! N, q& u" a& p vshapes= 1 p9 r$ Q5 y& O2 {

& L1 S/ B1 p1 `1 x- F; H3 C/ P' l, X* G

6 ^& e4 G9 z( I% e* ^8 g   0 u4 Q* S- Z1 s! g f! j7 o* {

4 J% ^7 \- i7 r; Q5 J6 u' q" q2 N

9 Q; R' Z5 O* v4 A0 |) g1 x2 ? 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 . Q( j) F5 c: _4 F K

4 j) G) |8 v2 r6 `' f. |

3 d) A. z7 Y$ ]. d- v, n vshapes= + E6 \& \! e# B

0 W$ G% _6 k/ ]2 D) [$ q

2 u; U8 n# P; e# V/ W, f- \   ) Z1 Q, b, c: y7 |) K7 e. ]

3 W1 E" I6 T2 s

9 O, b4 a3 [6 I+ B/ e! n. M" d 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 O& C+ m& N5 J+ _* d) \: p& ?

+ C* @' {" A7 |/ P0 _4 S

% w/ }3 x- G8 s( B$ N H. ]% V vshapes= 8 y: F- I3 c }5 J7 P; q& V

0 c, C+ \* A2 h* z2 O- Z

, o- B; g6 b1 P0 } |   1 J* C+ P# u5 e0 N+ h

; O! @6 k( a5 F9 u4 `+ R6 m

: b7 C+ T; Q t7 t+ ~9 }+ H 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 / c- d, \ h7 c3 T

$ u8 z( N( H( p X

9 N4 {6 _1 L+ t# n/ k# w8 ] vshapes= 0 D1 j2 p* P; ]' |& O/ w( y* j9 B& c5 k

+ v y7 O* ?' ]4 H& b7 ~

, P+ {( ?+ y# u, U0 R   " i" h- d+ |8 O, U) z& ^$ I& N& U

9 |: Y2 X# T1 V6 U! k$ x3 c

. Z( e; M; d9 |% R   $ n! M# R+ _9 e3 l

: z) b1 _% M( d! j9 a# J

9 h" f. a4 e, H5 k: H2 |' Y! L) C( V 签名信息 + j% b2 ?% V! p( T* m6 g' j" Q5 `/ J

' ^+ q( z( e' r' V+ ]8 z1 y% X

. j+ q6 a9 V! o2 B4 F) g 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 0 @3 |: c3 w2 G

- o5 J7 J4 s% ~6 @# O' T2 z

u0 O! k0 V0 R5 r 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 & ?5 H+ t% @. }, T. T4 U: C& M" t

8 S9 F% p$ ~! R. V: D

) A! Q4 a$ Q' Z+ k1 c androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 : E8 k0 C" O8 j% `0 c ?3 B

0 H* m3 S3 ]/ w: s5 p

, Z X0 k e# Y vshapes= 4 Z3 N3 ^% s& \- f1 v- Z3 X' a7 E

8 i8 d& y! t: b# z9 P- j

. c) K$ S, b( g, ?# Y# P/ z$ o& n2 a   . X9 c F6 s; A( z6 Y

4 A: N4 B6 s6 z. L+ w

8 K! b4 e- S4 Q, f+ C android签名的数字证书的一般都是采用 X.509的国际标准。 : @7 e$ y% t: E5 [. c

/ P1 S: [7 t# B9 ~" R

1 w( n! U4 O" W. H9 Q& L X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ) V( V8 H- |0 a: `8 v# s

2 [8 x- H" O- Y- \! A* j

j# r- j: {* b; \7 U$ }: \ 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 9 q/ k+ J% Q! m2 U' X) `1 Y2 J

; O- Y/ R* @- A

1 c3 l; F4 ?+ k; F4 n+ S vshapes= 9 L) u6 ]: b* o+ T2 w2 d! z5 L* ^

`! V) T+ v8 ~6 O

, G/ Z1 M! V6 D$ \2 g* F, z' t& j   5 @4 [5 E. ?4 I5 T7 L

2 z E( {$ i5 w0 \; j1 ^5 }" t

0 _3 b1 w' n4 L5 r( Q' v# n2 r 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 1 A7 x W8 H! v( }

2 c6 A" s, ?% a* V! o

/ n ~' h9 d5 t5 O5 d vshapes= 1 J% y8 G) f. g

0 b8 f3 k9 e V% r4 B A; O# q

( W. I- ?! y: Y2 P' _ 3 H8 |2 k# X6 z

+ t. n7 M8 v3 g6 Z* S8 {: k

( v- w! n. [! c) W m# S   , ?; {1 b' ]& z- X; R

6 o8 |% X. [# m2 \- k8 z

4 ]" d6 ~3 D+ N. B1 T 权限信息 " E0 o: a V2 H9 o

, l! i; C7 y `* i

! U. G$ D& F( s) Y" ^% Z" g% Q 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 5 U: T7 L7 \9 Z' z. Y/ c* t

2 L! p6 u9 k. a2 {6 C" i3 ` l2 X9 @) r

* M0 L8 k' g$ q+ y: t1 P0 f8 _ android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 3 [5 a8 S7 {3 }( z8 l2 R2 F

) c& T* d$ q5 L: c0 A) l

$ D$ x4 ]8 n3 [1 t# C9 `. M' y/ S vshapes= : p' r) J5 p- R( F2 Z2 r+ ?5 M+ N

) B& G1 ?8 I$ s/ I4 y

: ^- S- c! K1 w$ C% l' z   5 l% t+ r9 H- g. u U, `

- B' Y- u4 |3 K5 a. }) D

+ m' {' q, ?6 c" Y 下面对这个APP的所有权限进行详解下: 4 t* u, c! e. g/ O

) T4 l6 o. h$ P3 H Y

/ }9 _/ u p! J+ T0 ?5 g) V android.permission.INTERNET :访问网络连接可能产生GPRS流量 7 a3 L7 P" ]* d' ^

) A& _1 y+ J* w

+ z1 j+ ~6 U9 {/ w android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 / Y7 N$ Z/ D0 V9 ?

( X: ~$ U3 ^& A1 Y9 I$ z- h

# V U2 C6 [% _; O4 [3 o* a android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 j* g8 D7 g, C t/ q

$ V% m/ L4 i G0 f' y

9 C. T7 ]. r& z android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 6 Y1 G% K0 Q$ [$ `( j7 R

]: I* `9 b5 w

6 H& N t+ H2 N6 a android.permission.WRITE_SMS:允许应用程序写短信内容 9 n D. Y9 r7 r% H) q& f+ c2 |

. T E5 Q5 O" P

6 w5 k. i9 A6 @. Y/ a android.permission.READ_SMS:允许应用程序读取短信内容 7 ]7 n- _5 d7 m: ]1 w

2 F ? w$ v1 m+ B; u

# P; D, A/ {% a2 @/ ?' e, e8 S; j android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 8 p7 y1 T5 C$ I

; _: a1 s0 g% C1 @, u

& S- I0 m. e; N& O2 ^2 m5 Q android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 5 k, p6 s* s1 ?" v3 _9 o/ b

1 Q* A( j* b$ _, H7 q+ s

7 j/ ^6 r J7 b- d* n; M( s android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 8 v$ c6 d, p0 L' Y, b& W: q

& i9 J) x; k. ~. m) D% f

9 ^8 P, h: O5 T7 O& ~ android.permission.VIBRATE:允许振动 ) i& o' C/ O) q) s% X% b# Q) B

: f$ C* t' u: l6 Q3 V

% u0 B# k' F" D+ s; a* f, F android.permission.READ_LOGS:允许程序读取系统底层日志 C0 U: } S: i5 X; I* J1 D

" [" S0 x0 F8 q, s- e

, P7 v* i( T2 q1 n: C android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  1 N6 Q2 k4 v! q8 q, D

* i" k+ K ?- {+ ~2 S: E6 o

7 X0 W1 H- Y/ Y; z2 I* o6 s/ o   7 s2 O, }2 q6 N& p$ A, \$ J

+ j& c+ T# c: a; F5 r4 ^2 n

+ w$ d- [2 T7 q o7 A5 V 功能信息 & ~! I: |6 f! p. Q) C9 L/ A

/ S. z! j( B/ m* Z+ C

1 Q7 l* H6 t& H+ ~   " y2 D3 A( k% \

3 A7 P% D# Z: J/ M6 a

; p9 t. p | N8 f0 v 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 ' _0 W: F. Y3 ]

7 J& B2 P2 B$ [. a' ]: U' l, |4 k

, {; k% c. P# K* B/ [. ^ Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 + \) T# b1 Z9 S K6 \

' b. [( C0 @: n

% U! `, x, D6 W- [; ? 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 4 W4 U+ `3 u# X9 ^7 D8 R7 D

+ Y# R1 e' S' \: i, i4 L! D# f8 v

* e- s2 o# Z5 w) D9 f1 v" X& F9 o 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 9 ^& C6 G( B/ C. y

; A3 ~2 d- R) p# x% _

& \* S6 t) ~2 ]" N) D, W0 _ vshapes= : h4 w# |. V! B( k6 ^

' V8 G+ D3 w$ G1 r6 `) b

" M- h9 r5 W' |6 t! M1 D* Z: X) G; k   3 @; v) n* t4 U* ^4 P$ Q7 m0 j

3 }2 s# Q6 Y2 V3 T1 H

t1 H3 z5 R3 M# k! l' {9 }! D 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 8 x. _3 E: C% F4 b8 e

, k6 M" Z. @8 ?; n

6 j, G8 F* o8 v+ D/ ^) k/ e vshapes= 9 `; r f* S7 x; T

8 R+ o+ i" `+ g* B5 K

3 J) J, J6 J; i   6 \- S4 r3 y* p1 |# o' v

# z2 ]5 I+ r- Y

8 y. U) p% O7 e+ o9 @% j lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 + ^7 E8 l, u" S: B1 d0 }( N

" H" I. ^4 T. u/ f; p9 H& ~3 Z

% n& A! s% f) | X& P5 t vshapes= : \2 e5 \6 V+ V! O) d

+ A1 K4 L, m5 s$ W

/ q8 X9 W8 u1 U& l1 ~8 Y 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 ; t: ?6 E! {5 G% Q& L3 e

1 P% A7 g3 W. f! b3 v

; N6 y! @3 t3 O1 j vshapes= * F' Q4 @' a- J3 b6 k7 G" C; T4 ]

+ c6 O& U! T8 e$ ~4 I

6 D8 t* G2 b% ?5 t5 C   4 v3 g+ w0 S- [- W# {2 S

/ k% [* b6 S8 Y8 }

4 e$ q8 Z3 b4 t! i e 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 $ e" u! B4 n' y2 f% b, P

x+ N2 x* a r9 L! d& B" m

- }1 N- O/ {0 R LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 $ S- b* l" S5 D* Q* J* \

* H; R. O; v. A0 B7 ?% I

2 W7 E- e2 K% _5 _- I% _8 D1 f 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 2 _( d4 d' T% d- q9 z2 J

2 A% g+ r1 T( H$ x# H- e

! u7 n4 @/ x% v! M 源的luasocket代码可以参考学习下 - [; Q# W1 o) V4 o, m' m

/ w( w# i$ ]5 C

" Q$ u% B0 U, N7 A3 `5 y" k# A9 G https://github.com/lunarmodules/luasocket ; j9 t$ [6 D+ C1 ?( m

$ G' x/ a1 f3 X: W+ a r$ Z% r

% S7 @" t: p, x; N, ]! n6 T+ X https://github.com/fengye/luasocket 2 w6 V: p; j8 Y5 Y7 K

" N; ]- b2 h5 U, @

9 H/ m& W6 d( q9 u& f, ^   * P ]' a$ P. B! y! {

0 t% @% M: y; q: m2 z+ i

" j2 j- j9 {* d, [, J vshapes= 0 b! p' _) c6 G8 e. {- ~6 d K/ i

' w" {# @( Y; v! L% g' K, z1 `

7 l5 c# \6 `! n* c j   0 L. q% _! |+ @; O% t

! P% P, T$ I2 m( W+ ?

* A9 E3 s. U& Z x1 z   + x0 n1 q, ]7 O+ o2 l

" _5 t( L: b5 `8 e

- x+ i0 g1 s$ V4 Q/ }% O 总结 0 A5 J5 B! n! d- q! F2 g

+ w) m" L: h# _( k1 ^; R

' d1 y' X8 d0 V3 ^, Z! C( N# V 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 ) I2 n2 z+ y; m8 X

+ z& G4 R. L& ~, q

/ l/ Y' ?$ f6 E6 f$ x* A 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 2 `+ q+ C8 a( G2 V. D/ g

8 U( ^! h' B9 g9 T% G$ S# N9 w

; C2 J9 j7 s9 w. Y 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 9 y0 l1 d% [% m4 F

4 Y* j- m8 e# x4 i; h' C+ `+ U. o% V7 E

/ v; i3 e3 n0 R/ B0 v' j 结束 5 \# I+ Z! t; O+ {/ v

/ y5 B4 p+ R. _" ` w3 q. x

0 G5 ~$ v- G0 { E8 g  【推荐阅读】 4 d# g4 n! q' w0 D* O3 \) z( [& W

- }5 c# z; e4 K4 y2 i$ f6 r; \( C. j

# [: K6 J8 j% D8 N+ y3 |4 p 对吃鸡APP的分析 & C* B, o, Z0 {! d9 Y5 K

_- _2 o# B; ?/ ^) C2 x& P& N. B2 ]

0 z# Y4 j0 K" n" w6 z6 W o 你需要了解的APP安全 : j5 n( c& B8 k8 P

. V% m" E; J1 F

" D; u: }- V* _- N2 P* y3 y 你需要了解的APP安全 ) a$ w1 w% J1 P5 h6 Q+ v

, L6 _; u- M& n0 F" j7 W9 d

0 H" f/ K" {, H ^   1 y) J" n) U" S! `" f/ f

回复

使用道具 举报

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

本版积分规则

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