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

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

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

E5 {' ]7 J5 P5 B 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 + o, D% w; O; j/ R

6 ?) ]/ Y/ ` J: z+ p9 |

, ?* d& n D) @7 s2 P! T7 B. [3 J vshapes= 6 R/ A! O3 h& U3 n/ s1 i

/ O" T# h/ l! D" L2 W- K

v0 n+ u3 _1 F6 x% H   8 e! P z% u* S3 h A* Q

) |# |# U% F: C5 A' f; q

* Y# \4 y1 u, L: r2 K 下面就以开发者角度进行解析下这个APP的功能的实现原理。 8 N3 G$ a: b' S4 ?' F& X* O

_. }7 x; f) O: v* L% X* K

, m {7 r2 F5 @5 \   ( {3 g, a8 @/ Y7 e2 y( a' |2 z

* M' E# B6 j9 P a

0 M2 l9 `$ N d% b) c 基础信息 0 z+ W7 L& O O) L x( ~

) S# C- ^9 J; K/ C; O

" C6 L) L8 |% s$ R, q# n2 b& p 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ; t$ s) ], I8 I! M$ m

2 `- z! [1 r" r; H, {4 E

Z% K! z; B s3 Y/ u% \, K+ }' ]9 V vshapes= ( x4 e, ?( s) E" g+ ~& }, t

4 P. M; m/ U9 Y+ W- q+ H z

& a$ o S" S O( N0 g8 ?/ N   % w' b; H/ e1 I* ~. P4 F, E; p- U

1 e( y* L7 H0 a( G4 A9 x9 ]

# j- t3 Y2 \$ ^4 K 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 7 y- `/ A! L4 k$ L

+ A2 X" q# T. \5 n

: Y: D8 z. j' m- V# A0 k vshapes= 6 S0 W% p0 l+ O, W! V5 t

) Y( w4 h1 m) N* H; E

, M- }4 n$ H( d/ G   4 T7 M- y) X* Q

, h, L2 F3 _! m' g2 T8 B

- j8 ^& L& h0 U" g+ e$ j5 k: c 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ( |. u0 P8 s4 }# U

1 f# a4 c( d; N* M

& t0 P( t) W2 S1 {/ [! f$ V5 ? vshapes= - V C- i( I% h' O/ p/ G Y( _0 n

: m0 {9 T& r2 F6 z6 \; r0 m

# e- p d: m3 s5 P) ~) _1 \' H   ; o( p! Z% g" F% G6 Z

& k# o" e: A- o4 V) q* q/ j) {2 S

7 I: L2 d' L) h% ~( ~0 G8 S 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 5 g) T' k, n, p3 S& s! h9 ^

' ?* a" J, Z6 @! q, H \) X( R

4 c0 t( ?# q+ G- y$ @ vshapes= Z3 J" H: R* P i2 r [2 n1 |9 \

. c% X/ @( q/ |7 x. b" X/ l; G: K

0 k# \' j A- Z' N/ {" l   4 N. _* P5 u; J& W

; k; ~* f6 K$ |3 ^1 Q( J

2 H- W+ |! N, i' ^ L 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 , ]: s3 [3 O3 L9 k6 Y' l. M# g0 D

! X& k+ l/ {. N! t5 E- G

) o- @ f3 U: J4 G2 o' I vshapes= 3 g/ I+ {) D% B6 D& \

- k4 r0 M b0 ]2 j$ h9 L# ~

5 s5 {8 b& h, k9 a   8 p) p& ?9 W! D

3 n* `; s \1 W+ r

0 n- W. i* C/ C5 l3 S* g9 e   - H1 y, B% }( Y; _2 B

* F; w( F3 k' R& e) J( x

; ?( ^* f' y4 [/ K 签名信息 # }6 B, ~5 X+ J- r. l$ e

: |* G- F C: O. C0 i/ ?, J

. M6 D K3 e2 W/ I2 z 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 - ^' v6 {* k( e/ {0 y/ L0 ~1 x

$ n1 R3 ^0 U5 W

1 R" {+ r+ ^ T/ c' j9 E; m8 @& X 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 0 |/ k4 t8 C- j

" K% h, p" b: Z! ?+ U& r5 v8 T

, m1 n% }( m; R! R androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 # ^- G: c( O1 L8 X

* i: K E, ^+ G6 N2 j @

, \( p/ x/ G9 W( u6 D. J vshapes= 5 V, W. I3 o; R# r7 s( N( J

) H/ b q% T; \5 [1 m, E Q# q* e3 [8 b

# B- i1 o U) E& U* r7 K   ; I! q" ^% ^7 \, s4 i

, b0 Q% z( R+ [' p& F* Q7 k0 y

$ `$ o# m! ?% v. z+ K0 O android签名的数字证书的一般都是采用 X.509的国际标准。 * V! k2 M: y) G0 w

7 q" A8 w3 A- P( F4 S/ |

% K6 V; Y; u* f! s1 ~0 f/ P$ z1 n X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 4 P7 X/ L4 A- V- b2 V

2 H% f& @8 t; M) e$ H% l; n" ?* e

( R% T y* M7 \- }- E. [ 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 ! E0 l" N; N, b" s& p1 P2 {0 ]# o

4 N# b7 ]3 x) w$ u8 B# n1 s7 L: R

s4 F1 T z# @0 I+ s vshapes= ! U0 C& _' z" y* F# k/ Y

7 z9 x6 N- J9 C+ M! {, \

) q3 X6 {& l3 k* `" m   , V5 a6 y1 I' n1 h- ~! D( O9 F

$ T! F- c1 C6 t7 d5 w; j* S

2 S5 |& t4 O, C m3 |" z+ S 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 3 Y- J) @# ] ^& v% a9 F! X* n

: S ]" i2 G) B: N+ [7 R p, `' S

3 R9 b' z# @8 J/ F; K4 N& d* E. H' E vshapes= . c1 I j! L7 p- q

5 P5 q: M1 [1 x2 t

9 ?, y- o8 X; |" A; d# g/ { - \8 Z1 F8 ~9 [% A

3 N1 |5 V( v2 q2 J, K1 W+ W

! |. f) O T2 B0 ]5 u0 Y( U: I3 f   " n0 G2 b1 n" {" O* c9 a8 }3 }/ E. N

% t# `; M- v% B2 A4 ?" w( r9 K

% ?7 J) M F/ \3 s9 G9 q% F6 i 权限信息 % C: S1 E6 p0 e Q, V

! B5 n3 D5 C% S% z% X0 ~. Y

, @+ J1 V5 P. o0 ~$ O G! F 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) : v9 K3 M7 u: e2 Y

, R4 f- R4 m& Y7 S7 n/ s0 O" l8 w8 z

E7 J4 k& f/ O+ N android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 7 \& |5 B$ v3 ]" A" d+ P* ^2 h

( h# N7 r: n, H/ H, m8 b! M

" o( Q7 W- E4 `3 k5 f6 { vshapes= " b# Z4 `7 K2 m( N0 [* y

& ^2 Q6 Q( `5 s3 U# R( l

e; K/ C- X% ]- t0 {/ ^4 G' R6 N   ; a$ [+ y# O; J8 H/ j# p

; O4 ?! ?$ R% Y" N6 j1 Q9 ]8 x1 M

) V9 T' J) I3 t( [ 下面对这个APP的所有权限进行详解下: 0 t$ |, Y: U* O1 Z j1 Y

9 ]3 A. n- L+ l/ M( V$ @

5 P2 W( k1 h: B9 r android.permission.INTERNET :访问网络连接可能产生GPRS流量 / m! x. H$ y3 o1 _& P6 z; o

- Y* N8 |9 ^% ~5 t/ P2 `; `

6 m5 ?9 L7 b/ W( v- h7 i* F% k android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 2 t) d% f) b7 z; Q

1 o4 e' M' X5 J2 A1 H! J

% x: l$ y# a( f8 E/ |( c' U android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 0 R' m! l# M1 S7 o" s: v

6 S; r7 f6 B3 p9 M; X* k9 y# a

U1 P& q$ e2 H: R# ^! Q android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 + K7 P) ]* ?9 D# \! ?: \

4 H. v8 H( ]+ |! [4 M7 ?

6 B. i( i# {7 m; L2 ^2 e, I android.permission.WRITE_SMS:允许应用程序写短信内容 . P4 C# d" h- q& R/ Y5 m. Y( V9 i$ W3 S

, C2 Z7 X3 x# K0 s' [

8 H' ?0 w) ?0 ~2 h5 h3 d6 P android.permission.READ_SMS:允许应用程序读取短信内容 6 U" c0 r3 @" K' l

8 A/ [! w5 R0 ]7 n

7 V* m T' a. { android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 4 |, n# b( x5 R; m

+ ~6 l7 [( P) q( v7 ?7 K

: |4 |2 v8 h$ [# T/ V0 z$ c$ W! ~8 i android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 ! W) o/ C8 f- P# R& E9 c2 U w

4 o: E8 ` y0 y# w* o8 b

( K# e9 P3 O% P" q% E4 y. i, k android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 7 t9 {6 S* M" t4 H ?2 y+ U0 n1 V) C( Z

% [5 y" a$ `( L

3 Z2 t% p& r. k* E; U7 { android.permission.VIBRATE:允许振动 7 B) t0 |7 _" l

( {3 t L, R& z8 j

( n0 Q2 V- s0 u1 M3 m2 @ android.permission.READ_LOGS:允许程序读取系统底层日志 ! s: J) k, W3 D+ r( n* \

# [- b; }7 u& x, K- d5 K; y

' v* {6 C) A0 T Z3 n& e4 |& }7 ] android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ( u; p. M0 p8 S! u! N4 _

1 F3 `. h) E: G+ {' d

" u( m/ L7 h6 P0 Y( C C( d   + H# c# V- P8 m: i( r3 D( [

" e& Z8 I' M! f0 x+ j0 ^- I7 _

% B. {' s. Q; S' ~ 功能信息 ) t0 b, r# o, E' h4 i

& q9 {; T6 U$ d1 T- i

- ?- |2 f7 [2 c6 T$ x' ~   * l x' t6 q( a

; d- p* ~' K& [& W2 J: v& V

6 z0 y4 k! | u 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 : M/ b8 ~7 ]* w5 p

[$ Q7 x3 C% O' h+ X

( ~* {( j/ g" h, B5 V+ \ Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 5 n- [8 a9 G: M$ ]( z. ~( B

( j# [* |& R3 J0 t

J( s0 C; {+ v* ] F4 D 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 ) i8 f9 r1 O/ \+ r7 D" b5 Y, @- u. B2 ]

) P* {6 X* b7 u- ?5 e, M

0 `6 F" t6 K4 @. s0 ~' D6 j 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 - n1 F- s9 [7 o% x$ d( b" ~

- T6 g4 q4 I; C0 j

! m3 [5 }. T/ C# z2 a4 [+ L4 D; M vshapes= 4 O- q, H7 _$ D6 ~* Y8 U

6 M8 `7 S& n8 ^) f4 R' V$ Y

0 h. G9 S# k& x7 e; E- l0 d   + P( A6 k, r) h2 w. W2 m

; X7 c# f$ u. v: j$ _) f4 m5 j9 l

; H! r% H# Y/ O9 e) O7 O 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 . Q3 @* H4 z$ p) R3 d

: U- S$ C/ R* ~

0 U9 g% Z1 L& E' m' f# s vshapes= 8 I# @, X% b8 W5 [6 H3 a& ^' s. ?! m, Y: |

# t7 ^' y: k- W* _6 i

1 B4 V5 X) s! `' b; b$ q   # A/ c3 _( r2 e' L+ |1 q9 O, v$ q

* ]8 \( L+ C) @5 j7 h

" j D9 P6 k4 h lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 3 E3 ~* F7 Z0 i# K9 Z; s

4 d) P$ s7 ?& f0 e

" s- i4 x) Z/ H( H vshapes= 8 A; H( x3 h+ J, r F+ ^& X$ J; a$ l

+ Z9 S* V$ b9 y1 |

9 G5 I; ?$ r7 j( f. [8 G2 w; N$ j9 N 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 3 E' D. ?$ W9 k

: q0 Y2 D( T; ~# z$ o+ k

7 f$ Q' j% n8 L0 a& ^ vshapes= ) E# h0 n5 h& [% x7 T

, G; ~5 c: Y8 W5 u; e

" G5 t& C7 z h7 r9 b, E9 W1 ]5 e   " _( S- A+ v+ f* [" @

8 y/ h/ P' E$ n

5 }/ A1 x$ ~3 f" E" O 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 u& I) _+ } j, j, C% \- o3 x

0 }5 Q+ V, i. v% C h1 S( o4 g

6 b! T$ B Z) ^, N$ O/ F/ e LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 4 {3 H* S5 R% L1 M" S

" b `" p8 ?" ?% T

1 u, {; j' j. M0 M 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 6 |" z* J) }6 ]* Y$ E* k

& [( B8 p/ C6 F8 A3 `

0 n6 P8 C1 F( e8 }! f4 f 源的luasocket代码可以参考学习下 ( v+ r% d; J }5 {$ L6 E' @

; D ~& \/ a' B6 A& C

4 p, C9 z l3 k- Q https://github.com/lunarmodules/luasocket 1 o; [# _& M# B

. n: |: P. m6 }5 h9 L

4 l; [7 O# ^& N! ]$ B" m https://github.com/fengye/luasocket ( l' k' H9 \' a, }

! T4 _: s( l, s) M

& g8 V2 A" Q8 i+ `' k   - D ~5 M* |' M/ H" X

+ K4 U4 N! W4 I/ m" N2 @) A1 f

}6 Q7 a' a: g vshapes= 9 B9 m. [$ D1 F: ?( D( y" {

$ Y c( M+ E' @* x1 \4 T3 e' \

% M2 ?: U- w5 e g0 v, r' U   c* [! s" v; X! q! g( t

: Y2 n1 U n' D( m& A8 e/ q

& _/ ^" m- V$ M6 M/ l/ C   9 H: c- p- u0 \1 u# P, c7 X s

. o1 k/ R1 P W5 v7 y% n. Z

# T; K% J( V' M: ^6 a* K" H) S 总结 ; U; v% N! {! j

, y$ F$ {! A% ], U0 M

, R8 C4 O) z3 S2 H k 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 5 y8 H% K/ T1 [, w) M

; t; n1 e% @1 N$ Y0 r

1 F0 Z# Z+ f$ _. P6 R5 Y) k& _ 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 3 `* L6 s; w9 m5 C2 |

; L. a; U, x$ c% h7 U6 c8 D! P' h3 i5 }

: ?+ G3 _- z3 A& `+ R 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 $ J3 {2 e; @3 ]0 f" M, b

7 r+ K i9 _) m9 i" W$ O

3 P6 G# B/ f) n5 [ 结束 ' H7 `2 h1 X9 V. |+ A. T0 |

. v5 t6 @" a- T: o. [4 w, t

7 C- z# Z; b+ e& W  【推荐阅读】 [7 ^. w' N ?5 ~

+ A' n/ U4 Y5 |2 z: F3 m

1 Z' U6 U6 |5 A 对吃鸡APP的分析 . i9 f+ E4 i# Z2 p* X0 H

& H* z9 e2 b8 V8 z( W+ h4 b% u2 g

( P$ D6 Z$ F; c; |! U 你需要了解的APP安全 0 `( g; a$ e& l" J, g! R6 ?

9 S& q: w4 f" h6 `8 |$ c5 b$ V

! V& ^' V' L4 q 你需要了解的APP安全 ' m. |6 Q2 ~% `& Z. e

" d# {* s$ F; U t8 S4 ]0 r0 F

* _/ P$ {/ ~- u+ ^4 c' C+ j   2 g6 ~7 E" P3 B" e

回复

使用道具 举报

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

本版积分规则

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