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

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

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

* U; F* B/ H" S, p, ?7 o" s 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ' \ Y1 U8 L/ A- m3 x& Q* F

$ e. {2 A3 K$ f4 i( b- f

) i) N# V9 C( t* Y8 p5 i vshapes= * u& Q' ~. {: S+ s

( {& l. Z% ?7 r' B+ T' [

5 g @0 K \% D3 X- w   + |( z9 w3 S1 p4 l) b) A+ c9 F

! v& U5 i5 `$ |4 r8 N

# {2 D2 ^ F7 ? 下面就以开发者角度进行解析下这个APP的功能的实现原理。 : ~7 S$ }5 \ H/ e( Q; {" p

7 L% ]: F% _1 b, _

8 l9 x- N; F1 h) z/ w" Q   - o0 _ p' N2 p( T, U- a; f: v

: R9 T- e; a, f A( ~, h r

7 O! @; l" j: _2 v" Y5 C 基础信息 3 F4 ]- b& T# R! T, M' V$ v

4 C9 X. l7 E7 d

8 L s) @* ~1 } 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ! a8 f5 m4 F; `

4 u5 ?9 Q# f: G' ^

* u) a, l; \4 c. e9 G vshapes= * p$ b3 j- t/ C" A$ r* g3 W

4 _6 M6 m. t, V+ q

! a4 F8 Z6 s h5 H$ h% {3 ?+ f   9 \! t& P; k, ^# z* B

h' u' V, t% r# J

h+ p, t7 ]6 m' @; j( l 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ; X* K! H6 F; d

% N1 u' H3 E5 P/ Z( T

7 E! p. X' y0 [7 ` A( P# O$ y' ? vshapes= ! s# }" K, |3 Y3 t- v

# x7 h u5 b$ l* ~) j. S5 e# I

- s* m! b' d+ T& c n! f } i1 c   % g: F4 H; Q' f; e0 \: N

# w, x& p3 Y% M: [9 b/ F, c

8 R# v7 _" b4 _ 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 % H5 H3 B: i& K* n# j2 s

1 `. X. ^* ` [5 K5 v

' f# T( S2 U" d$ x6 N vshapes= / h5 Q. `) Z, X- K* A7 A

! ~0 }( H) `, T0 i' n; [

5 n+ n" J- c) Z0 w   k- c8 ~/ G+ \5 D

2 p7 A* l4 a$ R" p& y4 P

8 I1 i) m. t+ d/ p) z 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ' `' q1 g9 v% S6 r- }7 k7 T

/ w P+ G, |4 G5 l7 I- ~7 G3 m9 n

5 x9 J) Z3 _; m vshapes= $ X4 _8 \& Q$ |" q8 B4 Y7 g

* a3 u \5 I* R- t

, M9 F" J( @/ i! F( X( f0 }# H, j* E   ) P# N' {6 w: B7 }' }; [

; B2 |6 A/ B/ O2 ]" t! `+ A6 I# }

: v3 n9 e* e! s+ v/ \ 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 * {# k& n O0 k( G' o* Z! u( a

$ H* ~& n8 I' r9 \. z# i4 p5 U4 Z7 t% \

# t' q8 s( r; ^4 H; a" H9 v( ? vshapes= - k, k& S! C$ X4 D, W% n

" M! @9 Z$ q9 c) x5 V3 e

/ h" @. q- C/ N- t   8 F) Q Z5 g; @2 [: }/ X

: P8 e( p8 x2 X% N* o" l

' o% K% h3 {2 c) k9 O" P) K" v& k   9 h F, @& k1 b) i0 q% S

! z* ~7 y8 V9 r0 m; u

& c) v) \9 F& N+ f n 签名信息 % _5 p! @: {9 u. c: x& x: i

|) K/ D5 f! O2 w

" y' t: A9 R) i2 h# e 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 . K% Z) U! Q' J8 L# _

! K ]& I+ s0 }

+ P/ ?, {5 A/ w7 ] 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ( V9 `( e% {7 e9 d; O

5 g& n5 U6 [! h$ I

$ M9 I/ V9 r% w; e9 t androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 $ [# c6 ~/ l- I2 e

! q$ A% v, l% \ [% F2 x

4 A- r- t) Z6 o& N- R vshapes= - Y# o5 j, C' m$ D6 I" L8 c% F: Z

4 `7 h1 f+ G$ j; {% t( I0 k

. l' C1 v6 n" _ U) g! e: f6 o4 G5 m   4 d! e$ M( U8 V3 b* P5 t4 H, F7 d

' S6 V; K7 U4 a; D7 f( Q* S

: b* p5 e! r5 Y' Y9 V4 } p0 U android签名的数字证书的一般都是采用 X.509的国际标准。 ) |) b, A# M, d5 U+ ]3 {

9 Y4 S) n. K5 }0 s2 r# ?

4 a3 |6 f. \. j3 N X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 - G1 U. W7 E( w6 R. E9 T4 k7 e

* T9 `) x* V. x

6 K% F, C" I+ K. e0 ] 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 7 r" f4 ^! M* }: o% I

- ~2 W- N. ?6 ]' U$ M, n

* n( }* X$ r# b$ w- e# J vshapes= & }6 r, ]. G* K/ U9 f/ X

0 z& Z' f# B7 J; q5 L

2 `& `9 m8 g- n8 x   w% g+ ]3 e% Y8 }3 r% F5 i1 ^' I

6 f6 ^. I( M$ s2 Z s

9 d% ]9 S. D1 v 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ) U3 `7 R, [( ^6 i/ f

1 b! ^) {4 n8 a1 {

. _5 | r# A9 c2 { vshapes= [2 U/ T# b) K3 C

+ C; ^& a% D& b( A9 c: N

6 ~5 g( k$ W( f5 a! ` X ) Q6 {& _: Y% A X2 A+ m, s

- r* a2 }0 \% [, y% I

+ i! H% @) p- A9 q5 [2 [, @0 R   : Z; k- R2 C* `+ U

O+ }/ L$ w. N9 C- J/ v

. J) @) R2 u8 ] 权限信息 : {# C1 w- N8 ]$ b. {8 w/ G

5 j) m: K5 |# e) y

$ b" t7 r* G9 R7 }0 e 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 0 l, S; j$ L9 v; L( h6 ~& i; \

- t; l% Q- T1 d; {. Y+ ~( t

4 S& u' P' i; x; P+ s B" k; ] android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 $ U# }& {; @% }& \% z- u$ O+ L# z

5 |* ]. H# b6 J; L

$ }% z" Z7 D* u; Y# y- P vshapes= , n* o+ D6 j7 n5 @+ C- M' h

6 [. {9 c, v5 _, L

: }% K |# j$ ?8 b7 s   ; i3 H! _5 H2 }# K- p

1 a# \$ A' N5 v. O- Q3 L$ ?

. `/ r9 h0 O g8 G' y& k4 G' G* ` 下面对这个APP的所有权限进行详解下: & P4 ^3 w/ Q0 M, N( r

! O$ E* K) J1 y) J) C; |; q

% _2 `, x# @ p7 G0 E: ` android.permission.INTERNET :访问网络连接可能产生GPRS流量 + }6 e! I& u/ Y

* Q7 Y& i _4 D% J/ @5 x

+ X# a0 G2 n$ @ android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 \/ p' k, f# D. Z @- }5 C

- c9 c* [& k% }9 K3 T! h

/ m8 n6 J1 L/ E9 u. l# D android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ( {( R& o4 y) F' ?9 Q9 Z

- }; N1 ^+ F. s y4 v, B0 W' P8 S

7 K$ i% q2 l; R android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ' s' Q d6 n$ x& i

8 [9 D9 R) r" u Z Y' Z! k

8 l; A4 f9 B% S android.permission.WRITE_SMS:允许应用程序写短信内容 . M" H, _; M) j7 S+ q- P

6 K: k9 i2 l% Z0 ?: {, C) a- i5 p

/ C' P0 s9 ?' H- G- ? android.permission.READ_SMS:允许应用程序读取短信内容 + R( \; l& n. Y- ?% L2 e

$ w8 L4 I# y* n: i, x- T

4 S9 o/ N% G2 p android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 0 ~6 \% Z6 J, F% i

6 k$ a7 D E) r( w- }1 P

7 ]' G5 l1 L, e$ o6 s7 x' k7 T* J android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 1 y0 K6 ?( V5 p, w8 n' A5 R

; O% |% a1 j# K; B3 h

0 n! G/ z5 q: _# |' g2 m android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 6 b# g' ^1 `) D9 H

) h/ F, K, P" s3 m" z, j0 Q

3 n* ]* d, j- b1 _, g1 W2 g8 z: e4 v android.permission.VIBRATE:允许振动 : i( b8 s% g' y& s/ M& R6 f0 F

- f* @* F. G) ^3 b

* @0 u8 K$ z. S# E android.permission.READ_LOGS:允许程序读取系统底层日志 ; x. s9 i+ B6 ^" {. t0 a( A a

! w \$ v( y4 j8 C- D8 J

+ G1 c, v9 C+ A6 Y# k android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ) C2 y: l- h0 w; Q4 P2 v

3 R0 v$ e! V. H+ q: \

\% l- x$ U. u6 P   2 v& i: Y' m; u) D. L) t/ g

7 a3 ^5 A7 a" Y

' M, W) Z/ j; h' e' w4 N 功能信息 5 g. `9 ?0 i0 v

0 a. L/ E2 l1 Z, p

4 L: n/ b" }+ [& g9 }. A+ I* k   0 W' F& }# f6 C3 m- G

, u$ p( _) l5 o) Z

0 ^7 P5 }# X( K3 Z2 B( {2 `/ h 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 * L) F9 U1 o$ ^9 ]" f/ T' {

" o; L* e0 V4 X5 X

( d! n/ t, J# g5 C9 \7 D, J! H Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 . b. c( U( G" L% C& g- r; x6 b

* B7 o) W7 N# l4 }9 G8 z: K- k

) r( h3 y7 S% J! L8 _) B 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 7 J3 t. d% z% ~* L% Z/ c! X2 I

, P" E5 W; G; @+ U2 ^3 G

6 F) m2 u5 I. M7 A4 r 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 - L$ F' z5 B% [. U1 x+ w9 W

6 \9 G) X9 A' `( F+ a2 E$ V

. V5 T. f, m5 D: c vshapes= ; w; y, A2 O4 {7 ~ M# V' C( |- ?

6 p/ B4 H" l9 { P& e8 e

5 d/ G( _3 V7 b3 p% [7 X- g; x# x   8 a# H0 ~" E' a6 F

& B4 V1 } i% ~" ?9 y+ P+ R5 _' u: [

# q' L5 v$ ~2 H5 |4 [ 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 / |- q. a, M' p% g$ @

& q9 I# Y+ k9 O z% G

, ?9 m9 K$ n- U8 C. \ vshapes= b$ R' ^' n0 [/ b z

: t2 r6 f- r, j+ k+ ?' |4 ]$ g

3 |1 P. S* @# A/ F1 g8 v5 ~   , [$ |/ F8 D+ H4 o

, j" x: D" t6 h- @8 z+ w; u

3 R0 y. Q8 c2 |1 ` lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 8 T6 ?8 T3 X1 R) q3 L8 S; G3 N2 ?3 O

9 Q5 D" B% Q" ^2 i% P7 D

% ?( m. ~" E" e, L2 I& b, e vshapes= % N8 J- L" g, o5 O$ O0 B# l

; |! k$ t4 V' P- j

. r$ y' I( I( h* P% i1 o- i 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 6 [, }' J% N" x: x2 K- C2 K- ~

7 A7 W! \6 v$ u; b& \6 b" H, @

9 X' v! [% S% s3 g, Z! |7 }" E, n- p vshapes= 2 w A& i! F* v t% }* V: J

. S+ r+ K4 N# [: O) X% a8 h# x5 _7 L

! e2 p6 x1 G9 o6 X   # @) d8 g# C1 S# k9 f& S2 N$ t

+ ^: P0 f1 U: q. I2 x, W# Z( R% E( t

$ S- J& N- E; N; G4 U8 v' t 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 V+ _( n5 q& G, c) t1 \4 t

) ^3 T6 E+ ] K3 t; `) ^6 ^

# j: r8 }7 ~* C6 T9 F) R LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 + t1 g' h# X$ V& y+ L

: J5 q# z, K8 I4 ? V% Z( ?

! Y2 H8 H5 [6 {5 Z- U 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 ) J) h( Z! W' U6 Q+ \

: [' s1 o% ?3 Q2 T4 p8 L

4 s$ _4 U& h- M 源的luasocket代码可以参考学习下 I" z& m- ?& ^* e( R

, U5 F3 ]5 Y2 A( J& G8 z

5 u0 w. U7 z/ @7 i https://github.com/lunarmodules/luasocket 9 r( `+ S% |$ w, J n$ m( I

9 o% G. i* l, h& S' b

' }5 X$ m" g, Y$ _, @% [ https://github.com/fengye/luasocket 0 d/ q% B$ _$ x/ v+ x* |1 L! l* K1 W

6 j& `9 S J7 q! u/ o: T! e* o6 l5 d" S

& v' D2 _' e8 V" N, e. `1 X   . Y9 n- H7 Z ~1 c

6 M, k) w" ~* B4 h" x' u4 { |

4 S$ s5 L* P/ _# U* G! }9 N vshapes= % B/ m+ B. d; G- S P. }

2 b2 |1 J3 Y( ?+ w

5 @) {1 v( W' g3 ^, L' z   . b5 \, r2 T' t, y3 i; h

" p( l5 z* ~/ S& [+ @% K) M) \

, A- s" H5 A. F# J' x* Q   3 C, G% ^% h; T' t

8 C {, R+ i4 L( L

) ^# ~2 K: B. u1 J 总结 , I) s' Q& g b4 W* r4 E9 a

) ]6 U; k8 k# ]: k% P

8 ?* X, w# W+ ]: z2 O( W/ B7 b 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 ' h/ \& C# t6 {

4 ]% I! r. ]! f5 ~

c2 \/ m) l6 D$ N' }4 D+ i 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 6 l3 l% b& g: ?. H

% C7 w: ?* ?, d9 w- x

' T+ I; I# i5 ^& I* D 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ( U5 W4 ]5 a" O6 s! k

, x( k9 a) Y3 `/ P& [9 Y ?

# \ ^5 o) [% g" z8 p) r1 ^ 结束 x( g- X3 Y: G7 l3 Y4 _+ Z

/ g4 p/ } k$ }0 [+ _

6 \ [: g/ _- [  【推荐阅读】 ' T A2 S, D. F5 N+ `8 \* Y

" \0 o6 q; D! @4 U5 d: C/ H

$ D4 x: f; H- [) @+ |- Q 对吃鸡APP的分析 . y& Q3 V% t. t: j0 [: t+ S

7 y. \( d0 N9 o+ A3 x4 N; D& r

3 R. [2 u# c2 F- P' s! x 你需要了解的APP安全 4 P9 U) Y6 j5 R& w% R

* ^* Q6 v- ] R* Z1 M& j, i5 O$ S

8 S; [3 c, a# R2 b 你需要了解的APP安全 8 K9 j2 \' s: g, M& I* w2 D2 W& u3 `

5 _! o7 g! n: z0 l- r* v1 j: O

k* }2 T( c: ~" D/ n   6 y" A/ L1 k0 @$ O" D7 F

回复

使用道具 举报

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

本版积分规则

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