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

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

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

" o' j& ^) l8 J 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 3 n$ H/ K% e- t8 l! @; p

6 x. }9 V$ _% U% h I/ r: q3 u

. N% j( y4 C8 g3 y( n' R8 m5 V vshapes= 7 w: Q% G2 H+ \1 X; ]6 C

; j/ x4 s! y( y/ f, n

' [& b6 I# \" K   $ j# {3 B% ^) d+ ]& E4 }

/ a4 D6 |4 I' ?. p& x

4 ]- {- U+ ~4 L! \; c; \3 Q 下面就以开发者角度进行解析下这个APP的功能的实现原理。 0 g& T" D( ]9 ~+ C h3 _& g8 {$ j7 s

y" i# ]7 g+ D# U v

' x4 {/ O1 J! G7 |! V: E   % K5 b, U+ V. U, p$ @

$ x1 L7 N7 H; M5 }2 o a0 Y2 D

7 Y; o. ^- y* G( V 基础信息 9 k5 \& w: H+ P

1 I, C) L( `2 N5 U. l+ H8 a2 s( U1 y

7 z. b% ], F" p0 r8 L1 i' s 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 & P Y" y5 L. N$ X* Q& {1 U

! v- N3 M1 e2 N/ B% E; t; i( }8 N" S6 x

1 a. K6 `" Z- O- X; o vshapes= 6 E8 J8 ^7 z6 B! s3 G0 A% m

, o( H0 L! p* A: v7 Y! c' b3 g

% F S7 B2 u/ y' Y0 }   : I7 M; p2 t" A* l, K( v; R

* C: A4 s" C8 |) R/ |

0 ^( [6 U' V/ r. S 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ; M0 H! O- _: ^9 _

1 o& |9 B1 i" f

H3 }- O* n% ]7 A0 L3 q/ |; e vshapes= - `# m* R \ Z! K

- ~* r( Q' N& s4 A$ P

/ O. k! [% E [5 @. q   : ?) I, Q$ O n$ ~0 {$ u

/ E+ W. b9 I3 g, D$ M

7 `( D( H i# a% U6 J+ Z 通过jadx工具查看,该APP的Java层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ' |: u* K! C! C2 l: I2 R& d, |

& c7 @# Y9 b: P8 z6 l

. [, C4 t" Z/ C9 q, h vshapes= & V7 W8 e. V) D+ `" V

5 p4 z" a0 _4 P2 x

( z& P# O2 \1 R   " J! h1 _* T3 ], Y `: }& A7 N

/ B) K8 [. G: Q7 n! G* X

* u: d# z3 f" W3 |. T 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1个EditText和3个Button控件组成的,也就是下面的截图信息。 5 |% o. ]- @/ y8 }# L, z6 Z6 c K

5 K* _! Z; i$ z9 J* S t, I5 r

: X3 T9 V. n( H% z6 `' D2 N# q3 S vshapes= . X8 [0 b; ^( p- i

) f: i% m& W. c" X

0 v0 R1 y4 [( F6 V; F0 |   ; w4 i8 t: {. x9 X, P: j- e

% p% D$ u* k6 T5 z E' t7 U

9 R. |& ~8 E) M, B 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 1 {" `5 ^0 P7 a: ~- A+ U+ b. ]

1 t. T: j/ \0 m: B; { Y# c# F( s

$ M% {( W7 \$ \6 `) @ vshapes= # W4 d/ A# @; A1 o; {* W; V

( n' ?9 y/ R) |; C$ h' ?& f

: C$ u3 ], ~ X5 L$ R0 @   % j& @( z, }* ]* D6 ]8 }

9 P3 I" w) ~) |! A. ^. L

" o R @3 s: V/ F   7 s5 i- }: j. N5 H' O

! y: n' r4 U' M/ d7 z0 S* L8 T) j

+ y1 ^$ k9 X/ p- ^( D+ l 签名信息 ( |# J& L, x. i8 u4 L: M6 P

0 x( R* D: A* W

' d0 M1 o2 F& D8 y5 J; M& F 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名。 ) E( ?! ?4 I/ {4 R! [4 }( g

' E q& h5 S& c2 i

" O! P& I1 q7 N' F3 I# x 目前APP中大部分都是通过V1和V2签名相结合的。并且这个在签名过程中要保证按照V1到V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 " I( K! R1 z3 v% C0 `) j# \

2 ~* u; P1 D; ~; S* E. j

3 S8 l' e$ f0 O* I* s$ J$ R* k# { 在android的app开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 a' p+ X- K. T# y7 O

; y& a) [4 a& a4 G1 M

/ z8 s; p; w6 \. D" t( C vshapes= ; G4 M4 f$ G% I& j+ a. [

5 r2 o$ I5 \: ~

! {( D% l/ k6 u, m$ l6 b7 J- u# y% L   / |8 y% I0 m! c2 }8 d

. t8 A( j; T: ~+ m5 d* P

* A- F) }# ^! G5 T9 i4 |* h8 l android签名的数字证书的一般都是采用 X.509的国际标准。 4 z2 \) \, l- t6 B# P

* k7 I% @' L* r6 m- G

* g$ `$ t2 m+ ~$ O# t2 `. b 因X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 . S' j* w% z* c: Q; n9 D0 m

' g( R) c% k; b. r% e, V

$ J. x0 A8 R8 r4 L7 i$ |9 j4 y 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 9 z# v* `3 E! I+ N8 D0 j

& H8 w5 X7 j. ?2 S% g8 s# I

/ j8 _- ]" r$ @, v: q& @5 Q vshapes= * B2 _- T8 P, m* r

% Y, C, S9 q9 i9 `1 L, ?; _8 D

N5 a$ G" l/ V1 C: ^" \% F   9 Q" i1 ?; W i$ Z

# `! H+ K5 N" X0 A

/ e' ^2 V* ^% C* Q) y/ P+ g4 \ 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 - j' }& {, x* ]1 k. ^0 y3 |

1 @* x. o2 [1 v0 @- w. e u3 H% L- n

) }' P0 J! I8 z# |1 v3 W; Z vshapes= . c$ P O. O, S; [2 f* k) @* v7 o

/ E0 e6 U/ {! t6 r3 I3 [5 m

5 x: e4 P* E0 W4 i" [ 、 : U2 G0 k. P" i& e/ C5 H

5 J! Z/ {/ H0 V( A% A" x9 ~

" j9 N {4 _3 r6 w/ g1 J1 {& q   8 X. Q1 M% J) p, g- G$ W/ }- v# W

9 H* a ~" S' J( _$ r# c

* i3 _1 S2 @( @7 }- H; \& x1 e 权限信息 0 Y, }) X$ O1 m* ] M

9 D2 B% G8 {+ A2 x& o3 [ P A

+ F6 ~: c+ f9 h# z 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) " A/ v+ x" s& H% g

, a& ?) R4 y- y0 {

( k/ S7 n8 p' t3 s" a android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 8 i+ }0 Q5 Q5 L/ C

- x& }, u, W1 M1 w% y

$ W- p9 X o# v3 o. e; ]0 S5 V vshapes= + Q' u1 ?9 }, v9 | O: _. b

' H7 v; B& d9 J* ?+ Y

8 Q9 o- R) }7 x: V1 G+ x   4 d5 q0 Z( L7 j4 s7 M/ W, f7 n

I3 p7 {" D( R# [

3 O$ M2 W1 q0 s' V4 [4 ~: Z( \; Y% K8 I 下面对这个APP的所有权限进行详解下: 8 @. |, U/ p/ U; S: d4 G

* a4 l; F+ f5 A! x' V+ v7 S5 U) i+ t; z

& r U5 ~$ c# D7 v( g' Z. K android.permission.INTERNET :访问网络连接可能产生GPRS流量 $ x4 O5 s4 t+ {* ^ X

1 K4 r! N/ ?5 r* Q1 L7 q. @6 Y

& v; v) r; B- P9 k6 @; R5 M android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 $ r; ^3 q9 T; H% S8 }3 L

- B3 c/ @) F: R( r

! K) c) S E! K5 ^! A" X; @3 i5 v android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 . y9 T" G7 z. s e( P; ~ h

* C( T- p$ X( N5 ~/ o

' m; ^7 o! u7 A5 v4 }) J android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ! M: [( R3 L/ z/ D$ w

1 I" {! o- [3 a# ^3 h1 B7 [

' s1 C( Z4 ?2 W0 F android.permission.WRITE_SMS:允许应用程序写短信内容 : ~/ N8 p6 j# ^- d# j

0 s9 v& D$ {8 O1 P# ?! q; \

6 o' ]% y) E0 n; ]- j6 R# r( X" D android.permission.READ_SMS:允许应用程序读取短信内容 5 e2 @* v1 ^6 U8 {( u

3 z7 ]$ N3 v2 P j

7 Z. t# K' t N: p) p android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ) n& K/ C: G0 L2 s2 E2 ]

, g- k* m5 \4 m& z

8 T1 F: i. V) Q4 l0 y5 u2 z7 Q android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 9 F+ }' u+ R& Q9 S- k* y8 O

1 ^* B8 ^. ?3 a) m

$ Z: j. U% c% Q' T7 H" D, n android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ' e: C) K) x$ F* k4 y' m( a- P& V' C& b

4 ^2 f" q6 }8 B7 _* Z" i5 a% m

^+ ~! `9 X, [* j9 U android.permission.VIBRATE:允许振动 & S S3 W+ D! h( J0 i

& c" W4 c& R0 T! g! D

: |; E! r+ B5 X2 B- ^! {/ g android.permission.READ_LOGS:允许程序读取系统底层日志 - @+ p' q/ k3 h0 L! D

+ S# k; |2 Q; b, P' S; r4 Y

. [3 k- C. a7 q android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  - m' u0 k- K9 h1 N% p6 r

. o- j+ i: ~ k. O/ J- o$ Z9 f

q# b0 S+ W7 L+ m& x3 O: D   , d/ U' j0 f) u& v. m

: A, r3 @+ D( ^2 p8 V! s3 a! g8 R+ P

$ f: D3 u3 v% h/ D4 d6 t 功能信息 + G$ }. P) n5 P( ?0 x; ^! [

$ m$ v( d, @. j# S' |# d

5 ^: p+ G9 S0 T0 {! s   6 P; a/ d0 j+ b' ]

6 m, \7 y* D/ v9 R4 V0 h' d

) S) m( b- Y4 u$ V0 G/ E7 Y 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 7 O+ R$ r% [$ I

: W6 W7 s/ Y0 C; C6 p: R4 \

( |- j0 t2 `' @0 c5 {- [ Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 4 j# }9 g! S q# M% `& T

. `& c' l2 Q1 A

8 R( o1 V" k( v9 s7 l3 v 1、需要用JNI为Lua的C库进行封装,这样才可能在Java中使用。 3 w5 E G; q% a' v- e& B: V2 Z( t

" u& a \) c8 `, k' a. l6 @) Y S

' j$ a& A# G+ y; ]" s2 u( o3 s 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 & s6 ]% u" v& W2 Z+ G

& V" j( B8 y4 f" Z$ S# V

" f; b# y3 F/ O- L4 P2 O vshapes= 4 G0 a% e1 ]! }5 P) U

% b! [8 c0 D( C8 ]& ]

& f5 z7 H) i K# D   - p* r, }/ |! d/ M: ~5 J8 ?

' w3 c2 z' a: w r0 _3 f% |: b

3 ~. _: H0 Y% d& D! S 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ; {" j% o' t* ^

3 K# S* B0 `- V" [' N

% @) k* ]/ c5 h4 ` vshapes= * j( K: z' h: d8 U

+ f7 I7 u5 Y, j6 k8 R. G

7 z+ k1 Y8 s% H7 n   4 K( f3 I% a+ m- q. I% H$ K. Y

9 {, {) w0 c s9 m" _

$ O9 c1 }- B. h8 |. u' [. f 在lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP。其实破解这个验证很简单,直接将文件的禁入信息清空即可。 5 p( I: K6 e5 \ V4 y; ]

6 B( |: s2 `5 | @' \, e1 U

: A2 ^" G) S/ `* i( z' O5 x6 [3 e vshapes= " V' e9 s% J9 J" w' y. N( y

s; m& o2 d1 D+ ?0 f: a

: ^# A8 e7 f3 D* G$ h! S- b5 N/ p" R 下图的这几个so是网络上lua和socket通用的so文件,并没有什么可研究价值。 # H. N( |$ ]; W. `& G/ {

1 @8 h; L1 W! o- B; t3 D- i, b

; ?4 p- I/ E6 Q* [8 f* H+ } vshapes= 9 B3 t- j9 }9 J. n

' x" Z3 y2 B( e) F+ o% `" g

9 i/ C/ b4 U9 u   $ ^3 Y/ O% E2 O' I* I

4 q5 O* r! l% b9 \% a# l

: p% K* B# b5 P2 R3 f 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 $ D- ^, V7 L/ S# W n

% z5 s- j& `) ]$ D3 B* y- z

. q! v( t/ B3 {- d4 R: R LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。 5 N! G) ^4 Q1 p* @

3 @& a, ]- U8 o. m3 _" Z, _

4 h( I1 A6 A7 J' n 这个luasocke一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 . O' y# p0 G, Y* c6 T/ V' N

3 Y* D9 F7 r: ?

0 Z7 r. Y0 F( F8 x9 S: j 开源的luasocket代码可以参考学习下 7 R% G3 p4 r# h* f- T9 p

* [' v/ [" u( v' i! d/ ]

4 m5 { Y x, A( o8 P7 r https://github.com/lunarmodules/luasocket % H) g( `& i3 x

; d' _2 r- S8 C' r5 G2 L4 C

% b: A6 b2 M5 ~' A https://github.com/fengye/luasocket ! }6 |7 v6 x: \* [0 R9 A. F, V+ W

& D7 {7 \$ K/ s' ~3 p, t7 }; S

4 `: X% D' Z% R9 p7 }   , E {' O1 e/ |8 \

1 V/ s% J t6 q$ ]

% Y3 k) f, j K! m% n vshapes= m; C! r$ \% l% P* D9 q2 v" j

: S, ^1 T/ U) I' t" Q

/ ?- s! @! L9 h1 |* X8 @. ^   3 m% m8 b* T* v3 c9 z. c

! T" w2 [/ z9 j$ ~

1 K6 ], t, q, _/ D! r! c   m7 H- h8 E& p' d% |+ K

' _% W; p: W% c, j x

. u0 u% Y* g0 D0 W 总结 ) u3 L( }& z& B$ g- Y% K5 Z v

3 x, q3 e2 ~& r0 b0 f/ v+ I

1 `# K) m( t) n* [5 F 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadx、charles、ida、uiautomatorviewer)工具就可以将功能全部分析清楚。 ' K N: D4 r7 R' \4 C7 P/ {

$ t2 o' Q. a1 Q. k

8 Q, j+ y0 ^) V 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 : V+ G# _3 L. q# c4 T5 [

1 L/ |0 I; ^% j3 c6 ~- G4 s! E

3 n8 |) D7 W8 K# m) Y" y+ ~' @ 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 , d: v# p( p+ ~6 H& }2 J

! r. f/ S( Y6 Z

! J& T/ x+ N2 L+ f' |! c 结束 3 t6 f! v* d1 ~2 p( u

" j3 ^, Z0 S% ~! d; @7 ?

. r6 }' r5 x* L% p3 l' ?6 }2 P  【推荐阅读】 p- {. v5 h& N! w g& @' ^

( j- a$ `/ O# Z' |- ]

9 e. e3 o% O Y2 I* f 对吃鸡APP的分析 o! |- X3 q- ^

, W6 b: p- Z$ N

/ V: g+ L8 k$ O6 c" X9 ~ 你需要了解的APP安全 5 O% z _. l1 Q% r" ^ B

5 b3 v* @3 o% n! }; W l

+ e% Z( q' f9 i( P9 q- u q& Z4 N" [ 你需要了解的APP安全 & h4 p4 t+ C N, |- \) p* S6 G; d

9 [9 z* u {1 {2 U) r, T$ ?

( S0 h5 x1 |6 W1 J- c, w2 z   2 v# z+ |: ]$ L i, V+ K# U

回复

使用道具 举报

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

本版积分规则

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