中国网络渗透测试联盟

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

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

4 S% z5 R& H+ D9 ?4 m# q 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 1 v* D7 x) f; p8 T

. u9 }, y% E' U& d: W5 J

& s6 N+ A' r% g1 m. X vshapes= ' J( j! G+ h) z# O

4 l! l5 b0 c3 M7 d

6 }4 T9 v' c- |) M; I" Q8 [   & p' k1 c$ s5 t& O4 `9 u! X

3 B& v) g# E+ e6 j

( K$ B6 d0 ]* ~9 r% l, @0 R9 m 下面就以开发者角度进行解析下这个APP的功能的实现原理。 * J& ^3 S- |$ T

% M5 j* w* ^% v& k7 Z1 z

3 r7 f$ i. b) W$ l0 n3 g   ( y1 A: n+ q/ v) j

, r/ a& s6 |0 _+ g+ C

! U9 @7 L* ]" u: w5 n 基础信息 7 `2 o; ?; W. L

( {2 j0 M9 X1 W. T' R3 l

) _; S+ p) l% X! L" J% O 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ! U2 _9 r" H! t0 D/ x, R

4 [5 c+ Q8 C- o' v$ ~# Q5 \+ r

+ a8 b9 U) B' C) e+ ~! H5 S* a vshapes= : o! S1 z$ a2 g

# V# n' y, \5 y0 t0 B% B

/ a5 u" [! v- n; i* C   . S' }# D. G8 x. W2 r

- S' p. c8 t! P' u+ V0 C1 w

( f8 H+ l L$ ]& y7 d- h% L 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 6 o4 `3 p! M# H' t, E# }

6 m4 \" ?# G: i, a# Y' x% Q& k5 u" I

* U8 |" d: R; e vshapes= & z1 b. Y- p. s/ E

3 B) k y. T0 Z% i3 A

9 @6 ]0 o2 Y, l$ ?* g3 @- z7 Q   " j2 r9 j" \, p6 l1 Q

# [4 Z$ ?. V, z7 K% U

' q6 g/ C4 W: R* [ 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 # y7 s- L0 X& h

; u* Q0 K& l& y: O( K

) G: l# j9 O7 q" D; ]; c vshapes= ( d+ X3 ?& f( U1 K* v

' F$ v; |) a( o; G3 ?2 u

/ ]/ Z+ t7 m9 j' R- `& o   6 Z* M/ g6 ` E+ [8 c

* ~0 N) f5 l% N3 q5 {; E( n1 I

% y- u5 P0 U1 D+ K, J' |+ d( ~ 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 " V' w4 @& ~) k" p2 k

. T6 V' t; v2 m. u* p

6 V+ i1 _7 O, N8 H vshapes= ! F% Z( T/ p9 _4 d0 x

8 \- Z0 ]7 k3 I* a

' o2 D) s0 X1 Y l   " ^1 u" J' G& t4 A1 o% r

, q/ H) l! |0 A* O2 v

* s) c1 b# q3 T 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 X4 m) g* v3 ]4 a) Y

) t, z- o% n9 w+ T: ^: }9 V

. t2 \3 w2 ~. x( U( H/ Y2 A6 h" t& } vshapes= : W0 Q/ ~5 n6 h% x X5 u. i

9 w0 v& l! R. I7 J, E. j2 s* ]1 Z8 H

Z3 T% W5 R6 C: w6 C( t' ^# J/ }) W/ g   ! \9 a$ s3 U: D- M- k

6 U7 Q0 a t# G/ J+ V* ]- a: d

# y4 E* H0 G1 }8 C) {   2 I7 E% e) N( X

. E) b, z8 R1 |' D; o, w# ^

- h0 @0 J2 J& u- s9 q 签名信息 6 z4 C9 k) p1 s+ {

" |; f: V* }2 F+ N+ Q9 U# W" f

5 d! o3 d) l- d9 V0 l 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 , e# W3 Y+ g. J- x6 @/ G

' h9 K( c9 G; ~" A1 g! ?& ?* Y: P7 l- \

0 {' m# B0 Z; T9 A3 E5 N6 h1 ] 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 3 ?: L+ ?0 G F4 e

6 N* O" N; J3 ^% G2 l/ h

% ] X7 X6 T+ K; |# | androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ( y2 h' t. ] o, Y! o

% g; z4 V( _, b1 X2 L$ {! b

6 g B* f D" ~. b' W vshapes= 1 V) K8 [, x( R d4 \$ F; M0 M

8 S2 R" u8 L. V- s

3 V% @3 Y4 x$ `! A4 q   3 H5 j' R% \2 h. l& a* S, n+ p

4 N; c$ x$ C; N: s! }: c! I% i( a

; L q5 X2 _; `: j5 X4 E: I* E. g android签名的数字证书的一般都是采用 X.509的国际标准。 0 g' E( f* q* L/ E

/ a! o( \2 a- F; B2 w! ~$ |3 g& ^

' d2 l7 L/ A5 z& I9 B: |& l/ L, p X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 # X9 A2 [/ M9 y5 D. [- E2 U

2 s( Y6 [2 f7 o3 ?6 A/ }+ i

9 j( z0 f4 g& o: c 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 " t' P1 L2 e$ Y

( Q/ u- ]1 Y9 B I n/ f

" J' S1 y3 U2 d1 C7 G- t vshapes= 7 D9 {# ^/ S% U% O4 H

0 L' z6 b; ?- p- a7 E7 ^

& e; u$ b- Q8 E" R- f- p   0 g7 A* @7 S: c' o5 F. g

- o: j4 w# A0 f) R: s7 Q7 c ?) {

4 X3 ^4 F; J( }8 x& ` 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 5 W2 g3 Z9 c# A

% v8 T/ G" O: }5 w1 ~

( \) @( ^! I; d1 L7 }/ e vshapes= 8 }0 S+ v* }5 ?$ ^6 R! K5 C

& f- h( S9 W* k1 Q

7 r0 G( n! C, N& o# Q * S4 ~- V# Y$ f9 p8 `: A% [8 V

$ a6 z1 O; v. W$ x

! m$ O! _# A9 d$ p   / B1 t2 {; K; D- y- B. d

$ e3 C- h5 Z8 g5 C! Q- u8 g, |6 s4 l

1 i' S) q6 D+ f2 D 权限信息 / t% M. J/ T$ b7 L' N3 Z! a4 b# i1 k, t

& F: A+ d/ ^, X0 F. ^

7 w' S! ]/ d2 ?1 |, W) i0 ~ 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 9 w; N1 Q( Z5 C# c" P

' `8 w9 w& U/ W+ s

, |% b. J+ `% |. Q7 _ android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ' b7 N: K0 Z7 U# f

' M. F* ]* r- K o6 B3 P

" @1 X0 G! c; }" E2 J+ r vshapes= ; t$ J; J: k- z1 d; c( n

' ~& ~7 E+ U8 t$ x& G. t

, x" S @" z9 T$ g# m7 l   8 S/ c( k* W! ^( E2 U0 `

9 m1 Y" [4 @* z" G( N8 x# \# S

4 b& C* }+ E1 O$ D3 P1 ^ 下面对这个APP的所有权限进行详解下: ) r8 v: h* }, c+ n; e1 k. p

, b8 v4 s9 E8 f% m/ s! l

) J+ G& _; I+ x android.permission.INTERNET :访问网络连接可能产生GPRS流量 , W3 P; [" f5 l; Y' B% U" S

* S' K1 X$ \; y) e- H6 A/ r' u4 d

C& {5 x# ? I1 g android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 t6 d+ K1 K# k' r# N

3 C) \# i; K& N

0 e, i0 Z* j, h! y9 { android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 9 j- j2 Z8 L! A% n. Q! U; i

: l% g- T% F1 _+ T* k' v0 u$ d3 ~; ?

5 T% f+ L/ w8 P/ N2 \ android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ) C' _# o6 C* r9 R/ D1 m G

: X' l/ q; R% g/ S

1 s- B, g$ \) j android.permission.WRITE_SMS:允许应用程序写短信内容 ' |7 x4 Z2 S3 D4 i) o$ n

, j: e' U* s$ c) _+ M) d

& I( I, b/ K. z9 S2 ~7 e& h android.permission.READ_SMS:允许应用程序读取短信内容 ; Q. S3 v# C; c

# T9 z1 L/ Z' U+ Q: I

) d. p6 R3 B' O+ N- a4 U android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ' Q: e- x# |- N; [+ \

; X4 S F2 A) Y, V- y

2 F5 L5 r% V! { I, n" } android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 2 B4 Y9 k4 B1 m) V9 {

+ M1 Q* o1 V' G

8 }0 D1 `+ a/ O* s& g: N& V android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ( U G0 @$ @- A. z, K6 ?

, w- e# `7 U" G: }2 O: h2 I

% r; N/ e" V# a" j android.permission.VIBRATE:允许振动 * z( X' k# L6 t7 D8 a$ F3 O& G

! O( h. B* [9 D4 [! f7 e" P- n

. D. u# P1 @- d) z0 Q2 E) O android.permission.READ_LOGS:允许程序读取系统底层日志 ' S7 e0 j2 O0 T) t4 M4 @! ?

5 w8 r7 Y0 Y; `+ q4 d6 ?

/ M. b3 u) B# R$ d; q6 ~9 J2 R7 Y android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  6 x$ ^* k; \; X# ~+ Q2 q; _. k

( N& J8 O9 T j7 M" b

. u' j& C S0 R, l& |; X/ _   ( T$ R2 Q$ l9 D" Q# E0 q

7 S' E3 t5 ` p

2 M2 {; _. z1 a G 功能信息 9 A1 D L$ d7 |8 C- W% Y2 A

& w' \ g) R7 m; S

* X) S* x/ y( Z, U. c   * D, V+ h3 K: G; z" E: E6 t

8 E/ i- B& o+ z# ?3 h& D

+ F8 d7 Q! y2 r. Y- t 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 7 i% A$ F1 c# Q# t: h w4 c

% X1 K' `& B+ M) m, e9 E5 Q

0 T: b# i. a; O$ \7 n( H1 i Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 " `$ t( r) ]) `

2 U: O! O# T. x5 D K# n) C3 q

' Q1 x, }+ }$ @, x$ B# o; j 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 ! S7 c# U, ]' g; \

, M0 j2 l# z+ Q; a3 i4 V# b2 i+ O

5 N3 {7 Y; y& c0 X5 f( l 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 1 S5 w8 u6 n- y5 C

- y$ ~. ^: m4 V0 \

7 a6 _; F5 u' `( J9 F' R! |: z vshapes= - B! {1 {$ y3 x: l2 l& `+ {

$ q; d) _# r0 g( H( E" @ i$ ?

; u3 l; Q, a2 g( s Q   3 ?/ R* [8 x' v1 L+ |, {6 X! B/ K- C

; c/ U3 d- Y, D* D( I0 S0 a# J6 M8 K

# T- s2 L$ t" r9 y 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 4 q! k1 V& `( z- m4 S7 ^$ l" v

6 |+ D) ?0 ]6 E

, ~6 a# a" L* `5 T# t vshapes= 6 q2 L5 h9 H" \( ^6 r) m8 F+ d5 m

: A; q1 v9 W1 r. p& y; e

: G. H: l* C# x5 F+ I* M, O   3 a- d4 k7 M( L9 V, o9 s5 {% p

/ B8 k9 H; E' j" O: ?4 F. c

; U" y$ H- _- C% \. O* h4 }1 ] lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ! [! L( n7 L3 }2 @+ t

: Q9 R7 Y3 r. [0 p3 X7 ~' \. K

5 t% A( G7 \3 O vshapes= - J$ u5 b5 U$ g- \/ H' Q

& d# D! W, A) P8 W/ u& Z

( Z. k$ v* J+ R+ s; t, G1 \ 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 # f0 A3 O: r9 K

0 R7 `# Y. C& z

+ Q4 X4 W6 k5 r: D vshapes= % k: }0 G4 T5 Q- M" f

" U( l2 w8 C' z |

/ P. U( e% X4 W* d   ( f/ ^, A$ [+ ]7 ?" ~- R& S

+ r5 D3 J: J# ~; k

! y! S6 {' x/ L2 [ 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 . L- k* ]# M3 w( i7 c! P! ]

7 A+ M4 E+ s0 v2 f

4 p* [, j, X' Z X7 Z LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 $ V P8 |) S0 k( U& o9 G

' Z+ l' S* d- m$ n# V# |

+ o; h6 i8 r2 M$ Q 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 # @1 C" ] B5 l& T% i0 O% |

' R9 u" z' M4 |3 A( A

& j: k" J. I5 i+ C& \+ K1 k6 O. J 源的luasocket代码可以参考学习下 7 C# d/ I" O9 s* M+ v! J

6 R4 @8 [7 Y& h! s3 D9 n

- Y( O, x# O: O! p l- w' _5 \+ h0 M https://github.com/lunarmodules/luasocket ) K: U8 e- k# s1 J3 U% k+ |/ m, A; C. D

. N( {9 c8 t; o9 w& A( i

& [, i- H2 {7 l, N4 G1 s0 }2 r* o7 ?. ` https://github.com/fengye/luasocket , ]9 K9 c m4 l& T4 L

* U5 K1 e' O; l8 o! s; c

9 F5 h! {0 X1 |0 U0 p! W2 R   1 c9 s* U" y# N. M- x& U' V

$ k( o' M5 H. o# G7 g( f

; L4 C! \6 Q# }) b1 J* v- |" g vshapes= ! s+ g' X3 H# K/ F

@8 e) W [: b, h5 n0 i5 D: ?

$ a9 V- j- h- P   0 N: K) s, j3 E) G; e0 S

8 k( l7 `7 ]4 H, @/ K

, P3 @) a5 [( X! U8 ]2 F! F   5 L7 Y- H8 Z x0 o" [! I

1 v/ L, W) s: Q5 I

c8 l0 a( Q. z2 y( M6 |$ y 总结 3 R5 `+ k s" V0 c7 g* v

$ o4 q8 V$ i2 f* L! J4 O

; r" W9 U J7 P9 Z- S 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 % e4 h" V' K/ N

& @% j! a/ g, X! m; x& y

5 g p p4 i" K8 Q 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 , e D8 K8 f y

$ N( ~ U B) o% z

8 W: S( l1 D2 [ 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 " O* a& s6 _% r3 Q

. q) r" a+ V. A- d

2 H0 F$ V* @% n. G9 [ 结束 8 q' _& L+ V: m

7 l7 \/ E( I9 l$ i" b$ q

2 Y% p5 `3 M! F( Y* u  【推荐阅读】 % V; y2 G u$ `8 v* H" ~! `

+ }* Y$ r) k( V( F. }

) \5 v+ t A7 s+ C5 A! H 对吃鸡APP的分析 % W3 M b5 `! t8 @9 F2 v

) K1 l2 B8 V. d) L: V6 t

' P! c2 B, m( |4 B' s, e 你需要了解的APP安全 * ^' d; m( V0 N9 |& j

{. h# Q+ f+ X% E( G, X; c* ] D

4 h( r% |/ u6 e ]1 |. S* L" V 你需要了解的APP安全 : v1 U; l& C: G! r$ Z, G. s

' i6 e1 |7 b6 L/ i6 d

* F* H$ e E! J2 [/ t9 m* P* U: J   5 w/ ^* }( ]1 W






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