中国网络渗透测试联盟

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

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

' c0 i* u# x' g 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 8 L- n5 x9 w F, D# d) u3 N. W# h

: n1 g" Y, i A% e7 {- w! V6 H

% v- b- _" S4 D& `: B vshapes= ( }9 q& G" K& `( @- R3 I% j3 ^- k

0 K" o; c/ N7 u1 K: z, e

8 l- i/ q4 B% S2 i   ! J9 V% q6 w1 z M8 w; A* k

" u/ z' @ H' D! G0 b$ R9 _( L

4 p1 K" h j! F% m/ ~1 i 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ( } _8 ~/ Q+ Z1 I( A% m. |6 a

4 @" a1 u1 a/ I/ }+ t8 d' O

/ o2 `* \9 K \+ V1 ?   / @! I7 B6 {4 H' E& Z

3 N) K0 L9 \" o" X0 a

# K* K" p1 p! _( r/ x 基础信息 _$ x& C- r4 F* x: `. |$ q' R

# w9 q6 u: Z% A/ B# i( e8 @$ l8 }

! u4 v4 l0 Q$ R8 I/ X; N2 d 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 Q1 t4 H: z* M; I: _% q3 Q

, d) K0 m: B8 C* [! g: r5 h

6 x' k, m7 I" T( f vshapes= 0 R1 c; ~. ^, T9 Y- z5 J5 Q; u) _

- l; G: N7 t$ e2 e# o$ ?: D0 d

: s( T' a9 y# F: x8 t+ F   % h5 ~* d' F; b; L9 g. F

. w$ s$ |" A- Y5 @

8 A1 A1 s& v5 B0 h* ]$ y U3 K7 b4 Y 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 , k- P0 v( S, W ?

W4 E; q0 z4 Z; ^1 `

m, e, F2 l) ~/ t/ Y) J+ h, V vshapes= 4 V5 l2 E1 e! y

- G6 K% J9 y. m6 o4 d

" Z1 N( S4 [" V* \. ]   * j+ I; r8 J3 k0 Q$ @% p& `

! o, A9 z- Z p! a4 L

% I% K$ {' ] k% e% h3 C 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 # E; y0 z1 T3 r5 \6 U# D

7 |6 d; j% z! f0 R* ?1 ^

( c8 R$ q3 d, u7 X& _5 j. W vshapes= + ~/ j0 ^0 Q6 Z, T! N& M' T; X3 D

" f8 h9 a. C% j9 A3 I

+ \& i, C8 V9 q8 U( i   3 m5 T6 n6 ?5 U/ g

; O0 @2 ?3 S: F2 y: c1 G7 ^

4 @8 F$ E- A( d' c, x 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ) r) c- r/ Q1 w: }' {

) a( T7 u6 D+ u) t/ \; ^

+ f" }( f' }. Z8 O ^! I vshapes= % R! I' F1 `% v6 t& z

( F4 M( g- V" v' h7 U

8 \2 i' `* G# }3 ?   0 B& g( e# ^2 |2 W7 Z1 P& T, ~

: R" B; r- e9 X( f

- U/ |) P6 L! P( [9 v 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 0 Z) U6 y/ L" m y0 X3 }

% ~* i% F( b7 Y* K; T- H, w

$ g( H5 N' X) K2 r5 V vshapes= % H# g/ w l6 W) _

% z2 U; e% }0 o7 O0 g0 Z

g; u3 Q2 s5 b2 y   ! v8 F2 k* K8 B4 M" Q

& B! p! r# P$ k0 J& V& Y

; n" H0 I1 ]) q# U" p: A7 A   ; ?9 Y7 I4 B/ x; J$ y

. `! w/ f) o v4 D0 j) X

2 r; r! G+ i& b$ A v 签名信息 0 p8 n6 ~) o0 @8 O7 ]" \9 {

8 E$ ?" @! I7 N7 \& `

! ]3 b) m- K1 A$ Z 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 - H/ I6 x9 S5 C* {

3 J% }/ y& `1 h, S

* Q6 t+ Z- Q h& B5 G( | 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 + p s7 W: _5 ]5 p" W: e

& U2 N) H& N* q8 g& M2 \' ~

" D V c6 w) j; A androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 5 J7 r& N; d4 n1 C% ~; Y' u

( k) |" m% E( T Q; f

7 I3 J: h; i( F4 g* j vshapes= W$ f. Q. M6 k) L

7 `$ }* \, }# f5 I6 h

( T3 p D. Q6 `$ V2 u) W4 y   - ]; |& ]2 T" Y* o

+ p* w x5 G5 q9 @9 ]+ c

+ t7 n: b0 u. Y2 i" ]! u android签名的数字证书的一般都是采用 X.509的国际标准。 ! Q# w" p$ Y% I& x+ w' p( b

: ?; F# O* k/ i- h- K) I: T2 M/ C

3 q5 e% o2 n2 Z' i4 C' L X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 $ m- E0 T. z; ^4 h" ?

/ Y" @. ]: i8 i9 F7 n

- h' d9 w4 w: X6 ^% i9 \ 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 * {' j" |, `7 ^8 A c0 Y' I

5 \: Y: Y+ E. M5 B2 g" G

$ T9 P% I2 v4 n' R7 T+ U vshapes= 2 {) t3 _- i% j( f

: P+ M+ K7 U+ o- c+ J

$ ?+ S- ~/ }# A) N% N7 a* U   g5 D9 N8 I% x9 q

8 d G& n/ U9 R8 R5 Q: @1 N& \8 ~

5 L% @! V( c/ ]/ J 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 , Z e, Y9 ?0 i8 M0 C& P5 D$ ^

7 b3 m$ j5 ~$ a

) i7 b0 q! I8 p4 H- _3 c vshapes= 5 b( H* [7 [2 T: k5 t

9 X) @1 E0 s# W

) c5 A9 @7 Q0 i3 b A- W+ b Z1 L( ^2 Q+ \* x0 D

4 ?* ]/ ^0 `* ]& D( J

" d2 c. X" X' B* d j) u& m+ B   1 t, l& W% i% B5 w

% n2 Q/ L# N V: C& C9 S0 g

( v' R2 B2 |9 B/ Y 权限信息 ; k* N$ F6 i" c1 ~! R* q# p* T

- o* V; t6 e( N& J" x

# U& b) i0 X. D3 K2 d 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 8 H4 S: S# H9 L/ _

+ N# h& c( S5 T$ Y( v `7 l

- G9 e0 @" u( ^' p+ h8 Z/ K android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 1 \1 L- J8 M7 t& f7 R

! c& m! k4 b' [0 S8 m

: d; R) V6 f6 l: t7 B' S' B vshapes= 9 ]5 r/ a( m# [5 `

: R) n- K# `4 j. d* j0 n, k

' g4 \2 l2 {' w, x7 k( D! R/ g* o   ) z8 m/ o5 |6 u. y# |$ M) m

4 X; {4 J1 o3 B; n: V

+ f# x+ J# v( B! r" ~7 z 下面对这个APP的所有权限进行详解下: 3 o1 `) ]5 U1 G+ ~ ?

X9 h8 n: L0 r8 m

/ I* h* F7 J& x0 F/ e android.permission.INTERNET :访问网络连接可能产生GPRS流量 $ ^3 m! U4 w1 d+ o+ ?5 {

6 z, i( }' z. p7 f

9 a7 D6 R8 z% `2 _( R' B android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 9 Y* _& A. P' i; [, V

9 g1 ^7 M0 t$ ^3 E$ f" [

' s( ?; @& ^& P6 a8 f android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ; M& f; }7 }2 m: A* i

6 |4 Y) w7 z8 t0 w! \& f

4 ?1 u) |# X* L. U! U android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ; L5 Q7 i% w* t1 l

: R# |5 l2 e6 l6 K# ?

, |3 S/ Z6 ?5 O1 v android.permission.WRITE_SMS:允许应用程序写短信内容 + G3 g- G6 {) v, K( p6 I$ `2 g

* M9 W8 B$ l) J8 d4 R+ [

- t/ @# r; K* D android.permission.READ_SMS:允许应用程序读取短信内容 ) B1 e) o& x+ t% H" n3 P, @

1 N; t, ~8 G% R6 r

0 V' r- G! \7 O; h7 v6 s android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 . D/ L- }! p5 f( Z

2 a" g9 t5 V7 b0 `4 B2 {

X- @! [+ m, H4 u- p6 N android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 ; _8 H* J+ U" {& l! a `

, r7 u7 h& }" s$ Z, \# Z2 P' V

1 u/ N9 t2 A. N+ p/ |/ X( s android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 $ o5 W7 |& q1 Y3 D

# |& ?! u. I/ B9 `' w0 X

2 P y7 Q( j3 Z0 ?4 z android.permission.VIBRATE:允许振动 - \) z/ b, ~) }9 s8 P

2 D- J Y$ q/ U" C: J2 o$ U

( |# O/ R# [! z android.permission.READ_LOGS:允许程序读取系统底层日志 " U2 ?5 r3 J/ Z) X

; E. O* J1 u% H" t! X- m/ C

, g& a1 u. ~' F: _' L8 Z. X* h android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  * l) Z% I' D; ?' d

) a1 U$ }1 _4 S$ _) x* t) v* I

- j3 m$ D! m4 ^. @; _# L# e   ! }& V5 w* Q6 f* t f. Z! v

' K+ ~1 _0 u/ o3 y! j

- I' \7 Y1 r& m- b 功能信息 6 K) V5 m; C( v! ?

g/ I$ b- K' h0 @! p- E- \

M1 W% ?$ P/ r8 _/ V4 m0 L$ M   `$ Q: a3 s( L- ]8 O, Y

& m3 w; D0 _- \/ w0 f

: o% Z: R+ ~( {. R* d) s 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 " |! M7 h2 W3 O

/ q. g+ X0 |6 \2 G$ ?0 H( [

. q2 `0 O& @$ z# m$ S" w, e4 a6 Z' _* G Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 * `, v4 j% S& t9 R0 v, Z

. i+ f- `* y! N& U- _# f- m

9 w" L1 z, b( w" [; h 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 4 X' c. V w6 k* A j

# e/ M+ d( M0 G" T2 u

5 f/ z" x* P+ c% _! e 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 ' W# O4 }4 `# R, x' t$ a3 {2 _7 k

& C; u% C z5 ?

4 f3 v; j! U, ?2 ]7 H/ g vshapes= - q, g3 k; t. \

2 i7 } ^) \: P2 b, `, F8 _

0 `" K+ T1 p, i   ! d4 j" D3 C" s) w3 S

$ Y" D0 b6 T" U/ b

! |& R1 ?( U7 ?0 m9 a! Z! I# i 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 8 ~2 R: q ?8 ]7 d" ?' x

9 ~3 [. |9 c; g

6 T, W" s# J, O: s& K vshapes= " c; l' ]% i0 j4 `7 K8 o8 {( Z

7 d5 o" I1 Z5 e! b) V9 r

) L/ ~! _3 J4 a s! w   & H7 P3 e1 b* E

. X) D- N0 D- K! `+ I& V

3 ~/ c, `* c4 h0 ?" Q lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 5 q8 N- i0 l$ M: I

% @( h" S$ o* e# T' {- j% q* Z

U8 r2 v# M/ |% ?5 V vshapes= ) l7 {1 V) K$ U" C1 p& K0 `& N/ L3 B, H

: L6 d" D8 [5 b- |

) ?" J, m: ^" V1 I+ a: k" o 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 0 C; p" R& D! [. E/ l

9 q$ @" N0 ?) p0 ^0 {/ H/ T9 U q1 @

, }$ D" N' y4 n' C6 S* k$ h; h3 E vshapes= , E @$ m2 Y; F. h

" I8 e% m- [8 H( B

3 K& E. B: N6 v8 `   2 W2 ?" A! {2 S4 @+ W2 G

4 K% O S1 M/ E1 f2 o

" B7 ^. z c1 W% p 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 b% \& {& G" M

9 ^% ^1 h7 z0 |; d% V% o% d2 c8 v

# F6 ^) a' A+ e, ?0 K; V LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 ! K3 [7 Z" \: A" y+ f+ ?0 r- B

3 T2 {- e9 C0 p% c! k4 x

) [( {" q# ]2 R- g 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 . `0 ~, O% \: v# \0 H' |9 r) y8 f

& F& ^) Z' p) u5 P( p( `7 e

* t/ s6 `# H$ u' g: _5 { 源的luasocket代码可以参考学习下 + |1 m2 @' U% P3 f e8 }

/ U: y! |* Z; L* n) {( h" j

) ~9 U- x+ C a0 Q- {" A https://github.com/lunarmodules/luasocket + T5 B6 u M# s% Z' g

; }& d9 A4 B4 ?9 u: K- W7 @

8 s. E: G2 y! O# @6 \$ Y& \ https://github.com/fengye/luasocket * c3 ?4 \4 K; z2 }9 `2 Q

8 G# r/ ?5 Q* E3 D K8 B: c. Y8 S0 v

Y8 P1 _7 [2 m   ' |: X/ s7 M/ a/ `6 v2 W

5 n, z, y5 U* U$ {. r

) n7 x# G1 ]) ^4 j2 y* e vshapes= & D! u- |7 P% u' {5 Y2 U

. Z7 T& ?' b5 b; i

$ N3 y5 ?/ i$ W3 \' L5 `$ A   ( b" [1 `+ i: M/ m3 T4 N' b6 U

' K2 s. d6 H) Q+ I6 h0 f6 T+ D

/ L# n1 J& Y/ B. W- h# ]6 h6 r   ; Y7 K- P2 E0 h" c9 ~0 ~

& \9 |2 j. X2 I( P/ u

( ~9 R- t# v. ^7 H& n! ` 总结 5 p6 z- P7 l: M0 c

! M$ X2 |8 y1 j7 v! p

7 s; m% K8 N; C. i" L1 |9 z 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 2 X2 e4 g y+ d! w

% Y9 R% @% s1 J; D

% S# {4 Y# l2 f 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 % f2 z2 a5 e: V& k

+ a( M6 P- L3 r& v/ E T' E

" F& ?! ~4 N& z( ^% m R2 n6 i 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 $ D# t6 f! R! ~2 C4 b5 n

: i# } G, m" M4 c

- e% H/ A. M8 ~4 A, G( E 结束 ' T1 n# R: H2 d" a

; c8 a! P3 r4 D5 N7 w

, S/ G+ A: v9 r  【推荐阅读】 ; L- I+ M& V1 T9 M% o( P

" [3 u# U) ]6 {8 G, x8 I5 l- ]$ f

7 i3 A# f9 i/ z3 L/ U 对吃鸡APP的分析 2 C/ x* d+ I" p/ `" ^

2 q+ a! s$ {2 i/ y

3 C- n! @1 H: T 你需要了解的APP安全 + L5 f% @# y5 V* t" F5 n

) N! Z6 f1 g7 d# U' M5 B/ _

( w+ s& R- n4 Y( w" M 你需要了解的APP安全 L8 \7 d2 H I ~

2 j/ d6 E% P# }: }, E. U3 ]$ t* ~

1 G* I7 a% V7 o0 Z9 v& U   ( N/ _& A4 N) I1 r* C






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