找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 4219|回复: 0
打印 上一主题 下一主题

转载对小绵羊的轰炸APP逆向分析

[复制链接]
跳转到指定楼层
楼主
发表于 2022-7-8 21:25:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

7 x8 P$ B% ^* o r 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 6 R0 N* F% n2 x, t! i! f* }

2 b# z, a9 C0 L- Z& F$ v

- u. I* P) ^! ]8 d vshapes= + t0 |! [% y- h; t

3 a8 |- Q! u- p9 p& b+ T2 c

( Y, W. l* Z% J* }; ]& ~   1 k2 d+ A6 f, X4 |. f! m3 K4 Y

: m6 }3 L7 t; V/ K

( Y3 t* h+ @* `1 h& m 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ) V' V6 {) W: R

/ X7 O$ D! \6 s) c6 P% c( Y+ }

% C N% m v$ Y ^8 A) s   2 C% t9 d& H0 ^ ^6 I

8 L8 l* S. Z9 q9 s2 M; ]

. W' t! T- D$ M5 }0 l% [7 [ 基础信息 - q: r @6 R8 V% K1 l. H9 [- l

; L! Y* Q& e( [

* t6 p7 d/ }( ~6 _% x" y7 Y 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 / _( \2 }1 i0 I& m; s! L3 o

6 ?, t* P9 m- F0 i) R$ y9 j

! D: \, o6 F' T; H' z+ r vshapes= J$ N& X) P8 M4 @2 ]

) W; |# s+ y) L7 \

' u7 Z! T6 e2 h0 U   3 o+ k# N; b3 U4 q

$ n) l. h( K+ q2 n/ @. u4 p

' L( G4 b. q c4 O5 u 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ( R2 i" j6 b2 _1 B! C

! \( n( }/ v J4 M, J$ @

9 g& W+ r& p/ g5 N vshapes= ! m5 Q2 _$ R3 T5 o; v% E$ K* A* q' b

3 a Y. I0 I' Q/ Z

: } [9 }6 r. x. T7 M   0 L" n; V% v4 Y+ s

^& z( B6 @, a8 {0 f$ n6 P

- r. k; A& p, @; o: u W# w: J 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 * v# N& c* t3 r# H8 E

& S0 F3 w7 l% A& y3 A

$ T- b9 z1 ]) I- |$ ? vshapes= : {- J) r i5 i2 X. l. A

3 j$ _- H7 r3 l1 k0 f H9 H3 d9 I! k

& m8 \2 J" f% l6 d2 K   ! E3 q$ ?8 L* d/ l8 x

* f% G& B7 E, Y9 q5 i

2 y0 R, k. S, h' Y8 V 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ! L% e% {1 c4 W6 T9 w

z% ~9 s9 Q3 M: X* ?" y

5 t* a( y+ q: w& l5 T; U, [% y vshapes= 6 Y* q+ o& h: E( i l6 z8 B

- k( u( k2 J1 k6 B, }

0 ]0 r+ }7 Y: P* J   # x: d# {% ^3 d

( o% j3 v. Z1 p% ]

! T7 K5 a) r2 {6 c 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 " E F1 r: g* ~ L7 ^) s

6 V- D+ W# A4 Y' W

( [1 w3 d& k5 n) m9 P {/ K vshapes= , S, V4 s* r5 C0 i0 O

: `! I0 F& {+ ~( _

% N# ~8 d; \$ _. y: e   - @% C( k$ ^- i

$ t/ v4 P2 W+ i. j. y

9 ~5 \1 \' O4 h, K   2 a* U. K4 m3 H9 V

e* h# K8 {9 l. E+ P$ D+ F d

/ d, U: s5 G& C# u' w 签名信息 # r b$ @# _1 i) E% E& U) Z7 m# v: l: ^

4 \- d o2 C3 }& |; s

# Z; D$ D7 {3 t' l 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 , Q# X: V) z: c" V8 _" t4 y

5 L+ e! r* z( I& m" L3 g% V& p

2 M3 E4 A: e: S1 x( `0 Q' v 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 : M9 N2 [9 C) p8 X M+ d

# M' C0 N' r; Q) k# o% m

4 C+ W+ ]8 k* O( i$ ^( i" ~2 y+ f androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ' O2 x. i6 @, l5 f# x. f( j

, z4 O2 B" T, C

e' K1 u$ ], b vshapes= 1 g, w$ ?# Y' W7 j/ i

* z6 F2 U* O: Z/ T8 U

( v% Y' l8 c& C4 ^$ E8 ]& p   - T0 W. ?. [' \, Z# ?

, t! { X6 D! L

$ M" K* [- d7 s" M android签名的数字证书的一般都是采用 X.509的国际标准。 ; Q$ l( D* E; d4 E

( @8 \+ p6 \$ e9 Q6 c* _7 M

! ~3 l! x% j5 j' l; D; @6 U X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 6 Q9 e6 }8 D# P: b

. B" H( ]% T# e8 g/ Z

' ^1 O0 S/ d/ p2 Z9 n1 r" c 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 , T6 {2 L% }) K- `* y: U# p& b

2 j! {9 s8 J! O5 i8 Q% D

. f/ A R# a) b8 H$ G/ l vshapes= ; Y: `) b5 ^+ I; w9 n

" F4 m! i6 s1 g6 T" e( x

# [. u' j7 b( ^+ z; n2 @$ {& ^   , S; c( f6 k! f

8 e) m; \- U6 G/ L6 D

. ~8 y+ ?7 D1 y! @& A) G2 R 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 * ]( O* C0 Q8 [

! E9 k3 O* _9 l! Q

7 I! i7 l# e; y, D R) W/ Q, K" E8 G: Y vshapes= 2 K5 w% Z" K8 o1 R6 G; }# e V: J

$ t3 Q3 U _! V7 y

7 i5 G& o% K1 b. l4 H' Y / |( ?6 ^6 M1 l0 p) O$ \6 X% ~6 T# n

: L1 q& s) H. [/ q) t/ A Z% J9 x

! [! E. `( G5 A7 U1 }4 A' w; e- L   " h& v, O7 X( E6 \

8 u& Q" X( l7 ~9 ]8 c! K

- K; z! T r: ?- R# f, c 权限信息 m% k3 ^5 U4 ?6 ?+ _; k0 R6 G

. J3 ~4 F3 e) }$ J) U' S- x

; g: [& s4 j# q: \* O8 v" w 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) * u! f: W3 C1 z. }4 l6 h/ g

. K4 B X# m. _6 s$ S4 |

$ P# ~+ p0 w/ D! g" Q android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 : s% b1 f0 N) k2 @ W

$ T5 w. b+ s% U" O" \ o1 O

* H. D6 y# i4 F) n. [: ?9 U! t vshapes= ( \7 R+ a9 S( \3 q; C3 d% U' a0 `7 l( c+ K

1 L' v9 F3 E9 i

/ A# r: M2 R c8 B5 R$ _: L   , m8 r% M7 v5 s# y

. `* }) Q# [$ A, h7 @' A

s) f+ H9 ]3 h" v: T 下面对这个APP的所有权限进行详解下: 7 Z0 V: R+ j# U' \5 o0 X4 ^2 r

/ u# _$ L- B# s& _

9 k% g, ^, p$ j+ g& Y, H android.permission.INTERNET :访问网络连接可能产生GPRS流量 " s% y4 u( A3 ~* ~6 ~5 C/ x9 j

6 s, R) g# W- x% P( [' ^

/ O# a; l3 o+ L9 r* o. k$ R6 @7 y android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 5 f K6 |- i2 T; c( ~

7 @4 d/ Y1 c# c

) Y* r3 a( N4 g' L) N android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ; t: P# n8 i4 f

% t) v8 F, c' A6 N% J8 |

( @/ `7 g6 C( C4 F' s3 c: x5 l android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 , S' }8 I0 \7 W: |

1 ^% p. }$ G' _9 U

' E# C" U6 x% P* k. L android.permission.WRITE_SMS:允许应用程序写短信内容 & I/ W5 Y! M; p& Z

! {& X2 Y- O$ L! w- ?, o4 u

; x+ B6 f/ x$ r: f1 O3 J android.permission.READ_SMS:允许应用程序读取短信内容 8 M2 n/ Z! @1 Z8 G0 x8 H$ d+ a" O3 h K

I$ c5 i; [: [4 f

6 R9 q" O; F, ^7 L" Y3 E2 _! U% l android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 * \) X/ i' O4 h+ ~+ ^

; {, W* M X! S+ E3 P! |

! k4 H( k' h1 ] android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 7 _3 E# c# \& u" y! k! |1 J5 g. x

$ c; o7 F8 M- b/ z6 F

" ^! @; T0 q& Z8 L- k android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 2 Z6 L, M: S" H/ M# M

* T& k! O+ v- D9 r0 q# t7 f

: z2 t- b( T) L1 ^ android.permission.VIBRATE:允许振动 4 }. @! [3 N6 T

, V: [6 Z6 V8 |0 S& y# ^" I7 ^8 K

# K; O: @1 n, o7 b; ?- E. p1 t android.permission.READ_LOGS:允许程序读取系统底层日志 7 [/ p8 Y& x" Q3 G2 _) W

7 ^* B. Z# m$ z) j

; [ m8 D% |; N9 \, Z android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  , Q8 r! S/ L& O8 p0 o; ]/ _/ s- Z

2 f( Y3 M, u8 v" ^" c

) s3 H& \7 l& p6 j5 t   6 `' J. N! C7 Y8 T% J* a P

y3 ^0 g- Q) x/ \" v) e+ [" H" I

! T9 C1 S% C! a0 y 功能信息 1 B$ u8 U* a; `' Q4 `7 ^& S [; _

0 y0 p2 n* F8 B0 a

# O( w# Z. X# @$ v5 ^. ?   & ^8 Y8 v7 a2 F4 n

* T. n+ k7 R# c. C% B1 Z

, X5 T/ g* ]6 |4 F1 q6 T0 ]* `. s 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 1 y& f% y' N) ?5 {1 g+ z$ ]

6 d3 |: J' O/ C8 w( B# y# q3 S- }

1 c3 J! |# A/ @% o Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 6 E, _0 I0 P2 G. h; b

4 p; y: ^9 h! _+ O- \9 A

( G2 R7 m6 ~, P s 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 ) ?+ y d* N, l/ `$ P

' g' l" C2 U3 d* K

0 u6 p; U2 p$ x* h2 p 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 0 S4 ?9 j3 i) U5 r5 v7 ]; s* m

' ~3 p9 l0 R6 u4 Z

0 C h0 w C, }7 R2 h vshapes= 9 k4 |" d% b+ j' O% g g+ w

; Y# z3 D4 ?/ T% S" I

2 o. t% z1 I1 ]- t$ v1 L( |   8 J# L1 L+ r6 u0 Z, \* K. L7 D% \) K

' P/ W3 u& y3 L9 l

# D0 n4 s: Z+ r) v: U( v9 F) J- e 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ! G9 s6 E! o+ F7 ~6 K) R6 `; y

0 ~% d, @( ?: z

1 u# t6 F/ [ Y) y+ ^ vshapes= l4 L& O0 e* @$ |" o( ]

- ?! }* S! j7 v9 n$ f

+ L0 b( s+ Y8 {$ F( X8 c5 i+ s   , m+ A& X2 B! N

; z9 F! R; }; p

- f# N8 L; k! L. [5 M lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 " G4 }, G% U3 E+ {& D+ Y8 d

& w0 L# ~' U: h$ A3 U3 v

5 e. _: t7 p0 l- i, f8 [) g' Y vshapes= 7 N: {+ G( [4 L* x

$ |4 s) H& u0 N

1 s+ u' y6 F0 H) T' y2 T 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 9 e* F, c& V, c$ i- o7 z; j

! M5 L4 K2 F& G) o1 o

2 W- c, M: u( j: ?8 D, B: {& o5 m7 j vshapes= 9 s( \8 y' ]% S! ?5 q

Y1 n8 q4 a( E+ l5 Q% Q

3 S, M1 c8 V& }   0 v' Y( P8 _; D) H/ g9 @9 \3 K; A

. ?+ G! z5 m# m1 U- G3 h5 L! K3 n

. s, o$ P6 F h' y 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 5 `: p; f, V; D# Q

7 @4 x& D3 O2 z! |

; E9 Y. j6 I2 m1 _! C LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 , |1 K/ q/ D% l6 {. B4 h q$ E2 b' L

6 \/ l" e" F/ K5 w

7 s# G6 b2 G& ~! [$ L+ m6 l/ o 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 , l2 B7 [* Z# `

" s$ z- H' o1 c4 K$ \

) M* M% H5 J5 ^$ z8 }6 O 源的luasocket代码可以参考学习下 , v" S8 H. p7 Z$ T( w

* q0 _/ |4 e& H9 o; N

4 }5 q2 b# ^% m https://github.com/lunarmodules/luasocket 4 O, T2 B7 Q* F9 r+ \

. Y! z8 l2 G9 r+ J3 d+ f0 L

. j& `% Y' T5 e- |9 D https://github.com/fengye/luasocket 4 G2 t0 K* d3 o/ _: s7 _5 F6 V

# m# ?; e2 V0 F5 b5 _

, ]6 a5 |, s: k: T/ l Z/ F! N4 T   ' `: t% e$ A. i

) m! t2 n- a& x/ a

( f- f) e1 n. v" a vshapes= 8 {' H3 K# F" z! V) U

7 M) V0 j) ^# F) B$ p

( j- d& E! j- G( N3 q   - n4 j, P3 ?/ }" ^6 {

" p* h3 I* f. B$ ]7 @1 U* {

) I' \ d J( Y" U) L   , Y( @* C. x4 h% Y

7 I$ ~! |+ e6 T! Q* E

+ a: c$ K9 k6 `- [; K4 B8 t) L6 G 总结 4 L- q: f" H v! f( N2 ]

9 o5 J& W* N) D$ H6 F. M5 h' G

, e: b+ g: a! Z1 z) d1 e( f 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 1 L* n' }% o; e( l+ \

- b( C4 K2 N7 N3 S( x3 O: b3 ?

2 k/ m! _) J" ~" q+ y0 h% c! s% { 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 4 g, S9 t" r: O5 D- ]* |

3 f8 S% M2 c- l/ j$ t3 `

+ [$ t, W! X+ y! Z 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 + Y l: r) w( q9 v

5 j! z( x1 _( X! Z8 b4 ~, Q# A

0 e# B6 T- s s, N 结束 2 N6 @ I' E0 M6 K; d8 R( N

% j0 _1 s7 f9 S4 H

1 Q5 K: p7 |- _3 [# n  【推荐阅读】 ! C1 A8 r' a! ] d

& ^! k" O8 H' T* A4 }3 _

/ a% ^0 [$ X) t5 F% ^7 \, E0 l 对吃鸡APP的分析 & ]7 j. X A5 B/ P8 }9 Q# r

7 w! B3 I+ ^: G) c' ^& |

, @$ X- n( K( }' b 你需要了解的APP安全 0 U2 g9 {8 x- F" m: Y+ }

W. S7 S- H7 r: b6 G5 e1 l

~) G [1 ]6 c0 K- X% ~& P; R 你需要了解的APP安全 - ~; n0 A5 r, p& q5 o A

* G' O5 E0 C$ v7 F ?; f

6 S+ w# |7 T- _5 f& y9 }/ T   & Q0 }8 r" F2 n( d) n; B

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表