找回密码
 立即注册

QQ登录

只需一步,快速开始

欢迎中测联盟老会员回家,专门使用25年老域名强势回归
查看: 811|回复: 0

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

[复制链接]
发表于 2022-7-8 21:25:07 | 显示全部楼层 |阅读模式

0 p0 B1 c# E8 h+ k7 c 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ' e9 y; H m9 N

/ p/ n7 N, U$ k; ]+ X; y

6 f$ o5 O+ ]0 O& ` vshapes= % U5 C& }/ Y, {& I5 {- R6 [

' c% e; h+ Y) s: S8 Q/ T+ E( b: ^

+ v4 l/ j1 c- ?% `   : R1 Q0 X( k' X5 w2 H, E; o

6 |3 `4 u+ u, f) ?/ J' H

8 z# ?* S% [4 E( ?$ s 下面就以开发者角度进行解析下这个APP的功能的实现原理。 , L8 j4 V. L& \* Y# e

( ~, T7 G' M' Y! W* U

1 g6 e. B+ ]( @! L9 f   # S8 r5 t7 O) K1 Y; d( `

! Z7 Y0 P. o% P3 }, E

$ U) p$ z/ U. f* v% Z; q0 N5 w 基础信息 % { w* ]& I! g/ m' `

: {- ]2 M* l$ M5 l

" d( u/ I" L( o, g 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ) K- Z9 M: \3 p5 L) e ?7 r

* E; K+ U% K, f4 ^

7 E, V: ?7 A& I5 D+ q; q vshapes= 5 \8 V: e. [4 T$ K! \0 L7 O2 `% U

- _! W# h" p( P

0 ^- h6 D7 T6 k7 h   # R) T" Y, r# k7 U

: n+ u) T! s- O* I, ]

. h" K( \. o K 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ( ?% f" }5 f$ d2 j" _1 [5 \% S# @

3 k, U. H% P. u$ v' N

& g r; l' p2 ^& g5 ^$ u4 x% T vshapes= " {4 C+ s0 I. P

7 L: F! J) `/ c/ X/ a& w

! j0 R8 Q0 u9 z9 k9 S+ B   ; G6 U7 C; L$ v% |' v2 ~6 ~ w

0 C& F* M0 [+ g' P$ l' I, j' b! y

* B8 U) q* K9 u( i; \6 ~ 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 " c D3 ^. t- f1 u% Y, v5 @

: K* Z* W, H4 n0 |

! R/ K% ^2 L" ~8 q( G vshapes= ( u6 j* V/ a0 Q6 g' m; O

& A+ `. U; j: _3 E, A

' s |5 f4 t( S% `* a   ! z! e+ {' P8 X0 |: U6 h- z

: b! \1 _2 o* B3 c+ D# I

. H8 `: Y J" O5 y3 f, X J 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ' n% w2 |7 N$ U8 L7 ?

( d- S) E% U. n) `

$ Q; p) Z& z" h8 R$ V vshapes= $ h2 I8 e- M. j# q1 G+ ^9 V

- H; p+ V G3 @% m' @# i

: }7 v% a# p. j0 J3 i! J' Z   & D/ \; V8 A O9 s$ e

2 Z1 ]+ L- K! N9 E

2 @% F% v' W" B$ p; q: h 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 $ U9 h0 `0 y9 F5 O- T+ C- Y$ [3 s8 j

0 @% K- H. g; W: H

/ p+ U' s( V; W5 X, K$ J vshapes= " H: Q# p2 @& F) Y

. D+ W: d* \' q7 }

4 G: l- G/ O/ x& z2 s1 m$ T! x   " u. S @& v( ~( }7 s: B9 @

. _3 ?1 H# q1 f8 R: k7 Y

5 J3 O) ^) l( y% r) t. k6 K   " n" {! J8 k. U: e. H7 G

8 g9 k$ `& b: T1 B, I2 j6 {! L, E

6 m7 J' ?* p( p& B! Z v 签名信息 0 `* L [, W7 n3 ~

G) T5 L$ w4 a- l8 `& z

8 g% ^' G, R0 u( Z+ \; ^ 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 b' k) w8 \& T) q# q

( S F1 r8 ~9 |( N. |

# ^1 ~1 ~: H6 Y1 M+ Z3 p; _5 b* d 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 , F: e1 C: ]( E; K0 L

# r& d& k( p; @% l+ C

" m0 D9 W' y6 Z# Y androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ) s4 W! G0 h; z2 j w" I" m& h

+ Z! k/ |: T" K$ p: m% K$ y

' F! G, w+ @+ V% z Q' A vshapes= ) V3 j# e5 q9 V3 y8 A; j0 `

' B0 P0 v' a' b2 ^ i

6 b8 Q2 Y6 I6 v+ p( F# V   " G @/ z2 H" m5 [; E0 g, A

; ?* }7 M9 v; P6 B, O- D

- R& k! t& L; i! ^% t7 ^ ?1 P! k android签名的数字证书的一般都是采用 X.509的国际标准。 $ b/ |, O! w+ O- l& r

% _1 _. p( S5 E( [1 Y/ u

: a- k3 a* t3 l X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 : T7 L! R0 \3 H: A: A

2 s, W" _' P0 x$ w2 h4 ^1 w' I

m4 a1 U/ A' [) j2 I" _ 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 ' [% j6 x! b( f1 h3 O# n- o& k$ c

- c) E7 l# n1 o: g/ L' c4 F5 j

- I0 |1 f+ M% D H- [- n, n vshapes= * u* C; E3 f9 j9 j% C% X

/ Z: q! H. c( \9 e

+ }. [4 d. I! d& a6 Z" Z2 D- Q   # B( ~" i* j) Y

2 z: Q. {; w: x

9 ^7 w+ }; h4 `, H" d+ d 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 , Y, H0 X/ U" w* K2 F

& _0 _ U6 D3 K- o+ d/ m

7 F' c$ q2 ~8 U" k$ k o" v5 \3 f7 Q; o vshapes= $ t. F+ N# d p3 I

8 P3 Z3 ^8 f. c& Z0 E4 a

$ o) K* ]$ w) w* i: ? ! r+ _" Z6 @* B! \; O2 u

8 [) X* z6 K; Z

( i- Z! J, L. @- I" D& }& o   3 l# j) q( ?" J" A% ]

' T& r" `( [* b/ _& z% U9 p9 W

, x$ B! G4 Z2 ?% n+ S, k5 ]' V 权限信息 3 F/ ^) X+ [' V; g8 U: C/ x

( \' k; f0 T% o

! ^, \0 O# F$ B( K, `+ S8 D4 d s" | 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ' d$ J3 U* ~2 \: Q# x: d) M5 j, s

9 k. q- Y7 Q% G0 c8 l

4 h4 W$ H5 O7 P; w2 g: i1 ?( R( J android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ; a* r) a! T' H* k

) |1 E( n1 ~0 ~/ W2 c( G

6 J! x! o% ]) M! d vshapes= : Y( ~7 ?3 r0 I. S

- r2 o+ ?! f6 U" \+ ^5 Z; \' P$ y

# T h4 {, N5 t& s4 Q   l% J0 I$ |8 C7 L: U

& P4 \; V8 T. K

7 \; {" e/ g- T3 j& J 下面对这个APP的所有权限进行详解下: / m A7 J- k" s

6 b& M- J5 i4 x* }8 K$ A2 v2 G# I

; `/ o2 q3 b& J$ b& P7 W, a android.permission.INTERNET :访问网络连接可能产生GPRS流量 * V& Z! e0 ]: \

N/ ], ~; B4 e5 y, e" g5 l

- X4 I7 d3 E6 e6 } android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 , B: l. [* r/ W, e8 _. s, F, {6 y

; ]/ ]6 N; o! S M/ U* b2 n! B

8 _* f N+ _$ E. Y android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 $ L+ s- i( R- y8 r: W

( g! b2 ~7 H/ A# G5 Y- U0 H2 y3 ~

8 E( T" i, s8 y, B" D. s m% ` android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 & V3 _- R( X" e" F

3 v% c* |; K) Q

( ^% _! ?0 T. z( k, M android.permission.WRITE_SMS:允许应用程序写短信内容 ' c4 n% _6 n" Y/ y. @9 T3 i

8 ]) L& ]% g* k

# f, D5 v8 H, j$ g android.permission.READ_SMS:允许应用程序读取短信内容 7 T& j1 J b. W% M

( F3 o) A! S6 N" E

6 U5 D3 o! t. {. n android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 * S) Z% |6 s/ ?) Q

0 L6 a N }: g7 r2 Q, _

w4 Z9 x: w9 s& Z, [ android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 / i+ t h9 p0 \; G. Q3 K" R; a

, a4 S6 ~* V& V& S0 e0 z& n+ P

! Q2 s' m' O- ~% h4 f9 o, U8 b android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 $ P7 V# s2 X" W6 `! J# O# V

0 y% Z7 Y( V) @8 D% d2 i

5 L- A" D- _4 y% ` android.permission.VIBRATE:允许振动 1 {4 S0 C( V* c( U. |

* }& I7 Z5 t/ O, L% X/ I) A: I

3 x7 w" f9 I% k) \+ X$ ] android.permission.READ_LOGS:允许程序读取系统底层日志 3 R* Q# [8 o9 q& X, q" d+ Y1 }

D- c# m' s: p

! l5 \/ e/ g, y6 g android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  - ?: h" h6 q# b) R% z7 m2 x

/ @2 o0 d R3 Y' | Z& g

' N! {* f& ]( O1 U   7 t+ d0 Q+ W1 @+ M' j1 |

# L# i. B j. q" T2 m

0 U& O) ]& i9 S% u 功能信息 ; d) _3 }1 W$ O3 i" H

3 j& v$ p7 x0 q5 G

4 b( j/ D+ g# d/ u6 n   ! _2 e$ ]& `( U8 e1 d% e

1 _- B' M" I5 f: o( }8 A

/ J [8 V% V8 \( z 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 $ L6 G! w) ~/ Z4 h# ]+ W0 X" h

/ i4 _5 c+ B: ~4 ]1 l$ | R

2 B8 r5 w' a% s" C Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 8 I( r! n4 Y; C7 U8 i( J

# g5 ^5 v8 \* u M5 |

% K2 k1 n$ x: ~$ y$ E+ ?5 C4 q' |9 v 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 6 S( h- j# K, X* x4 [% \

5 T7 f1 f5 G" V2 ]4 h: d

: c. J: D) r" |8 T h 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 , [$ K2 I7 t' m) W. I' H4 Y

1 g9 J' t3 {8 X* Y% ~/ y

9 E8 d. J1 n& M! B' v vshapes= ) S) }* p% W3 _' M8 V

" e2 Q" M' _9 c4 {) q7 S4 u- {2 ~6 r

- y) h/ B2 `5 j' r* {4 t   5 i2 ~% C M' E# v( v/ n

% N6 P* l, J- _, `

* T$ M/ }( b2 o) e; \ i: Y 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 . ~8 p% x4 c/ C- \6 D

3 I! S* \5 n, s) f# c* b5 K- e

3 j# R4 A( I5 w- r vshapes= 8 }% ^# x; m- h$ M8 A" d) W' E F

* L, G5 J3 ?& j

' [1 R/ p" H% V+ G2 E# r   ) t: \! G1 l% X0 W5 O0 R: ]

b/ Z5 v. w4 d, J

8 D( _8 ], M$ |" d lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 3 G9 \$ [. F, P) ?& w8 A

' p- u6 t/ W! y' f( A

/ k' N+ n- V- F0 z; \ vshapes= 6 X$ G$ N5 H/ K

4 g/ W; q' j4 }

! |5 [4 M: Y6 A3 W# _ 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 % q0 S/ y3 B1 P( q3 K7 f7 f9 [

/ R, Y1 ]! F4 b7 ^

% ]/ N, V/ W/ O$ X0 \" C z vshapes= 1 Y+ k e9 L6 M3 H

7 Q- K j" ^: y# }9 q; p. [

4 `, s0 V/ q/ r/ @2 g0 k   9 w* @# [7 s/ r4 v

9 f/ }; U" n2 D+ j

. F! A# y" X3 e 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 4 O- M# q: p% M- Q8 r* }: A

9 _7 k$ q5 Z: s$ \

/ @$ M, |8 Z* `7 ] LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 6 h$ c+ ~1 w$ `+ I2 ^

" c. D. A- W2 {) V% ?7 U# z

8 d9 F' i9 D' o 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 & z. @ P3 _8 _5 p* n4 w( }

3 i& @. t9 j) H. q8 Z7 v& M2 d

& ^) c; l* Q) i3 b 源的luasocket代码可以参考学习下 + L$ ?0 X: c1 x+ Y! r

7 I+ i& Y3 x/ h- ?% a. d

# F8 H, x8 ^ E/ P9 D8 { https://github.com/lunarmodules/luasocket 4 g1 C. J: H, U% h# _, B

6 u: ^( X0 \$ x7 s. ]

* X1 N) ]; Q# g) y; B6 u8 T5 H https://github.com/fengye/luasocket 1 E9 K' `- @7 t! r

7 U$ ]: J1 Q S

) S" e, e, t3 b   ' { | F5 ~/ X& a3 a

' G) i+ j: g6 r7 g3 E

% G% e3 x& [+ A: n, m# Y vshapes= # u$ g0 @7 ^6 e! G+ A

/ d, M8 [; q, z; ^

. R# \5 m9 P" l0 e# J   : ~( F: _ G8 ~: [

# F0 ~7 B( p1 [1 `

) w9 Y$ q- u- [9 h; C" P3 Q, N; G   7 W, y d( G3 f7 f

' M# ?( Z0 Z# J8 F' N a

. N, O: @6 l: t/ c. X 总结 + v/ x; R5 n; S: s' @! d

) H- W8 y# r* X; ~! B( k& a; `4 c

' o& h" N' }4 m# e 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 ; d0 L: ?+ x2 E; h: \! l

) o5 x M4 m" U4 u8 f$ K

, ~& {, X" h h5 e: k0 K/ Q 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 + Q8 P2 u4 r- o O% p* w

, j" j8 Z% e: n: { Q, y

1 W( i' F( Y9 z8 a- N1 O& L) z$ ~# c 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 0 Y9 @4 P3 s0 j0 E' Z4 L/ W ~" U

, [1 n2 k' Q9 J0 ]

5 Z! \6 h2 a, I! D: R 结束 & v* V+ f& _7 Q- q" L

+ a# W- C$ l; T; l+ g3 V* A4 z$ m

. {/ ^* }, c% A9 p' d5 j" i  【推荐阅读】 ; H3 \) Z7 D4 k) E3 I9 F

8 Q( S& P; n; X7 d9 O

% w7 k* P, d$ F 对吃鸡APP的分析 * {+ v' E v0 \

; X [/ J& a' X! J" X3 |. {: ?

' ^" D0 I2 C ^1 g 你需要了解的APP安全 2 V) I& O' W0 D8 F2 f; B$ n2 B9 V, T; H

% U" h$ A. E5 |1 A+ s1 \

0 U$ \$ S5 l% v0 o3 t 你需要了解的APP安全 - _ R& W) C. R, Y! X- w

( m. \ i1 H+ r: Z' O

5 r9 k3 I8 Q( Z   $ f$ E- ^2 i! W0 G2 ^7 `# K

回复

使用道具 举报

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

本版积分规则

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