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

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

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

3 T5 C6 l8 _+ L- O1 T: F+ n 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 # ]: P6 I( B5 T7 p! b

# v& y# T8 r u

) d" P7 }/ P p9 `; [/ t; v$ D. X ? vshapes= 5 O7 u# S: P0 j, h5 {1 Y

: v2 I& l2 o% f1 Z" O' O# W

$ e0 O X9 G/ |/ M   4 F' i ? t2 l9 o5 t1 ~! a

5 I" `5 Y* m1 P7 F1 d+ [5 z

! E4 Q# H8 n+ a; W* [7 [ 下面就以开发者角度进行解析下这个APP的功能的实现原理。 , Z6 D5 Z1 P- t9 U& y

$ K L K4 U! X/ E. o7 O D6 }( ]

! L+ K( Z. w9 J9 f2 x( Q   " \- }& Z5 i+ O, `' B: R# o# N

, n1 d) m7 Z4 y3 N, |9 k5 q. m

+ `9 }7 I; A: G 基础信息 0 w( d3 A) k. h" L2 O/ x

6 o# }: J9 I. J0 N3 _, [# `9 a

7 V6 Y; Z! U! q$ r 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 1 \: \; Q4 u2 v4 f$ [0 |

9 g+ Z4 ~) V$ K( Y. J% \

( f! D+ @( ?7 u! }1 t vshapes= & ~, C, N# k7 E6 c& ]# W- g

% J# ?- C# k: g; G9 E2 [2 K

2 B& ~' Z% |3 V! ~) c) m3 P   ( S. B, @7 w& O

8 S$ n! ~ @% L d) c2 v( ?* Y

2 ?# I+ ~0 x4 t ~ 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 7 e5 r1 Z. y B4 ]! s

+ {3 H& s$ W/ K# y: z- R

( M9 g' n. A1 c* |! A g& I vshapes= 6 _2 v8 C4 L: G4 s* P

0 `& I' q% I/ f% |8 Z8 L

# H' |# @4 a. C! Q5 r   8 O F/ ^4 J2 Y

- X) b0 q( l- t1 G

- |* d+ [3 a( L& s7 n3 G0 k4 p1 R* ^ 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 % O3 [4 n, E8 J! F' g4 g. d

0 T7 c3 O" p6 w% x7 m# E/ s

$ b! g9 p5 W/ ~1 q, d( U2 q vshapes= # o, J6 N/ ?! T- B

V/ T" t1 [! s& a

. j, F, ^; i! G- B0 Y2 [, u! ?( E   ( \( T$ y# S/ G& M0 ^

4 f% b4 W h7 q- k& s9 u. Q6 B

% {* Q. L% V$ X; L. U: u 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ( L |1 N7 t3 x, L

& ~) v9 f. O- B, U L6 v

% M6 m( d. m: {& u8 { vshapes= . [0 x) R) D) `

7 W# ^+ M6 {" s; \ j

' K% W3 I7 z9 X   , v! Q& A# m; W2 |

* i- E4 N3 @: }

7 b8 x' Z) [6 u: H( c5 }7 b7 E 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 8 u' s, @8 X; t5 N$ C

+ R+ Z5 E% D' ]/ a5 W, i

. v, T5 @9 E G g- l6 A/ c4 m vshapes= # f$ E$ y) t: l9 y3 Q5 U3 o

) W2 |$ Y. g# w! J C

5 M2 Q& d c) d$ Z. K* Y2 h5 {   9 }$ Y- h" N/ C7 R" k, G) H

' q2 E' a# A1 g; @# B! n

8 v, [+ t- |" Q1 F   1 Z$ o/ f6 X2 G

, _8 ? U* j+ }, w$ ~

' a1 i5 z+ u: m' \- b5 @) f+ R9 @ 签名信息 ) g: b+ }" P3 y* r2 O$ ?

: U' Q7 ~, a' A9 \& u- T4 ~: `' q

. F! f& P9 z- \6 y' ^; G2 G+ Y 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 : p# |$ i/ j7 b* @- A& t

0 |5 ]" W U/ B6 K* f2 A* d

M n. k/ @+ K$ r8 k$ Q 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 * Q6 ^6 S! K h b0 X

, _+ D) S3 Y; S& j5 D1 ?" q

2 R% T6 j8 c% T- r' H: g; x# G& D androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ( E6 s6 f: X& K

( _4 p8 i1 e3 x3 v1 x

" b: ~ F2 l, E5 V/ h4 _3 `% {1 P vshapes= " D6 e( q# X2 X! z; e

3 X+ O1 [- N: l

1 J5 U8 \! x- F' p6 n1 g   ' T b$ m |) |% X9 b

! A g6 O4 C, Y

! k3 ^1 E7 l9 V. g' \ android签名的数字证书的一般都是采用 X.509的国际标准。 + }1 {2 N' H. q* r- z7 C6 W

4 B0 |+ G: U9 `2 `

5 {" ~ d W$ E) ]6 L8 ?0 Z$ S X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 9 g r3 E* U* L, r

\7 j G" ^$ L" U" V& ^

& k# X/ N3 s6 n4 Y0 n) q6 @4 c 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 9 l$ r$ A+ i( }

* M8 v o" @1 t+ C3 f( f7 g- ?( s

O: c7 d' ?; J. Q/ G. t vshapes= " @8 A1 U& N& ~& u. _* a

. {, p4 t* [$ w2 j7 w+ y& @

* |% f! w8 f+ m$ {2 h/ f   * e9 k& x) J/ i) f; _' M

& a7 A& Q+ X) M* p

% _* c, L T+ h; [ 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 3 G' W% |! c ]. k0 |; ]& w; |

0 |3 R9 r' P2 R: [! b S: [

" L A0 |+ L6 e vshapes= 4 j# u- Z i$ R

* k2 D3 Q3 R8 o2 b+ c

0 ]/ J% J# Q7 m, Q 8 S. f! ~$ V' T( s: b4 K

2 A" `: ]: u: _6 ^" @, f4 _

6 f3 t; I* o0 j! W; m: }4 g6 M! m4 u   ( R* q" j# ?! t- R& `& S7 h7 u% N% C

- b' w) L) w, {2 t( o

U# S+ h6 d% q# x7 w6 ^ 权限信息 ! p; y6 D7 H- Y: }* j3 q$ E

* y% S, D: V1 s9 C6 G

5 G. j0 f( e1 R7 E5 u 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) & o q3 E8 M$ G, k/ ^4 C. _

) ?) {8 C- L. [- a" E5 d" C

E1 [7 @' l" o/ W! n android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 1 Z. y w O& `8 ]2 i9 F

4 f. D4 T$ i D

: y" d+ }( Y o9 a# B& Y7 H vshapes= - A& D0 ~ p7 x. ~, n

5 [/ k3 p$ K( M/ J

- F; B. P7 V$ v" b$ Z& M0 \/ b+ z   z' f% E/ w% C* v

8 O4 \% m) @5 X% Y/ y

1 P% l9 a+ m5 a% X0 @ 下面对这个APP的所有权限进行详解下: " R: h2 Q5 y, M: M

/ t% V1 r7 k! P8 W- h0 J4 g) P

& l+ H+ E! n0 C android.permission.INTERNET :访问网络连接可能产生GPRS流量 / E7 U- d, | o* g- P$ O) O N

3 ~% Y& L, l, M5 W% k: d

* a* ^- U: a9 S0 }2 C8 I android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 " e% S6 m! @1 {

% S% o" d8 E r& G- I( n% `

L$ U9 i/ I6 n3 c/ } android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 " _0 Q; _9 X; }4 ~

- G- E' m( w; N) {0 j- O6 i5 t/ ?

8 q# p% _7 d8 [% U/ f android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 8 v# k1 A* }' y a. ?, k

: s5 \' t+ x' L- B: ~) V9 Q* u

) T$ V- y- X) Q9 _2 @' d* c android.permission.WRITE_SMS:允许应用程序写短信内容 & a2 K/ A) x) G5 P$ {6 Y$ L

' `2 \% E" }& Y) q

1 X+ f' v9 N! Q/ ]6 @1 {; V* s android.permission.READ_SMS:允许应用程序读取短信内容 " X' I' k' R$ r. K/ z1 q+ l$ |0 a

7 R% N+ W# r h) i# ~3 Z

( g0 A, c- F" y android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 2 m8 k! X/ s# | [0 l1 X

& d) C! V1 X4 d' Z

4 j$ W/ }: b# a, ~( v- x Z android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 & ?- ]6 d1 ]* c( ?8 Z, D

- _# D0 J& j- t9 a x) l

, x) f; m4 n0 S, K6 _ android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ! _. |* \; p# V- v& m- O, ]" h

2 C5 \) x" z: U+ R$ b

& n; ^7 A( s; H+ a! R* k android.permission.VIBRATE:允许振动 : ^2 X5 y J8 h( u& n

% A0 ~1 s+ {' `: D

9 U) w' n$ @9 |2 C& ~6 }: M android.permission.READ_LOGS:允许程序读取系统底层日志 ; x' X N' J0 G! M% o& F

3 | C! F" ]6 V: S1 J4 T

% u n) U' Z. }6 d2 V android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ( c7 O: {! A5 |

: K: Y! k" C- v! q+ u, `: k& I

1 K8 \ u5 T8 ^   # ` c! N! x0 p( k/ y

, f; k6 }) |+ t# Y& Y2 S) n5 J$ M# `

4 B# C w }: c8 ?2 @ 功能信息 5 H0 x) Z; W4 ^1 B' c! F

& X4 V6 |" o( k/ I

0 d% _8 t4 F1 b7 o$ P* p   - X9 X3 O! z# K7 _" l

4 n8 G0 S: g2 a; p* W/ f2 Y# \

' A: ]- a6 D) y( v8 y4 X 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 ( r0 f S0 y# x$ ^4 k7 o% C: E3 ]- f* c

2 o* O* D8 L" H* G) _- M

! A Q, t& j/ F* A Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 7 |" [% ]( b8 S8 i, B' M

4 B" h& \! m0 h! G9 b& q( i( l# p

/ b0 l1 W V, G& k H6 S0 f! A 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 6 k) e K$ N- E/ x. a7 L Y. k

) R- `$ e! W- V( }

: u0 v9 W0 s8 U) w# K& I 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 4 ^; m& q9 l! i5 `! x

8 E3 @& \3 n. H/ N# n

. u$ M, |7 N9 T: `! y3 t/ U) @ vshapes= }# w) z6 m J8 e1 n+ r/ P1 h6 {. E

2 @% v% U3 y3 \% U' K0 a, B- Y

+ y" \" p% L% w$ a# W* l, t- `   % ~- w/ f: ~6 A* R7 }. e+ N0 H

* v- C) ?, A3 \* T2 P* U# x- {* K

. c! A5 d; i6 u5 x 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ; D9 B( L; w6 V# x' U

8 l5 v" A7 t, T" j, Q2 M" C. H( Y& M

7 t6 W) Y( u: u6 l0 B vshapes= ' ~) J6 x. g+ A* w( H

, }! I4 X0 I( Q5 ^) V0 e5 Q) A' t

- m$ J) B7 ~( \. @+ O: A( B   * C! w# b7 U2 y2 |# M

. M C1 Y, [1 n) ~: F3 @% H0 t

& {' N/ U& f, |, P! k8 L" u, ^ lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 2 D" o, P/ m5 x$ p

- ?) o1 |- e$ D5 L0 @" Q' x! c

2 ]9 Q4 q$ A3 d+ l+ @4 e7 Y# c8 d vshapes= , D1 o: S% \: r5 u

3 G# q: G, u& O7 M* Y" M* n

; \4 v4 O8 [7 g! i' p( m: }$ r, L7 x 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 6 g$ N+ i- L* v2 k( `

! L9 n0 @- k. O$ S: j

& a8 V( j2 x+ H, c, a* X3 u vshapes= % w2 F) T+ `6 U" H1 w: ?$ a

! Z( c! X9 z/ S1 w; O

, e7 x2 k$ ]* Q9 F   ( r: B* e/ V% _ Z( |7 x% U

6 m1 o0 z) ] F

- K& n' W( N" E; K0 Y% R- } 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 + c0 b% Q7 w$ J- m

# L7 `1 ~ _( P

7 {( T1 r+ h6 }8 V! N LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 9 i- H- N6 _) N& z' E

: o1 Q0 d9 _ z, X# R

+ A& w' X O/ ?- j# T. B 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 ; P9 T# Q6 j5 I3 o3 b

! ^. p8 k4 S' V1 B" t

% k" `- Y8 s* k* @2 P6 d' @; M 源的luasocket代码可以参考学习下 5 [, v; w- F7 W) C) D& D& C" G

" i. U5 _. f" }7 Z

& b O6 \* S. f- ]$ c https://github.com/lunarmodules/luasocket 8 Z) m2 d/ h# I1 n2 ?

7 G* ~- @, {) L; z$ J; ~ \

6 q+ ^# u* I* r! \+ A https://github.com/fengye/luasocket 5 U$ \$ ]1 W' \& o1 @* K4 f- s1 A

0 f4 U' b! e7 [8 y7 ]8 W9 s3 G, ~

% }5 v* J3 b2 j% v5 L   : F" r: _9 Z/ u( [

7 X! x1 S" }9 X& O, u! a+ T

$ M7 [& s' A9 E: P r, t7 `( l vshapes= 8 [- k8 W) j2 ?9 a. q2 p7 a

. Q8 Q) y$ P7 L& z

" X U7 M9 O. a6 ?: ~2 q' {   % N5 D' K! \8 m k( V

3 R" I1 d* K. `3 f2 P

7 X% j3 ]' E% V& s8 u6 {   ; D7 `1 z) a- F0 o2 F4 y

- p& n* J9 A! n

6 E8 R8 m8 K) \" p 总结 8 i. O( h; W7 q# E, w4 v9 J

; I. @: ^) n1 o7 `0 f, b, ~! p7 y

6 f( l& s3 h. y 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 4 {3 ?3 b+ _, x! L0 P: @

V% G% L8 c7 U, K. [/ G: G

+ u# [$ w' B+ G( `% t% w2 q: X 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ' ^/ Z" J/ X) s9 ?- i

! T9 J0 s6 Q( C6 N" z9 a& D

7 \* M( t5 a7 t& b8 |5 c! F 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ; A, }0 ?) j7 s

4 }' W5 R3 b- r' a7 h) T+ p9 V, h

5 V _8 G9 c) C 结束 " y9 @/ j$ S v

& K3 K1 A8 t2 F# p3 Z7 q- b

! @9 A, Q( q" {  【推荐阅读】 5 S' M6 m2 h6 N2 z& ^6 j, z7 A

* o! Z: B, j2 g. E# b* R2 W

: e+ N1 b5 @0 ]1 C1 y: O 对吃鸡APP的分析 ; O+ z! k& U7 m0 {- e$ M

! I! _' o/ b5 C' x! D

! b1 d- b( g1 ^- v% E" F 你需要了解的APP安全 : |5 a [3 P L$ j

1 U, l$ a( ^+ ^. W+ d

6 _8 B; t- ?) I; ?3 {: u b 你需要了解的APP安全 4 @) K# G3 B q* Q* m7 X4 ]

1 P( I- z4 l& b# @2 s

Z0 X4 ~6 s* j5 d9 j1 T* f   " G0 m* `% t6 _6 o" I8 _

回复

使用道具 举报

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

本版积分规则

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