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

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

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

6 W4 D0 R5 {& l8 _; D/ n U2 W 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 7 L9 o" E/ l2 p/ L$ J. ~

# [# m2 o: t* y) {

2 @( d; S+ H7 m* K! `* Z+ W( e3 P vshapes= / ]6 V8 Q. X5 C9 ^, e+ W

- r9 {# A7 n: H1 T

$ u9 Z A& x. B( n0 K# V# P, K/ M   7 [* [( z) i$ l" E# ?% L z

' q0 z/ e8 J! [) }9 N5 b. g- l6 G) H

% y: O" s+ B% W: k N! D" Q 下面就以开发者角度进行解析下这个APP的功能的实现原理。 * D+ V* Z% K2 W) L d# y* M

0 t! b4 O3 e: W+ L4 P6 F

) ^/ z' ^) M: L+ Y i   q. ]6 e, Z" k$ o

, E/ `4 i# k$ |' I

/ x& u/ v& C- C' K6 ~% ]1 g 基础信息 4 q9 T% n7 _# j5 k3 {, D: d9 ^

/ \- n1 r7 y# D% m; J: g0 H3 B: y- l

$ ]9 R! W' Q- u/ p3 p1 }+ L 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 5 ?, K! Y4 u0 |: G: _ q

& m6 H* |1 Y0 }$ ~: \% K, x

/ q* }7 t# _8 X; x8 W" K5 g vshapes= 1 E9 I# O J+ f5 E2 F4 m& B

1 e6 O9 t! Z1 G

; {+ Y4 W8 C9 k1 Z- k% y   2 v! H0 t$ g) g8 S% p* m

* W7 _3 c) A$ U5 T

( G% |; ?' I6 q! Q j( { 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 7 \2 `" j4 A- P1 R

. Y* ?5 s; ^8 L+ X. Q' r

( {/ E3 F. D. W% K. ^3 _/ i vshapes= 2 @( ^, L( g+ A0 `8 e0 q1 H4 i, d

9 M. U9 y0 y9 V0 m: c

* r+ h$ J: V3 @+ R: w- S   $ e7 [+ b8 d/ V' ~# r- ^+ B2 P9 K

- T5 g# i- k, q/ K

- Y: a" O1 O4 m" d% I! j8 A 通过jadx工具查看,该APP的Java层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ' I6 C! u& b% B6 J

& n" K$ Y" e( c* D+ X7 d) z

$ `0 m( e1 L- w4 { vshapes= " m: i1 q4 i, B

# p9 ?& u$ U% j

6 x% N1 b. b( ~$ b   ' T& S; R! D* b* n" [& P# {& i

" { w$ A& [2 i" A+ q: i& E! e

/ C. s5 x) u9 J/ j# g0 F" x5 C 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1个EditText和3个Button控件组成的,也就是下面的截图信息。 0 c/ F* H! g, ^

5 A, U" _/ p5 `$ n, B5 d; L

* q2 ?4 F) U3 ~! |9 Z$ t vshapes= 2 g- y2 u: w7 o; z8 P* S3 X

: `% ]+ d, \$ l) S3 z

" l- F/ o7 J5 S- T& ^4 v7 O4 o   * N5 s7 ~5 U. x. [; R

7 M1 m( M( J( H3 M+ M) U) A

# Z2 M8 t, H I7 g& X 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 1 x( C# u/ U1 a' \

z0 M4 Z1 y# `) h0 N

* D" ]8 t$ D: G: @ vshapes= 2 S0 E9 n- h/ K6 w' W

% X, G% d. V" V/ {- N1 F& K3 T

4 ^/ \& h2 C$ ~$ i6 ^   " F+ b5 R( Z( C

% H4 L! h% O, e% ]; D% k a+ u

8 I7 X- M1 v" h/ V v6 G: H   7 I9 `& x8 |8 n6 u, I; z

, k% E9 T) U9 j4 a" L$ Z

: k1 w. w8 d7 a, |/ e X 签名信息 ! `0 y( u+ i: {2 `9 a

# {) R! e& z/ a w$ Q; |

/ l9 q6 m0 i+ r, j3 `$ s1 \" v 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名。 9 A3 N3 w; J( v7 k3 v

$ k+ M4 R4 R% G, f( m: X% y2 x9 N

0 c1 a& |1 i V* E! { 目前APP中大部分都是通过V1和V2签名相结合的。并且这个在签名过程中要保证按照V1到V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 + O G! `9 V5 ^. L& a# D

( n" K) H, k% d8 e' ?" x& ]: \1 {

1 t! A4 e* }6 S" U7 H/ t& ` 在android的app开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 0 _% J" L! |8 A9 p+ V3 X

4 k$ {* y; ~& {7 w

: N/ Y' {0 w, p( t4 H u vshapes= + R0 v$ W- `& ^+ T

3 ^% ?2 j; Z: U- R

* }. T. y$ k: s, G( ]0 K$ m' s   / C) X! d# N" f h! v

( W" s& u4 r6 b( w A

# A& P* R( [$ P3 X android签名的数字证书的一般都是采用 X.509的国际标准。 - M' U H1 o9 @. E5 q

( Y: T P! v4 d- j5 R4 N

" x0 ?# l7 H+ U @* S/ G& j& ^4 w: h' v 因X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ' e v# N* P$ O7 ~+ M% o3 Z

7 X) r' L% U: o% g) X4 r. ~

A4 m* R( `. `5 c: ?, R5 e 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 1 N) P% n/ q/ ?) O- K7 h

6 Z+ K0 ]$ l+ {& Y6 E, M

, Z: A; {3 s P$ L, b% |, L vshapes= 7 O O& _; |" }7 ~$ u/ U2 d) Q

+ k+ i) x U2 b8 ~/ X8 g

! r' V( R- A- f3 Z( L   5 ^0 F V( F. k5 k% K4 |

$ a+ H1 z2 H- d0 n+ g6 \

7 x( J9 ?; a D% z$ [ 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 0 g$ q/ `+ S( I5 w. B

' r( q, b5 ~, B; p8 r6 t3 A

: ? o" X' C4 ?( `. k vshapes= 9 ^' \6 i, M G# z" R/ B

( p4 D9 e/ u- r" ^4 b

- Q" q- W. G( B$ d 、 1 Z/ y4 T9 x" s; ~2 ~, f

' F2 {- K0 T Q" j$ O7 }- U

7 j8 W" Y4 b' ]& H+ I7 T" |( P0 @   - |* `& R% f r3 z" H" ^! J

; y; ^7 j& _9 Q- p" Z" \# L

# k7 J9 _% r/ p6 D" k2 y- } 权限信息 " _. V$ u, x# j

R3 M/ F- f5 m# ^& ?' X

* U; _ P( Z$ G0 q; _5 ?% |4 T 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ) X, D0 H& i: |' [) [

3 q6 g( I3 H7 |7 W0 T2 b; c

) m0 r6 _; i! b, \) U4 C, R V android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 4 C) p9 R( ]& E# w) ` d/ E

. `' `+ |- |7 }

2 ]! y/ e7 w u& p vshapes= n6 z- @. z4 A0 V

0 @' [/ T8 @; Q! o; j

4 W5 C3 C/ v; t+ \   6 i" z- Q* C" T3 v5 Z. K$ x

/ P6 O' w9 P5 B3 z! Y$ s% z! c

/ }; r |, Q& C4 _) o0 Q& W 下面对这个APP的所有权限进行详解下: # G X: e+ F- M3 I4 O3 m

6 e" {. s3 Z% E- R5 A5 V* r5 \

/ h5 w, a( E$ h' `, r/ A android.permission.INTERNET :访问网络连接可能产生GPRS流量 6 g! ` f9 E! ?- J% C0 |

8 U/ \- a1 Z) ] x2 V, l8 ~% ]- M/ O: m/ x

2 M4 U' v: J# x( [' J- k# R1 r android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 1 O) v A1 y4 W8 Y8 @

' r- S& Z/ Q0 w9 n

0 q( C6 S# S5 q9 y$ {: o- C0 }) l android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 8 |7 I8 L* t. {3 u: V: \5 n4 l4 ]

6 Z: l- K: w Z5 N7 r1 u

4 z- b. \; I& H4 W* e7 O android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 $ g2 u/ \& b' T- w# @4 |8 K

3 w' C( d+ H4 @& q

3 T0 F6 K5 H, @! d6 U9 j android.permission.WRITE_SMS:允许应用程序写短信内容 : G4 t( z3 U7 ~! |1 u* |

, X. R# |" i; y4 |

! v5 z' N. G' \( I( W) M android.permission.READ_SMS:允许应用程序读取短信内容 ( \# n8 V' o8 v1 X7 D) X7 j

( M+ C5 N; b, v3 j! H

9 h I. y7 P5 {( e android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 9 D( m( j8 [! i( ~' h

1 Z* M1 f& U' u$ N

) x) ]+ h) { k' A. W, q, V* L android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 ?3 W8 @9 N M0 d6 [, T7 `

" V& Z( |$ A" ^9 ]' P" H/ Y

+ Z0 M& g. J0 N b android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ; b( [1 L" A: \* R0 d

& ], {1 W( }0 D8 i

9 x- P6 n# L- R3 @( K" n' X! r android.permission.VIBRATE:允许振动 r- u7 K' R* L, C; o9 S9 j- D! p- D

& Q! J V$ v1 R2 G

, `* x/ @/ y+ j& X3 i c0 L6 l/ ?8 [' h android.permission.READ_LOGS:允许程序读取系统底层日志 / i9 h; q( ^! c5 R* b- K

9 N% I% D7 |" k) A2 a1 g

7 O$ j% o; c6 u/ H android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  , R4 _6 x+ d! h/ v. i# `

; v6 N. x) m4 O4 O' g+ c

- g* c+ J- t: }' \   ! l( y Y1 i" F

/ x! w1 B$ b2 @

5 U0 P" i3 @ T+ l 功能信息 ' j2 E' l: `/ h9 l

0 I- d% F) U9 k+ Q

. I* |0 V* {5 C$ e" {   $ j1 P. R1 q8 g9 x

4 V& f$ V, p4 \$ s# Y1 D2 g' g1 D& `

% J- w) d! B; F 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 3 z/ l7 F: Q% m1 f! c( \

' B+ c! C' }" T9 N/ S1 L: _

/ s% F. ~% [9 V Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 % K! d7 n- Y( v% H

- M! j: ^' z0 X+ \3 Z# t

; ]5 a9 ^5 F" J+ B5 G$ Y 1、需要用JNI为Lua的C库进行封装,这样才可能在Java中使用。 # W" v0 h: E7 r E

6 i: o9 p# X: W

" a |# q% _# b% f7 T/ r! N; ~ 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 " _8 F# Y+ E! K3 E

( @3 E6 g; R* M" n% H6 G7 M

* H x$ }, {0 {) o/ F/ M" h vshapes= ; X) @) v& w9 d( Y( Q. ~

! g6 ]; U& x K) y: o; z& F4 m- K: k

, T7 D1 f0 O* I% D8 Z" ^   - y2 Z$ @7 j9 s) a- B& L

6 d. @% N# s1 ~+ B- [

9 \/ B* C; S8 G+ p6 k0 @4 ~ 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 e6 U5 D6 ~& H1 z

0 p, M& a/ Y+ S0 {

0 G5 d. ^ g+ O+ c5 E vshapes= 4 i. t, S! p! \7 e

- K, n& S5 B6 }% T( l0 O

5 \+ f# X8 T# X+ ^ j   / E3 G3 t: Y+ O" T( l. e

1 H$ j; l% G1 }4 R% v: P' X f$ m

8 _! k: M, X) H6 X* I G# y 在lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP。其实破解这个验证很简单,直接将文件的禁入信息清空即可。 4 n1 ^* O: J: L O6 q% ?7 | Q

+ E& |9 W4 s2 h( n# q

x3 d9 L4 K+ M vshapes= ) k3 b0 ?, a5 z

( ?. @/ U& _& D% D

& e J Z1 C" D& I! o 下图的这几个so是网络上lua和socket通用的so文件,并没有什么可研究价值。 , [6 Y+ |' ?: {4 N1 D

+ w( I5 Q& u$ y) V1 s

8 M5 E7 {5 C4 S2 E N( n+ i vshapes= & d, l) R. W. n8 p ]% N5 }( u

' U& X1 d% `& M% f2 d: ~

% G' D* ~, B: f: v9 g2 D7 ^   - K. ^. S7 S9 O1 @7 [, x/ t, \0 J" o

: _1 k6 z6 O% {1 i, d- P6 H g+ U

/ A6 u! w( B1 E, D# x 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 7 J! V5 }+ w+ K+ {4 Z

" Y1 D/ U9 M" j3 p- T

I3 d- L- X/ V% R$ d* b3 t" b" B LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。 1 o4 u- M9 }) ^9 J

- K3 d3 Q, p- L7 ^& Q' l1 ~9 S+ ?

' S2 z% ]3 ?4 J: Q9 r! W 这个luasocke一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 + v% T! `6 a* y0 p) v4 h9 [

( S# x" }" g& \' i5 K0 g

- y l& n1 o7 q1 r9 g: a 开源的luasocket代码可以参考学习下 - B+ o w/ e; @& R4 B# {

" S+ }9 f; O1 z' q* J" d C

$ N1 e# n0 A0 r0 g6 I) V& d https://github.com/lunarmodules/luasocket $ M/ G G( ~) D, M

6 D' `0 ]' N4 ~

9 M( m; T7 V2 O5 e https://github.com/fengye/luasocket ! M5 H* V2 n$ m/ y8 j

# D S5 x5 f9 d3 _% S/ |

+ U# |; o4 ~5 X% G   . `$ A# l0 _* j

8 a* m* d0 o8 D! e- }& r

: E) I7 K5 D1 c0 a; m; Z vshapes= 0 G/ m" ~$ ~( W# x# \

3 O9 J5 z' b+ p2 c. k( q

9 f( b& x; s, V; q' E! V   + [- I3 z) f! O* Z! C2 q

0 Y# u: x/ b( P# D

0 V( A* G8 c/ {( u   / {0 u6 o& R. n$ k, h+ ~

& y6 r! F6 n, H

1 _( Z' T0 \# @* y3 K8 U; s; T2 i- ~; I5 x 总结 " N, Z2 F! ]2 \' A# q

6 S- F! c* j! e

( j; r- T% D- C& D! i% k 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadx、charles、ida、uiautomatorviewer)工具就可以将功能全部分析清楚。 , e2 p& @* d ~& s

& Y+ T, q; X& F* {0 j( s4 d+ r; v

/ J: w0 v! J* | C+ {) s 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 3 v% L- g- N9 V

$ e u% I4 A5 V

( k, F2 A3 z! o& v) \( H$ e 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 : h+ Z* b ]% o2 R T$ b

5 h0 w; ^$ @+ T+ ^0 w7 x) c0 R

, a- N3 w/ H- | 结束 , h) f8 }$ |$ b/ Z! x

3 |' O, s- \* S9 Z* q3 b

6 C/ O; s1 Z# t! I" _" o* ~  【推荐阅读】 # s/ I; n+ x- l# p r

7 x! p: Q" R. G

+ X9 g. B+ m1 O% g+ w 对吃鸡APP的分析 * Z3 v4 c* y/ w& y- r3 b3 H

7 d$ U- g& A. A! [' }

5 ]( @; E% O+ M1 ?$ ]3 M 你需要了解的APP安全 8 |+ e* _+ A7 \( {6 w& s# j

( Z9 }: e9 ]3 o4 |9 G

% v, s) R M$ h" l( |. J v 你需要了解的APP安全 / I' h) z& u8 R( H

) A& ~! U9 n9 k( t; I2 w

) \6 s6 p3 V; b   $ L; F8 o _9 \" w6 D+ t4 b

回复

使用道具 举报

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

本版积分规则

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