中国网络渗透测试联盟

标题: 转载对小绵羊的轰炸APP逆向分析 [打印本页]

作者: admin    时间: 2022-7-8 21:25
标题: 转载对小绵羊的轰炸APP逆向分析

, @* t/ x8 O4 ]( q# p; \5 I 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 R# m. g) p& l) T

1 T; L8 O# _ s( }( g* C# ^

( Q6 h: j7 a( O, V: L vshapes= % S- M6 ^% H. x7 k, z2 r5 d" E

$ a2 [+ ^- @7 B& d/ b/ o

s0 F) J P" ^3 N4 D& ^4 \$ e3 e   6 {6 J# @4 u8 T# w

4 ~1 U* z6 F" f$ G5 \" U

/ x# S8 T3 `$ _6 ` 下面就以开发者角度进行解析下这个APP的功能的实现原理。 : r+ g% R0 T+ P- ^( C# L# g

6 \; D5 H+ H3 H" w3 W

4 @( @8 o A* L* ]& h$ ?9 K   ' o/ b, ^; }3 y3 c9 D% t* |" j

3 M. p0 u, ~. I X

( F2 j H$ p- ?5 Y/ E( h y. b 基础信息 9 T* A: k- E2 _# w0 l F' X

! Z: L5 b* q, p, w/ ]" ^, ~9 p

3 X% g. \5 T6 P0 s) V 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ' g9 o/ ?4 x; S- @

5 R0 j3 ]' u1 g

! @* t: G; M9 T5 e, G: R1 u vshapes= 9 I9 v2 v0 q4 q8 e2 K

( C9 H/ t* j# x9 q9 R5 t

" ?0 ~ Q9 Q% h+ ]' M9 {5 D: U$ v   - ~& s G& u! j- |3 D

+ g: |* F$ l5 m- h. Q- k2 G4 d) c+ _

& S3 z+ W5 E. P: K, {' }, [# D 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 " N! s* d; G% E u9 x

3 X7 Q5 z2 L" G" _; H$ x; w2 L. P0 r5 E

2 |/ s! U3 K( c. Q0 V vshapes= : F; t* e; Y6 A+ @' j4 m8 `" o

, J6 K) }$ B `& N# H) j

^2 D) l% \- B+ q+ o" H7 M N   + `* J; {) M8 x0 |) H

6 Y( v; A( D9 p: ^2 D

# W; y. x" G" o( ?! m 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 8 T, D0 m' b, a6 L) p2 g1 q6 ~

& x9 @. _+ U. J; s, Z4 i) h7 j

: Q. a/ D+ U' a* G Z3 ` vshapes= 3 j% H& Y$ E* Q( \ D. K

8 ^ q7 z) E9 c$ m

|/ y: X) }& }8 K, v8 i   / @$ O' ^8 a" `

# W0 r3 z( b' y. W, E

1 B6 z* ]. y T 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ( m6 Z" d: |' g S

% ?) i! g8 O1 v6 |. H# x

& |- C( z6 u5 i8 |1 |! h, ?& [/ K vshapes= ! z, e; e( {. _7 g

! T# b7 f- D! [, m1 F

7 O- M( Q- g+ Z8 x) f2 @7 c   0 R+ `. A4 t, m v% w2 F& k9 a

* \3 \% p$ F* ?0 W* D. w; s

# x9 k( p3 S* Y# i8 r+ h 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 $ Q# g* u8 Q# e" ?: {

2 T' x1 i4 w0 o A, f

( U+ g0 h" q4 a5 ~ vshapes= F) H+ O8 Z7 q, [ e

$ j% `) {* g0 m+ @# M1 o: |

" C. X I m: {) c, \   / g8 @4 W* b7 _* Z' _8 P% A# t- Y

! H0 E& K5 o( |3 m3 Z; X

" L% n R* N# O+ R% |5 s) q   , A0 Y! g5 [) o* F

( E5 `( S- C' q

& [9 G6 p& x7 D% [ 签名信息 A) K3 X- b- y$ x. z

6 t2 d1 O& b$ o$ }" Q" n1 _: u9 a

# _: Z1 p7 v/ c& K7 J3 n# `0 N8 y 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ( c4 S7 @& o' n) n/ e

$ W) `: J' S1 }* v& M6 Y

% {# n- k1 i3 N1 T3 j 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 4 M6 j/ F' ^/ X+ [0 v; S

* m0 m* B" g5 Z8 l; r

* J" {; {; W4 k$ w androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 2 `) H+ s' ]" w$ m& k" y9 E3 x3 N

E [) g! E) N$ i( N* \- R6 T5 Y

! X6 s0 B- T! S! j& j3 G3 k1 ^: w vshapes= $ T( a" [4 d+ L

: f) v2 v& V: |) M) O( K

% p* k0 L3 {" u9 T+ b( I, |- x   ; V) E; G, b! O+ Q+ k2 K

/ }' M1 V1 W$ M# X" |" X

8 @ m7 R$ H( i( j+ _: y android签名的数字证书的一般都是采用 X.509的国际标准。 , A+ Z" Y2 p6 D; V# [, Z0 r# G2 f0 ?

2 I$ D5 S A0 k

. o+ t3 J; F8 @1 f" \) H5 Q X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 7 o- |! B2 e1 e7 M% Q# l

: }3 ?4 n+ [: R# r. J0 ~* Z, {

; X v9 v' o( K# I9 C8 z 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 0 K9 T0 [# _. h, ^5 f& u3 W

( W N8 ~' F! A7 k

/ o* t+ [% N7 N! U }7 r vshapes= 7 j P4 l6 a0 ~% c

6 ]. A) P, a$ x% I0 {$ g

& ]/ v8 d& A" i- X) T5 R2 p   - e+ ^1 m2 N5 a

) N2 w5 B X( w$ X! V5 ?$ P" o0 ]: x

9 z' @* l; z/ k! `8 ^0 l n 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 3 I% S) D' K- I" t: h, C& q

8 A- p& E9 @ P( O0 v) s

; g) r. }/ \. Q# R9 n7 o vshapes= 2 D8 p' Q' S( e: |) a

5 c8 I7 m; K/ W2 c; |! I

, u& }7 m0 h; L: c& Z# B6 P# r & Y( t( O# j# C# d' z1 [! B8 U4 ?

3 o5 ]" M# X2 |% G' y+ V1 M2 v, q

+ G* l0 R D3 L( i   / X7 I! |+ p" d, {+ Y4 O& G

: C. [4 \- s' d/ ?5 F, p0 B

% [( H/ D( s: Q: w0 ]# S4 l& k; f 权限信息 $ K; ?7 Z0 R: d) b1 J% s" q# ]

: d; w+ @& c2 |4 s1 {, Y! I- r

3 e! A$ b% e3 i7 U 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 8 v3 K7 |5 w2 C

* d2 m" b I* a

$ F; b+ E5 k0 q2 v+ i8 r: Y android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 : v) n g1 u ?- ~& R, b

7 g# d& D d5 q+ [) l: \6 E- Q

2 `, l) @. r8 b9 G9 C4 `; ~ vshapes= 9 s0 G5 b+ ~5 Y8 A$ }7 r6 k

* N) z6 W4 C/ D o* k

) q8 B0 j3 {* T& ]   9 t- |1 O3 j. l+ H! H$ L7 t9 C! e- [

8 x* J) h, @5 Q% x- k

) e; B4 X q) q5 C8 U8 ~: E0 U 下面对这个APP的所有权限进行详解下: - [7 D1 R& H0 b* F4 L4 E& v; A

" j) P( i2 k& z- M" _/ p/ A+ `- {0 M

5 \# W, i1 a: L; _! w8 t# g android.permission.INTERNET :访问网络连接可能产生GPRS流量 : g3 s# F- M* _

7 [. c- W) e6 p) N

. h$ M; l4 [' ] android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 1 w% b5 _9 R5 a- a

* q+ t2 U9 V h( o+ q$ m

5 Z3 i. E4 L. ]% K K: d android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 2 w% C3 g& i4 T8 p W3 P$ Y

6 g+ B! Z% r" N: z1 Y( w% D/ y; Y

- B: z: y$ f* u3 z1 h. y android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 8 F* X% E0 h+ [. j' T4 Z

9 j% W% N2 ^3 l S' l% k

; k: a# y- p4 O Q' s: C android.permission.WRITE_SMS:允许应用程序写短信内容 9 m; J# N8 a+ E7 ?% _! x1 n6 S

7 F2 ]$ }! z$ O1 C7 B% {( N

5 ]0 ^" I( [& F' Y- A android.permission.READ_SMS:允许应用程序读取短信内容 ( P# `+ p- T. A! Y4 }3 [# ]1 H

8 ?6 N0 t" X* Z( ^/ G: i

; R7 v R/ n4 {( w android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 9 F7 V1 u v8 O" B

" x: c Y# P4 j4 _

; b8 }) V4 X! v, l! y. C) B2 D( t android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 $ j! J C8 L( E

7 j' ~% h. i* W" s

1 x; E0 O$ ^2 ]1 \2 h- _' W android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 . _0 g+ M( Y$ Y5 I1 _: Y2 r& S

9 X7 G( a `5 T" ^. i# G$ ~

) C& P# _& |; F2 ]6 h android.permission.VIBRATE:允许振动 3 [: A& K0 J7 r: A9 j: |

% X! u, C! p5 D' i. j/ A: B

) x: k* w: L& ]1 e% O* ^ android.permission.READ_LOGS:允许程序读取系统底层日志 * r+ q1 S/ ], {' J+ Z0 Y1 u

7 g% M- l( U8 c

8 n% ~5 B( `: U) M; s android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  * {7 x) w9 L# \5 U i

2 ^+ Q+ ?/ M5 I/ z3 @3 b

|( i# S+ S8 e4 L. M4 j; g   ) S+ a) e; g: Y# r6 L( i( e8 s" s

7 t9 ]1 _4 G/ ?# w2 ?

: J6 l2 m( p7 P+ f) V O. Y/ b 功能信息 5 K2 x/ V4 L0 z& v* m1 c$ V

, i7 D. h2 h0 \/ I" T, a( D

% l0 a7 \; U4 `! M   4 j2 l$ m. a6 x# \2 N" m2 W, L& H

- h" J) }& q$ p; ]6 ^$ u6 }; q

' {4 d9 o0 X( i( ~ 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 $ f( T, Z8 t4 g

3 f9 s6 }& m# q- F4 c. E. E

/ B; O3 f. w8 t2 b, L' m' M& Z Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 2 A0 R2 v( p& ]+ _( z

5 g1 X6 l" ]% ]! _0 i7 _2 V# U. A( S3 E

* a0 e& d- g# e, M2 ]! [) n& U 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 + |4 L: L8 @- [7 a( m5 m1 b

& [$ i: q$ \8 d7 G0 y7 j% e

) ]. u" k" |2 s, {! G 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 9 J. J8 x& C+ e" v1 S4 q

' [ ^% q0 X, o, k' Y- \# U+ q+ R

& \$ G( d$ W" p! z vshapes= ) B% j. p7 x7 P( M

9 O+ M3 S) r& A. c

% X4 K: u" }7 K7 ~, R5 q+ _5 |   ' U# W: K. k1 K

' N# K; T, m& h8 z8 |

5 |( y) d+ l. R' d/ D 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 7 @. N% a1 U/ G) \% m

+ S* m% A4 ]% B' r

* z- C2 C u& @6 w+ t" E1 ~$ y vshapes= & E. G. Q1 H* R* W1 h& @- v2 y

/ e8 L+ e* v u4 R/ e( w+ z

: ]- W t) u, ^# ?' K$ [- _   ! x( h" c+ v0 q! q( r, s

0 w+ \9 ?1 h8 v; Q

9 X2 L3 D$ I. J8 i5 G. I5 e. z lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 : E0 o& v0 e7 U/ {

) J' ]2 K7 u" g: \

% R7 V$ |* o: m' ?) K5 f vshapes= 1 v' c, R0 v5 ?$ h l' D* c

9 }$ v. Y% {0 c& o& q* z

& v5 ] D- e B. G. G 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 1 [# F* ~ _2 K/ w

4 M5 u' p! c! q+ k; a0 }2 {) t, i

" z5 W6 }) w* E+ E8 F vshapes= , D, p/ T u4 y; H: t4 K

) a. B& e ]/ ^$ ?7 U6 W& D, }

4 H J V# C3 Z/ r9 h# H3 Y: M   4 F! r# G& P& g) f# `, w( N2 w

1 c7 |# a- N7 i: _/ i

( w3 t2 [6 U O# Y 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 " A" ]2 J: ^ R

0 J2 J; _( F8 D0 w7 I c& I2 I

/ t T/ U& p& S' w) @ LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 ! z; E/ F1 e% d, Z7 q

5 t- |. P2 s+ `( Q5 [

. x1 Y9 i& z! m5 p2 w 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 5 v; Z* h, c- }3 e6 a+ s

$ m. ~* P/ Q! ]$ x' M' C/ T+ a

, |% b s$ a' U3 ?! M3 N5 Z# [ 源的luasocket代码可以参考学习下 ( Q9 q& R0 O, w& f

* M$ x' ^$ a: G6 l

! U- l5 ?3 p1 v. v* c- _ https://github.com/lunarmodules/luasocket / X! b; a; T' r3 r1 Z* p6 g

# v0 H( o( }- N7 ^$ i6 n

: y, Y6 s) V) K* H https://github.com/fengye/luasocket 6 s, U: Z$ p( F" V3 a

" d* ?* w: l" K/ g! v

8 C! b$ h3 V5 |0 o- e4 Y   : l8 m9 @: k. b" Q I5 v8 {

1 F( q0 `/ L; j& y* H6 W

K6 I% @+ L+ V. u( H8 O vshapes= 4 _2 @4 [. k4 L) z

3 k& k# V3 c- w3 Q7 ], e$ w9 V

3 A9 s7 J5 V8 Q5 a7 c   9 _3 V5 `. F, _- F8 T

" L# p' }! O0 z) i0 B, o

% H, m& E2 Z4 f8 G6 D   g! H* {. a1 Y; J' }

1 L7 F% r) E2 E. Z! ?& R7 p

( ~5 Q2 P* F3 O7 e( H 总结 % N( w( G& P: M1 l$ { @( B# {

' ~, o/ o- h- ?+ i4 i

7 R5 z9 i M6 u' S' c# s2 \ 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 ( w& W7 D, t! J& {0 r( C: H! h9 O

5 h r$ N3 l+ Y0 |* R* G; ?' D

`& i0 ^) ?7 U6 X/ [% @ 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 * u5 |" Z& t0 y4 u3 k

~; C! r3 @0 A; ?/ W( {, L# w

+ p- H& ^# h3 F- v, P! F* C6 k( \ 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 4 i, i' p0 T. p+ I* H7 `6 a

' T1 Y$ |: z7 S1 h+ _+ d

" i5 p G3 h& g! b& [ 结束 & s3 J+ U2 S5 Y& X

/ t) n8 }% d; T

, t$ b6 a! n1 ~' ^" F  【推荐阅读】 / l# P* L2 ?9 l* y, e; K

8 E, R0 B8 X. r% k8 N

, t; u( o- c& w& D% h5 K) k( R$ l 对吃鸡APP的分析 0 e1 t5 s( n. x% i

/ }& j6 G. x$ O

: N7 k1 |4 \5 u 你需要了解的APP安全 2 ?4 r$ J& D4 H: G, z

/ e- H! y* d* h. G( R8 k

, D8 R; V7 t8 |! [9 j P 你需要了解的APP安全 * Q' \4 }1 ?. ^$ X/ v2 q$ r

0 _) V; b( _& V; H9 d- H# n

/ c+ j( p/ W# o+ g3 [) }   ( X7 X; L6 S; `- B p5 i






欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/) Powered by Discuz! X3.2