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

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

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

3 r* Y5 c, f: t9 ? 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ( I# S7 J* c& }5 u, a; a4 T1 C

' Y3 s2 s m( k3 x% d

: z5 r5 H6 q# g vshapes= ( C- z9 E) X( b B, E+ o; u3 S. b! U

4 t. E, F; ?5 g" `

9 I9 k) n8 V9 `5 {   ! s( R$ f& w: ^# b: O, i

- E6 n* V' _* x1 j0 S/ P

[5 L7 [) `4 ~3 s 下面就以开发者角度进行解析下这个APP的功能的实现原理。 1 J/ Q2 m2 x7 c- Y- {

* G# n1 f4 r# p. w: X

8 s( o+ Z4 l$ q* F3 u4 \   6 @9 A- P q* h) l

- g4 Q7 @0 |8 l3 \% a

, j2 v) n' V3 e5 G' ?- g( x0 { 基础信息 " T; S- K" s8 e- X m' F' \ `

; h( E* r# [- I8 B5 J, c2 z

" H. `. Q; P3 b( @, ^" s) x 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 . A1 `6 d7 l" D& _) b& E7 ?4 |

5 E. q% G9 @8 K* C( L L0 T' \/ o6 C$ z

0 l3 T" l# U4 m+ c, K" P4 C vshapes= / D4 R Y6 X) F. m* W$ F

- B0 T4 S; T, J2 @3 R: G

j% S" M. ^8 ]& n2 U6 j   ! e9 |, R& ? W7 p

' i, ~- c1 W1 G: c! z* [, \

7 P% R2 P9 ^( b; q( `) F6 Q 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ; H0 m: d# i% g

! I& u& F6 G& \+ I+ J

0 U0 g ^6 S' V0 A3 T" h) ^ vshapes= " h3 Z) y! S5 t

3 @8 @, f/ O$ X4 q! a

, U5 u$ _* h8 F6 x1 L Z' r* r   5 G7 |% ^# ~' \% _( R! r

# C1 h; C3 P" g' P+ K( D

9 J/ D/ h8 W; b$ d 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 - @% `# N, u( [0 g) f

" k' `+ u! Z+ H/ k0 o& \# d

6 D& H: m; i t5 _) ~/ @- i vshapes= % B |. l- x9 \6 c4 V" D5 \ {$ [

8 H) ]7 q9 ?2 U

' I) O( O+ Y+ e   5 ]" {0 p+ Z- {% B* E0 c

$ A" B$ _5 Z2 ]& A% y5 [$ q

$ c( u( s3 z2 z- b7 s( w | 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 + R& g B& C6 b3 A" H

+ s' x% T- G& h+ E

4 t* {; q) i! o5 @% t' U% C. I vshapes= ; N0 H) I9 q8 J2 i. i! f; B

$ x& p% h+ H% [( n' @' E

$ g2 w2 A9 \8 b" p7 a/ i   - b6 `; C" A) n0 D2 `2 B. s

4 g) |0 }! V) U6 F9 y) ]0 L

7 w) Z' O+ @2 o) V$ r) v 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 1 N0 d8 `/ P+ |3 c* \3 g

$ l% I& d0 O6 Q y

5 A7 c- P& i; V; g4 a4 K" \' [ vshapes= ) [7 t" n3 D2 p0 D

- Z, \5 F1 ?- l7 C% E) d; t' X

w5 X" D0 y: l$ p, e7 R0 I   . E) B4 o! L$ T' N9 q

- \8 t: C& T% J8 F

3 r/ i0 X, Z& e   + |: B$ A8 k; q- J. u

) O. |! R( J/ P

* ? }# P7 i8 f 签名信息 - R# F% z5 J ?, [0 H7 ]

4 P' ^4 j0 j @% A2 T: A! `0 }

|1 d3 @- Z# { 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 1 I, E& a2 }$ {4 \3 b

4 [2 ^. c! [2 X7 {, X2 |! `

1 C+ B! G2 s$ D7 W) a9 J 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 3 D. D6 Y" h _4 T/ o7 C

0 \+ ?# A2 V) o# F5 p+ A! [6 b

% e9 O$ D' `- L7 U androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 1 ]1 ^4 h5 E2 S' y, j" o

) R; {. T! |) n% p6 o2 r! ~2 @

g1 b. ], [9 v( k& k5 a; b vshapes= : T, Q) W& h9 M; F( Q

: U% H3 \9 V( X# | g" h

9 v6 N. A, l% ~5 \4 ]# K   + |7 n }/ ?- T" I5 t& W4 R

6 P. |; f8 m* w5 W0 I1 }

* V ]6 q* _$ w R0 L android签名的数字证书的一般都是采用 X.509的国际标准。 $ V& f- h2 Y' ]5 k* _, ~. p R, {

6 v5 E, ^$ U2 Z

T) ]% h6 w6 ]; k# \ X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 2 o2 U5 o4 s$ W$ Z) V4 ~' |$ q

1 J$ {: _4 y: t& S6 r2 V

v1 Z3 f( a w2 @3 ^. p 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 # n4 A2 |0 Z, f+ t4 g

$ F/ X. O" ^5 S, w

# q+ K4 Y' j; ^- I vshapes= * W# ?7 A q) p, q

2 g5 R4 z6 ~7 Q) ]8 A; H1 ~) e

% X4 M S% {" U   9 s' _4 H1 B' Z" A

" j- t1 y1 S; l

+ [ w; @) {* ~; h 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 - W( R% q' |( ?

, r3 m+ m! \; s' _" e

2 z: B5 H3 ~) f# F2 A- ^6 N vshapes= + R8 o. _; N; s$ N

H) Y3 y3 ~3 x1 u

0 }5 @* ~% |6 e8 t0 { - @; A7 U" S8 r, Y' R" P* O

$ _- }& I0 S4 \& l# u4 g4 W* \6 b

8 K- y S [# |$ E* {8 L" ?$ ]   2 L/ d6 W0 C) l1 N6 j5 N/ i

7 C, F; b6 }# V* `5 A# X6 |# _; L

; B; K0 u. m- j7 _/ x# v: _4 h 权限信息 + H" H$ \* F+ o

% X3 {; r! N8 ?7 Q9 R% B* v

5 s( I- {4 e$ D6 ?0 O7 A! r 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 2 u7 m6 ~/ o8 w5 Z; u

5 R+ I4 B( N' ]2 q8 y* k4 v

4 _4 n8 W4 ?& A& o* p android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 : Z; z) `2 t9 O& S4 H

$ r2 Y6 V$ l) z6 V5 |+ Q% Q7 T

; j" u& |) c, i6 q* e5 c vshapes= , Q7 R. y1 ^1 D5 s. a9 y1 T

& B7 G' a; U5 e* s* a; a1 ~

/ b4 |4 I+ N& x: r! J- r   3 |% r# P' x* n

2 b! B5 }. P/ b" {$ Y

! @. Y7 _. O; j& | 下面对这个APP的所有权限进行详解下: : V! M% M# v8 Z% S; f2 {

0 G$ g+ }- S; Z5 I! @

& j' r: i/ k2 ` android.permission.INTERNET :访问网络连接可能产生GPRS流量 . k# E" S9 B w% `# L2 H) f

4 W! s. v9 _( ?0 c- Z1 A/ b

* x, X, I# w6 a3 s4 d android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 / D, R! Y$ v K1 \, ]+ b

: p1 a7 U, N4 ?. s" P, \2 d3 C; r- |/ n

$ C7 J0 A5 ~$ Z$ Y6 |6 e$ h android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 0 o1 W- W" S. O; ]7 [( y" D

! }! s( s4 p- e" E! |0 j

3 y2 S8 N5 ^6 A9 _ android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 9 n0 S$ z; N( i- Q& p

, _4 @3 h+ o% O

6 Z5 A& K( C: j7 g* s9 M android.permission.WRITE_SMS:允许应用程序写短信内容 ! u3 a- V' L# c& w- Q

/ E- Y p; i+ q8 W( d0 B" ]3 I

& z0 Q5 H2 D9 ?+ W: o android.permission.READ_SMS:允许应用程序读取短信内容 - G6 T* L( @: l* g% w C

5 r5 b" E* g- p. X8 x3 M9 {

0 R+ {* s$ s7 W6 l% }/ h android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 / Q9 S3 [$ Y2 _+ [8 F, x5 _3 V; g9 T, S

j' v. k" V/ \

5 d4 Q/ V6 H2 H- G android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 ) d9 q5 J- F$ W

8 v* t) C: K' R; H5 T

) }7 z/ v3 w2 n$ r4 \& M android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 , k7 x% W4 Z- @% z! X, G. O3 O

8 }# ~9 M6 w3 c" l( A

% @6 L+ ^4 ^9 Y1 I9 W; [9 [6 v android.permission.VIBRATE:允许振动 ! _. g; p0 j1 |6 v0 W! P4 ]/ |

1 g7 y. H2 a6 C. c/ J! \! R

! y I* L) M4 s& Y0 O9 m android.permission.READ_LOGS:允许程序读取系统底层日志 : Y$ [' j8 S9 f) S& t& x

) o; F: f. h" K/ Y7 X: o

# U8 ?; ?, X* O; m" B& v android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ( O0 y3 A; ?& W9 C" g

& z+ v( G% u! A0 Z; [: x

1 g2 {5 V6 x7 m# `! R   & G0 [* g& v1 |5 k

0 g( X9 |; l- l6 {2 _! {& F

h4 _6 O: Z, K* W, T0 [. ?& }( R 功能信息 , r6 Q2 I: k7 I! ~. x$ D8 q

- z; M# B# l( Q3 H) Y

6 ]# c. P& i- \! T$ @2 f. L2 a   6 L; q6 B6 P I# e4 j

2 g6 V! ?6 J/ X9 G9 L f" ~6 }2 H6 ?

0 V7 f3 @! H2 V/ F4 d" u 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 ; [$ L9 b% {9 ?+ e

! O( f) ~: m' Z: X- w/ z- n: V; \

% u, x/ L W, C3 O4 V/ b; K* T Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ! t% ]) x _4 _! m: m! G q

2 G5 P! k b" ]4 A$ n% ^3 F" i

4 G& ^/ s/ j/ b 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 # o) ]6 E$ Y$ G! |1 Q" S

, d6 i; C+ p7 P3 }

9 [) x, { t4 S( [ L1 ^6 e# K 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 ; G5 f% C( P5 V7 k& a" R

5 b$ C3 V* Z, B" f

% {0 b! j9 w9 n0 J" b; ^ vshapes= ( j; J* j4 j! `3 Z j0 X

3 @: `+ ~2 X) V1 v7 z! G6 |7 ~

" p- Y0 N- u! k3 n# M" n& O   ( m( ^2 R+ E- d3 _ n& P- W

7 p( x( c1 R! [0 O( f! O- _3 I3 T

+ g% o2 q0 ~) P+ v- H8 |. b 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 2 L" v* O) j+ ?. S4 j, o4 a

/ N* d# `, Y7 _/ o6 \% @

3 t1 Q X, s- E vshapes= 0 D. N4 y. P8 H* z% T

# l) y" q- w- T7 S

, L4 Z/ c) {% n6 g   ! e0 b a: G6 R2 N$ Q8 ` A I$ `9 v

( U: a$ s! x9 {* s( z0 t* l

( y9 | b4 u7 w- ^ lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 + G r" S! j1 A- l e

" W" U* m$ E2 L' S. Q, L L6 r

$ P i4 Q9 y& L2 w, f# ` vshapes= 2 S4 P+ l$ x' s8 @4 o: L

9 }% p: v z. w+ c) d

( M9 v$ K$ L2 j. m 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 + |- n- m4 X5 j2 {& J) [

3 q @! E- c& t; @

* s; E# l3 J, _* {$ f' K K vshapes= : N8 M' B4 C1 O9 x7 ^5 \

6 |2 h% w) f8 x$ c

% \* h0 p' m: z% H   4 R- K: y1 R2 E( C( J" z* `4 a

" S9 j8 ~% c0 y$ |2 q! A" _

u. d. X [1 g8 G6 N, B0 H/ C 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 1 o, C* X" o& {" g# B6 `

7 I2 O* w! h3 ]

; Z# }* \% j8 k LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 8 T- f# C/ P# g6 W0 t' q7 W

6 q1 }1 v, |. M; N. a# C9 _* V- @

) Z$ a- U0 l+ [+ P 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 * Z5 E9 d( X! F3 y, h

5 c+ D/ d9 ]+ P, C+ r+ ^

; p7 U: e9 |' l3 m0 l2 X 源的luasocket代码可以参考学习下 - {# n% P1 o* g2 r. f# R2 z

) R, {$ `$ o8 [0 [9 G- i

7 I$ v( I" T0 S# f: y$ q( [ https://github.com/lunarmodules/luasocket 1 M4 b6 a' C9 l7 r9 V) a

, _9 P/ v5 i+ e+ H/ C6 k

z9 C# c0 P/ A https://github.com/fengye/luasocket $ I7 w9 B1 ]6 e& Q/ S, S# D3 \

/ d% s& z4 o+ U* f9 v. b# B9 h) |

; ^3 y, x+ m' h# l   3 ^; c+ M( j4 R2 @/ l3 E

/ Q$ [8 d: H/ a% ~, d K7 b

: j. }1 H7 I1 V- H2 I5 P% S/ A! V: W vshapes= 2 ~6 i# p5 g1 u: Z/ ^. }) t

( w/ P) y' Z# `/ }9 \& [: k

& ]5 ]2 H: ?' K( B   7 `1 ]. b2 V8 l0 b6 h7 u( H; r+ y

1 j0 P3 y1 {4 W( h

- C. w. K1 o! N5 [' ]6 B* G   2 d0 W/ a. x& J! m$ j I

0 I4 _. n6 Y) [0 ]

7 A5 l" ~0 N8 A% K" b8 D 总结 + V5 ?6 K; U4 p* X

9 U9 b" _4 f) V. {/ L0 @( i' W

; r# A3 \- V# O# d$ O4 w- y5 Q 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 : ~: F3 u3 z8 G2 S

5 s) ?. e4 |! d6 ?9 G9 J+ n ]

/ L, v( i* s5 ~. G 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 & I" n$ T* \( E t; m; @3 W, ?

" W9 w+ y; z# [% W, f2 g

5 @7 p; p! ?8 |# r* t8 s: A! ~4 C; g 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ; _/ T$ k; M0 Y! ]" _

) {5 G* ^: l5 a4 c+ R: f' I

5 {5 Q( P+ _ u0 t) R9 X3 T$ g& g 结束 1 Z! l: S2 {' g8 w' ?! P* y `, j

$ v: d' `" R% H z" g, m; t: e; y

/ Y9 Q1 {+ @: m+ K) z  【推荐阅读】 0 ^* _6 u" u4 [) A, }

) _( S* _ I% E

: e3 z R# Y& K# H8 A" s 对吃鸡APP的分析 4 T) S& G9 R0 u

8 e4 N0 `/ ~( f; P) J* X0 P& ]

# L' q% _5 M+ I! { 你需要了解的APP安全 ; w7 I$ X0 r1 v

. s. j1 u3 Q' V! y% l& }& \& M

% i6 C2 A0 A% J 你需要了解的APP安全 u+ a6 v, v, s' |! S* D

; q9 h1 e v- G

' O$ h4 c, h. A' g   ; z: `" g" J* W0 H) n' `( T3 V+ r

回复

使用道具 举报

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

本版积分规则

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