找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

+ a7 z* ?1 I( m% Z ] 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 3 K c4 F1 O( ^* G8 W4 o

! K: ?5 K4 v5 U' q" H" Q' l- r; D

! ?4 T6 K: z' [2 K vshapes= " }7 @! D" M: q: w* ~0 j0 D

0 w# f3 }3 o" g0 A* K" M: }% h

2 m: W) E2 g% e0 q. }, z! A' s; k   7 G$ o7 _4 e/ n: F. Q; M) N8 b

3 j3 n# u# {7 u/ w; t' k

2 c0 w+ u& v) g" I4 T- b, I0 d6 p, v1 a: X 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ! V" Q* a/ Y4 m3 K. `3 _

3 ?& F4 H( L9 S6 G

^- f( b% y+ k2 V   " \1 a- D$ G6 U U) ]+ f h0 M

9 A% N0 t8 v9 U& D$ Q

8 \. A3 m" ^/ ?( i" k5 x 基础信息 4 F; Z8 Z& n* ]2 Y. |2 r

) D+ a6 r2 d! S F0 x# N4 @5 P

& \3 D7 J* b, Z/ p' y* d& m. _ 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ' u/ K ^- v$ `: A

H, O( P- n7 s, s: H

# W/ S9 G W$ A3 |9 M9 a# M vshapes= # d, I9 b# ?, c3 N9 G$ h

3 ]5 b6 Q2 p2 ^ i) j" F

2 I) ^. x$ Q5 c2 { _5 o9 @   , H& N) C1 K( [* k

; {; |: D0 h: r

a% B7 Z) l) ?4 [; c+ x 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 . B5 G3 j$ T$ F5 ~

$ ?# q! m; A; w1 v9 c* q0 l6 _# [

3 x& l) e2 { w: u" }: [6 k vshapes= 4 L1 c1 [6 e/ R1 L# C4 e/ M

( B+ x7 B2 B5 B; w# I

# t& U9 J) W, a# a# }   1 W, R0 [& S. v& T+ ^5 E, ~

- M; x% Q; {5 U9 _4 N7 s1 ^3 d' a

) }% S" s/ v; B6 s+ v 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 2 e/ c" {' w& a$ S5 ]

& r8 @& H2 a6 r8 @' O& H% k& v

! r2 z Q# `( Q. C; b" E8 p- Y8 b Y. F vshapes= 8 t' V% t6 I/ }

$ o9 J. p6 a* J$ P

& Y# H" g A# f6 \5 Z   $ _, K/ w0 t1 q/ K5 ]) Z5 A

5 o- U# r: O) K+ e" f

7 x9 R1 ~1 o; ^ 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 4 l! q9 V C7 H

. z* G# l* j6 A8 Z

& ` ]0 n6 `" B vshapes= ! W2 B" q% U0 z& w J' N4 r( c! B

' ]. K; A: r% u n

1 e# E& _3 U# ?& g   6 m- W% i; n# Q4 g8 H+ k! R

4 j* {; M' ~* y, v% E; M

% ?. z: x* d; _$ z+ { 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 $ D# {) K2 Q, ^/ V3 |, S& Y r4 q

" ~& s/ y& q9 v! L

4 Z( ~0 I z3 b# R z A vshapes= 8 V; l8 v! ~, p% P! i8 y1 V

$ l3 h% [6 X% ]0 F2 ]$ \" d0 D2 y

) v0 }% I6 {" C   9 A: {: C- ^7 {! \

7 C W# h* c; }: ?

5 h9 ?# y4 X# E   0 d" r( b! C4 A2 T! T1 A' d2 A

5 K8 l( v1 L& n$ o: M

, j: ]8 }% \) U( Y6 ~ 签名信息 ; z0 M6 @2 Z' |3 Y6 r

% d G9 T( l/ D4 z0 f

9 P; ^9 w8 K6 X" R/ w( { 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 3 y' r: W+ @' s5 |0 k

$ U6 l% @4 k. L4 K- H

9 D! w2 d% M; m D. v 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 5 h7 `- M/ d! b* r l" _

w9 Y: {+ U3 a( q, D) |

5 J2 ]( T0 C: o+ S0 j androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 7 X! e$ c# L+ P, @7 ]/ f0 m

4 \$ h; D+ y( G( s8 B/ _! Y

7 _' J( n; b6 j6 N2 s$ q& Y7 f' c& i vshapes= $ u2 V1 X7 h9 T1 x4 z2 r- K' j

& g& V" H6 s3 p e% L" G/ E

; `7 _9 c# e$ f   ' W* w9 d0 f; @8 [5 s

5 |6 U( I( o3 |( g7 {; Y

! X% ]* A* }" i android签名的数字证书的一般都是采用 X.509的国际标准。 $ S( G# I c3 J8 i" H1 S8 {. C

+ _) ]+ s; j" X5 ^0 T: `- A# }5 X

; l* k9 n! x) |8 n X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 n+ v# X7 i1 r6 z+ z5 \

, [6 m& a" X6 Q+ u& G

3 W$ _: ~1 p6 u 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 9 r" H; b1 k5 ~8 H. i8 R

, B9 d* X+ B& u" y, t5 W$ |0 B

3 T* n5 R* r0 t2 S3 L vshapes= ( |% s; y& b8 |7 W

c7 t& ?$ g4 s+ v6 w

0 t: F0 h# H/ `' c   6 ]7 R: C# O, I5 Z- F* S1 n; l; |. d: |

9 e% ^7 `+ B0 H3 y

* K0 r) `8 J) V/ u3 e3 i) S5 c% S 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 & o! t. |. m) Z

& v8 I" E( | U4 e; s

$ _" A7 c& }0 `) D2 { vshapes= 7 e5 K( h. Q3 v! [

9 u y0 `9 [/ H

, w, N3 A! z- \) I7 K8 i9 ? 0 f& `( T; L1 h+ u

, L W1 u6 i9 ~% z X

) R& j$ [$ O! _' \' I   0 K& |! d$ b. p8 W

' F U8 B' B1 P% l' ^2 d9 h6 M

& f* B3 D n6 \0 | 权限信息 8 x0 {6 V: t# [; J: b

8 |4 R. ]3 }% @

3 A Y$ b& a! p: Q. @ 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ' W6 G$ m% I: k& A( ?2 i

, c3 J+ X6 n1 r" i: G) k3 P" t! ^

" u$ }; z* o5 T7 W4 H7 a8 Q android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 , U" e2 C7 W* b

$ w& }. {* F" g! I7 o

. V! f( ?8 ?* ? vshapes= # x0 K, Z2 j7 M7 e/ M; z

9 e6 l0 k6 G9 M5 r9 e0 q" U

) C5 H6 A3 k9 ]/ S) V5 X) n1 I9 g   8 L' I6 j! u9 Z, Y+ Y: z8 Z: D

; t7 o( \, H9 ]- ~* W

5 C) ]* }9 {" j, P. R* O: `6 z$ l 下面对这个APP的所有权限进行详解下: + G- Z: w$ m3 M7 c* f: c

) ]: R, O4 ]; J. S9 F

/ \* m Z9 q1 W5 B6 `4 K8 D+ J) z1 n android.permission.INTERNET :访问网络连接可能产生GPRS流量 0 Y9 H. [- }1 Y3 T) g8 Z4 z

5 M) b8 k# E7 U: N$ \% g; n+ O+ P

f1 k y+ j, \3 {: U* h- k android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ! I1 t2 Z; l; ?+ L

* W; A1 p, U& W

8 m( Z" E, l' V, `8 v& w) G android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 7 l$ v5 S4 \2 N

6 B! z& [$ p& M4 w, O

2 E% c! ~4 b3 W' Q9 B' d android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 . s& I/ h v0 L: Z4 z

8 a8 j h H& g; }- r% d# ]

Z$ Q3 c) B r: x5 c H android.permission.WRITE_SMS:允许应用程序写短信内容 ; P; B2 ?, g B6 F( K

# R% K( d' q6 h! O2 J

5 @* P$ K' [/ c% h; Z2 v$ \ android.permission.READ_SMS:允许应用程序读取短信内容 0 S0 @+ o+ ]- X w5 a; d

2 {) @) w% y3 ~6 \" b

3 w5 u. W+ P( I android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 / P" M/ U5 R" \! t) C

5 o. s+ n5 g; c4 j- y; f

- S. o7 A& R( d* W6 @" a3 R$ ?6 t' p android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 $ R6 G" [; x$ }; W$ d+ W

, m* m! `, B! s4 p

' ]1 a3 `5 x2 {4 y+ q1 x android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 9 ~* T, J# A: n/ g' c

! p$ H2 ^' @5 ~. L5 n7 o7 ]

5 y) i% S0 J: p; k# C android.permission.VIBRATE:允许振动 R2 J. E- A3 k, @' b5 b' M/ O# Z

5 P( s# R3 r( n9 W4 g' U- [# y1 X

3 a5 k9 n' V5 G6 [' W- ?# \ android.permission.READ_LOGS:允许程序读取系统底层日志 . b2 A& T7 _ S3 y

* i0 e8 m* S6 x- @* J7 }, ^

% G. A( [/ w6 Y1 R& s android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  - R7 V% S+ J% P6 L. B

: B4 H# ] S+ S: v

# g5 k: n6 J$ A1 q* G   ' O' A v' k; ` c( {4 q/ Q

; O3 K- Y7 F: B8 @0 R! q( @; f! I

) T% Q% k! v( s8 M: x( e1 J6 ^' n! l 功能信息 7 j* i0 \3 t: k7 k4 E4 h C5 e# P5 S

, x# n1 b I1 d, R# w5 q9 J, p5 i% O

0 B0 x; S! C! q' w- y, C$ ^5 j, K   6 J7 p7 o# F& ?0 n6 Y6 C$ Q

6 v3 e$ z# c4 z! l

9 e- B& R ?! Q 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 9 k; q1 s" q5 z4 f, ?: ^

1 ?( T+ z/ r: j, H$ C; l2 L

# N' b( L ?$ G: U6 g Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 0 b2 i$ q ~% P; |( {) l

# g8 }1 T" `2 V( h. ?

8 V) V5 d& r3 e% m. k) s2 f 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 ( Q- C4 u1 \( F0 Z+ \' O- x

1 g8 U$ i5 i ]0 M+ W3 d

# H$ }, w: d( R# \9 r) I* x 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 6 b& m: ]& a, r& M9 c. K

$ l: w1 O5 F" H* j- B

; }" V }8 ]$ l vshapes= # r1 f! w( X1 O. I/ d

" C. a7 _6 e" Y! H

8 T! P3 q$ q8 A   6 [) X1 E% G& s4 L% g! G0 J4 C, l% r

3 ?5 \7 h% Y! r$ a6 W% G& b0 `

: v4 v1 r W! S; f8 r$ C% q6 x2 v 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 + e# E" n9 Y" V4 i+ M

4 y. Z( [; R$ ~8 }7 f

5 f6 }% q8 |& w. y vshapes= - ^; v4 ]' Z5 c

) N; W$ f5 x& X x7 ~; h

# {( j0 p5 G* a Y1 V   1 h a3 x: H6 M* Y! c

s* |0 J) d- a! q9 ~

$ m! L/ b! ^* F I) V1 X# b# H! Z+ W lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 - k. X- G& G" t# ^ I, y

+ [ \: l3 y3 R1 V. }1 p

* {1 @# t: o, b+ m vshapes= % F7 b1 k1 x3 W( B: y7 x" w

1 m+ Y, n0 [* s% v; B, m/ S

- s; b9 j4 Y4 R2 ?! m 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 : b& s9 [ e* b& {7 i v0 K, b& N

) N8 C( c/ i5 Z1 x

2 W1 u% O3 N! g vshapes= * P, g/ I6 F* r4 f) V7 n, }# F

5 r# `" n6 v. I p% H

$ M% v& z3 I y+ K6 G' e. i   ' a+ f' g# E# Y1 [

* @2 X1 v7 g' Z

- A) R; ~' z% g: e+ u8 v 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ( m- w0 T6 V6 s0 q- Q% G% f

# d: i8 L% k7 ?2 P3 u; y6 \& z# a/ w

4 [+ ?5 t; `; D6 t- @ LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 ; O4 N# z5 {9 Q1 y

' i( ~) T5 f9 g4 h

: F) e* ?/ M: c" | 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 * |. I. i J$ ?

9 \( T7 e7 b% o, u6 G Z

' B5 f8 r+ j7 F9 \- J Y. p! j 源的luasocket代码可以参考学习下 # |5 ?* @3 e* ?

: _) w% a- [9 T a

) d! ~+ }% Q5 Z1 N8 i1 m https://github.com/lunarmodules/luasocket # f. K3 _; m& o) ~2 _/ ]% l

2 y2 X& Q0 p9 N @8 f0 D# E

) C5 W0 ~1 @9 A https://github.com/fengye/luasocket / z0 P7 E8 c& x* s! X* k y

+ F8 r, k" ^" r

7 V, m, W& {( K   1 h: p4 S6 J' i: m

; z0 {5 M* k4 o q Y$ A

! F& q, G u+ ?' E. \7 t! s vshapes= 3 y4 }% o3 N+ {6 n- ^. `/ F# M

& [6 R0 M+ g4 ]4 t/ Y, V

" X5 R9 a4 z& i2 b   6 c6 i; N6 k' q4 W% @0 s# O

9 h6 B8 I% j3 n* S0 F7 ]9 D

4 N6 T/ L6 B! G6 X4 a   4 ~+ g/ U7 i! `: p3 V( y I

* T; R) z' l2 V* ^+ u2 A9 L8 G) M9 ]

3 Z6 l" F3 i2 n 总结 5 D) t$ v3 @" U

: p9 A. T2 |- j) p

- u9 p2 [; j8 G6 Y 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 : g5 X: x4 b% h" a+ M, f& ^

6 @) f& O+ j s8 w+ Q" C: y

: V" n! t8 L( @, k$ Y 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 4 }, A; l6 d; z& b4 a8 v

9 T) j" W& r0 q4 j+ l

+ [4 N9 o* h6 Z" h$ a/ a& W+ } 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 9 n9 x. ~ r8 p" R0 ?* s* |

; Y% S) z& e/ y/ E: L+ z

+ y# B4 s) ^) w% Q$ _* C 结束 " d) I, F! c; |2 R- {

* @6 M2 B; [+ {7 e% N

. i1 U$ @- v# u. }6 }  【推荐阅读】 1 L6 c) S. c+ K% M& N, s2 V

( Y6 I2 D4 B; P) I* v

) p5 d- q3 ]3 i0 i1 r' a 对吃鸡APP的分析 0 f& [; w! {0 E3 x5 x! t% |3 d

5 b& T* i" |/ i5 I8 Z

: B, N9 ? B F" c, H' V2 L 你需要了解的APP安全 . f6 r9 H F5 N3 F7 i& X

1 _" }% u, M: M

( D$ \$ q7 Y9 e& I8 o( X7 n 你需要了解的APP安全 $ y( N3 E( v; ?5 f2 x4 s" K

5 b5 R$ `1 L2 s5 Z

4 z1 l+ ? H$ {$ y5 n1 u# u# g   - B( c- a' d' n. a z1 a

回复

使用道具 举报

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

本版积分规则

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