找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 5082|回复: 0

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

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

6 R2 f4 x; V) ^, y* X 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 / w( i2 \: F _; S" e! B9 R

2 I! U) \2 Y% B. K# c3 ]5 d5 {

+ O3 D! q: d* v+ p6 g) Z vshapes= 9 u9 j: T( ^' }" I, Y* F( q5 n& l

) W7 \$ T% \% c0 Z- z' E

, w4 m* K& Y0 Y   . o3 o5 y$ b1 T+ E* t) ~0 N+ k* @

0 M. r- t: h+ z1 n, d" S5 e

n% w- R6 [5 Y% s L 下面就以开发者角度进行解析下这个APP的功能的实现原理。 8 ?7 J) @$ p |% N) I7 H, [1 p

+ v/ f+ }/ q: z' e

6 K5 ?& ^, y' Q- Z   # }/ F( K5 a" M7 R# U$ ]( Z# v

- `# o0 r# ]4 }* f: Z% r

+ T! a9 D# z2 a2 t 基础信息 . ]: r f8 i1 R3 M$ ]& w. K7 `

* q3 w I- L" t; C; ^* f" U& h

. N( ?; x4 O1 d& \3 k' h7 q3 X 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 6 }6 ~, c7 N2 Y1 Y7 j

/ m1 \# e" g" n

, B6 T, Z& \ q( @; k/ l) m! J vshapes= " U4 G! O5 W i( o

; S, X6 }6 |+ O' M$ R, C

1 T5 T+ m' K; @/ v" K9 M   # @. x# [; ~9 N* S8 z2 Q8 C$ D

: y7 @/ i2 }/ F) P4 A; B$ w

0 I2 F0 p6 b" _% F 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 & X; B/ J/ \ V' H

# {, N, P q0 \5 k1 q/ T. d% H" k- F

A2 I1 ]7 k: e vshapes= : e c& S2 H- r# l/ @2 f

* z7 ^, i: n0 N$ y2 m

# c( Q6 h: [6 I7 i   6 o+ M' d" C3 c# i7 @3 ^8 b

: ^# ~6 k, z. J9 T

! q( C( }- M5 V6 m* M 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ' {, K" K0 u9 j# i4 q( q+ @" {

+ l _( D$ R$ H. y$ k( g5 q* v0 [

' A' v) }1 f( g4 w vshapes= 1 I% l, V2 n) O/ O) i# C1 l4 L1 A

; d1 K# y6 r" u1 W c; y

. T4 S& X& d8 X1 W* p" W g4 h! ~   2 j& n) ?$ k2 [6 _# D! B

2 U6 U% y8 p: _; Z$ t' S

0 l2 D. y: [ D 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 & w E& M" S, g5 z A

4 I8 U, u6 K5 C& R6 P6 J

* S5 \3 @! B3 D- Z* ~" S4 m vshapes= 1 c4 \6 H4 X2 U5 U, q

3 p$ D2 L3 [( J# C! o, C# }

4 V, _1 g4 [- U5 ]& V7 S4 {; v- w5 Y   " w* u: a9 v2 Q O" A5 d: Z" c b

) w, l& V% c: y0 Q

, }, W! J. Q3 ~ 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 " O% l3 M4 A, y% \( o$ i2 T

7 Z- g8 p. H/ \9 G! W8 Y3 ^" P

8 U1 L/ ?* S1 O vshapes= 3 ^7 M; y" [$ d2 z1 {

; C) u. a; J( K ]$ u

a) R; e/ g( Z; G. K# u+ Z   * o) i: k) ?1 T7 e

* q) { q7 C, W; D- L/ C: q" I

/ D; v. W4 R) H0 u _, n   ; z& W0 j1 ]/ w1 g

: @/ Q; R. k5 \: M* F7 F" x. e7 d$ U

, e; J( u0 j8 S2 E3 H 签名信息 & P: S7 m/ Y+ A7 T

6 [; w( k# {9 K8 k9 f3 |

* {' \" S0 \8 W( g9 r1 b2 K( F 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ' f$ h! l: V2 k5 d. c/ m

Q6 f. U( G2 i1 j9 p5 A- x

: `, |- `6 G9 `5 s- T. ^ @ 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 f% C$ H; r2 ^- d8 P. B7 c

9 k: j; J. S/ U) l5 c) y

: ^; K2 Y- } k% C, v, B5 u androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 0 K! ~, c/ Q7 s' z: y& B

4 i" |- g% d; B2 ]) M

/ J) s+ j f9 P% h vshapes= P* M4 X$ J. `9 y. O5 {

/ M) K; k) h/ g$ k

+ v1 Q4 K& [& x8 I% O; r   ) d" W+ c- M C% L1 C6 U

2 k! Z; G( G8 I' m" \

) o5 E; }8 B* {, Z android签名的数字证书的一般都是采用 X.509的国际标准。 ) c& k- |. d* Q9 K, w$ q' j2 N: w$ x S

9 j8 T' N5 R. N$ Z" I% N1 t- E

9 i8 F7 z) j$ y( E X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 * C' A+ ^$ k0 U- g* c) v; F

+ h" Q) _1 O1 j1 w

; R7 f v1 [& q7 ^7 Z$ R- m 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 ! T' [, V: |+ R- p1 F# X- Z

" Z' y# S6 m, |+ p

; G: K; ]/ M* {, S vshapes= 6 j" U) Q" T% p. a2 T- t

* y/ R1 I$ }; h3 ?$ G" K& T

) @# r/ ]2 z+ A9 E( Z   7 ?3 x1 m& o; @; K: `

1 V/ y+ c! T2 H

* I+ c0 J; c- X6 Q; I+ ~/ q* i 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 4 h: G8 g5 F- J3 p; D+ x7 y

- j* [% W$ o4 [* I8 w

; |3 V2 I" H0 ?- \; g vshapes= 9 y" N! \# `! _9 f5 D$ x: @

" V3 b8 o/ `" ]6 s

; f { t2 G5 E w; t Y, f; f ! {4 \/ D V7 y8 L7 Y

7 C+ G8 T; W* ^1 F

" u. T) y Y) T; ]/ s1 P$ V2 `+ x   1 W. z+ U' I, r9 M6 B* R5 n

3 b5 ]" q2 q" `+ a8 L# c- t

" u. ]0 m O" t1 L1 T% N: K# ? 权限信息 + @( ^' |3 c8 O% \

6 h: d/ C1 s' M# T- m

1 ?, O* R9 J ^. g 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) / G5 \- u5 K) ~. L

2 m1 M. w, B1 T3 q

' v/ H; J# ?: B D+ T android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 # z$ Z# u2 l5 M- f

6 K0 x, b; T, N( h2 u9 P7 g

/ d$ W5 Y9 U9 D* c% s1 O vshapes= L& w8 ]# F$ g) J% J

( v* K& b- s1 w3 [& {# T, a1 ?

9 V% d- O9 w; g0 N( M7 \   ( r* ^$ h+ ]2 F, B. P* v1 u

, o) g/ `7 b4 g9 M

9 T t, ]% L8 R, H( o# T3 _ 下面对这个APP的所有权限进行详解下: 7 _' C s9 R" F. F7 O6 q9 j) B

9 z! O8 E/ C. p; G

2 m/ _) N9 y$ f( S android.permission.INTERNET :访问网络连接可能产生GPRS流量 + ` x+ Y8 C3 y$ f% {% g' T

9 u* \' O+ r# A- o x

+ ]6 I8 M$ M. M% }, X6 ] android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 . A5 n* U& F$ }. T$ {3 b

9 C# ~' w: i3 Z

2 [ D" _5 s# F android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 8 L/ S9 Q. \9 f

9 x6 C% ]1 U; k8 I( z

. N; a- B8 s/ m0 V7 U android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 3 H# L0 L8 Y) W3 V; A `5 }

9 b/ O# g0 t6 e! H' o9 Y2 z& U, R

# g$ g4 M6 ]$ t! o1 ^! | android.permission.WRITE_SMS:允许应用程序写短信内容 h" e$ m$ |5 t7 n5 A8 W! e

5 O: n( N% `# {) A0 K* q6 `- o! V( z

8 k% U' |5 f4 e+ B+ x# ^8 M( i3 u android.permission.READ_SMS:允许应用程序读取短信内容 & C5 f; Y+ S' g0 W

7 [3 Q3 s- T. B1 t4 o2 r

! m, o/ z9 j' `4 P android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 % o$ }% c! H8 K1 c# t: H

|0 w! k; x2 S! s! n

" l2 d7 M( A+ E4 B& o android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 ( p. W+ ^% u9 ~$ _% @% r$ {

* J* N$ K! l b0 \# o. S

( M6 u& |9 d$ N( { android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ! H$ ?* o% L( E) G6 P" p

' v" g( [4 j. i

% K& e7 ^. `" q" j! \- l android.permission.VIBRATE:允许振动 ! `8 q: W+ Z4 p' s6 p

4 {" A- d' l; M' H8 i3 [, I3 Q5 U

" t/ E6 I9 Y, k5 m. w android.permission.READ_LOGS:允许程序读取系统底层日志 ! e! K4 p F- M" k, f- l* n. g$ S8 z

& }; m# ]* n& U) v

3 x2 U7 B3 h9 P+ L& D% q& ? android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  9 y9 q% G: |5 y# W E7 P9 S

* J! j: D1 L8 F1 n, F. B- H) @

6 B2 W3 q2 @- E) ^8 i7 w/ L, B   , ?6 V% l7 x( R5 l- m* ?& } | D- D+ j

$ i& R/ U7 L( [, x

7 F) V; G6 g* L. J8 w" L 功能信息 5 F' d o/ A2 v" b8 I5 F

& z0 g9 w G* w) ^: D4 v) r5 t% D# J

7 e& O1 ]- d) x# Q) v; R   + c% f/ x4 t2 m) ?) n% S6 u- e

$ L# @/ p0 x6 _ H1 E3 i

3 U! g8 J. q- k* c3 Q 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 % t; p6 C# j2 |2 O% m0 s- m

+ g$ Q+ O8 W' r1 n! [( N3 Z3 x

# X; Y* H) d0 A( v# X$ b' Y Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 4 U5 v2 t2 E# C" o

' z/ ?. o: u9 M, G$ T2 ^

% U4 a* y1 \3 ?8 S1 N* P' T 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 ) d" N1 \, E6 G1 O( |9 B. u

. s' v _* v+ d

2 O2 z: u! M% Z- ]# {% M4 U 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 " s* c# c, h/ z6 O

5 |1 s3 Y$ s/ g$ c/ q

, m8 p* P$ h$ [3 \$ P/ t vshapes= M% t3 X- @1 d1 K' i; ]

" ?" G/ ^8 o% B* D

4 K" n% s/ D+ C( T! y8 j   0 [, V( X% o% S2 Q, O! f% v

1 g2 \9 D# {9 O+ ~. G

& @8 |* C4 x0 O 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 * g7 h3 C1 p* q

7 K9 F) y% }2 b3 h4 \( `' X {9 z, T

6 k7 ^0 f( W3 Y) V t3 p% b3 r vshapes= ( ~& |% L2 N: T; o2 W

/ V3 X3 q* |3 b* `6 T

7 I d+ z1 V8 r5 U" n& n2 J   " w# u6 e. c- |: ^& ^- q+ E4 @

) s4 ]) ^4 B, e2 Y4 e( ]

# h% X8 o+ o# |: V5 N" w lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 * a+ H( W1 a- u$ j, @: D( d7 |3 z

9 y- C5 p" }4 x

9 Z' Z. h2 [- n- ?- U- ]& c) H, n9 F vshapes= $ O, D1 a% v( W2 N

) {: ?7 s1 n' u! o7 w; _

8 d) G4 y. e3 O3 p! c1 m 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 + w9 c1 R) ], i6 ^. U

" [# Z) {4 R/ M- P9 [

& ~" e- s! i2 W! ` vshapes= ! g, [1 ]; z5 _. D: ~

1 a3 J% r1 y( ~

/ U, A" E7 V% d2 m y7 A2 v* H   3 s y' n6 I/ L7 S/ D' G3 k. j2 E

8 y O! m9 |; j9 Z% a

, m4 q. Z- ?8 P% M: ?+ V! x 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 6 D8 m( D- h% O M- |

" Z3 u, C/ X/ x0 X9 \4 B

9 j- S0 \2 o7 q5 E7 i& B LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 ( u4 v/ L# g; y! s+ m6 o) U# f- Y% O

6 z, ?1 Y* z1 Z/ d; ]* @: g8 [3 ^% h

9 {' v( p2 b/ R0 x% V- L 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 2 h) D% i9 P9 z) q d

5 ?8 n M8 t1 N

( |, K) [1 e' _) ~6 k0 r 源的luasocket代码可以参考学习下 ( j: Y- H. Z* B7 n

, ~% X. U/ y$ _% E

! j( k8 K- S% H https://github.com/lunarmodules/luasocket 5 R6 X8 G3 p3 F

# l' U; h) ], o: f8 D4 I

& B _ |* S' E2 v) U$ ^! d9 I https://github.com/fengye/luasocket ) I$ a1 o [- Y6 g. {

6 W2 ^5 `5 w5 N; n! l6 n* M# z

, m; k: Q& ?; w+ O( t   3 ~+ Y3 `3 @, I" y

! d, g( A2 z2 Z; S- w0 f

8 M* @3 B3 O# O9 Y vshapes= ( n2 o; A9 I+ J, R

M) Y+ {" y; ?" T1 ]

% M% s1 C6 a2 D9 b: @5 V& [   6 C7 n+ {- d; Y% v8 P

1 t6 s1 z8 T' ~% T. |$ V' C, m( B4 s

; E) f. W. q( J4 s! [! a* t! n0 P   5 q# b' O, v" H7 N: J4 Q% w

0 r4 t- L& U0 T3 q

# V! Y( d' w% u/ M( W- F% x2 C 总结 $ J9 o/ e; n$ A8 R7 r" g

8 d% L: c! ?. G9 z6 R k4 M# M. C

+ q4 p5 P8 e8 H, O+ X6 K. s6 E8 } 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 ) A% \6 q' C8 H& W O t7 D

8 ?; L6 ?( B5 v6 l

5 s% [( x3 s. ?3 s/ _. } ]9 ?; A0 u 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 2 ~7 [' e$ Y/ P

6 Z! g( e$ I7 B1 `) ^! \9 K

# H0 ^; K) g, e8 r3 V 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 % G9 V6 Y1 p, Y9 D T( h

% `! N: a7 Y1 l

7 H/ t/ a) M& u& N( | 结束 $ k! \# ?) K/ q

3 u! s3 h3 ^8 w1 n1 N

8 R. U% }) Y8 o1 c1 k' G7 P* G3 c: C  【推荐阅读】 2 [# T/ p0 [/ i1 c0 W

7 g9 o7 _2 |8 H- y* E$ @

f7 G; p3 a# R% o/ l 对吃鸡APP的分析 ' M& T/ U3 c- e' ^

9 g0 C. z( F9 g+ N$ e

; p$ Z, f+ |# Y! z 你需要了解的APP安全 + Z9 s1 V6 L. P8 t7 _

/ O Z w1 h: w- A

1 w. }( W }1 v- J/ n 你需要了解的APP安全 # X \ w0 J; N" a# }: m) x* T3 y

; j4 x$ E! s0 a$ _2 a# ^

7 n1 |0 X* o/ [1 [( \! ]5 c/ M- _   ' y Q+ k4 s# \$ V7 f

回复

使用道具 举报

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

本版积分规则

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