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

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

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

: L3 d0 o3 J* s; K& \. g/ E 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ) {5 j7 e9 B, r9 w) D. i. o! U: C

S+ H- u G) ^: D

! Y- e) O9 x) J( @+ o! ~ r, a vshapes= . F+ m0 t6 a1 C+ |1 q R

4 H9 K5 ]2 h5 P0 y3 L

4 ~. U: _" K2 ~! C1 a1 X8 K6 m   1 h I: P- u9 d6 Z+ \

+ k3 Y$ G4 C6 s |

$ E8 g( _# v) P3 { 下面就以开发者角度进行解析下这个APP的功能的实现原理。 . f8 Z5 w9 ]3 b g' y

- k+ s9 ?! n1 H5 s8 h

1 |8 c3 q# D& T; x' z1 s) n! _8 `; D   : } a7 E; e3 W0 R, p; M

1 h' d/ n2 p1 N7 }

# b+ _& y! T1 L9 j" s 基础信息 ) j- a5 { K7 r' @

, k$ K+ k& f" M8 b+ p

* C8 l; \5 j& g% Q 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 * R# Y3 r, |8 \! X# a3 Q8 G% C

. {$ q" s; t" f) t- F6 T

. Y9 N6 M6 W# U+ a. K/ R0 F9 a vshapes= . i7 e0 Z: X8 R. h d

! D$ ~% B" \. n8 U

$ L" g9 j* @8 @5 {$ f; m   , D, G5 j' }6 ^/ @: u1 O) k1 v

: M( Q7 [8 m/ |; I

, c$ Y- ~7 Z: J2 j8 \, A5 o7 Q 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 : j4 b+ ^8 E3 ?9 A) | L: j

- G$ }6 u* s5 K; G2 Z

+ T3 b; \& g5 p+ [ q8 c vshapes= ; l1 F0 E+ s6 c+ Q& X: |4 G( g

) m& m6 h- X: U

# n' S& K: T6 p1 T: P+ {9 |/ N" o   , X* r, F, [# d& Y" z

. O, B* `8 v6 l6 l: c8 K

. ^4 v) |2 e) Y! o 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 + ~1 ^; ^" }8 l$ t

1 L& t0 s$ X( f# \1 y

/ t5 E$ p9 S. j: n0 Z4 w8 d vshapes= 0 O; I7 x8 u# n5 M) G2 o

) c) y+ ^, S, R, {5 Z, O& V

1 \) `* Q% H1 z" c   2 ]4 e7 y: I0 P

7 e2 e: d% c% W: V

; R3 O" z% [1 O b. F! m$ ` 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 + Z {3 ` I) N$ E4 E

- ^+ s1 q" i1 C! W

7 H1 q- U- N4 t+ r vshapes= - G+ Q/ v# M. {5 j7 N

- E- S# |% b& l- c$ G" @! ^# Y: v

2 }, J0 r2 R! s+ K   " _4 |/ h+ Q( u- j* v8 t

' ?: O/ e4 O& q

5 o. ~# ^- m; \( S6 _ 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 , P$ f5 j; i6 s$ m

: }) x" F0 [8 y8 ^

- _9 n& ?) }7 f vshapes= $ g# T y3 K4 R/ U2 v7 J

% J1 ~" ~( ~! P

9 B% G' k4 B9 ^* x   * I- n3 P& I/ @6 O, @, P+ [& T

( c( c0 Q/ d! U/ Q/ |" S" N4 f( R

8 I/ D9 U+ c. _" E" R( N- c+ f4 o   ' u/ [- r( ~$ |- s, b+ j' s

2 ~6 `$ a. }; [9 ]; c4 N& R

# k4 ~) `, Z, f( o 签名信息 * {2 H+ }7 f; m% N/ s, D% i

! P, y) v' C4 X4 D2 b6 f* o& m

/ u7 N% `4 R$ O0 t8 z 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 & T' Z3 w2 w0 a

9 e8 t6 I! a/ P! r

! r3 \% d3 |" S9 z ` a1 d 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 & N; Q. s1 R. U! Q6 O" j

, y% [5 k; t0 a6 l! k

" H {: _& B* Z. j& d1 g androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 5 L( D+ ~6 p( p

( K# C3 p* N/ s

+ I: W4 v1 a* C' |9 ~2 u vshapes= , j" K6 h- G# R

; Z& C" @0 s# W5 I9 N

0 b. A l/ F( x, F   6 A* n& E3 k: O$ K% f) Q

( C* \5 N9 c9 }2 s8 k( K8 E

# k* G: d; \0 i+ n: Y1 ?* q( z android签名的数字证书的一般都是采用 X.509的国际标准。 9 b8 ], V& G( ^

: j v2 x. ?; ?( e1 B e( O

# r8 z% h7 f* n1 p$ Y X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 / [5 i7 m2 Q0 Z2 b( y

2 t7 Y: z% e! V* a/ \; y

2 Y, e8 ^8 ^/ s" h 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 ! M' z& r% y J9 _) r& G7 m

) b+ E |6 _$ w% ^& M; ]

0 t+ g. V" @4 g! x- D vshapes= 9 U3 }3 E( R4 ^% I2 F$ G- R

) s% f# h" b/ T2 R3 ~

8 u& X7 d" ~% U, \# z& n# f   H m6 K6 Z$ Z: s) T7 y! k

7 L3 i, K0 {7 V. G# j

6 q' l8 x& _( ` `% }+ d 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 8 H0 a* b [8 g7 E

5 ^) v% f# K9 `; s& a+ @' W

( K- G: B% W7 d6 A, q4 g vshapes= 5 b; w! U+ W# y' b

5 j4 S' a9 K1 q0 M% x& ~ [8 \

; g% |! s, ~& S2 w 7 L0 L0 }$ R A, S& d

: t5 ?1 V3 t5 D( D3 m' R

: T, Y( T7 T! P, y: s$ T/ V   ! y; T6 Y I% j0 |7 I

' `( t5 x5 w _4 _: v

3 C2 X8 n' c: l/ ?9 _4 B9 V0 V- }% b 权限信息 , m6 e' M0 ~- p. } {" r! q

7 w- H1 {. l' F4 {$ K0 V, I

" x; z2 U- L, @0 V; z i* Q `5 {7 H1 O 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 1 B0 f: m9 X/ j* M; R) @

* {3 `1 x/ n- o- W# P/ R

. v, e& x$ q; h! `" @ z$ p android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ; V& P' N1 p( i# k/ ]3 }: d2 c; }& Q

) \) Z, Q6 P5 p4 Q( H% N- U

" |; S6 k1 V; } t vshapes= ; N; e4 ~ h. t" i, D% S0 n

K$ D$ K) d8 `6 p6 f! s: z' ~

- o* A2 q9 e+ i+ P* S6 Q   & U& Z2 B6 g, ~* _' g

" {) Z$ D [; d% F/ D. `; n

$ U X: g) m! B% x3 t. t: ` 下面对这个APP的所有权限进行详解下: 9 j% T" W) m( D i6 R# j

" B% P5 w7 N7 h$ }

1 h w( ^& `3 S; x: E android.permission.INTERNET :访问网络连接可能产生GPRS流量 ; M! g, P$ Z5 B! O4 Y. ~/ t4 r+ _

5 C/ ^6 s& ^' Q1 K& [* Z z6 i

7 m+ e1 y& }8 q) `/ M- f3 ~ android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 % r0 @7 F, D5 P: g6 W7 ]

! O; M: F! ], ~2 t* T O

, O# i/ Z. x ~. g. V android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 , I8 @0 s* B3 ^# S' I

! ]3 K, P1 Z# S7 T- P3 [

- V$ \. B; y7 {2 y android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ' k: O% g* W) i) F: h

- o3 J+ \6 r/ w3 B6 N5 T5 ^' ]

9 ~* V, r0 P3 _ ~7 G6 X; Z android.permission.WRITE_SMS:允许应用程序写短信内容 4 ?* y3 I5 ^7 R' {: f

3 ~" N6 C6 I. |& `$ Q* ~) R

* b& H5 Q& \9 F" u! g& T4 f- c android.permission.READ_SMS:允许应用程序读取短信内容 & s2 Q4 k* b Y/ a: P: M z7 B

7 K# e2 X, s9 N/ v9 t

' K; m( z% j% ]( G android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 $ j: k6 r0 c/ s" c

9 v( D+ K" x X

2 g9 A/ X- M7 p0 T+ \ M' D android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 + W2 r3 [* G4 m" T& S

- m: e( t' W8 c; F+ o

& m# q6 T! T0 K android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 4 n4 B/ S# c& Z0 W# t

4 o4 H7 @8 R& {. F9 u0 X

2 c( y9 [/ t q' F! R3 h$ c2 T android.permission.VIBRATE:允许振动 , B6 v/ b- \" M$ q6 c2 y: ~

2 p* t2 l' w! i

$ X3 Z5 u% R# ~" K& l- R7 q4 e android.permission.READ_LOGS:允许程序读取系统底层日志 6 q) G' U: t, `0 H

% F7 k, J9 _" O8 w# G" v& o+ R: ~

3 I: c6 `8 {4 a android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  , O! q" T" N- a! A% C

9 ]* d* W. S2 M2 ?+ `& Z% R

" m* u5 p1 r0 c6 }$ U" `% X% P3 L   1 p2 d0 R% {1 O# ~0 @" @2 q2 h

, X2 J* U/ `1 A* v" F3 h [

$ g0 v" s1 K; z0 x8 L* N 功能信息 - ?8 D+ G$ g% [; w. J

3 i# H s1 O: V- @ B( }- |

6 O' E# i& `9 Y" k" [% A4 u7 S! i" K% s   ; Z" r& u# _- b3 ?

y( x, f8 J& g% S# ~; c

- n e. t9 O D) m4 q" W# G6 ] 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 , T9 C. p8 R( f0 {. \

9 O- }, {" p2 z) J- T

2 F. v( | m# T: s3 g" B D Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ( T" F- E- r% N/ u& W

# x) g4 H8 g0 j1 G5 P. I4 f6 j

7 J9 l, W+ |; S$ O, i 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 . `' I$ U- `* L* t( ?' W; p( c

+ P5 w# _6 M- D: \* N7 D3 e& K

8 s; o0 H, W+ u( i6 h 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 # o$ a6 n. i2 X6 [% P; A5 H! Y

% F' S5 x1 p5 ] N

( s* p3 V2 B0 S9 o/ _- V vshapes= / M' M1 B' _ X, e9 Y& \

2 ]' f2 U5 [- S1 g! c8 E$ x

; H3 C* Z+ g2 u R   + Y# s3 b9 D* R5 j

1 O6 Q8 a7 e( p6 u3 @) A

& b- c, \, a# F x# ]4 `9 A 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 " T# q" o. t6 F4 y3 j

% S) }1 K# W8 D2 K, S

8 |6 @+ v5 h3 G: W0 F. H vshapes= 6 u' o4 I" r1 J. N; Z- @

2 I2 ^6 L% H9 Y9 j1 v- N

, {) `& Z q; Y; j$ ~   8 N$ R9 R7 \1 J' f7 k8 ~

" h, X8 S+ b$ r2 f6 Y

7 U, l# [; g ?; X3 p2 @* L. g lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 & E. E+ ^, j! F* w+ q \

7 c9 L) H9 L4 T& Y+ S

. w. x3 m* v! c$ N vshapes= ' Q% B1 |! w( g1 u% b

( X. u% @. J1 k- }$ |

+ O: }( k3 g/ h4 _) e' F9 g0 D 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 2 J. b, k$ ^0 E

# y1 u% z+ L, c/ n( ]; j

' f0 a( V7 w+ }0 t, G* m7 D7 W vshapes= 9 W2 j0 D# x) y, g- ?9 h( |) M

9 l k- |( d5 D; Z& a

9 n) o8 Z$ I7 V9 F& ?   1 Z6 |( E9 J H/ v8 N7 F

! j7 \. Z8 Q% v% z% R6 Q! F' e7 f

+ f' d) K/ p) K0 {- m6 {$ Q2 m 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 2 Y7 G9 W3 E3 W) S# F' C' C. p

! T6 V: F& [4 Z' a

* h" f% L3 {; }" Y: L LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 ) s g! x6 E# u3 j, e8 t

1 K' J$ }: }) X' w3 s

* S T' f* @/ k' v; @ 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 7 V& e$ e# T2 V* u0 ?2 R! S

0 Y7 y7 S$ R7 o! R- R( Q( h o

3 ?0 V6 V6 i/ ? N ]. c 源的luasocket代码可以参考学习下 ) I; K! O* G- J; j" c7 R

; \, L1 K2 M+ Y0 e U/ n

, o4 z2 @2 E y+ ? https://github.com/lunarmodules/luasocket , t' M& Y. H1 O M0 Z$ X4 o

5 `1 m0 p) V ?* o9 e

' W& H: m' v t: p https://github.com/fengye/luasocket ! c- S8 N) L; D- D8 D* a

$ B' r$ u# X( e% {" i* p

/ f' Y# v2 j" z8 D, |   5 x) d/ r7 s' h+ n! d# R7 u

; [1 E; `' T' s& A" U

) _" `' u$ ]. k vshapes= 8 _% ]) I7 {! `

4 x0 I+ P1 x% U% F! d: p* q

9 u8 H& ?; Q3 _7 M3 Y% C   4 C8 a+ M2 `. E0 F0 d

0 i7 e0 l3 C1 T. y& d" i

$ T! W' E6 c: g8 ^! m) ~, g   % y' l. d. V5 u- L G' s4 `

! ?% L5 h0 I) K6 H

) L; D' A$ S% i 总结 . S/ B- C) k% c3 a8 M: D

; e }& Z. g% w7 D: o" X+ N8 X

- |( F5 Y; h) r1 c' w 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 4 ?/ A% U. O! d% T

2 x/ W7 h6 Q/ n/ e. w

' H. a; y& |0 q/ C/ O 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 & d, b! l! _5 G8 F! ~ o4 L

0 B- x& {" R- [$ e" k

) P" @/ ]0 W8 B9 w0 J 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 & m7 A( v5 B% b8 w+ u5 f0 x

y; }$ W2 ]5 n+ o6 | d% p4 ~( J9 N

: H2 ~" A' W+ h7 |/ Q( O. \ 结束 9 j, R1 J+ H0 w

* d L8 h) M8 g

" W+ D6 F$ s$ P% ?  【推荐阅读】 6 r1 R9 @% c- Q" [; t2 E% H' a

5 ?) I( n: m0 G/ `

5 k4 V3 ?. K l( c 对吃鸡APP的分析 ; j8 N' x7 ]( ?% L; a/ C

0 `1 ]8 Q; r, h6 d

c0 u5 n0 s; s; @ 你需要了解的APP安全 ; X+ p# j# [1 g( y( Q5 C

: @- f0 b9 I0 |6 s' ?0 l

4 w. q! V: l* g. o! q- e4 r 你需要了解的APP安全 . n, @' }/ s( ^2 ]; [2 W

- L$ `, y1 C6 |9 [

! ^( E3 o* E; ~% b! z {   # q) J: S* J$ N

回复

使用道具 举报

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

本版积分规则

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