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

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

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

0 X; ~4 N- N- i) P7 `! ] 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 9 @ p/ ?$ V( ~9 w! G* k2 H

! e( S$ [8 g1 ]- h& |' ~* [9 d3 P$ h

" V: T8 J( b5 H9 d% R vshapes= ) |2 Y5 x: p5 i! p4 n+ {- Z

5 I" [5 ~: G6 ^7 `

6 X) o' d2 G6 ~( Q8 R, f& k) u, z: ?" P   $ u" u" A ^- L$ X" o

# T# p" L% d" s5 N! ]% f

; B9 L: s; F& T2 I 下面就以开发者角度进行解析下这个APP的功能的实现原理。 # a ^) d) G6 C& M' i2 q

# t7 c; a5 y2 M

* Z9 j% t2 f0 ?. C( \   % E3 g6 b! H- m5 t! K. E

7 l0 [/ }+ V2 {, H: P

4 e0 h- F+ `( j6 x 基础信息 : A9 u, \' G+ y" O

; _$ Q' ^5 w3 s

0 M9 [! m" \+ A2 D% U 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 " P q, H9 w' z# O

- U& j% A0 \, U8 q1 ~

: u* _% t8 B& `. l vshapes= 3 d5 c# c' w6 H

( v* M8 \: ?, M* Y# k6 @

?3 p0 O% x# M) U   ; y; [, y3 z" W7 {0 _4 q1 h- Z8 p; Z

* D8 |/ A. J& P, ~$ V8 r# {

# e, A0 l# n* ~! G 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 1 T) s9 {8 j; p& _5 `: a

+ W5 Z* t( i8 V0 v+ g

8 h& a, s' X1 v0 a l9 k vshapes= ; }; \' P2 z( H+ g0 _4 q

: L+ }, h6 U# t J1 W1 \& N. ^9 u

' {3 c$ ^* [9 Z+ {7 x) Z   ' b+ H% a ], o! f% c) }6 g

; M( E" k: f7 B$ h. U( @2 q5 M! }3 ^) N

2 e$ S" L5 ?9 A+ j 通过jadx工具查看,该APP的Java层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ) O: z& [0 O! m

. m6 d/ j/ x0 f. [

* z* Q3 P% N& S9 q8 o" e+ X6 ~3 n vshapes= ( `0 e/ h$ p% I" j

0 f* Q) e, H1 ~ r6 @& w

3 g: E3 ]9 d M4 U+ f- L" g6 L   + B* z0 }7 Z+ u1 T, Z7 m( B% t: Z: `

" m5 E( M' C2 O5 e

6 l n! V8 ]/ k6 J# m. x 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1个EditText和3个Button控件组成的,也就是下面的截图信息。 $ T; g" W) ^" ?0 D

* g- N8 l; ]# g& ], C& P* c1 A

7 Y1 L1 V1 K! _' J# L vshapes= + O1 q& ?( _: L$ ~

0 F n0 c; Q4 d7 h

9 d( z6 L9 b9 u8 v0 B k   2 b4 v! L$ L) v! Q

: Y' ]2 c* Y [6 a5 W/ T

, N# s v$ n4 \1 Y 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 2 c9 M8 q6 ~3 i/ z) ~

/ U8 R; o9 f1 l9 z, W

5 t/ ]8 g5 U1 X) ^ vshapes= ( x" B$ U! |, [ D" H

7 X. K; K" @! w

% V8 d$ I7 E7 s+ W* c [! z8 P   - y8 ] c+ ~ J5 r

. ~4 `3 b- v+ r( b! t3 x B! {

D" A5 [% y7 j   * M. N' p) M; V; u# q

4 D' n7 Z% Y+ N, B+ }# y

) Z0 f) A% u7 E 签名信息 9 A8 H; c& }4 o

# r8 j G! Q' _

& \0 }( }2 b9 k 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名。 7 ?4 W( v" |3 |& q W% E

6 m9 V' F3 t$ O( b! p' Z2 G

0 |$ M! I8 e+ d. A3 F( G 目前APP中大部分都是通过V1和V2签名相结合的。并且这个在签名过程中要保证按照V1到V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 4 Z2 L9 {5 C* N2 o" Q7 I

* E, c& F6 u0 B0 P

3 f$ ~5 ^; j( O/ w4 C/ ^# R 在android的app开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 5 Y6 }. `1 s, P& q* f! I

7 f* W* {2 w* B2 Y

5 W [, z7 J4 V' V vshapes= 0 _& ^' @) x1 M0 {

- ]% D. o3 p7 @' P; p

( w9 z4 W3 {* c6 x% c   5 t4 J' U0 b3 d/ g5 c+ M1 m4 ^ q [% \

( U: K4 M$ F' Y. K: K) p% e. j

2 s/ X4 w- r; j0 I1 B$ {" z- n9 } android签名的数字证书的一般都是采用 X.509的国际标准。 e( P: T4 E5 K* g

6 l: \& \$ d3 }- K, [. r

! D3 i' o6 Z* J/ {2 C$ p; | 因X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 - Q% I4 X1 ?3 V" l: F. R1 z) V5 }

H" }# U. D; T7 {! B. v8 C3 L" L! X

7 U5 T9 e, y+ {* T' A 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 $ X1 X7 v4 @. @, a7 q& R

: F& `( s* f/ W4 T) X' m2 ^) f- m! ?

& L: f( x8 ]8 K4 b/ ~; i vshapes= 0 Y+ s' Y2 R- b: c9 t3 q

, x; _. U( u: Q) L0 A; f, [2 g2 y" Q

, f( I% p3 ^) _: Y, y d( H3 F   ! r' i( L/ |1 e, ]

^1 b" \# [. G2 a

) |! i$ k0 H8 b) h 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ( J' F+ l- m# X5 U3 ~+ x3 ^9 N

T# v+ h/ Y' X1 n. [5 b

' E2 l0 E+ D# x+ f vshapes= ! y6 A! m! _ `, c3 Y/ u

8 `. i( q1 \# W; Q( ~

- R/ n% ~( }7 v ~ 、 ! e" ~# K3 y3 N S; k

( g" x I+ F9 K9 x# x

0 k0 X. @) m( m4 z4 X3 c; I0 z   . q C f/ N' @" t% Q+ f8 h* \4 G

# `% k3 w5 q4 m8 V

1 k/ q$ H1 k7 Y, A 权限信息 - P0 ]# ?# }; x* \2 ]8 K8 K

6 i# S4 x9 i4 _$ T( @+ X# P9 a. W

+ J! d0 ] A' x8 S ~ 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ! c8 r9 F8 K- P. i

) W7 ` M; d+ }2 O8 V4 Y

* b0 w- }3 j" X android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 8 _( I# b j& v5 Y( _, @+ `

' t8 N7 n0 D6 l* w

$ |" C* s! j( q# k% i& X# f vshapes= ! k# v" P0 t7 R# P0 f

6 t7 w: V8 {* h0 X* w' R

6 e1 c+ H" G, k   9 e5 v- N$ a" A# m

. u# r1 p9 ]# S

9 V: o+ z" F- L8 C8 n 下面对这个APP的所有权限进行详解下: ! c# Z/ v; `3 F

3 G0 _7 M( H* a; Z, r

2 M6 S2 x% Q6 l% y android.permission.INTERNET :访问网络连接可能产生GPRS流量 y6 ^; R. {0 p% ~+ ^3 a' u

' j f, Y8 M8 k' \) f6 {% ]/ _9 c

9 {4 |" {" v8 L) J) B' W: L android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ) _: w, `8 b- o7 \! }" |

4 K; C2 u8 l5 a7 m! s+ H; b

* _2 i( @9 W% m android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 & `8 ?$ i7 @0 Z5 M

4 K! |6 d; Z0 Y& B

$ b8 p9 y# r9 p" \% G; Z: J% W android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ; |% Q' J) D, k) t

/ C9 ]3 G2 z9 R" U1 x. @3 u# k

J6 g) }. ~/ R6 ]2 q: W8 p' s8 w android.permission.WRITE_SMS:允许应用程序写短信内容 $ [' d, H3 r X# N# k6 s9 e

9 h4 g+ F. z& G1 c- }

8 d$ T( X/ g. d0 R8 o: K+ G android.permission.READ_SMS:允许应用程序读取短信内容 D }6 `" I( A- q3 Y

6 A+ a' h( I7 m7 ?8 h

, S* A* ]! ^( x4 }) P" `6 I android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ; J4 k+ W, {5 w1 t1 z0 o$ g; Y

# F4 @# @* x* C8 f& J$ j$ k

/ l' y! J' C/ I) P) f s/ m android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 6 w, o5 ^( c" G' W5 E

: {# ]7 V) l% ?1 A0 M1 @9 Z

3 s) K- e# @% Z L+ o- o android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 1 c7 J, o( i7 g1 X

0 R! T% a7 d( e! `, Z' a

. Q6 x. w- z) H android.permission.VIBRATE:允许振动 5 m9 } Z9 v$ V# P! k8 E4 v K" G

; q1 a8 f. y6 N3 n4 ~

2 }; e. D) r% ~8 A# V android.permission.READ_LOGS:允许程序读取系统底层日志 7 ~& J' L# R: f8 U+ K

1 C, K0 @3 U7 G2 Y; o) h9 M" Z

* ]( _" L4 n( F/ c5 J android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ; s: n+ M5 o& `+ R" ]

! r! p+ h6 \9 e* q: U! o1 J

, v5 v5 H% A! w+ E- S   2 j5 Q1 B$ }% `; u9 _% _/ ]

$ e1 _2 U! }% F: ]+ ^. ^% O

k% Z k+ ?( F) i0 l2 m! m 功能信息 8 j# q7 L3 T6 F, `5 `0 q* D; @3 K

1 Y8 W) t% q/ ]0 Z

4 r9 z' \1 N ?6 ^   . Z3 n8 Z) H5 Z

% B* _! @8 Y4 u) O; `

& i* S9 c- b7 b8 c" c 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 7 L; e4 j% W' H' s" i% e0 D: v( _

- E' B( D2 U6 Q7 n2 D! w& Y" h. r! O

4 r1 ]- L0 W0 m. n Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 6 a, f, e" x9 U7 d7 e; U

" ]! p. R+ D2 R, j1 R5 B

! k7 s- a1 ?3 x' R 1、需要用JNI为Lua的C库进行封装,这样才可能在Java中使用。 6 P; R1 G' O' C

% a# S. M) d g6 S

. h$ x! H+ k0 S, q ~ 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 / J6 G: V9 ~; C; i& X( D

* R3 Y7 Q$ l+ N7 N# x! q6 O

: r2 n- _, {# C1 S. h vshapes= 8 r; i- E2 q% O6 U

, {- I8 ]# g) ?- L8 e) H! k/ i' B8 ]

" `7 [3 S' u7 Q) i1 j0 n   9 ~: o/ `9 X D2 ^% }

; b7 `$ ]6 e0 w3 N# r+ {

4 }/ y* c# J$ i* z% X0 D; O, s 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ; m+ _. M) a& {6 x; u" Q `

2 \( z- ?2 C' U6 V9 `/ X" [

3 L* P7 N. H! k: v, a vshapes= 4 q' {7 Z ^8 S { j6 g

1 {; p6 @- E6 ^9 t

, D: {) N/ X: c! S   + p$ C6 ~1 t d3 z! H

; p7 ~% x) @+ l3 C Z9 R

9 E \9 c" z3 Y 在lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP。其实破解这个验证很简单,直接将文件的禁入信息清空即可。 : ~! i7 Q& {4 n' x& Z5 X) u/ J

5 P% }& S$ B$ U& o' e

* g3 d& @' M+ k6 W+ I% U( M5 ] vshapes= ; v# P2 a/ z) P& P l$ u

5 Q) K8 n- ]7 i

~5 C# S1 F7 t; v$ l; O& h- ? 下图的这几个so是网络上lua和socket通用的so文件,并没有什么可研究价值。 ! M! {; O) |3 m' W7 N

: P& i! L# I0 @6 F& q+ Q

' O1 W6 n7 c) F5 ~! j5 V vshapes= 2 m" X' y* N5 t9 G

; B/ A! T7 e& s1 N9 N& g4 Q- l: J0 Y, D

/ T' W' r) I/ _4 G& ?; I2 O+ Y5 N Q   1 C8 k7 j: W2 a1 d K( P3 O- H% N

8 h9 o6 o; _! n5 i

0 W2 d9 K$ f+ D# Q 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 _/ Z. |! B$ I% G8 Q/ V/ a {' \

! W9 j& B$ I( k: f

% q0 x1 |7 u! u# r. ?/ K; T LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。 6 j$ _9 G: o9 d% B; A

" c/ _: y7 V$ e8 O2 z. r

# Y; W2 D9 ]# O9 m" B 这个luasocke一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 & q* _ X) m( \4 `+ w& T

* [# J! s+ C5 y8 _3 @% ?) z C+ v

: F2 D! `& @: o: ^8 Q# L7 K 开源的luasocket代码可以参考学习下 ( ~: V! \& E. W. L

! h; {$ G: h, v8 Z8 `

0 j& W7 N0 G$ O. u* b" { https://github.com/lunarmodules/luasocket ; S) e1 M# ^" K

1 N; w* V, }& N+ N

# I) e8 X8 ?. j https://github.com/fengye/luasocket , K& S( O5 r3 R

0 [5 k$ Q) |) @' ]: e4 q$ n y

9 ?! J( z* \+ r0 b q   5 W9 _- D, Y+ B) r2 P0 K+ m0 @

s& v% L7 I7 q; s* W

! I$ P/ W6 a! _3 R J9 } vshapes= ; Y. n f- O. K6 a- G1 `5 S

f1 A3 r/ j( v3 x

7 m8 O. J3 w5 t6 F   + A" C: `, m }3 Q) S4 ^3 k

; w4 t h- C9 S9 s/ M

, g/ u x- |- r$ S   % }7 ~) b2 K2 r! m, M9 Z

9 a2 { K( |7 o3 y

2 Q/ a9 M, d& @! g& x% U2 b' T 总结 ) R/ X0 |& a8 }. ^, e, c

; Y6 f L) @2 o

; X/ Q0 ]; _4 ]/ @9 ]1 l- ] 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadx、charles、ida、uiautomatorviewer)工具就可以将功能全部分析清楚。 6 H! H9 u E: t2 S! g0 `

# X, ]; x0 u! s, o. _# g, B& ~ l

5 N) T; x# g; \: _0 J5 c 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 9 o* o7 R7 p( B0 z: R

) l+ }. J$ Z! g& K) d+ f

' ]- _9 k, [4 {7 ]7 r 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 # }# D" B! e- L$ {* B% S

6 @2 q+ t0 N9 a7 L2 c" ]/ g2 M

' O1 ]5 o3 v2 @9 J 结束 1 S* L/ y. B r! G* A) Y

1 f+ t3 i% Z8 ]! u2 M1 t, T

5 x* d' @, g. ^3 q- b  【推荐阅读】 9 q/ @7 L6 d" F$ ~

P( t" C+ P+ M7 I

- }, I7 D+ d+ O& Y 对吃鸡APP的分析 1 A# c) s& J6 J4 a

7 Y: T. T# H( \" m% ?

+ Y. c8 Q5 O% _ s4 { 你需要了解的APP安全 4 D; d1 n' E2 w+ n! I/ z

5 Z' ]( G; w9 k

" t) y; a# T" r9 c, k 你需要了解的APP安全 , U9 s' W M$ J7 _' e+ ~, G0 Q7 a

! L5 j6 r2 L" s1 W% C M

4 B5 b( G6 V$ H, E9 l' L! y& k1 c   $ j( H/ e- [( c+ @# E

回复

使用道具 举报

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

本版积分规则

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