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

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

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

/ h0 E. P$ p4 u9 T: D& p( y0 [ 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ' \$ `* i" R& r) S5 x8 V

H3 i- U6 n, z* ]6 I

: U& ]3 `' K* G, L vshapes= 1 Q# b0 {* H/ P {8 H

' }" d6 O0 x+ ~9 u1 Q* J2 F1 E2 o+ a) J* z

5 t, x3 t# w0 n0 A, r   ) I0 I* ~4 ~5 m7 b' p' x& i W; B# ?

* R6 n9 U' b+ c: }, a# `$ ~

; d" x" h( E$ Y* R* E7 [ {3 P+ r$ A 下面就以开发者角度进行解析下这个APP的功能的实现原理。 : [, l* Y1 v n. ]! m. p

9 P/ }8 i& [% t0 M

( ?0 d' z$ Z( d6 L! }   5 V* I5 E" r p- s8 z9 g7 h g# l

2 @0 ^. Z2 A3 R! D

4 o, J( X$ H) ]8 Y 基础信息 + F4 B, F4 N0 _6 |5 U4 K$ }" a$ f

, r0 d+ L# r+ `& U$ n

' y; t) h' H/ D1 A5 ~ 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 1 L& j! K6 M9 h! V3 x5 H+ t7 |

/ A. Q h# T2 C5 y9 [; \

% A! A# \2 f U+ t% d! V% T+ G4 g vshapes= 6 T; q' Q( z& v6 i$ T

" A! K9 j& s1 b& J

?# ]6 L# W n% l   ; \+ t# X& O3 C

- {0 Q6 i X3 S& l: z# d

/ @4 m# |8 N4 w: o, Y 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 6 S! M" y: N& m4 {3 P1 g1 A# A% _1 _

! L: A, [# t6 _) H( ~

$ o5 C/ j! s4 d& Y$ w4 X( x vshapes= 9 [$ G* z: O1 R9 S' J8 Z

: X* Y, u: H& z5 R$ s- C) I: C

! q3 ]3 E' Z6 J: s; P0 ^0 B   ) }) O+ ]6 y# N1 }% C0 S$ p

9 O8 ^! G3 t) T1 {$ x0 U

! Z6 [2 I- o/ \& Q3 ? n 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 , n" k( z! H4 E! d* p. s) }

1 Y0 l! S) }6 K7 S+ g9 B- B1 g3 b

* e0 {$ c8 i0 b _5 i5 _ vshapes= 4 X# x/ Y M, W$ f

* Y6 q( ^! ^2 W0 I! E

* E$ [0 X" I1 i' L, Q" g0 Z   ) B- \1 X% J+ z, g" O/ \: |

7 M* M- [3 `1 ^; Y7 c! r. D& i+ x

4 B# [6 U! C6 v9 N; O; I& M: t 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 X& y: d8 i: I1 x: ?6 B. V4 ?

- `% z1 ]9 `0 |: O8 j

3 O9 R J2 s w7 Y& d# w vshapes= + J: j# w* G, C9 t+ o, Z7 T

s, P& }+ J. G: a! Y

- h1 b; g2 i4 Q' H5 r9 G+ T9 v   ; R2 v5 C/ T4 K/ X' X) i8 x5 ]: V

9 f4 R# m5 i; \& ]4 h

3 h2 X$ j8 v0 g0 c 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 . @/ M8 {/ B: } X A

* p! ^8 c2 W+ g1 n) j

, d" K" |3 j" b3 m5 } vshapes= , d3 \! q2 M0 e% y

/ a& u) k1 `2 N" R

4 b: |2 T! l9 Y& U( ]5 y, @- `   * b1 z' ~. n; h

4 n8 X" N" b/ N& z0 h2 y) G8 s' K

% s! I1 _) i9 b$ J2 K' d8 X   ]5 z8 |5 b# w

. I2 L9 w' a1 T) k3 x5 T P! a0 t, k

! T% T w( n* m9 R7 m 签名信息 4 c5 X# h1 u( p" |) S5 X

# R& \/ [( O" p I( [

1 O& {$ M* \" f' `4 ^, t# J" \' X 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 / ?. S! \4 V! f7 x% f

" M5 p* E' C5 f: d. }) Z* Y

6 q; l; i6 q* ? j% Z 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 1 Q9 V& r1 c# O' r3 y1 b

5 I1 f# R; m( [! n: ?

3 z2 b+ F8 \% E* s androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 2 c$ g; T5 K! j+ D: J q

2 }, b+ S G8 H% F; ]

( j$ C: l7 O+ T" O. Q3 ~: z vshapes= 2 j+ g: S9 J3 E O

0 z. Z. K9 {4 k1 o* U

) x' a: @- a i; A4 E U+ \3 R   8 B) ]/ Z8 F2 k, F- ?, m" O0 W

' n' {. L2 i' i0 b. `+ P

7 U, S+ ^! c; ? android签名的数字证书的一般都是采用 X.509的国际标准。 , Q- ^$ p! H5 t$ t8 [' _' v

3 {6 J- T. M9 u& G7 l

% F$ @- z2 K" o& }' [& @- B X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 0 m( j5 o6 D0 @# m+ ]' S- P3 y

" ?4 n) s% j w( ]2 ?' D; e

" M4 D+ `$ l. y6 B% f' a9 ?6 B 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 3 x7 Q" b" v4 t$ b" |

3 g, Q7 e4 Y" ^/ Z0 `

: F% T+ A2 ?; r+ U% C z+ B$ p vshapes= 5 a7 k$ [: t6 P/ h) p- B

0 t/ C2 j+ p1 a4 Q

$ \# l' X8 k3 }2 L6 m; i   # d6 B; V, r0 y' k* ~* \

% Q; I- R9 n8 D4 ^

5 N5 m6 e$ d8 K$ Q0 ?8 P! w( N 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ! T X) n# ]* r$ i

7 T! M1 I. j8 I% t5 q. Y( d. l- j

x: O0 g% {5 B* L- C0 X vshapes= - g @, S* V6 }+ F

* [: \- c* P$ c

6 E: R8 B' r0 @ ! }$ j( l6 w1 v9 P( S4 ^

, y9 i- o0 X& p( h$ _; e

* ?8 ]* P ?2 U/ d9 e9 k* e   * h0 T0 n& j1 S3 b

) q! \% E9 r; d+ _

; I* l/ G( C3 u; z; w# g9 ?- y8 g 权限信息 . o3 b( V1 E, k/ Y! I; m$ a4 t: C

, I# C$ h7 _9 b

3 y h, D, m9 Q; R9 E' p. Z3 l 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 9 D6 P6 L: P5 [: C y4 c

* S. h# @' I. i [

5 ^) ?; S- ^4 Y+ G# f* y android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 : U9 j" {1 U% `$ s1 W3 r) X

- Y' b9 M3 }0 ], n* W' B5 j

0 b/ E7 F& m( o; p! H$ _3 M vshapes= + ~7 M' Q9 F- }8 b' c$ ~

* o3 }8 Q) s3 F5 x1 H6 Q

7 p$ k0 r2 E3 x+ F( m+ z3 M b0 Q, l   + p& D5 D1 w# Y8 K7 r, i1 W

$ R, j( F" ?) e0 O

0 H) t# s+ L. ]% g/ I: D9 J8 M 下面对这个APP的所有权限进行详解下: 5 T4 Q. H2 i. E9 h% Y

, c i5 H+ y* e7 t! a) b: }1 n7 n7 H

3 N) L" M% v3 |' y$ x8 ^* U android.permission.INTERNET :访问网络连接可能产生GPRS流量 % m4 N B6 ?2 A. T

1 I' m% n2 p" H5 b

0 [4 L. \ L6 o% q+ o- a android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 $ |2 Y7 J1 c g5 [+ z5 U

) r* W3 i- w; \% R

* i2 ]& j: M1 S5 ]) T# F android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 8 r8 ^& p1 F8 i- S( Z% S8 {. n

: f( k! q0 h" Z T4 h

" [/ Q/ W9 U+ v2 w2 [0 V. M android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 # G- W, ]# t# x( Q H

) |7 l5 D: }0 v+ S g8 U

6 W* \4 [% c( e+ o9 w: {0 j1 x android.permission.WRITE_SMS:允许应用程序写短信内容 ; V9 b, G( f" C

% y2 Y' i; ~# B# O4 L' ]# v U

$ E* G: V( R. d/ Y9 ~* V" d7 \ android.permission.READ_SMS:允许应用程序读取短信内容 % J! `8 R! E# h6 M8 m1 q

& c2 f! {: Y$ ]; F3 l* l

7 }0 ^: b! h! M' y android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 + p; v% b+ S0 O

9 n+ m# f8 w2 N) @* I A

0 F: F5 J# a2 a' W+ d r android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 9 }7 d" n0 X: E9 ~7 L

% d. J% G$ o8 q

; C9 u! ~+ B4 F android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 . q% J! `/ |: K O5 N; W+ P

9 p" ^8 F4 i9 I/ a0 {/ ?

. N4 i4 g9 f! `5 g T* ] android.permission.VIBRATE:允许振动 2 C( r+ ?4 m* C. O

9 Y0 ` Z/ i. M$ O0 `$ u& h# M

( D& r) ]9 `% W) r" u/ o8 P N android.permission.READ_LOGS:允许程序读取系统底层日志 2 F$ v! _# x; Q8 y4 q

/ _# M5 @, w/ F o# r2 P# @% t0 B; y+ W6 I

/ q9 v: U9 l! _( L6 l* B* ] android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  0 Y% A' _( k( \( c2 |) _4 g

# X" c- N! V. f" G

9 V6 _4 k- `. {% J; n* V   1 N L5 k% e; K" ~5 M, f

+ y: m4 s% f# Y5 I2 d

5 W4 j' {' @( a. g3 R 功能信息 8 z1 Y4 G" J5 K7 u& q' i$ {. L

7 G2 g& Z. m/ l

' k. W. B# d5 f6 [' h   ' p" Z j+ S6 s% q

% C% c8 m% f3 c3 _

- L/ r- H/ v+ N" o8 n* L 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 1 [$ ~/ m; {( k9 A" l0 _' C& e

6 p" W( Y2 t0 o& ~3 V

* p7 A$ K6 ]! b) X3 K Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ) G5 l$ R6 J0 \! g4 |

/ N* u9 t( Q/ d$ u: Y4 `

8 c7 ~9 ]% i7 w9 i 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 x9 j, Y, E& ]; n

4 S: V1 k h/ w3 b* J* ~6 r4 s' h* @

; |1 `& s4 z% z. H9 K* R 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 5 r7 E: o% V e& Z: _

) D. x9 J8 n |5 w. f

0 w0 R9 ?* Y2 U- U w vshapes= + B b& {& n3 |+ {4 p) j

P9 w7 n3 M2 [3 I ~+ E, K

0 h. r2 g% t K0 J% M2 E! ], x   8 Z7 y. F4 S# G: P" W8 `# |

; F, ?: d+ V" A$ p* ^, f/ l

, u# V, y0 f" ~* @ 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 0 g3 Q/ G) V/ ?" H' c! l

; P, y6 x2 | Q

5 a. R D2 a& C! _6 f vshapes= 3 k% M1 k# u9 Q% b: y

" l! ^ l, k- l( c

" I4 d( P6 S7 G+ _5 A2 t* C3 E   , g: r5 s Q+ k1 B$ m

& r5 o- Z7 l8 q2 k5 M

' s" M3 J2 a5 j lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 4 q- u& m, h; X! {

( [% U, \) I3 E2 g b% |$ z) z

( j# |2 x# t, S$ ]7 u* w vshapes= ' q1 l1 A/ G( i) I. k! \

9 @0 j' @. N; T" i8 ~9 Y

! V: @$ ~$ }( R2 ~0 C 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 9 r* K: r4 Y4 S& F2 f* u4 b2 l- u% `$ P

9 o1 u3 K, K# |; X Z+ Q

1 o. U7 x' o0 {3 Y vshapes= / w5 H$ j7 b: {0 s( Z

0 b' B" r Y. d# S

/ m* m5 O' F( M" }. \5 i$ j   ' U6 h7 ~5 O1 ~# l2 {! s0 A5 |9 {) D

4 Y+ K: g* G6 }. W/ d) }* \

1 \. a# H$ L$ \7 [ 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 3 N, Y; e1 l: F Z

6 ]# ^; F' ~: G v& {) D

$ o; G; u) ]6 g- A3 t; j- N LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 , \: ^5 N* x4 I' p

7 C1 Q. R# \, H. ~# b

/ a2 f+ g4 l3 W 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 " n) ?' x: u/ y

9 R+ j+ q4 c8 `' ]$ ~. X

/ I% |5 G v# a1 _8 z. n* t# Y 源的luasocket代码可以参考学习下 8 j% f1 d: G/ C

! a% z( b* Q _7 }

$ [1 q: I( M+ a, I2 Y: |/ U; Q5 E4 D https://github.com/lunarmodules/luasocket ' |, D. h. h& w0 M& Y" s, r3 a6 Q

6 t/ y* A4 d& @9 ^

" j, O0 z4 f9 ~8 q3 L5 n ? https://github.com/fengye/luasocket 8 `! B' i; M& u5 ~8 n1 k

$ ?. h1 T; J% b% I3 [

7 Z: g5 t1 u+ h& @4 x   ' J/ d. l! \# x

) [% L8 s P' ?

' N5 r, J8 p: I& h vshapes= 6 E4 w# X" o- y9 |3 q

4 f0 W9 J- D1 B6 b4 L

O$ A! P5 I7 u0 ?/ i   + F+ M; t7 X: n, q

( K7 t* a! _1 ?# l# I( W5 ^

8 J5 Z0 E! \6 v0 g: `, ?3 K   . ~ ~- l: t H

% ]* g+ n! s0 [$ ?& l( V+ B

M' A. e" ]9 H5 Y$ D 总结 ) \2 |2 i% A' K& _: g

6 W# b" j( K% t3 `- {7 Q

& \; _( _2 ~* P; J c7 w { 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 8 i! {2 ~2 n% _5 @0 O) c- V$ L, i* Y [

0 B% R% G% ~0 V* ~( u! p/ T

* y& [1 V# r% ?0 F 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 : p0 W# p6 a! h! j

6 s% ]. _" ?: w7 w4 B. q, Z8 r" m

" l$ a6 r: M! w6 w 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 1 x7 h; Z7 @/ O' N* [5 E

) ~: Y0 X* m9 Q( @/ d2 I+ m4 N4 y1 s

+ h6 U* ^0 {' S 结束 1 \0 ^5 S6 w9 N" R

( c- {! ~; N2 Y( n k0 _

6 [8 H4 x* o* X% z, H  【推荐阅读】 ) @/ B4 A% ^+ O$ v/ O

7 w8 J- L M: Z5 A

- P" M) @' t+ C; V J% \ 对吃鸡APP的分析 4 B0 ^4 ^ W, [) Q9 |- h5 p

, W8 u" _/ t0 m* Z- G

( P7 J" `+ X6 } 你需要了解的APP安全 9 }. Z/ ]7 K5 h- e- U% |

* W& w; q7 x0 q, Q( c* ~! f l

. f5 E! H( u; K, a 你需要了解的APP安全 , k; q, E I. h. i5 c, {

5 n( L+ t# I0 O( g

- V6 K" e; ^( c8 Z" k" E   # |& O+ T' i$ l ], I# E

回复

使用道具 举报

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

本版积分规则

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