中国网络渗透测试联盟

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

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

7 d# @: Y; v) \8 ], \ 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 5 u8 U+ S: }2 {( b3 G2 w

8 f% q3 ^1 ^& M) x7 y M% _

" z* G) d/ o5 S) X8 Z; r& C, j9 G vshapes= ! Q3 C; N8 n, U ^0 g! F

$ X4 N+ P2 i7 g" @9 \8 Y( q

+ n: }) {! v4 J' Q   5 W! p' _8 z5 m$ M) u

8 k* s) m" ^9 V

' f6 K* _8 Q1 e8 _4 p 下面就以开发者角度进行解析下这个APP的功能的实现原理。 * N4 ^6 E, g2 X* ^' c2 @

3 x% N* c" C) [$ Y7 |2 Y, U' Z% h

) Q: n2 K; R- N+ R/ y" `   % t% B M: H! h7 }% U5 |0 i. e

" o% @0 A. e, \2 k

- @7 l0 I. L2 p4 S6 D. \: z 基础信息 + O1 {( B! a$ f6 [- z" o, _0 R

* {% @- o& N) D1 v8 o/ Q

6 K4 v- B8 z3 b. U+ P 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 + _# w; Y/ w* n9 b. T2 b' I3 w4 W

9 V1 i/ p$ I1 J3 x

: w. p* }) c% C" l6 Q vshapes= ' m; n- q2 Z) N0 T- _

$ k9 |- }1 Y8 ^

3 `; _$ C9 C6 r3 n   " p, h3 ~2 w: g" D3 x) P# A

, o: b6 k" @8 h. t) ?8 z

$ b& u7 q T$ K/ |# q# x 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 , Y9 ]& R9 Y2 W2 Q6 w

( E0 p2 A0 s. w" I: L6 ~

8 v" C0 B5 \. T" z1 A/ t H, H vshapes= % m: C! M' }& e2 k9 t+ e

7 I# c! |5 K& ]' D

* U& _+ N8 d: Y* [   8 |8 D' {3 Q. T) X8 |: B) F

, ^0 m# M" X" L& Q

" [1 V7 k: H Q s" { 通过jadx工具查看,该APP的Java层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 9 l2 X( L: _+ E$ j' |& j) k# q* f

- P6 R- @ g7 F, |1 J, T8 Z% m$ g

2 s* Y3 }5 O* V/ a! T9 r vshapes= , ?/ s/ ~: K1 Y u0 X7 Y% X3 E

; [1 f6 U: E7 W

6 b1 \/ ?( s! Y& A m9 j0 _   ' y8 l! {6 j: W! r* G% A

$ f6 z: R! p- E5 Y9 ?- |$ w/ r

% h* p, f y% Y7 k+ ^5 R% [0 @ 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1个EditText和3个Button控件组成的,也就是下面的截图信息。 5 {2 m8 ^: \( ^3 l* s1 R4 l1 ^

6 d; L, F: ~7 r7 h* F3 u. x$ h ?

; C. m* g, w3 M3 y, z/ _5 F4 a vshapes= ) ?* l, L1 z1 \

3 z9 A( t E" u6 J# B

/ p" C S2 p/ f) G3 b   8 c o) s6 _, i9 U! o+ _6 V6 ]

+ ?, O m9 q) ?! E- a

7 ]/ {+ G8 M. }/ L- v; i 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 - N2 W' a# i* {! X& e1 Y: [' A! q

7 B5 g1 T% ^4 L6 C" O' o1 X5 L! g

9 W/ p9 \0 ^( z) H vshapes= ) u a* F% H3 n+ u7 n& I W0 t

, [6 W. W; q7 f2 K

; g' V5 z6 `& D" D! P* R   . H+ R6 n2 ?! B% U/ w/ V% |

- J1 _+ G3 m1 r; i

7 [3 w1 X7 H( M: o   ; K1 s' R. w+ z) a

+ ^4 F6 h. d4 v! C0 @( g

& c( ~, h" `: I9 B% @% f4 K 签名信息 5 X& N" ~& a7 o' j% A

3 N; c3 M+ s& o. y

4 c1 k4 ?. }& o8 a3 j$ ^ 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名。 2 y' r( v7 a" ?9 j

5 I+ Z8 r* K$ d+ m6 w4 N$ A

" I x7 ?+ q4 ^1 l* }. ]0 e 目前APP中大部分都是通过V1和V2签名相结合的。并且这个在签名过程中要保证按照V1到V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 6 Y* I* _7 q% u5 N

. z/ P" Y& F4 E* z

4 ?0 U& {7 s3 ?/ R6 Y 在android的app开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 : @) X0 C' _' }% k

, M- S" k. ]/ ?3 g# f" b

. h& p# ]; h3 l0 T6 J/ S3 }* ^1 ] vshapes= 6 P8 ~: y$ X- h7 \% x

' H! P6 f- B# E6 J, |

9 ^4 e9 o5 p2 [+ N' w   7 o& R( c/ B. s% @0 Y5 \6 x

A: a; R; r+ [4 P0 R

0 c o9 _1 K) X1 Y v( p% [, A2 J android签名的数字证书的一般都是采用 X.509的国际标准。 ' z! O% X. a! j, u( E" p' |

/ ` T5 v- n; ~' `' q- F; q

! M. r+ F5 ?# z* ^# L0 a 因X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 1 v3 h M* @% J' H$ h

Z: X5 |# V& p2 P- B+ k0 [( n a

8 k6 z* C' [" s. {, N9 G 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 1 G, e4 L& \1 }

! t- I* U# j: y

9 _) U8 C1 o* _8 s+ c3 ? vshapes= 2 [2 c, D( n! o- {/ E8 h: T# x% |

1 X5 @8 w' ]0 ^/ B g

& f' k8 C. C* F' x   3 U; r2 P# j2 H L1 K

9 c: D3 A( n; B S( a7 y4 I% m& ~

; a/ Y/ L; P; [/ V 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ) b# {" v- E+ n- ^' N& L/ U

- D( |# f" G. w6 L$ a

$ b* Q5 a. _4 I0 x8 o9 F4 T8 q% L( @ vshapes= : b& a$ m1 ~% k- K

# K5 Q5 Q9 k' z

) x# o* U% f" x 、 % N4 K4 ?: n; c' b* Z- N

# d& T: P. ], E$ S! q, m2 s8 A. G* R

7 `8 d; Q; c$ X. i0 p3 Q5 f3 P) D: u   ' c- {1 R9 }2 @

9 H) J% Z' D4 Y; n6 W: K; O5 @

& L+ g% C( [* m0 u6 z 权限信息 9 |* k. n" I, b: G6 E& e8 Y

8 f+ B) ^# r8 P5 S; H8 Z, |1 C+ N

" [) a3 O" _0 H3 h: u 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) + ~# h) N6 [" B; q7 T3 z: X

; I$ ]1 P9 ?! F3 F; W; t

& e+ h# L, R: a android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 , a8 L Y5 ^! D& L

; k9 a: [+ W# ~2 s

5 X6 i6 R. Y: j7 f vshapes= : s1 ^$ q( C$ l6 n7 x

' F5 ^1 N3 h/ {9 H6 O

7 N9 S1 A6 I- s5 l+ p3 d   " ~+ r+ F6 h% l g$ G+ X, X

u, r+ @1 N0 @- X; A) _$ y

# l1 t! o2 f" a 下面对这个APP的所有权限进行详解下: 0 m& r$ d# `- J- S' {$ f4 o

$ o3 Y) e9 [$ h- |8 ]

0 A, @8 W8 ^3 t( u& o* i android.permission.INTERNET :访问网络连接可能产生GPRS流量 * w/ v+ R. I' E

% H4 A8 i& Y9 M5 f/ |

4 O" l5 h- m& o) L- A% _ android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 $ ~: u& ^ ~% n _, a

: [4 Y) n+ Q* c7 U3 T& c

8 m& ]2 ]7 A. a! Z* \* c android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ( G: [0 l- e3 d3 n' p3 C( t

; m; V# K9 i7 ?+ J) g

+ F; t' s$ h7 N @ android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ; {. ]1 M$ o. |/ @/ n, @

6 b1 A. G- h% B: v/ N# \. a

$ y) b% ~; ~0 e5 | android.permission.WRITE_SMS:允许应用程序写短信内容 $ D$ e. f2 f: F, h# |6 O

8 `, L. A4 ?8 }" M9 @, N3 z

; o; N1 X; t' D& e" I% U5 j+ Z. y android.permission.READ_SMS:允许应用程序读取短信内容 # h1 Z+ L) _1 [

$ j' V3 U' q2 D

( j. `) C s2 c( y$ y6 Y android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 * h5 \% `, O; {* T* |

E: Q. |5 ?( T% h7 D; P: E

% Q# N' l# D* p+ S( ]( H0 m5 a android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 1 A/ ^9 @ J7 n- N% ]: _) B: Y% w

" K& W5 }! S4 Q }4 x

1 m; ?, K0 P8 p r8 @ android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 % H) V0 E+ U% e7 }/ v0 L5 [: F

4 y* n# a+ U) m! a1 k2 Y

+ v; r5 i+ ~0 x; }7 l android.permission.VIBRATE:允许振动 * Q1 O& p7 Q# G0 a

, d2 I0 f) a8 n" ?

: a* Y& s6 L2 k0 D; x android.permission.READ_LOGS:允许程序读取系统底层日志 " b2 r% C4 v: t

' l. |# E! P7 P3 a

9 ?5 r0 @5 v$ X8 Y+ e android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  3 F4 H/ V7 ?- s. p( F3 t( O. g/ o

# W5 W0 ]9 L7 b' m8 W

3 E( Y0 M; `# ~; \/ ~8 o4 F   6 k" C# H7 L; `# i. |1 A' Q

k H! R F; I5 r/ X: q

& }, C6 d; ]$ e5 t c8 D; @ 功能信息 2 d6 v8 x$ z. ?+ M

* j& t' D4 Y/ j, B

& Y9 \' Z: u" ~: q/ V! c   7 q$ c! ~2 Z2 l% n% _0 i

1 E% u9 G' I5 O7 ]7 {$ n2 Y8 u

# k/ M! h( L' \ 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 : `8 }6 E; E& E. h9 B+ L5 c2 \8 j4 V

* p3 W2 m( f" y" A: M- c9 N

" ] k" ?4 P' N9 F Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ' S7 p" U: z4 x& R' |( S5 D

- o6 R0 J! B9 p# x( B$ x

8 X% ~4 }8 K9 a6 j M5 X [ 1、需要用JNI为Lua的C库进行封装,这样才可能在Java中使用。 % s. ?$ n+ l+ ?9 ^0 f! C. X9 j* [

' n7 R$ M" t! |, [7 W

) ]! `: i0 K) A* ?6 b 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 ]1 b& m. M$ @

/ H8 G* ^2 y! N! T

: V% N+ G8 n8 \! o" b vshapes= / _# v6 P& S+ D5 ]. G; N6 Z

6 B" {' b" C- ]4 R

; E' f5 v; C( }3 {5 ^   - K9 G/ h6 m( v* Q8 c, w6 C

1 ^2 f2 k7 |9 |6 A6 S6 T

# E7 @+ g& T0 Z" E8 ` 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 7 m6 i! B% E, d4 Q8 [- [- a/ r

2 S Y9 k& [" s- D8 |9 H+ h

( [" `6 b+ L+ ?# ?9 K. T8 J+ D' o vshapes= 7 j8 \$ i9 N6 r

( R9 ` C8 V( i% v2 n

- n0 D# Z' r' ?% k) a4 m9 Y6 H8 [, Y   ; W2 \* U4 n- r U: K

0 {0 O! R* A6 a9 d. x+ D

6 e' p- u$ ?, B4 `& `) P 在lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP。其实破解这个验证很简单,直接将文件的禁入信息清空即可。 7 n" S$ r; \0 Z, V* N

# {) k- [) \ ~# A" Q# i7 T* H' j

1 X. S7 n4 P4 f9 f1 C/ ? vshapes= , H: x1 w5 b8 `+ }6 f

J1 m$ x; z. \" L! V; }

* Q a2 G3 T, |) x5 D+ ` 下图的这几个so是网络上lua和socket通用的so文件,并没有什么可研究价值。 % Q4 h5 s) o6 j0 D, q( x9 u

" G1 J; S5 R5 K, H/ y, p7 Q

' \/ D9 e+ _3 R! ?& w" F vshapes= + A5 c( h5 Q# X; N( I

( y- T9 k+ x6 }; x8 L

0 ?5 k7 d1 O& }" ?2 x8 T/ j; T! B   * c- G% O+ r# w+ J

2 y5 T9 M: C, ?' |0 K

6 Q6 M4 U3 G! a$ y0 k* [ 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 9 A1 m' R( I* @. a6 M# X

) _% U% I7 m7 [& z1 U9 j

0 J3 d5 Q5 t0 B9 T3 Y LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。 ) ^1 q4 \: O f

5 P k. c+ z1 Q$ w

: Z; x+ ?' |. o; s 这个luasocke一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 4 m/ h( W+ j0 y* H+ v

5 k1 e+ G/ D) M) a

1 f0 C; J# B. W$ Z) d# S; I r 开源的luasocket代码可以参考学习下 + H2 {( X6 d3 f' Y& I$ f1 s

7 ?- K: N3 r$ |. g( c

0 ?5 b3 ^* M% z4 z$ d) C https://github.com/lunarmodules/luasocket 9 }* V0 k2 ^) Q& }: W& o3 S

0 ]* @* _, E7 U& M$ T

/ Z7 ]% _; i* o2 c/ ] https://github.com/fengye/luasocket 7 r* O5 X2 Z7 n$ {5 F) B- ]& V

# }, R, ~$ T8 ]0 T/ r0 \

9 {2 P3 n- S% H7 N. w6 ]   ) ~( L" r0 ?% C% e

0 K4 [& Q" o' Q7 G/ \ \) }

& Z: A/ V, G4 `. f: @3 g* U5 D vshapes= $ \) d% Z0 r7 M1 X

. J2 L/ O& M: v/ \7 ?

5 g" |+ h' o' T0 n. w' O% p3 K   ; @; V8 l5 M9 w. x# d" {

6 @" b8 L3 f! ~) g+ {5 h7 y

; s7 o8 X8 f8 B% B: D1 j+ O   " a: r: J$ S' H. P& { N

, f$ j/ v/ x+ X& Y9 U' ^1 {' R

' D2 K4 G2 `( Y- y0 I; J 总结 ) ^6 @) e. n( N2 |: @& N6 G# F% Z: P% P) B

0 q# S# [. x# S# s0 X0 G4 a

1 m$ N; [) r4 m2 y: z9 x | 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadx、charles、ida、uiautomatorviewer)工具就可以将功能全部分析清楚。 6 E: M {3 `' k; a) {

3 b6 H: {4 i( K8 J

: b7 X& F* m; M$ x( R# w( _' W7 g+ o' \ 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 0 C/ c% s& }: s4 p9 _

/ L O$ o6 E; A& l: {

2 N) @9 w6 z/ a g f 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 / u- E" ~& o2 O( p

+ s* d$ J! B" I' o

; @/ i4 C! S: \0 H7 E 结束 5 ?# F! b: b! S6 f& w! a

- N. \2 d8 a! f8 Y; P& j! Y

/ b1 b- h% b2 C F0 c9 i1 B  【推荐阅读】 2 g; l/ u4 h! t) E0 V* L) o, k

4 ]7 k7 k2 |; j4 A9 o* |

6 Y! @9 v! A4 W: O0 b4 R 对吃鸡APP的分析 + |( ]! U+ [; [$ k+ G7 W+ h2 J

3 H Q) m* h: k1 B# _& G/ H

5 h+ f: d6 A6 d) a) r6 | 你需要了解的APP安全 5 e, a4 X* Q5 I$ T7 o

& _" t1 c3 k/ ^6 Y* [' D5 v6 L

0 w% N6 ~: P- |5 Y; q& Z 你需要了解的APP安全 5 k& [' ?' Z% C. G' ?

7 _7 i7 J( i! H. n0 D/ H: c/ u

0 U. i6 T" @& R+ S6 m" v9 v1 F$ s9 Q   , c. s+ ~2 v" D






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