中国网络渗透测试联盟

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

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

# N0 h( E' n7 k" Z9 M$ O 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 : v/ w! \ N- U+ p) }

0 V3 k6 @! V2 \' h& _5 w

! |6 \( q, d: e+ ]1 u vshapes= * U. q: j. i( D8 A, |+ @

1 W! l4 n8 F% t+ N

/ j- V( ~8 z1 P& }' d   : f' O3 o! q6 c

7 k. k" n3 S3 J) j4 t! F

- |$ n# D% w- H6 b% I6 ~6 x7 d 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ( q* ^) Z$ ]% Q5 S) F5 H

. d5 o, j9 P' P6 r- W) M

1 T/ s5 I/ S! s3 d6 E( u   8 q# G. }8 M' Y' b& G

: J9 ?0 U- m/ F) _ y

. H9 h& n; f4 ?( l0 a! w 基础信息 7 L5 a% Y: a5 w! l# b5 b, \

8 V r# K+ \& ?. m2 |8 c+ s

( F3 p# ^: j4 p' F 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 6 h% K7 [ s) M3 B$ p

2 z; |9 a- x# c, [' ]2 j7 w! l

2 }5 m: q) g0 e6 [, K" @ vshapes= " d7 V( M* }- m2 y, M3 N

. ?' P9 u* i+ O1 H! S

5 q; {7 m. z; e7 A9 D   & p" y' _7 O/ g4 ?0 ]

! e: T, r! {8 ^7 N+ A

' S/ ] u; ~3 l+ C6 Z& J: J; E 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 % I, z/ j5 V V# w: f# l! O1 G

7 a' `. o& a! m' a6 U6 w6 E

7 t# x7 C& ^: e2 O vshapes= , E/ S' c; V7 H5 F

9 R$ m T3 D. k2 K3 F- i: n2 G

2 T+ s. O) E: U2 }1 p   / T4 V6 u5 v7 ?# l) J

6 ]! P4 \9 h' P) ~7 a/ c

2 D4 X6 a$ `& Z& K$ V0 V2 v 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 5 @' n0 M" V% {6 r3 T: g

1 L8 i& L2 b4 e. B

8 H7 M0 _8 y* [ vshapes= ( y8 u8 U W7 R4 k% v; c( `4 k. \3 k

" Q- i; c- s) Q( N

9 g" d# _) y9 `0 f3 g: U) _; s$ F% c   * P) r I% u2 `1 M

( x H7 H5 v6 V0 v

7 o! g* F. U$ O) {+ L3 c# x 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 + ^7 [9 c3 s+ `# |3 c! H

* b$ T. \4 D4 L9 f |: a

& C# v1 ~3 M/ q2 a! S vshapes= 8 z/ J+ R- w) M

% M# c$ e; R/ S# E; }3 P

( @3 x8 Z" @+ x   1 F; c/ v. {7 \

3 P& k5 O/ @( g- ?, P

9 O; E' z& [& k+ [4 y. {2 B3 T 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 % S' Z( H6 y( N2 J5 ^$ ?) z1 i

7 b+ f& O* t2 ?( }8 K

$ O. X! y- n: P% k' F, [$ {4 r vshapes= 0 q6 Q; A; t# A! ^

# J7 g5 T3 K) w/ }0 ^) I* O

/ o) n9 B3 Z* ~$ I- N   ' Z% E0 C7 d0 ^

! U* |: C, a: ~* E. n3 T2 I& e e

! q$ u* D! A9 D# Y& {, G/ w   3 |3 X! s v0 l! { B7 [

- y- Y0 ]* X, q8 F ^4 e

9 W7 w4 o2 O" R) P4 o 签名信息 ! f \+ P; Y, M5 O4 b7 D4 f( H

2 W K% A/ a- y J

7 Y5 p# b$ R( j N 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 % ^: @8 a& ` U) n8 @ e6 u: D: V s+ }

- }/ x7 h( Q3 q7 g" d0 `- F

+ L9 G5 K: M5 q% [7 w 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 $ A" E0 R4 Y1 e; ~( H' w7 Q

& j' |' V0 G3 u, |& m3 x" S: v" y3 L

1 \' m1 C' n! e' k0 g androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 * t& _ ?8 X4 E( L; A" k

$ V) Z0 t; s, w$ E1 ]/ A8 B

- f5 z, m: N, K0 v) t6 \ vshapes= 9 X3 L6 m Y7 ^8 s# T- u

. T8 M( o. |- j& o

0 k, J3 I2 H$ ?1 i; J K$ K) c( b   3 H0 ]! ]6 N6 l- B" v1 f0 B) H

- D# n, v( Y5 f( x: A/ u- B

# x- w& ?4 i, {9 y5 `" {! J: N android签名的数字证书的一般都是采用 X.509的国际标准。 ( a8 k; o" B! h1 N

5 ~5 o( A7 E4 E6 E

8 }/ ^9 Y1 {# d* R+ D9 K X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 - l. y& z5 J: b: I9 s! u3 N @

1 M7 c$ [% E' v

D3 g. K$ d. a2 x 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 8 P1 R( H* p4 C1 W* [. O

! |! d. S4 H8 d: q! s5 s

+ J' A- S7 A' E6 U. Y( ^. N vshapes= + J) z3 U$ P! Q* V/ V9 H

; J+ ]2 W0 T& q1 T& ~

2 \1 F4 }- S( P" u" P4 |5 Y" u   / C" e1 o, u) T; E# o5 W

* ]+ X* W0 Y$ _/ V& {: L# f0 l6 o n

M1 w! o$ P2 H* V& j, \ 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 3 W l, B, r: Y1 \* f/ c

5 n f! c/ g+ ?6 Z2 y

' [4 @- N5 {* q s) @( h vshapes= / D: ? G! n6 i, ?1 A5 k# K

4 s0 @' L6 n( o D

% ~* U5 a/ `; ^, R7 n- H" K 5 B5 H+ \% J9 o8 |3 @# a6 V. G

! @7 J( _: ? `" P5 S

" s) _1 G% v. U) L( F7 i   . ?# N* S. D# f) T

* C1 n. m3 G! y/ h3 ~6 O

1 i" C7 W. M. Y$ _7 A0 p 权限信息 ; M! f) U4 _1 H, b# V* r! Z, W7 V+ O

0 I2 V ^7 Z- n

3 l. R8 ]) u5 b 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) / Z; b" m2 m+ z/ g* S1 b1 M+ F2 N. Q

8 L* ?% J! T* a, N4 U$ e: u

" i4 F$ A$ Q. s; O% F. I android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 + z3 Z0 P) U2 H% F ?

8 s* y4 |; B0 W0 W2 i

; o" B. m& E" b vshapes= . p% y; C9 Q2 o5 Q+ w, b

* Z3 ?: }6 H! ?2 x: y( k8 s

; h0 y+ u. f" U) `# b! ]: M   " H+ A9 z+ }( N2 F9 {6 G

3 n' e3 `; N' U. H; i+ \& u

7 d/ l+ b0 N/ s7 @ 下面对这个APP的所有权限进行详解下: 5 G. e8 T' ]4 O0 i

( w4 c& R# N6 J( T: S) s

4 f8 `4 v s7 u8 W1 d0 p- [/ H* u android.permission.INTERNET :访问网络连接可能产生GPRS流量 9 C% R2 t7 R4 t7 ~3 Z

, ~9 \. T- }5 o# l; w, c

+ r' h N ]6 `: Y( \ R" J6 m6 Y android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 " S) g% P1 ~8 e$ a- e

8 q$ M. T; [, d( [/ K U2 N0 K

E% S7 D* S0 U! x* G. I android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 : }5 z5 r2 {" z% E1 [

& ]3 F0 }! Q& Y- y' {5 n1 d+ N

* ?+ t3 g) m3 V& p8 [7 M android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ' f" N2 z5 v1 G6 A

. H. d; ?1 U7 c: X2 Z$ e

6 Z) O3 X" g. p android.permission.WRITE_SMS:允许应用程序写短信内容 , }& |0 k( o. D0 j# j

; r: q1 V) c& }4 s$ J1 {

+ d! `3 Z1 Z4 O, X. _" x3 A# B android.permission.READ_SMS:允许应用程序读取短信内容 : `+ o2 }3 N6 g# V

2 d4 f: H; `5 k2 k; {9 O# l* Z2 [

1 ^: K% e4 u2 W. q' O android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 9 G. J) |" x' l9 d$ [- D [

8 D9 L( H* T5 g0 e# P

G) c1 j5 ?* Y0 \ android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 6 Q! s t5 p) }# L& w/ f

# q8 D/ b; X/ i! j) u0 a! @; L

$ D4 k1 Q' C, _* ]+ a3 t; v' U android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 % D* i) ]2 c9 Z

" j8 y m4 l4 z) N$ q) i" |+ E

7 \. s! A( ~8 C3 Q- O6 Z3 q android.permission.VIBRATE:允许振动 , X6 }5 y% y' u: J1 n* h

! ]6 ~: a4 ]. Q0 g

9 B/ r) h9 z- g! F* v3 ^) |( r android.permission.READ_LOGS:允许程序读取系统底层日志 0 y" T2 o' H7 g" z; P ?* y

* ~2 E1 |3 s: O) f- R; [+ L8 X

. N4 J+ A- M6 x, a$ B) I" m9 ^# T' w9 B android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  9 u( ?& K* z# {; F+ z

7 T. Y/ s! I3 L# {

2 J6 M+ r) f3 O) J+ S7 a   8 d2 Q/ V- s* b! W7 W5 C

?' @8 q4 h7 v3 ^' G1 g

9 O: _+ e& m7 z. Y. a 功能信息 ( S( g4 i/ m! v

% O$ [+ |( w$ \9 O4 |% w! a8 C L

+ m& Y. q O! X: }& x8 X   # b* _! {8 @% R0 h9 g% X9 }% t' r

7 r* D/ m( f0 h, E+ F

% p& V! J: j1 a; I7 Z 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 # C5 Y+ L1 v; Q3 H$ ^& l8 \8 S" l

! ^: Y b6 p/ J) ^3 Y$ q7 U5 t

- \+ x: {4 D# V6 q Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 4 b8 U3 w M! }6 C0 J

& M, k! N$ m! @

1 k$ H F- p2 J: G" q* T* m4 E0 u/ f 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 9 p/ l* ~- f' o

& Z* W; t# s, g( k

# }! K1 v1 _- q: y+ u- U 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 - v4 O6 q0 W: G/ a& U; f

3 l9 ?" n# u2 T3 |' d+ y

% X$ t3 S9 }+ r vshapes= % |) R; S$ p' P

3 @" Z0 ~ t* R7 h6 X) ]( X) K

+ s& j1 w* {8 T9 A$ O; o$ ~   * l& }4 C$ ]4 @( S( r

# ]7 `' J4 W _3 \" P/ C

% C4 e0 J# K' v( m- B/ Q3 }" Q 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 - ^; O4 v2 b( S+ Y$ g7 |8 E: K3 {) g

# J, ^) U( M. T3 E

: L: b; p2 m8 {- i1 } vshapes= 0 W7 t( u$ q8 s. T+ r8 a

- H/ u. Z- y- q

( g* U4 m1 E1 z7 f) z: P- m   8 i) p% Q' f1 ]# I

" ?; w/ E4 k$ s8 X& T+ g% Y

@" J0 C) o C5 @8 O0 { lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ' Q8 E2 y; p \& ?# {

& j2 r. _5 H, h2 A, A$ ^. Y

& W; L& ?' |2 x. Y4 s vshapes= : r5 N: \( `$ s

; S* A5 A# O h3 V; C& g& `

" S$ H2 A! v$ `6 K- C 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 8 ? s7 \/ y: D% x* n" @7 f! v

4 o' q$ E' l) h

0 p( t4 }+ E% q& I% g vshapes= * x, c: R- U$ Y: ^! [- g. x

2 g/ R+ l0 |- j

% f6 q! G% U' ^0 R   7 X2 [" c4 x/ S+ s

; \+ A, z$ j2 E

1 {* u. q1 s7 r 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 8 w Y: _4 Z, X5 n# I

4 g: R9 [; }0 w

) ]* Q- I( R9 F! T, E2 A. H3 Y LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 - |8 O1 K0 c4 Y5 Z

7 T. M/ b5 V% Q4 t4 t- Z r

# g( y, J$ F7 {3 e0 ]- x5 ` 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 O2 ?* ~+ b! T

+ d& A1 e; q7 ~; x+ E

; h' D6 g. c; W9 H6 j$ U+ T 源的luasocket代码可以参考学习下 8 V, K' K' X3 c

$ h( X g f: Y( [5 B7 v

0 y9 p2 i! j0 Z" U* h7 `& ^% q/ n https://github.com/lunarmodules/luasocket " O$ x* Q) s! Z; Q" d

" { W' y: H: U4 c

2 @: S' o8 o9 D* r https://github.com/fengye/luasocket 4 b6 i# h5 W K! f8 [: Y. \+ @) |

& Q; H# E+ p; w

4 ^( W; ]( n7 H* n   * A, A' N: _1 r( B, P

& ]# v) H0 \0 E Z0 T

2 A6 p1 E0 l7 Y$ I vshapes= 1 Q: t$ x' ]' F) g9 N$ }, L6 H7 N

i8 ~" G4 \. j$ @' J, e7 n

x q' U1 b9 {$ A s   ) k; p* ^, u. v0 p/ k x) i- k

- O7 A9 k8 {* ~7 y5 H8 ]6 @0 w

1 S h6 w. T e' k   $ s, I N: H# L# ]

' H- a5 Z! G1 X" @5 y k+ g; A& _, f

! Q6 ^8 T3 [, |. c) ~9 s5 Y 总结 , } F6 I7 _7 _( B2 i+ h

% C& q" `/ @3 S' M0 L1 a5 U, z

- a. U1 v0 q) ~/ v" u$ d 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 $ H5 g/ r5 K' g5 R" C/ i6 a: ]6 k

- \( f) r( S: I. |7 Z" C' _

8 g8 K q2 g: {/ p 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 0 O0 X# T/ Z: f& L

- L& h3 G0 g( M0 x+ T: c

% Y! W8 a# E; O; v; f 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 # n0 V9 ~" j: ^4 v+ c

. t# M0 p- q( r: I; X

7 Y" {9 P) p6 [6 K 结束 ! B8 n4 g6 k6 j1 Q- I

! u9 X4 a; K- ~4 {* o% A

3 M) X7 G% {0 Z$ V' u  【推荐阅读】 8 `' Y* Q4 S) \& ]6 l- U; a- Q0 T3 _

3 o1 @" ?- |. ?' p

" a# K. o! @+ b# s; u" u6 b 对吃鸡APP的分析 9 C0 j. j& d% V( I$ H7 K, B

n* |' T; m* F( T2 K* |% T- z

% e0 H Y8 V7 U, ~8 X 你需要了解的APP安全 ! ~6 z& n$ r- e( ^+ l/ g; k

* w8 E2 O8 M+ I4 M& q

/ J; v$ w$ F7 ^' m5 E. ] 你需要了解的APP安全 0 o. X7 l+ d: E6 O7 C( g# O. C

$ @7 F( N% N# L

. I4 o+ |* ^8 [+ V' B7 ?" ?0 i   " ]6 W" J& r4 v/ j8 k; q






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