中国网络渗透测试联盟

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

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

" G. K6 e% _ G8 P# K2 q 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 + L5 r* ^( D, `

. M2 }/ `: t1 o- {

4 |1 G4 K/ y; ?+ t+ m vshapes= 9 l$ {6 e, d( k6 `

$ Z# p/ \ _# |8 x8 ]

3 r7 h1 `) ~2 A P7 Q* F% @   5 ?( {- u' y2 i" Y" m

" N+ f1 @; V( X+ B" S/ [, p

, E `. t1 p8 e$ m1 u8 d X 下面就以开发者角度进行解析下这个APP的功能的实现原理。 " k7 ?" A& ]4 y9 d' n/ {

5 ]: g) |6 K( o7 Y. y$ c6 a

. H4 d+ f7 J" J$ K6 c! t! @   * [/ g6 Q- E; A' h) |! R1 J0 s8 i

- k7 H' D. }% r9 c1 h" U

/ b. L9 d0 D( [% I& ~ 基础信息 / {7 N$ ], n4 @5 S* V# z! c

& l6 N5 e4 @) q4 n+ K7 o8 t

" \! |2 \$ }/ C+ j4 e d 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 : Y: ]6 F* E( U4 Z

' a% X% J( r. ?/ O% }

' m' D s) T5 O& Q! u: ~ vshapes= ' p O5 I" l6 @

+ \: ]" I" r5 w$ [/ e: V

# C* u$ G2 V" ~5 X   ( j2 }1 r; u1 c: j/ ~0 T. V1 b

' {& i7 E- X3 n$ P( H4 M8 a I

4 D' x% G8 G5 r# c 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 , P' E5 d# `6 k9 ? Q' F

* D6 p3 z6 V- l. C; g# @1 A

$ `; Q9 a* G+ D" H vshapes= & E k5 H6 F+ ~+ G9 e1 t/ Z; s

& k+ F* T/ w, ~1 i: T& k

6 O& w7 p1 `, L5 d6 c$ a   " r3 h5 T% |% W, M9 d

. S* ^/ p m! z u1 C q

) i2 q/ ?) h. D- o. T3 ? 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 " e" i. A3 q, h

1 n. f( n: Y% h/ ]

( ^+ C) Z% `0 T; _4 i4 r% Z vshapes= + y6 B* S) j0 V9 i* ^0 c' y5 ?* \

6 k5 w) x- I0 s4 \4 E' F! \' S

$ j& n7 i g, V+ W5 x   . L* l/ w: l5 D E5 x; r {

a) W* Y3 n1 G

0 A3 U7 E9 U# ]/ B' w8 M8 o. T 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 6 z) w; e$ `$ I% [6 i% p

2 ]! s E* g$ B/ j; v) p

9 u, J3 A6 G/ N6 I vshapes= . a9 D0 ^/ Q4 Q3 `

/ a1 Q- @% a+ a

3 g4 D4 ~& \1 Z: }+ M' L, Y, i) @; B   , |8 W7 D6 n1 j/ x$ G* t" S9 O

9 w: p k. C2 N8 y5 r9 B

3 `; T4 ^' e. @( ~ `/ B 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ' R/ |# n9 y F2 L8 A( T5 y7 u) u

8 }0 `' M% m3 q. \1 T$ |% O

( N6 a# i0 `# x4 F vshapes= 4 b. K0 _* s/ v+ V# h

) ^& I# [$ g# P3 J* M( J9 s; Q

- |5 ]6 z' c- K" R {& K   5 W8 Q+ W& S9 |, P1 D

% z. ~ K, e% d6 m( J; n: f

1 g2 c9 ?, c1 D1 x8 w+ W   - C" A2 B% P* N

9 b n% \- O8 c4 c

& |% y- I3 i* J) Z: s 签名信息 2 A' [2 K* ~: s+ n9 x

, T7 F' D1 E: R1 L9 \- l5 o

1 H+ q! u* O6 {, ]0 W 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 - `& q" \0 s! I/ @+ S

( G' h. K& u3 a7 E9 z8 u3 Y

2 {( t1 Q% L2 v5 x# s 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ; B- a1 B* j+ x: h

' x' b4 z% R+ |# W# O& y' H* [

% f$ d. }& l! ^* `9 v+ S9 U androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 / \5 T8 u7 O$ H

4 [6 P: q, w! v/ U2 L, a! k9 l

/ x: e: Y1 `1 d: f3 N vshapes= ( C% l# a( z5 g) [# ?9 s4 c

2 K" X0 \# g: z6 t/ K- m

7 H$ _' u1 T( [6 f/ s2 S! D1 t( t   8 i8 ^; B. N. a/ P# v2 W

* e$ }/ `3 u5 w4 S7 n

" W& `: S K) U) J0 j" x6 }8 w android签名的数字证书的一般都是采用 X.509的国际标准。 # h, e9 z8 R- C0 S" C

5 I8 G( n* F; u8 N+ `6 U+ g

2 J S6 z8 {# t/ N9 k) U X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 % f# O( }4 v' F) Z! d ?

* i8 a8 E ?8 a ?, v$ f# p2 L

1 `3 x/ }, M) g2 R! J3 F 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 . ?6 \ n L8 v+ `

& U# l( Y6 c! @6 M: v7 }

' c- g+ g! E. t vshapes= 9 e( d% v4 w. ~2 S

" k# N0 T8 m: F8 C$ \9 q. r

2 u' M4 B0 Q/ j   . _" c6 o. A7 W3 l% z$ c1 f: {

' A8 r) j9 [# `

# b( [( `' t; T% s0 }7 q3 X 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 7 g& ^. X# F& a( e; Z

1 N- @ r) t# B. j1 B6 N. a7 u

1 w, r( l* ]0 V- i vshapes= 1 _: t6 q- ~: }3 c0 p

( m5 O; j1 L6 C- Q; H

+ J4 o! [7 m- I0 ]/ v/ Y I ; F3 F" k- Y ]5 \ e

5 Z% N5 k ?) b! [2 d

* C% V( f9 r0 E   ' F0 a: [$ {* Y ?

! a0 Q1 B. @, b

" S0 d6 ^! D: Z1 q 权限信息 5 F! J% F. I# k

% i$ E. s6 N3 c4 a+ k( O" A [5 j+ z8 c

k) I2 W9 A8 j& j0 E, e 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) % G$ K( Y" j% o

5 X% I! s4 ?+ q* ], n/ q) j* d- q

( C, b. v- N# E0 B7 _9 y android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ' A0 q3 x, J d( |# q! ]

+ w- q3 d" }: l6 T' a$ G1 X2 A

. F6 U% ^6 Z' \$ X- t* I3 w vshapes= 7 m! M/ b4 [9 ^, J7 c; p1 l

8 c! r' }. I9 k9 u$ m. s/ C, K

/ o. B1 `2 u# O7 a% t, }   ( d! \4 j5 Y3 ?& d2 C/ O2 \

/ G3 \4 {' B1 q2 W% c- b

$ c7 t6 o7 a, }5 ^ 下面对这个APP的所有权限进行详解下: ( c+ X6 L' A- ^" j$ D3 J

& z* w0 F$ m0 R* b* o

6 [' @8 e2 m7 p8 Z0 N6 k+ } android.permission.INTERNET :访问网络连接可能产生GPRS流量 3 j2 M E- w7 a6 n+ T& ^

( j: \! A& M$ k! |9 U! M

1 T; `" e+ W0 t android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 , I3 _- e- G+ `

8 I) i- \) }+ c" A

9 O! U; b; E$ P+ ]& f5 P android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 / \$ ]& z. p3 a( P

8 Z9 |7 Y2 b+ l- G$ k/ O, e* e7 i

3 ~* Q, h* ?8 C, l3 V android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ! s% E2 a) m( D9 R- d+ Z" S: ^7 v

2 v9 l+ p' N ]4 f

) ^& z# D# u; r& X) \. L. b' Y android.permission.WRITE_SMS:允许应用程序写短信内容 . \0 y% G8 _( Z9 Y- F

: c! g& n9 X- ?" L/ X% }

5 S9 O0 E, l8 C- `7 k8 v. j android.permission.READ_SMS:允许应用程序读取短信内容 " I H( h; T6 H/ I5 a/ g

/ _$ I V6 R% Z* ~; Z( p

" M A; I7 W9 [7 x1 g android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 : v/ |, S) E+ p% ^

* }7 ?* C6 C! I% G( ~3 Q

9 m* q( s$ y; ` android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 : a' u* i2 ?' b7 @0 U( Q

0 j. \2 z8 E, A' b

3 J. C4 P$ q) a: w; A: W" b6 ] android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ) Q$ U6 ]! Q" Y7 n4 Z4 z

5 n! l# M; N/ o; D) W" @' d

) N8 P4 U0 y$ F1 i$ e T4 C android.permission.VIBRATE:允许振动 " v' t2 A' w: E; ]% K

5 A& ?# b% o' D1 C- J2 v( ~. T3 u

- I7 s h' ^ U3 B# V android.permission.READ_LOGS:允许程序读取系统底层日志 0 L9 h8 \ L: I

# w5 m( E' t( L3 r- ^

# {" j: v/ c; r, Q, w Q) b android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  n! f/ C$ x7 I0 G" V& R

; M$ Y2 w; }6 t7 I* N

' }# s1 _3 W. t1 ^- a   + t5 B- {* ?+ Y2 ?( C+ W, {

5 B. B: I1 B4 w4 V0 r, ~4 C

5 r$ Z7 }& q1 ~) E: A 功能信息 ; N; W% b! \) \7 R6 e# M

8 a' l( S. c0 s" E3 W

4 [9 [- y# |' B( G3 Q- {* |' `, A   9 V& L/ l# |2 O, u

4 {( F, f/ O j) G2 }% |/ `

6 F* S. N* W7 H5 a5 D4 @ 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 , n$ P6 c3 L3 B

$ \3 Y4 P4 ?' `! b

/ {* s# y& t6 n8 t9 R! ^/ [+ `# P Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 1 \5 t- I! O$ h

: `! b: p3 D+ b S+ f1 b

[$ w/ y1 G8 B- o; f8 Z1 o 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 1 l6 R- O; t" \+ u* L, G4 L$ g+ k; U( L

4 C; U( S3 Z. q

9 S+ U7 d' w2 U+ _7 }$ [ 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 7 W2 l* `, H8 E* c

- n! I6 S4 g) k. |' I7 u" ?

% z# r* k/ n6 L vshapes= " T' }4 G' S* Z3 O2 g

8 p# \3 f; j9 H ]* K- @9 t/ |

2 u$ P* Z9 d; }9 o- Y8 m0 b   ; N2 K. c# P z3 `' W/ w1 \$ Q4 K

" O' z2 b( y5 G5 T, }3 k

' X0 F/ Z6 s# m$ y& w& V' e 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 8 _8 ?+ G4 @ e: }% ?

' i5 B4 c1 k8 b# n1 t* Q$ k

4 {" @: o9 K7 M/ \& M! M) | vshapes= ) u5 b# Q" t9 H( C$ ~. x

# K3 v- B5 z( y% M

+ Y+ H, z* S0 M" W; b   ; }% {( I+ J' }: F

, y- W2 h% ?2 w% J0 j; @

2 o# K; w( L2 X( X lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 * m0 g/ N$ t9 A" M3 s

! ]+ ]2 v' H- q' O

9 ?$ Z( h; `3 v1 L* W' M3 s( V+ N" g vshapes= # z+ e1 D, I% h8 D5 O$ E

2 A6 C9 U" s0 {. \: B

- g' w% v0 H, x! ~% x 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 ; j& C; u& s" b& V4 C+ H

2 V+ Y; k* Y2 T: S1 ]

/ v) f% k- j- _" | B4 p& N7 v vshapes= ( y2 v: K# J/ ~9 M, K1 y

! A5 [! ]; y1 j% }! a+ Y d1 g

. J! {: \1 e7 q. W   3 a( C) W! [1 C w* B$ \: O

. D" q5 n' h: B" R

5 b! u7 @+ u {& E3 v 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 : P/ w1 i" m0 S- K2 ~7 \

" p, A6 f6 \- i; {8 Q7 \( S

" h4 G+ U3 L8 w9 ?7 _" u6 } LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 N% q1 B) g1 a' D7 H2 N @

2 K4 y2 b$ K/ ~; P7 S. |

- n, [2 F! c) g5 G: |( ^& c 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 , e6 A" i5 u3 q1 v

. l H+ g1 P+ F& Z9 W& z6 b% A, I8 m

* G* p% `' m! k3 d3 ^ 源的luasocket代码可以参考学习下 # N9 u) m* M6 q- \& D

+ r, o$ F1 p9 }

$ n. d( J4 i3 v6 q/ t4 H( U ? https://github.com/lunarmodules/luasocket ' b @7 b4 |& Z, }+ @

% h6 \5 O6 U& A# T

: F1 T, c C, d: y% x https://github.com/fengye/luasocket " } Q5 S2 G# l* c. X/ K

) m( E. C, F2 h% K2 _6 k5 d

+ ^( p7 b5 M: t- D$ F. n; V, I$ Z   : B2 n% M* O' j q4 y

6 I' u1 n8 ?. k9 A' e2 R0 R

3 B$ M: W% Y w1 ~/ L vshapes= 4 t/ }. y+ _ S( s

8 j3 H* p) C" `7 ]9 @& [

$ Y' p) v- c' p, R5 R; @4 H   $ B& S x; s/ x1 a5 K& T) ~; I0 R

4 j F/ C O% A

7 \' C) S. \( q k! |! T   7 Z* ^' x5 F& v0 E

; v6 I* j" Q9 E

, |3 T, s3 }( ~ 总结 ! F- A& P0 S7 K. x2 ~0 C

! f7 g$ w r c

( ]" I- I- J5 d. z, X3 ^ 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 , w4 g% N/ O* M7 a B

5 o3 r4 _, |8 i7 d( J/ [- }; e

& B8 c( }$ e" Y2 R# |$ k7 l 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ( y8 G& V {* a2 }6 T( B

7 L" `( R# w8 G% O. J8 i

7 i& W: j& l. ^8 f$ J! b 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 , b. W; }$ @+ q; N5 D" h5 U8 ]

& j4 l$ d2 f& c9 k3 W- W9 r

0 k+ M6 ]. ?# h% P 结束 # d' S6 |( g& Z

; _. Q$ _( `$ I+ Y! I

3 K2 V! f7 B3 {) }) ^  【推荐阅读】 8 q p: A& c; S

& U4 L' d3 \; g$ Z2 i

- D! z, w7 s) I" L9 |' z 对吃鸡APP的分析 - I! @( X% u, t1 K

/ L. {& B' c% H3 ]5 u

: }& A- W' F/ W4 i* w+ ]6 v 你需要了解的APP安全 6 s- M$ |. d. X& X) k& @

R# b- a9 s& Y, u

2 |# h2 m* {- J7 ?" I- `4 _! T) T 你需要了解的APP安全 9 ~2 h+ n. N& B5 Q8 I3 O3 N. ]! c

% ]/ S: w% j( s; Y/ y" |

9 G8 G+ D' e/ H# x( e0 s) f   8 A. ~/ x, ]# }$ H3 z* ? R






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