找回密码
 立即注册
查看: 5620|回复: 0
打印 上一主题 下一主题

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

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

' V1 q0 _5 `& R8 D# } 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 7 j8 h& G0 d! O3 n, O8 B

* m$ U* g3 e6 O; X6 s, _* S) Q+ a. F

/ l* q: I% M/ f8 Q: R6 n1 b vshapes= 7 w( w& e% i# K

' [9 u ~& H, d: h

$ W: f0 T, y& n8 u1 O N   $ q& @% u: B- d9 H5 p. j

; }4 V t1 a# p, s7 m1 G

# i! u( ]8 J/ J' d 下面就以开发者角度进行解析下这个APP的功能的实现原理。 7 I9 M: Q# t5 l3 B% `

. w0 Z; I |& N2 o0 I) c ?

1 l/ \9 U' \, w+ y- z" a) _6 |   5 o! O. a j6 E( G& ]' q2 }

8 E" O+ u6 p2 {# ~

6 P: N+ O% r! p9 u 基础信息 6 s& D) \/ C6 ?

6 c+ D( k1 C( v

- j+ E- w: Z6 @' I' [4 } 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 2 H5 T* b3 J6 {# S

1 [8 b- m3 \- w2 C+ ^

+ [, l( f3 U6 N, T vshapes= 8 d/ P P& ^0 { H% e( ~' E

$ q/ N6 s* O; S9 R( Q1 N% T

3 D& b% \3 }) {) y% b   & H7 C S' ~# A' P- S2 J* d X

: K0 y+ [( r; l6 ?1 {# I+ U6 F* y6 V

/ X% L; b& ~3 W0 w8 v' ?1 O4 f 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 $ T9 B$ u3 t6 C2 ?

6 T; U/ R, \7 Q6 }- |

! M! X9 n2 L% @ vshapes= . I8 B2 X/ P- V2 ?

' l6 i1 v8 J! t- ]6 w

& l8 ?2 B7 {" W$ P/ ]9 v   / \8 z/ X& A% o& ?( w

7 _6 c2 u7 c, X7 L5 s! w

! F7 A+ O+ I; j" [0 R. j) U 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 # D: g/ u" w7 k d" l

6 Z4 s* A* m* o

& }% c9 n7 x6 Y8 X7 A vshapes= : [1 K6 E- E- j) \5 p

6 t% H8 w1 K- a/ \' g2 }! A+ N

/ F/ x" u4 w, y5 E   0 W1 p8 ]. ~* v

0 I0 i9 K/ z; p9 n7 k( i- k

! |; `" T# R& C+ W 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ; O" e& u0 T$ `6 s" E+ G; P0 N+ b

5 l) g; w, K0 ]8 y; b7 U/ {

0 |& D, Q( y. C; z7 I vshapes= 1 c. K9 R- F) J! d4 Z/ o

) b9 K8 _2 i; G8 i

0 r1 L9 [ U7 z+ l   : q4 x) ?+ z* _4 k {. j1 E

8 B# d w6 ~$ }: n

8 C1 M4 @ {) D* v# s; @6 F1 ^% n 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 " O* k% B8 _3 |" m D4 E

8 O5 f6 p6 v0 `( ~

- t+ a5 A: @# Y6 Q. F; E9 n+ o: u# g vshapes= 2 h8 n# p: z, b. o4 f

8 m/ F4 o) y/ H K

% k$ [7 _& `* T" M   # l8 @+ I3 P& S: o7 w5 l

1 q1 O2 N' g; u. D) Y

% S, o1 f' K2 p6 b7 O   : u i' l" x% }+ L! B1 {4 X s) F

( m' C" v' h& J1 @: \$ _- c

' e. g7 N7 M- P2 L) t. v 签名信息 ' X2 t# v! G( R; C6 P9 f& j q

5 o/ P% G+ i! U! ]

" @$ s- z) K5 o c. L 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 % O1 t: S) x: r

2 @) C( L! x! N: x. f. u( u

. H/ `; A- v. n7 l+ f+ l 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 : W* s9 j1 S/ z7 t

3 v' }1 k% m2 H J

s7 d( ~8 }+ e8 Q/ v2 | androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 " N) I. e, o3 J" N/ ], I( A

& q- r, K/ \/ ~- L, Q! i! a6 v

8 \0 H; F8 f3 u vshapes= 9 m2 Z, L O! A

8 h+ `" R7 K' K( x' X; O

5 M' {1 b: k$ x7 g8 ]6 r/ B! X6 z   ! F' [+ E( e: V' I* ~ o

* L; g4 K V' ?" h" ]0 L

$ \* f& W0 u- T [ android签名的数字证书的一般都是采用 X.509的国际标准。 ; `9 X4 ~) q: E6 |5 u; l4 {: O( S

% F; n7 D9 s! O( B# o6 t$ ~) K

( m4 s L1 v( u/ i# c" w D X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 . W7 Y$ S. w. k

9 X! j4 D; P/ z+ [

3 j( N! K3 d! G% w6 K6 |" C 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 , j, e0 M a) W& i$ g. m9 f/ H

% D$ [& t* v) ~$ H" N2 `6 F* C

" w# Z, r8 h$ E; g vshapes= ( D6 w5 i: T9 V' [2 q

( j7 f$ k7 g- \5 ?3 P4 y

8 B# _, T7 J( `3 ?* X2 @. c6 o- h5 Y   $ m, T# L, p; c% i; z/ T: F4 f

9 d' C% x. g0 X. R/ ]

0 w" @ W. W' N: E8 r! A 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 0 E) R: b9 E2 A

7 E1 y6 t1 R$ u+ W+ P2 I' j

8 `- v$ c: E4 e. V3 r' z vshapes= 6 ^& R) j8 X4 r1 G* Y

8 z( P+ \3 e* T9 Y" f5 ]8 S8 E

; C1 \$ x" y: Y- p' h, C) b! s 7 Y( U c2 |0 h6 E, |+ O# Q; b

! v& s1 P7 j9 F

! A. x( @. _+ d   8 x( b* {/ z% Y- M

8 ~1 h3 J5 G/ K6 R: F& l5 K, R

# Y3 L# K' [+ Y( E' b5 K$ ^ 权限信息 5 M+ E. J: b b% w* K

0 O5 s0 `' Q) q2 ~4 Y% ^

( j; h/ M K7 E, G7 O( d0 F& G 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) & u+ }! P- x* ^" M! b8 u

; E8 R: t7 x8 D/ o ]

! f9 w* N x! E2 y! r8 L android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 / y% u k V. _- K2 ]' h/ e

3 Z8 G; S' R: q. Z+ G

8 ]* N9 K- z% } vshapes= 2 T! t$ i& o2 P0 H# w) X9 J, H. e

# r' Z5 n$ {# f

5 L! L1 O, [+ J* `" j" ]   h9 A0 G. Q0 p) Q i: k

9 B Z }9 p" d) A, Q$ j

- F! E% c& [2 }; n! f7 E% i 下面对这个APP的所有权限进行详解下: 6 M+ m1 o, q/ ]! v6 T) M5 ?

: R0 A6 a S; E* G* C* i$ m

3 M# v+ L5 i% y% q: m2 ^ android.permission.INTERNET :访问网络连接可能产生GPRS流量 1 u/ P* A) R8 s, H% S

- A& n5 C" t D: F7 r* J. K2 g' N

2 G# k% J; _- t3 q android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 $ k9 h& [, I* n! G5 S

4 n3 M7 |0 x" u% Y( V7 j

" E# [$ s" p4 p* o* }* f android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 " B% r; z# w3 D" D' C& v& }/ [

5 a: e- T9 j% [1 H# `4 p' `# d

4 v' ]& _. m! f- i android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 - }. F% E, ~6 D5 {0 k4 m$ i

* i2 {# `" ?" p# V! k1 A

! J/ H- F; U+ y9 m; u android.permission.WRITE_SMS:允许应用程序写短信内容 * | w: t' \# F3 P

9 X1 j; u& w& y: U; t$ J1 ^3 \4 D* w, \

9 A1 _2 H9 w" o( k android.permission.READ_SMS:允许应用程序读取短信内容 ) y1 e& P/ z; |. K1 n+ j: l

# g9 r$ a5 @2 W, d7 s; u

: v5 i6 L5 P6 M& p: } android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 1 S- M8 f3 s" }

! n# I: \$ D5 A2 I

1 C% {; H# q2 d S8 [ android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 5 q' n# `7 u# l3 E* U0 j# ~

* U; b* t. h3 V5 f0 U

5 x1 j9 z5 b# X/ \5 e android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 + w7 x4 \' Z1 |* [ a5 l

; f0 r$ u) f! G4 Z- t

/ o) ?) L3 j' ~( ^$ s1 v2 o+ V5 S android.permission.VIBRATE:允许振动 ! ~9 Z1 u) A* @, G; J" V

" ~: S+ u9 g& `- \# f( \3 L

" u( L9 F9 Q# _% S7 q! [ android.permission.READ_LOGS:允许程序读取系统底层日志 o/ k) b) m, I+ u, `0 r: V

1 d4 |4 [- z- |6 Z' F

2 d( \3 ?: Y1 ~) X8 h c3 c, Z android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ! m2 J8 g7 l, ~+ M

" I& K- O0 Z% m2 `

2 F9 F3 U6 R6 R7 D   7 A2 w8 c% j/ M$ O

$ a4 q/ q3 Z$ j+ y( w$ ~! S

/ Y! z5 p& H; u; e0 M 功能信息 3 ?7 H7 Z L* t% h b, b" s

( Z( q, u, z! U4 P8 z

; s0 D* Q1 q1 V! S6 X   2 j3 O. c- W- B+ y1 u8 ?% q

9 b( N" @5 Z% ?8 W" y& O$ v

, F1 G) d Q8 ]3 G 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 ; s! {# Z9 Z4 u2 u

6 j: ^6 J& J' A3 [8 j" Y

" h3 U9 ]8 u! E: K, n Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 6 L5 p; K+ e, v

! Q7 y3 o) N- w u' {$ B+ }# r0 S! U

, [. ~" i D" s6 m 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 $ j: S4 p9 ?; K6 i7 s% T9 g

' _( n/ E1 a" ]3 u) U9 @

% _# }8 M4 N! m& Z8 s 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 0 `! k% r' r# \+ w" [

4 G3 E2 _% r* N- p, F

8 x7 F! P6 E$ \/ u) w& F vshapes= % _; c/ E. C+ T% z2 x

3 Y0 F: t6 z0 G: q! V

7 P' g: G* J+ Z0 p# Q; j2 `9 V   % _6 T' N$ j" a, [* l( H) D

) ]- `2 L. m; e/ ^

% f8 n3 [% v% P$ h 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ! o% @2 y* B: f2 `7 b

2 v7 w% G8 W& S0 s

+ h7 C2 {2 ]8 ~9 R9 i& X) C+ ]+ M7 b5 a vshapes= % F" o# U# x( C8 V% F6 c& E+ i3 o

# h3 b2 S# V R! b6 g6 |) w

1 C, S( l2 c" |   8 b' i% z& M7 D

. y+ C. [3 j$ D# X4 @. ]

- \0 \* A8 g7 y+ h: D1 w lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 2 S! h4 c3 }! K" v- `2 Z5 F8 `4 Z

" l9 P( w: L. ~" M: O& ?

, b4 R) u) J* R ]6 u! H3 H vshapes= 5 a. t* X T4 F# I

0 h0 K! m- B( ]

( z2 o; |2 Y8 r2 e& x 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 2 u; j7 m+ O' I, {3 C- r

/ @. J' V( p# d

6 B- _2 B w( Z0 B5 b vshapes= 9 P1 H8 x. x6 a6 K' |( o; h

/ g6 G6 v4 l0 O& N9 W3 p

% F9 K1 f6 B% x6 Z) @1 S   ' k: S$ N7 @6 R3 L

! b% r2 c8 R+ `$ U9 V4 V

# T" H* m) N1 Y! k9 r4 M 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 % g$ B1 f2 u, s) u# Y

+ v& _+ k N; u5 K# z5 y" I# {

; j! m" ]- O1 Q LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 2 `3 w/ b" M. R: u+ V

* W0 s( N% D& @3 N; S

2 \9 J% s- j6 i8 T 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 3 `: U1 l# }0 p( p" I5 V/ |

; p4 K1 x, v3 L/ `" h7 l

/ u- E1 q( u# U 源的luasocket代码可以参考学习下 : p" ^1 a$ U5 i+ R- D# Q8 m

: n% [) O% C, E6 Y

7 W6 m3 G7 k2 l! v* ]& v# D https://github.com/lunarmodules/luasocket . L' f. ^4 v/ p3 w$ f( ?% R; ^6 g

O- Y. o$ I4 s; I; [2 c6 P2 ?7 M

b/ r6 `% m1 p https://github.com/fengye/luasocket 5 _4 n# M3 d0 C4 b, Y. ]% h

! P2 v9 X/ o% ^: y" A! c1 E& \

+ G, [- S/ _7 _3 E; n( \   % c5 D5 K; i5 K2 q

: B* s5 Z' ^) v" _$ r. g4 K

" ]* b; b/ ^" b- h& L vshapes= ' |! t/ U0 F2 Z8 Z. B2 l

/ a$ O2 j3 g) `4 a g# e r

- A; D& l' [& W   ' N4 J6 t) s Q' o& q7 `

' O- q* H; ~# z3 [) m) R0 m

^# D% j/ J) `   , T' x7 I2 S, x" F% I+ t& o: L

- H7 _+ ?1 l" H; o

& b4 g2 ?( r4 c6 z! [( ~$ { 总结 1 K. n# G2 P, |# @* c

* R# x- a' Y2 |5 t! f8 V

/ J c- D5 s3 S! A1 k 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 ) h1 C( x* _. \ O

$ r7 s7 x: w& `7 u4 E6 p) k

6 f" r8 R- T% ^0 { 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 % W2 Q- ~8 n# i$ H3 |: u J

: D+ ~0 ]" l U! X U! F, c

8 d3 L4 e! i1 @' o# p u 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 . s* G5 d! ?2 x% B( E& S: T

x1 _+ Q0 R( m2 R. K: Y( y' O

$ g% x' ?9 [; G0 A( O3 _ 结束 1 b1 T+ l* v0 O& O. b$ a5 @

c! i( W$ G! L) d" d# P n

- o+ F+ {3 D! _7 `4 R$ j, z" L  【推荐阅读】 7 ^' y4 t5 S o+ B A

. `: x8 L% O& }2 f/ a1 t+ I! ]9 L

, k+ J% w/ w& k3 p2 {* e* o 对吃鸡APP的分析 # n" |8 B" ]" B: x! V

8 Z% {# m; k8 g# S

% q& A9 g1 `9 ~0 j 你需要了解的APP安全 5 T8 w+ m) P% T/ a5 @* }

- _6 `2 G! H6 Y8 v/ q5 Y: `

" }+ R4 O* r! a! q- b. p 你需要了解的APP安全 6 I, L+ Z) K0 S$ U7 g

/ v$ Y4 Q4 u1 ~/ X* V

/ @5 U: B" {, m! ^6 ]   7 f V+ u& e% s/ P4 q; @' c6 v: G8 L. n

回复

使用道具 举报

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

本版积分规则

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