中国网络渗透测试联盟

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

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

0 s6 ^4 v6 q% B* y# @* G3 J V; w 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 3 F# v2 J7 `3 B3 B

- u% p5 \$ @8 l4 ?" N1 z4 b: e& B/ r

( j+ s' t& a' | vshapes= q7 ^6 k: E1 ~7 b9 @

6 |# M j7 I0 A) F K5 r! r

9 ^( S/ I" _2 Y: |% X   + l3 D$ F" h0 y; b; X

5 X* S) D7 J6 f5 t. `

5 t* B7 S R8 `) I0 _: A 下面就以开发者角度进行解析下这个APP的功能的实现原理。 # I/ L) l( t- Z, T+ e& o

; U# @. `1 U# v1 m# \, n$ M" J

2 }3 F, N+ a3 i) x2 @% Y3 t   / j/ ^4 o' H& q7 b& H: a, S, S

1 _- o; C& f/ i) {! @

) a/ ` o) U/ D& d, @ 基础信息 3 r/ {- t( ^ _& Z3 j

- t8 S& _. q, L

4 ^& b3 J7 L) `, H, A 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 , f% A. z1 J3 ^* S

1 i1 F) U& y; L

O' K1 Q d! e+ v/ c; J vshapes= : l, A- k) ]% w+ ~$ Y

: b. w& [9 n0 L6 g" F. }

/ ^, d. ?. i7 e0 }   4 R7 M7 C: U7 _/ V- O

9 y" y6 p0 D, b6 ?8 s% F

: z6 `. H0 R% o# \2 I1 G 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 3 X u7 j% a- t

( {% g! d. p" @1 V

7 Y) m' M1 _' I vshapes= 3 i C* o: |2 E, P5 P w

j! P( L, ^7 c! e7 N# D \/ f

/ j- a8 g- M. |2 Z1 b/ ?9 v   ; v% `" ^; m% c& l' ~! O

1 e4 Q$ x4 ]1 D$ T

; b2 y' p" A$ N( { Y5 L3 `$ ` 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 # c2 w2 `8 J2 O6 [

: G6 u1 A: ]" Y$ Y

8 v1 ?- ]$ x" p3 V vshapes= : B: B% N" p- F! b! L, ^+ a% Q

- ^) n W1 \- U! t

& F$ h; f4 T0 S- E$ E+ U7 |   6 @* s5 q! [2 Q8 {4 M- ], N

' M! ], V6 Q* d7 M) v! i

. G" f$ [% ?# p$ v2 h 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ! M+ L- h9 J0 u' l3 ?- f5 B& Y

2 Q" ~. M+ x( X3 e

* k7 a/ t" h9 c vshapes= / s* A2 i ^2 i6 X5 s: E

5 H& I/ \7 s7 z7 K& B; i

7 \% i) l$ c$ D' E$ f2 K   : D" n& k1 \8 z8 ]: G1 x" g

! t" S9 b# M% u( m2 ~

/ B0 l: Q! m3 l; g8 S4 f 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 & p4 _8 y( y/ z8 L

! y! F. h+ y# I6 F8 `

! h7 P- j' @4 m( Q R vshapes= + ]( [# |! d) w) Q

* ^ o q1 q* U9 h

2 ^) F' ^. D: o; Y   0 k8 A% o" }) z8 q- |

" c2 H, M% O% j

/ l) q" N0 l; T2 g   ' l) T5 i8 J3 K: `' o% @

9 P% v9 g4 o; q

; Y w- l2 N3 M4 g- F5 v# R8 `% N 签名信息 ) ?% P2 J6 u9 ~$ S! z, x

# v# x) R0 f: o

. D9 K6 S4 d( l- ` 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 - _2 ?; D, W! y$ `% \# ~7 J

8 t* W1 @7 U5 L& ^0 ~

2 b( e8 _' h; p0 y' H" L7 t2 q 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ' `7 }8 T8 Z: [9 y

" ?1 P5 [/ |: @

8 `" K: o/ F4 H$ S androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ( A0 l* N5 o' o

. x) E) j& U: k

( I" d( L2 ~ ?/ I8 x" U vshapes= / H( k" ^' r2 `; _, m

+ @$ r! J+ h+ o- L2 m6 G

* j+ C( N! y$ H; _2 d! v) ]   + O0 Z/ v8 _% I* h; B# I1 L1 b, R

6 Q- k- ?2 V" [- Q X3 n

( |' \( K6 }+ F. k6 ? android签名的数字证书的一般都是采用 X.509的国际标准。 " {6 U* ~- m+ P* s1 s# A0 e

2 k. g! V2 o, L" X9 K/ F

' a9 x+ J, {" i- E8 B1 w X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ( X! _2 s. Y( D; p3 F( L. {

' L& s, S* D* `1 x+ I+ a% |4 A

h6 s z; \+ ~: y4 h 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 2 s" s( Z+ H0 V4 v& _/ ]3 I

}5 l: L6 t* i

1 W6 [# o1 B, Q, R7 C# O u8 h vshapes= - B7 { }& {1 x7 V5 y: X* N

% L9 O' |- w' n; x2 {) l

% K1 h6 U2 e) U9 h- U' {0 v0 P   " R' r! F4 g8 c; t

6 b; a2 K) J3 Q I% n

+ j, W* o: M: S+ ]( d* \ 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ; h* n' Q7 l: {9 e* n9 L- G- z& ~

5 ?+ _& w+ R. `) Z

) [1 t; s4 Q- C: b& c7 a vshapes= * M8 G. b- e: I" f8 ~7 K8 K# D

' i/ u/ o) }% }, Q9 w

?5 S3 s9 N0 j/ O; C% ~* i i8 S$ t ; d, N+ w6 H# Y, r8 B" p4 V

7 [8 S0 [! g: R5 @6 H

. |! V" \/ C; k2 I' j0 ?   ( H1 j/ H; q( \6 ^3 w- q* ?

8 t$ M7 t/ S& V' y

4 Z" u. P3 T8 J3 g$ d# L. I+ r 权限信息 7 g# l. x. L/ Q9 B r

7 R9 _# {) m) p8 B

3 V" H! P+ P; |' V6 B 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) - s* i% b' q7 K. A+ ~1 j: I5 n

' p: ?! m; I+ F# e3 y

1 ` L4 |8 f) O9 g7 g: } android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ) G# @1 M6 a$ V

6 Q$ p4 N; p/ w

4 f6 s$ W( L( o8 p) ? vshapes= 0 _2 M; w k4 `* z) W: r# B2 ^7 ]

8 `7 L- K8 Y: Q) K4 N1 T8 y

' z$ V2 W% W4 A/ l2 z   & ^1 n* V8 F/ o& A) y$ J

8 w, r3 s$ A' d+ d& A- a; h, u

% b6 T9 P1 j, v1 R1 s0 ^ x 下面对这个APP的所有权限进行详解下: H A$ K; O* H0 N. a

, Q# [! {: ?5 T$ }

+ I% C9 v4 E/ ]7 I7 ^- h9 E android.permission.INTERNET :访问网络连接可能产生GPRS流量 ; f% T; L9 N- u- ^

# X! W+ H7 \! d! _8 g

) J/ Y' Q. J3 q; s2 `5 D" _, { android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 5 W2 N! c [5 D( V0 p

$ w- |) ?% @% t' J0 `6 [) A

, G, p: Q$ Q& M android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 7 N+ P- {- P: _! g. r

: [. Q- ?! c5 I a4 v

9 X* Q$ i0 x/ D) P: W3 f- I android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ]4 h' M4 N( ]5 A3 |

% K/ R- h7 W0 |5 R( W

" F% b! S$ h; B/ {+ D android.permission.WRITE_SMS:允许应用程序写短信内容 V: Q( U" l2 R, X" q/ f- U3 |

, t/ p; @5 W; H5 P3 K- o

. D( o- a1 y' z* P- Z! D android.permission.READ_SMS:允许应用程序读取短信内容 1 W( T$ i# }$ L$ Y* \& o

! P# A+ U% a& |0 i

2 r$ K; J9 G7 d9 i android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ! }; Y! G: _0 a, p$ m4 ` M3 b

$ a# J6 o2 C1 ~

: R% ?0 ~7 R7 U' l5 L' f android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 ' ]. j* J9 Y6 \: l* V! z) L" f$ L

% v; `% W: g" @6 B/ Y1 {* t( |

0 { n" S/ G& | android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 . O/ u; v) P- l4 o: Q

( a+ L Q' a+ r4 [

/ e; a- N3 n' M3 S+ |+ o- N7 V android.permission.VIBRATE:允许振动 $ J7 K( m& I( Y. {* k" B5 K

( {( Q4 g7 m0 J/ g0 a. E& l

7 `- H6 T& A, D' J2 x android.permission.READ_LOGS:允许程序读取系统底层日志 ) b! S% G" Z0 G$ n* h8 D

. ?/ ?: a0 t& x( p/ o8 E

/ ?% Y" r7 x& d7 Y, \8 b android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  0 ^ Z. f+ T' ]6 Q3 h6 l

# V$ p4 z X7 `

* x# x) v, @5 A2 u- ]. n   1 ?) N) `( C3 Q6 v6 K

5 @ T& M$ ]* `7 b+ `. [

% e: E9 ?" U7 I' a' m" u0 H 功能信息 9 L- T) k- w v

% K; r4 Q3 e& R6 m9 B& U* W

6 l3 R/ n5 p h1 c   / O4 E/ w7 h" L

+ z" i, u3 W+ B% d7 @

& [- c- H. f, X# d% \# w$ P! \% g) d 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 & h$ {9 r; S; N

( `2 @# Q, ?/ E% h5 Z; R2 X

$ h: T8 I4 U7 Y& M' ]% c, W6 ? Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 % g+ O2 C$ b/ C1 g* f

5 w# j3 f9 V/ M

; a% _, w% V# N7 H* L 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 5 K2 Z5 h$ b2 q" w( K- d/ Z$ c

. l% ?8 a) z8 [0 r

2 K) W! `3 k/ O* N6 _5 g 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 ) U# Q# X/ ~* Q

+ j+ j* [% Z& b0 ~# K0 Q1 u+ x. B

% V& k9 C3 c" L' j# M( J/ }- e vshapes= ; q! F: B* l- u& P* Z* O @

+ o0 I1 Q- v+ A2 s, d: |

1 G% @9 q4 L# A0 |   * O& r% Z# y4 K0 C2 y) z

3 }8 J9 R) ?0 m( C5 R' B. `

, V. \# W6 }* B& V" N5 I 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 , L) b$ X$ |& n, c! f, X

1 b4 |0 ?7 T2 C& I, ]: E3 C

7 z& i8 k' Q2 w8 d9 G3 D$ e- ] vshapes= 3 h6 W# P; Y# _5 c

' r5 g# F3 F2 M2 W/ O, E( \/ o% k

b% @) g2 E& c& @5 l8 b4 Z1 l   8 w. ~ i* N6 L& w6 U

! M6 G2 J; ?: N/ N4 m/ c8 h$ [& y8 E% W

& g6 K( h5 p4 Z6 T1 _% q' Z lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 . s0 Z6 z# g+ P, q: w ~1 _+ L9 q& V

4 M8 z1 a ^/ [: Z" t: O. }

. l) F4 X( C7 y6 A8 G8 q1 ~ vshapes= ( f/ w: N* G' j

& C3 a0 C8 E2 u4 R$ c1 Q

- O# R0 [' Q1 _ k 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 ! d5 l/ [/ ]" n

1 Z4 }' {: l& D: V3 d$ C% H+ `

8 }2 J6 m- N+ Z3 f i8 N vshapes= # K' J. v& z9 Y9 a( X

. C" |7 j p: J( }9 f) o* F

4 T6 Y& W1 e u: Q v   4 I- ]1 q; U ]6 n

, _. ?- k; V0 ] T! S5 E) `

) D; v0 U/ B2 O3 e: G 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 6 I" P7 U5 j" P. E z/ g

9 B/ t+ t( ^4 Z' l7 X$ l8 o9 K* P

5 f* w, ]; @1 A; ?" `9 P+ \ LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 ! h0 L; X; { U# I: t7 m# t4 d; q

( z q0 Q u% ]& K5 W6 R! K+ V+ g

9 J$ j" v' U, O8 P# S1 s- [7 E 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 * K, z+ k }1 u. [ T

: Q7 |, K2 `- F/ E/ l% n

6 B$ E+ d, r# O+ l4 G7 K 源的luasocket代码可以参考学习下 % i; `5 ]7 O! B- |' p

: L, K! K1 \* |$ l

) z w. G% Y0 d https://github.com/lunarmodules/luasocket 1 G6 D# v, N% ?+ I% B- I

3 _, A5 u5 p! ~- D, `( J0 w1 l! R; Q9 H

. H6 V6 }3 Y- n, L: w https://github.com/fengye/luasocket 4 ~' u6 R/ e! d

* ]( w& u& K1 _ v

# y9 q+ W9 O4 M: b   * s8 {; _1 H t& b( J" J8 I! C( ?

" H: v' }$ z( w6 z

7 W) R3 m/ I5 o7 u( D# ?! x& I q vshapes= 4 S9 _ _' w* C2 w- i) i

# s( \; K' n$ }5 v1 c1 T

% j2 E% b$ c" N: x7 r7 w# l$ \& |   " E; r! `0 g3 g/ ~

3 W7 w |' f9 x9 y3 z! P

5 F5 x, n& M# M9 J2 k7 o4 q Q. A1 s   & @: }! [$ I5 z+ Q5 H: D

3 B7 r) h; Z5 w

; h1 |0 a$ @5 q! R; [7 c& | 总结 ; L! z* m, f' D( e( s* | h/ J' q

0 {: a: X! b% z+ {0 y/ q( X7 s0 o

. s* e9 }( |- _ i0 [* e9 f 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 8 A! u. x7 T, A5 W% _

3 Z5 R# n: Z/ \- R' h3 n

! f o8 m2 w' z* I2 G% u" ~ 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 4 y: @4 m: c. U. J

9 X* A7 ~" y1 e. I

& g& M, {% K. k+ O 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ; `/ P/ F; P8 I* U" J

) E( n7 J5 C2 y) K

1 r |$ F% A) V 结束 . L# u/ ~% B ?9 F

- u8 A Y e# J7 Z& e6 R/ q

& o# }0 K$ K+ E: Z; g0 p, b' n9 \  【推荐阅读】 ' q, ]" B) d4 B E$ o

/ r: x7 T4 t+ c) E% b

, ^; x9 J- o! @9 t3 S0 ] 对吃鸡APP的分析 : c1 s" X( l9 C: I& J1 T

3 a# y2 v% b5 B; `. E

; ?: G2 C" B0 O5 Y9 u! b Q" v 你需要了解的APP安全 & g8 a% f( t: H

1 F6 w" r q u6 h# ]4 {

7 X1 f0 Y3 K2 J! p! V, K% ? 你需要了解的APP安全 & y9 p5 D5 Q0 E! f$ w! }" Y

c7 X1 k# A, y3 } q

; S* l; ~+ I1 ^7 f7 r   1 o6 u5 V6 V- e N* a6 s) Q J4 C






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