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

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

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

: {/ `5 U' Q! q1 f, m* q 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 8 ?+ W( h- ~, ?

) ?" v- G/ q" F

! \9 f C; a. W+ `: b4 h4 G+ m vshapes= : H, O* v+ A8 v9 X

0 _3 r, |3 B- N) M; m, D

9 `; K: ?1 E ^0 [, Y' D: A. t   . c6 a, ]' o; Q2 `- C0 h S: E

7 W s9 O/ h; N0 j. d& D6 y

9 U c2 S' d' T 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ; o* s. L$ y( h2 i+ F

8 R+ R! z- i( ^3 V; J; s

# C$ B# H( @7 n) g& B p! D* I   ! l9 C" F4 W% c7 _* F

. D$ n I" x/ G0 o0 N4 P

) n6 I# V' X n: k5 x) d 基础信息 5 o# ~* ]7 F. t/ |7 Y

# c5 V" [) _2 G5 G8 w

$ l& M7 E& h. z. b 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 0 u) ?4 T% u. U, n" V" t2 ~ R+ x; G

! ~% `: k8 p8 d( z$ t2 G3 M& H

3 N- j# R5 Z9 F( o5 w( ` vshapes= 1 a! c! _" n" @

/ B3 H. W/ y' ?$ d6 _

5 x6 O6 h) a' w   # k% T* m" E" P7 M6 F, \0 Z4 L

- w- ~( t/ n" ^& L; o

+ f; K4 I# C! q/ Q* C 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 - O8 Y' ^5 T0 Z) x

- G/ T) ~( {, q' O; V

% u9 H( @5 e8 E7 Q' { {% w' P3 Z( z7 P vshapes= % U% ?4 O5 k8 g

6 e7 W! c" l; f; ^* R

/ Y3 P+ L y, r) y# g0 s   7 v/ n8 V* e8 y7 I

; X+ p; y7 b: u; b

9 M" g9 R4 Y, u6 O" `; `6 o 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 0 x0 J: `) [( B+ P( u

* |4 `; q" Z, [+ F4 @, K+ n

! T; L+ C; V' ? J vshapes= * [0 f4 c. _+ K, n

; u, w5 u' w- ]3 C7 D

+ r6 k4 b7 o% J   , p9 `) F. n" b6 I2 {" n3 \

! }" k- o/ ~8 y9 f

' J' w! d- S9 U5 r) v. f+ U+ J 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ! S& X! A& m: J+ ` v

f7 s7 Q3 j" D

/ \) X: ^1 b, h vshapes= . @: z f/ \5 h4 e: G8 y" c

* Z d5 |1 C+ I7 A

/ c8 P, c# m/ z$ e! b5 y/ K   5 b) z6 |! N4 c( q. w1 `

5 F% w) t2 I2 ?. V7 f

4 m3 U6 v+ a$ Q. J [/ a1 B9 T 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 . g3 ]0 S( d/ B& u q, D& q s; Z

% o: b: E8 b0 k) Q+ a3 [# d% n

1 \/ t4 h- G: ]# t2 ^ vshapes= 9 c; s6 K3 p P! C& _7 P

/ d3 X$ C9 T* ]' @

; D7 p/ a! w8 o: K   % m& B5 g( ]& D) X

% T7 P1 R, s* }. Q

& ]. s' X6 H: f   3 d7 s9 h' l; p: I9 f

2 z- E4 e; T! o

7 X! G! }+ H e# R( f& |& Z4 o* b9 B" c 签名信息 ! |- N" K4 k; J5 O. h

/ J' @" R [8 T8 i/ Z

" W- `: ^6 Q& O T+ J( o5 A# A3 E 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 / `6 i, d+ X9 d

+ Q$ o. H2 ]" w7 w0 T) j8 O" W

8 e# Q% E$ s( Q7 h- c2 }+ s! i 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 $ e# h* s/ N5 s B8 J0 f

0 i5 s L [6 o' u( x: F! q1 B g

4 ?( R5 ^- h. n; c* {/ l androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 d3 E) R" ]$ r2 b

& R1 `! `5 m* t# A% R- w

# r; x% r1 w+ c$ h. \7 T; _ vshapes= & U" L8 X" w4 j) A+ n

$ y/ m$ G' D) u1 b7 D3 V: C* T

- t: i4 l& H5 [2 O$ P3 `   5 ?6 X! L! e4 A7 U# `# m j# d

4 p8 }, a+ L- O9 J% o) d1 x% q9 \

6 h/ p& k9 ?+ t7 G8 U( M- Z. J" _ android签名的数字证书的一般都是采用 X.509的国际标准。 + [4 b2 V% a7 o% e7 u' `2 r n

' q8 B: v/ m3 q& B0 \& H; h

* ?0 ~7 i* l. i( [3 V8 G: z X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 h) K3 ~( u; ^

+ y# x1 n" a4 \& c2 T

! z i# w8 r1 R8 L 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 4 ^# | ]( s7 I) a7 o( L7 @/ c

0 |7 A, ^6 J1 @3 M- D/ v) ]9 |# j

; u7 f% Y1 Z- y- D vshapes= ; d& l% y" i/ G! b/ e/ v

' @9 s# d. L4 N: p; F$ S! g7 ^

7 T6 I+ V; t+ ?: w' e( a   4 z) S8 K& [# }9 d* G, A

3 R( S& l9 A/ J. c$ Y3 ~( S% }

+ R! U: P* [1 q3 H4 l4 F# Z 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 $ q( B( v, t8 w7 |2 t2 R

" L/ u3 g7 L, q* y7 p( h, @

4 w# H8 e7 Q- u0 k8 J* X4 v- b vshapes= 2 F/ r" h/ V4 W [. V

5 d; l! X. p! O3 _: J5 Q3 B4 V

( _5 ^9 H- w6 Z 3 D7 d* D0 [/ b5 d; ?: J) R2 Z

- \& n9 e! n/ j/ ~4 _

8 N9 e3 O8 n/ d5 m. z   / @0 P: w0 J6 ~( \6 Z9 k" y( {

' |- G) Y% S5 R( x% b- F. x! V

/ ?# N6 ]0 R1 C 权限信息 # W$ `( c K) r# M2 \6 ?9 o

# T6 `! y0 R5 x7 j9 d9 |

) s3 `$ o' W- k1 T8 w& s) E8 J. s 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) / Z: \: R) J r6 r

/ Y6 `& @; F: e. V

' [* L8 A( ]% U0 D& s android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 1 D [; Y" E- ^

2 h( `) n: I1 e( h; s5 w8 O& @

+ Z, P6 }. y, v& T vshapes= 0 N2 _& |- I6 ^6 T y

% a$ e3 t% ?, O

R, J/ m3 s5 `9 i0 Z- ?9 C   & L' d' o5 D& `3 A

" H& F# d( p- }

/ S( q# C0 z. O% Q0 t- c. \ 下面对这个APP的所有权限进行详解下: # r- w! @( e. K( u2 S4 G

4 F( V% W+ Y' s' W6 Q4 z; G

: y( h) b5 D6 v android.permission.INTERNET :访问网络连接可能产生GPRS流量 ' m) \+ v$ i% F5 }& X

2 P& ]) l$ Q% N5 b

- A0 h2 G8 k S2 a2 J$ d" Q6 w5 E android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 5 S, _% S; N5 M1 f

- e$ ~# ?# k' _0 E8 e

$ w: J" ^3 o1 S2 S1 a" m6 D android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 * ?9 ?7 Q% n6 c# h! r- x

9 G& N+ n5 a7 e" l1 P

- I! L8 E, v& o: ^7 m android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 9 p" U* [7 `- P) [+ R! t

2 L1 N7 L7 _3 }. Z H5 q5 m) h

6 A, ?' t. E% N' P android.permission.WRITE_SMS:允许应用程序写短信内容 3 S: N9 H. ?$ u% s, ]

4 k! D* g1 U2 n& R- r+ w0 x! s

9 }6 B; C( i" u! S android.permission.READ_SMS:允许应用程序读取短信内容 / V1 O6 y3 {$ o1 d( j

4 V% k3 ]# T: B2 Q6 c& ?. k( a; F

) H) T2 c- j3 R android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 2 E' m5 D# r- \3 f, M1 X

- q7 @; W! G9 s9 N* {; y% J- ]( Z0 z

& _( z# o7 [: z. N* ^8 g* K android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 % v9 g# @( A- f

* d0 l) N8 Z/ n

, p# }, K( R' j3 B android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 $ Q2 x$ k0 z2 Z, Y7 d `

$ a" |* d) h3 K( _6 i/ W

2 B a2 {: n7 q7 h( D9 Z5 W# J( Q! Z android.permission.VIBRATE:允许振动 5 ^" e; i6 I# R2 k0 |6 O

2 X: S3 ]* W, E8 I# ?+ b

9 `2 {5 K8 _! K, @( r8 b4 t android.permission.READ_LOGS:允许程序读取系统底层日志 7 ~# ]! L" O4 \& f, P

/ w9 w0 R" l1 @1 _3 {5 E3 @

6 W- _# `) X+ O+ G4 ^& O h0 \/ ? android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ( ?, {; a; P* u" o

1 u/ s1 w P- D% ]$ b3 W) `- a

a( J' T- H" [   ! c `! t0 q% w1 L/ t, v

: c4 s3 ]9 l4 U4 T$ G; k: i1 {

8 w0 {+ q% D0 |6 N% { 功能信息 2 \4 d( V8 `2 r$ p6 Z

4 [* d2 }* T$ T/ E& V2 X( G+ Y* S! A

# |0 q) h% p( ]* p0 J S   " s D$ G2 L% v- G6 f& {: M" T

* Y7 a+ _8 g' V% [' l" r& ?

' n5 P) }( U6 g 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 & L4 H b+ g5 @) J

. S1 J( [5 J, \( b2 g. K/ I# R

0 \, }, | ? A" t3 H3 A6 j" ~! f Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 " L0 T4 b& E- P, Q4 j8 Q- D

( F$ Z r1 O+ d8 P5 p6 e; z* d

8 [+ q0 B6 |7 I2 |3 ? 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 : U3 ?' L* m. h( e4 I2 k

/ [7 Z3 |- m, u) n

! r1 t2 P! r4 z! z. D* e* S 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 * L7 Y+ U: t$ N, Z6 W- z

1 d4 _" ]/ b9 s: L2 T

+ C; J( N% T2 [, I vshapes= # n$ G) g( [0 O9 s* G9 c

2 k, G9 a4 G! P0 m M3 [

1 Y0 t" P7 g( A+ j: b/ @( k9 ~* K   " y* L( u' T* i) z

. p* O) K# h* l$ Y4 ^# n1 a, {

, m* m3 [- [/ z, p, p1 \$ z 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ( T. `) D; k; c$ a; w

) H0 o8 T9 V1 |- E1 b

# o2 V" u" O4 c' L8 b vshapes= 8 ~( i% Y+ e% L" ]9 O4 G8 K% Y

6 C( Y6 E1 K) @8 ]% h" ]) r

8 y7 u" l# d3 K0 O6 f: o; S/ K   0 m0 x8 t- I0 ^% T- U2 I

* K+ f6 t$ t$ G3 }" \

4 n4 @1 j: a M+ c; } lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 + ]5 q3 u- P( C2 k5 g4 H

& u1 g: b7 f9 O, U v! q

) K/ L1 y) [/ U# V9 N' K vshapes= ' U1 e' P$ {% W! l5 F

4 N2 z- }% ?2 z1 i

$ l' x* l3 N& T; u, h4 D7 ?! Q' Y, T 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 7 q6 W0 K/ I4 U

4 Z% x1 ~% l8 Y K

+ j4 c( ?* a& v+ c8 C; X# o vshapes= ! i$ @3 x# {( {( D6 p

* |- ?6 P) D. q/ A

8 V; y5 ]0 _. k$ H. k& A& h! G   " {8 q# D" D+ ~9 G

1 o3 L) S2 _# g: e1 T _

6 @! Y, @6 l5 \9 \# s 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 " t) K+ t! S; y2 J/ {

2 G5 w* _/ `9 a( ~) ]3 x5 a. M

3 _0 o. t# h# ?' ~ LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 # |0 {% A x% K6 A0 t8 }

. _. P: Z. M1 A4 g* D

2 }/ n6 t6 P y* f 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 0 b2 g6 Y. A: e8 D. n3 }

% }7 Q9 P+ W+ x; X) t

! q P- }4 W+ q, w- J _: a) l 源的luasocket代码可以参考学习下 2 ]4 L' ]) Q. f$ [5 L7 s

h& j, }3 e9 J B( Q# B

* }7 B9 t) W$ e9 |9 ^1 U) T/ n https://github.com/lunarmodules/luasocket ! i; V6 ?/ z( S

8 j' F: E4 ]8 E

" A% Z. f% s* d6 n9 B# M https://github.com/fengye/luasocket & t. U+ x5 F' ^- K7 E+ Z

* l5 J/ a6 L( {6 B( F/ p, v+ k

/ h% s0 f. _; ^% m1 J& ^ j9 |   3 y- t; m+ }* c

2 q$ R/ Z; E0 a2 s: ]8 _3 G$ T' c

: [. p, Z; i/ p5 D) i- p" @3 Q vshapes= 4 a. U3 s- m5 t. e3 |+ U

7 z+ _, @3 X) E' D: T7 m* B

/ ^0 R1 S$ ?9 r5 V/ F; ]9 Y   ! `2 J& I. @3 X! }

( P7 \# f" P- T3 v

. P0 R' g3 M* r4 o   % O# \$ \9 V2 ^2 }

- i! `% y: }! J

! D/ G. r) h4 E. u2 r 总结 ; F$ j0 H2 e& r+ I; {$ T3 @, D

1 F( b+ }, f/ q

' R& `' f. q. V! o' b0 t 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 , y7 m7 T& L7 J, J* J- x

) j) Y( q& n9 c2 u

6 ?2 t' p: n, M) c" D6 ^( D 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 t$ b, F B- B: f f

4 P4 T3 j6 a/ j

- ~& Y6 h# _2 z) s+ u7 P/ S" u( @ 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ( [7 [$ l6 E& B

4 K2 |. V9 g% n; W0 j

0 p5 @4 \( S- ?1 C* w 结束 & ]% r. L: G9 q( ]: {

: r0 |1 i/ h. P9 Q, q

% E$ G8 v1 ^* l% S  【推荐阅读】 ( f6 m" Z& {- \% \" m4 i

a4 o5 D3 j' Z

8 {: R4 H0 ?* P& X- n: N$ c 对吃鸡APP的分析 & o* n$ Y0 p7 i! x* q% E6 Q, Z; E

6 K4 v4 Z% x2 t# r0 B

! m" v; I" e8 f( C1 I9 c! n 你需要了解的APP安全 + n3 B( F9 O, i9 s, u

3 W1 z. ~; n) M) _ c& J S! X

Q; `- w2 U4 @0 m 你需要了解的APP安全 ( u/ y7 B# Y: ?/ h% }! s6 f

7 g2 Y8 y) C Y9 t% \: [. Q

- J4 H" Y; }5 [4 j: k8 U% o   - M7 h$ G! ^" r) ]7 e5 z- @

回复

使用道具 举报

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

本版积分规则

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