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

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

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

1 l1 `( \) `8 | J( ]& x 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 8 P0 \, T+ @; k2 T5 _2 ^. u, T1 Y

: X8 z5 N Y' v9 V9 i

: |) e) ^8 j& W- j* q: t+ [ vshapes= ) J1 T4 G( j& ]( N

" |3 m J- g7 \" P1 e

7 ]2 t! ]8 k, _& F b: O3 f8 m   " D! |4 F3 ~5 R$ x2 R$ m

# j! ^; S% s) t! u' U8 ]

. W7 z( H% P0 D2 F 下面就以开发者角度进行解析下这个APP的功能的实现原理。 4 I1 b# z3 C2 t- E% T7 O p

5 c4 e3 O. W( ?' f& u' b$ c+ l

+ \" f* I. i, B   1 U l% W, S& l/ q

: ~& @: d! J; B

" t" i# `1 Y' _ 基础信息 & q4 S6 C( H' W# @0 r

; K, S( ]& n! l+ b( P$ ?

$ W: N1 E/ V, R5 A6 {" M& i 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 6 r# `5 J$ s0 C; [

, Q/ w& V1 a# \) `" N' d$ g

- n; B" ]4 }- r' k vshapes= f& l" X9 \; V2 j$ I3 K9 w# f. G

$ ~- H# [3 a4 l" B7 R! C# o

" ` {9 I* c1 P7 s   2 ^+ f' E8 y. J# h3 [* d

' T. i( T# |1 M9 y% J' `

7 K, S/ x+ T5 ?! V8 W 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 e$ N4 Z& o: `$ E0 u- C/ Q

; Y2 F; Y$ E4 ?" W( ?

' x8 q. K) z5 N' P1 i. E: b# _, f vshapes= $ U$ |2 _; G* t$ @

0 v/ b+ s- j3 L/ {) u5 U) i/ B

! H- s9 S3 Y4 v/ a3 b) P   9 S: R) C4 ~3 e! {

% y( C& I4 |3 T- D* D; u' P

& a8 a! f2 {% w( q, C 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 , ~6 f# r7 M) G7 G

. S u9 {( i, V6 O! n- ^6 `- \8 O/ R

8 p0 Y9 s! @0 R7 X0 r vshapes= * ~/ _* a5 w( B4 r3 T' p" G5 n

+ o0 |4 X0 A3 J3 i6 m- S! O9 I" z

4 d; g* b, `5 Z# b. P5 N/ P   0 C/ l# ~* H) V2 \

! l' A% ~) W# T' S: R

# z6 R- n2 Y5 u! i9 V, o8 m 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 3 x0 D @! v8 C b& k* f

* c# H0 T/ x% [: q+ b

p& B" y* i( C. \6 ^4 I vshapes= 9 _! E* P7 Q+ k9 G- Z

: j H% O8 `* B& c; E2 W5 e/ f4 Z

, G( f7 O. k0 E# H' T; x   ' o6 H. z4 o9 q" |' \

7 |$ T+ f4 u& w4 a# r

8 Y8 C, G6 ~9 g* |6 A$ e/ W2 k5 ~ 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ' W4 N/ n3 j. J9 D9 L. ^

7 G* K6 \! [( Z. J( l- w

- Z5 V, r9 a& I5 I3 Z) n vshapes= 3 C( p3 R9 o. Q. m1 e3 v8 Q

" D( g7 i! o/ T: W0 p

^& a9 A/ B+ v. q% M5 f. M9 \/ w1 L! t   # L7 J" p% G& A4 M, f

5 x2 K9 y9 P2 _ F' G" U

: F, C1 U- |1 B5 {, Y; D   8 |( h- q, Q- k

; u& G" P6 y1 B$ k# c* r! J

; _- n5 L: y/ }, m1 G( b 签名信息 8 X" o1 {" u0 }' l) V$ R) \

7 z+ u' Q3 a7 s3 r6 g* j

& M2 x+ U! k/ y; ` 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 4 ?5 |' |+ \& }. j) m- P" q

7 h# m. z& E% d6 y

4 r3 U8 e$ S, G+ T; D# q3 ]. F 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ) `* D! [, Z7 ~# F6 H4 e1 @

2 s7 ?1 A- x9 q) r

3 }0 v# ]7 x; Y8 b$ n0 x/ @ androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ! ], J3 @8 w! o! R: W# _

! {' t/ F9 A$ Q2 c+ L

9 z! j" W, x5 L+ w" a. R vshapes= ! J4 a6 x3 Q+ O

* m5 g$ E6 a, a4 z/ P

; c* w" j: c. l6 l$ Y/ d# U   5 ~- G% ?& L" V% B# y

. Q- H0 n5 l7 a4 _7 `) c4 E

( Y, l1 D" t8 d- W5 ^7 _ u android签名的数字证书的一般都是采用 X.509的国际标准。 4 d. F) p" c3 p8 K% Y& i6 T

/ G* C, _$ r X, v

8 ^) }/ t. Y+ Q' f7 O X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 / N" P1 u# E+ P5 ?

( J+ w& I* ?) }" M' t& v

3 W' N- ]* O9 x( A5 } } 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 0 {3 |1 _' g0 l$ l8 v; C4 y

1 ]' L+ i# t6 _3 }& |8 i

9 Z2 a3 J" r4 B+ R* D9 P vshapes= ! Z! W+ M" A& M

9 L% N* k T/ F: V6 }6 { u: D

7 B0 n+ X1 _0 w: g   M$ P5 l, S, d

5 } L8 Z' w4 Q, g: d

* e; u8 z4 @. [. w. k: S, t 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 1 d6 Y9 O. u4 ~; K0 f- Z

, j* [! ]* f. @, `

* S6 g6 r- y* L# v5 |3 k5 H: A vshapes= / O8 L$ t% f1 I3 W1 `6 O

3 `' L. ]$ ~% R7 E& G

2 B( u) x+ T! {" c: d0 k/ |6 w 8 t' D. ^! J. y/ \! E

1 J9 E, k0 N' L

H! Y, K+ `* H: N( l+ U   # l, E8 y1 R }5 S

. S' ?( n% F0 X' K& f

2 c& |( }) ?) b8 E 权限信息 ! G- }7 G6 v% j. G$ \4 N

+ b! j) N( K5 l, A8 V

7 i- v- p" `1 S2 { ^ 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 7 P4 S- U0 n `: C

; W* E4 O7 n {7 b3 ^

6 f# R/ O9 y8 J$ q& i2 Z& O android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 4 ?# I+ _& F, v- V; r- f7 h5 D, M

+ i& }6 _- p: T: {* ]3 D

. _* f: l/ Y! Y, U$ Z2 L" A4 Z vshapes= 0 w9 Q1 j: r) y8 I: F8 h& j6 c6 x

' @ i% t# T4 N* g) o

; N3 r" M# i O- t! X, _/ s   ) p$ r, s( p$ G5 t2 ?' Q" M! J

+ K: U+ L0 o: p, _) v$ d

" k2 O& R" j* A 下面对这个APP的所有权限进行详解下: 7 A0 r5 Z6 S1 u( V: k, x3 h

- A8 [7 ]: Z0 _- j* w# v; A

+ B% w, N' G# a9 l7 ?' M0 l0 v' m) ^ android.permission.INTERNET :访问网络连接可能产生GPRS流量 5 E. N6 {9 `! N% f

1 h1 }! s. R6 _6 b9 N

0 ^5 l9 s, U; u! J/ C# m c8 r android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 - J: P/ Y! a' h8 h$ r$ G

+ n/ e) l- l8 ]& K1 T2 b

8 p8 n# ?% n6 z1 r3 C android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ( [. d( c9 j' K8 n6 |( f

2 S$ S1 w- I8 _! n9 T' t

) o, Z$ ~: k9 c1 d y android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 - v9 Z3 L/ N3 Q0 C8 c2 E5 S

# B3 H4 D9 c* N z8 Q) g7 D

; N) m5 g; t& M7 |9 z8 [3 @$ q) m android.permission.WRITE_SMS:允许应用程序写短信内容 3 Y& k+ U" V3 c! q

6 r$ }9 X1 t" }# X

2 B! l i. Y6 W; Z android.permission.READ_SMS:允许应用程序读取短信内容 ! F2 w; P3 w# `& g' p1 B

( U! d/ m- \6 n/ c& q7 ?' ?

, A5 d) D3 ?" m- @. H3 K android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 " @; U, A* Z7 D; y

1 \( l# Z) E9 q

) z$ I' y1 w2 \6 \8 ?5 ]8 ~: ] android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 4 z' Y* j4 i: P, c9 p8 _* o

5 E7 {2 w- u( I

/ m" q8 p- F, x1 @ android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 : @# L( P& ~( G' q

0 f- Y: e9 d# _; R

- y0 w$ g( M6 g% o" I# D! u- D! ]- [- g android.permission.VIBRATE:允许振动 9 }6 m/ Y2 O" B: N, Z( \/ z9 N" O! X

: b* ?, B; y6 e2 t3 T& c

5 f$ s2 E3 u! p# ?' j$ \ android.permission.READ_LOGS:允许程序读取系统底层日志 8 M$ t2 g( L2 J! j" T

' E& z- F; O# s+ E/ G) r; q8 C' _

" Y3 [ T ^$ r0 M) z android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ) a+ R' f9 L, H7 ]( P

, a$ U: R2 x6 a2 U2 e: D! u+ z

4 i- M! H* E0 X m2 l   3 V5 `2 ?# e0 C( {2 M* K

- W' P0 e, T7 x2 N6 N4 w, j- j

* H5 y3 h7 ?+ V4 B) Y& a/ Y7 I 功能信息 2 E( e% z6 f" _% \$ [% Q

3 d: k4 l* e, K. Y& D0 U3 q

3 _* {- b+ K j   6 z4 u4 m# @6 X6 T0 L" z9 S* s0 ]

) w* q) m, n, s0 E, A! U4 m$ z) Y

# F% [, B( @5 o3 h. f4 ?# T6 [3 N6 y 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 5 L6 u, b9 E) n

" D# z7 r% H) x% x2 P1 q& _

`5 ?: x% ^6 R) C Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 . Q- K3 j/ s+ N9 y8 t

9 R3 q" M K: N/ T. s5 f( V

0 n/ f" j. W: j: m5 }/ L 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 8 ~! d8 H: l3 W& g+ f4 n

1 b1 F/ c) J% W4 O' e5 a- D5 Z; i0 i

5 z4 \$ G6 \* e% E: e5 p 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 # M- ]- {; h# g- i" s: w/ o

$ X' `5 S0 O5 B9 Z

( ]: h% r& F8 D; N vshapes= + @2 ]" F: f6 i

' }& X0 q! `; E& @3 B- z3 S8 C, H+ z

/ S( x; i% T' Z* j V   ! D; u& j' ~ w

! B q! w6 P6 e7 ]. E

+ E% j* E- V6 ?; H. Q ?3 r 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ( ?$ {0 a T7 R

& Y; R! u+ ^- T. C. G# ?: D6 _* u

) k7 s. }$ A9 B/ c$ @ vshapes= 0 N) Z! ~" o% Q9 j+ t& Y( |! y

+ ~: b) O& q [

t" @+ n) N3 S. y2 H/ c# n: A3 i$ Z   3 g3 R( q% m6 \* d( W8 v

T6 u4 ]( }* g/ `. h, I

% y! E0 P7 l7 `' R: ]8 h1 ^ lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 7 r G; k3 o% D+ E

( t1 _* H+ d- _" n( G

( I( m4 l0 |$ g9 W. Q3 U8 q/ f1 K# F vshapes= * C8 j' {3 m* k- M

, O: m3 ^" J- i: `

/ K# q O2 f! M# U, z2 R3 A' }4 d 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 9 T( a( s$ x0 ~0 }2 n

6 @) [3 o6 x- ^5 I/ b5 K$ d, o

/ l7 O& c0 W! f vshapes= , [4 z+ g& n6 a, \0 h2 r

: T+ w/ X) P- f" t

$ S1 Q& V# B9 T( j" t   : E& Z4 C9 `* s4 A$ z

, ?: I N {: |- q; ]

0 |4 u( q3 X6 s. s3 D$ t* n0 j+ j 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 : s8 y1 z. Y; O

2 _, J0 r8 v& C1 ]! G

" S. E* a# D! s/ H2 @5 \ LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 . X) P) B& s5 K& q

% X# m4 n1 B% U y# m0 s: b# `

7 {% H2 H3 z7 Y& q! G9 \1 D& L/ Q 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 6 E: V! x/ w+ }$ K( o

7 K9 L) [8 j5 f+ B

$ t: ^' t) t+ I 源的luasocket代码可以参考学习下 1 c \- D% p. ]

$ b, a4 {7 C9 M! A& B1 }, Q5 M0 H

* e. ` {0 _, o" b5 R; F2 s https://github.com/lunarmodules/luasocket 5 B; Y2 N8 p# I, V9 p

) o5 y7 h$ b1 h5 D( x

( q; ]2 x- O( m https://github.com/fengye/luasocket & ^6 Z# g5 W _* P7 C) P

2 \+ B4 k* J/ m' W5 z

, D! H3 a, o* F- h& Z5 ^   # ^8 r/ D x* t; y/ P

1 N) {0 G: L+ }0 L1 c

1 m' X" L( t5 S+ D' c vshapes= 1 ^& w+ W, z4 c

* V/ I [* D5 @

, l$ _+ @" _+ m T; D1 r0 N   + t' ^% {' m; ^0 o5 C; b. f3 N

+ X9 Q) Z4 X w& \) W

+ v. @9 O; E4 y* B5 i: S' U5 h3 \ A   9 j; w+ A1 K! L/ R

6 q) J* L% F) z

4 p* k) t6 o% j7 Y% a0 g2 S7 ] 总结 5 k/ n1 }& H' d* n. N

8 a4 x. x; y D* `9 c9 d! g, v

; p( _- l, ]! T' f8 B( e/ u 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 ( H7 D* _7 i* r& K9 A1 b6 q; h

9 ?9 W [8 t/ O

' E2 ~7 M) y7 c) P+ S q 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ) C9 q K$ H; Z+ U

7 V/ ~, T* Y0 l. v

$ h/ \7 a4 K3 [; j! X# d* j5 y2 k 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 4 k+ d. V) G& ^" w

% V. l. C6 m' |# n4 t

& E2 i" `( J9 e( u' T 结束 3 t9 F4 T& d$ h' i' p

3 E( b! V. `5 o. d

# b5 ^. F4 b9 H& e+ H6 R' O2 H; r  【推荐阅读】 + x, N6 u8 [+ ?

* f# m: C( U" @6 R* R

, i |; j5 j' Q9 n/ ^' n 对吃鸡APP的分析 : F9 z7 @% W( Q+ }" z7 W0 c

. W; n5 b; y5 i& k

5 t: A- T: N S4 B1 h7 E- e 你需要了解的APP安全 ( B: T3 w& z) H

9 g6 |7 M5 e+ Q; o! j( ]* V: n$ J

# e7 F/ y6 _ T- W 你需要了解的APP安全 , E6 q) b$ @* ]) Q# k+ D; s _0 W

z: c# r2 r y1 \: `8 D

3 ~) V5 b i3 K' x- c   ( [& ^6 l) Y @7 d

回复

使用道具 举报

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

本版积分规则

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