找回密码
 立即注册
查看: 5476|回复: 0
打印 上一主题 下一主题

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

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

$ z( n2 U( Q( J; O/ F% d3 E 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 % F( Y7 g$ V' c+ u8 C

8 E! g8 E- c+ Y& ]

; E0 K/ m5 ~) y/ {; L vshapes= - K4 b: v: N: _3 n- a

4 f5 j3 P0 r3 h1 a* [) t7 a

6 V9 X" M' {1 ~0 Y/ w4 H; ^. }5 x   # K* A& a7 N9 E! ]' W9 ?5 T

0 V8 Q6 t! T6 Y% T. q9 w, x

* @% q0 K. D& n; `! B1 F! a) ^6 R! h4 J 下面就以开发者角度进行解析下这个APP的功能的实现原理。 1 ~, O5 P$ m2 z# ]& q3 v

9 L) X% t# C8 c" ?2 g9 z& m

! V; j* [% P r `8 N   ) `3 f( `6 j4 _, m

7 D, N1 h- b6 v2 y N, r

1 ~ `( Q4 v% \3 _7 j 基础信息 8 t% T$ ?$ Y$ K" _' a

% G2 [) s2 K, U: _. p1 J# y

5 T/ v1 ~/ Y; c5 }1 z) J A X 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 # W0 ^" e- b! n& Q% }) X, w

$ x8 X. A; j* T

+ f: H8 {6 V8 c& X vshapes= ' {, G- F+ c+ [: R" _/ n

: \% t3 X0 f; l9 G ~" t

+ ~1 c$ |, \; u# t% w7 i) [* u+ t6 B   ; ?$ Z8 N" C/ ]6 S) p: v+ y

" \( K' c5 G# O0 \+ H0 }

! \% F0 E1 {# Z6 c 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 8 e- S# x7 P' S

l% ^) ^6 [' ^+ H. K+ y" B- [

: O7 N) s" |% g$ h0 m1 I vshapes= 3 I- x/ X. h; V; B5 G

# s9 D3 L( m& G/ X

/ Z2 @% q+ c% u0 {2 a% O8 f   6 R8 x/ X1 v9 |! j

+ v4 B/ r$ ~0 e8 H# S4 G5 _

, \/ U& p' k8 {* d% Q# G* C 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 * Q9 s- p8 R4 E$ ~

' V( V% g/ G0 {2 K

0 d" Q2 B) a/ ?' s+ j4 ?/ t- L vshapes= 7 o+ V) q! @- I- d7 v- @

* m0 t3 {5 _( A6 Q5 d. d: I

8 R, p: I" v" w   7 C9 \3 `* N( y# Z. V; s

. v. x( Z1 V" r' v" P

$ S( g6 X" R% `$ Z. p 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 . Q2 x; z: V9 Q+ W# P1 a$ [

% E! l0 w1 s- x: M$ R3 O" @+ {+ F

0 ?* g' N+ U+ C# B4 _" E vshapes= 8 i) r5 Q; ~: ~* V; E) s6 c! ~

$ Z( V, L! a8 p3 o8 W

P0 m3 G6 X" a, R( E5 W) e   8 ]2 J0 d( D; |9 |1 \

7 S; q4 v# R2 x" Z+ Y2 x! _9 w7 W% b

) U9 w0 M8 f4 R! [( k 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 / j0 z8 F: O3 L2 h) f1 f

' c9 w% [9 }; E: U2 T

' k" r/ l+ B( v7 L9 | vshapes= _- Q; v! n1 ]' @" n3 f

) ?+ }0 j9 W( T& L# p7 e: G n

# O5 K8 _; f9 I* m   % {4 R% n$ F" F" W8 n& f

5 a5 B! \6 U1 g; y; u4 M

" v* W- W! T) ?4 P   , M. [" [# X) U9 d( ~+ r

+ m( \" J2 m: m

0 }! o. e$ f6 I6 G- T) W 签名信息 5 o1 N2 _- A+ Y) S3 K9 @

c3 O7 z7 N5 u9 ^4 O; h

4 L8 I- x. T! e* u5 i& ?. j" a2 r 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 3 v3 p0 c8 k9 B M

3 M: f1 K# l2 y) v1 f

' ]* R. z7 G8 z3 c q! [& V 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 * Y8 [, h/ M/ r5 T1 k

8 a: F6 y& Q" r9 E; f

4 K" P Q. v) c8 g androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 2 w) W) S7 W [7 m1 U

/ t, U- l/ _7 c

. S. m1 h! D+ i4 V# S vshapes= : ]3 p' f$ j; X' v3 Z7 F

" d6 c& F# c# |4 {1 m

; u- ^: g# T* l: O; H   ) Q5 ?; @8 J( W+ @+ j

8 H/ I W. r8 s& u* U8 S

- o4 ^/ I: v) G; b: u" a | android签名的数字证书的一般都是采用 X.509的国际标准。 & v0 i/ o- V" b5 I4 {: X. }

4 T, q, i2 D9 K+ a

# E4 M; y2 j* q! r X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 : Y' s+ ^ s, w2 c

! e0 j" _- x% \

& `; T% I/ m# ], E( h2 W 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 6 ]% p: |( a- C

/ V* C; d' V. Z, R; P5 P3 d# ?

, c0 ]( y( W" K vshapes= 1 U4 I) `# l5 Z: ~* ^( U

$ `3 X4 I6 N( B ~2 U) m5 ~

! }1 [1 d- F% ?' z   " B2 @' M) Z( v

$ l) ]9 j" i( k3 P

0 F$ p$ g5 `# l# _9 j! t# Q 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ) H# V5 @# D# ^0 d5 ^

- H7 F) [; Z) V& m$ e4 b' J

% b. M, R5 q- |/ p vshapes= + T, n6 @5 M# o

; |! t! C- r% w; @

% l0 Q( G7 g$ I$ ~& B# M8 E4 R( R 3 _1 x- \9 ]. ^5 u

: y0 {4 N& ]2 h! h! S: N" g

" H8 ^; J2 [1 f& I8 n: ]( l e   + p: R6 K3 n8 q) o7 R! p

# |) p+ c" E. {/ X" V! f/ L7 S

4 O6 a8 o/ [) P, c8 D 权限信息 7 i: ~2 B4 }0 `+ Y' v0 c

4 K2 }5 H$ J$ |8 l

" X7 Q/ v2 c' I9 l7 A, p8 i 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) " `* Q6 x. u! n7 X

# D% S2 M5 q1 J: G) H

" W. e# S' ^/ a% Y6 n8 u+ x android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 9 k0 y5 M( B! w& E Z

0 h- H( o* y d% D1 K# y) U/ `

) d j% Z# \& g J7 i- k; D vshapes= * ?) W1 | d; y8 u$ X

& z! r; }$ a1 x" ]

6 n6 b3 x b- P# R+ x; W# y   - R% r8 j- P J3 u

" P7 D5 D( m# r y/ A

4 f ]* `& z+ j7 [* K/ c" [ 下面对这个APP的所有权限进行详解下: & b! m8 r8 S* ?+ [

- l- l0 `8 V$ n# k( }) b, j4 S

! h6 [' D% l) |1 B. c android.permission.INTERNET :访问网络连接可能产生GPRS流量 . H: J2 w8 Y, ?

. j6 v O' d' N% @

0 H: u7 p3 M6 ~: Q android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 : U6 b' o5 T/ h+ o- V8 ~, D6 s& \

6 ?- D/ x, U2 m8 b

8 e1 z$ d2 @9 i9 a android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ( g7 z# U# k& C z% V) P

# l5 ~6 G+ E$ F' J4 N# L, ]

( Y( ]3 {4 e' `) M android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ! l& ?' g/ E/ d% i6 u& O3 e9 {; \

' B' c$ a3 G0 O+ S$ T

" A( ^* R* M! f, P; ]& A android.permission.WRITE_SMS:允许应用程序写短信内容 E" @1 r! o3 C0 {) U7 q2 U

& ?2 {2 n6 k7 M

* U* B& N# U$ c! q0 Z android.permission.READ_SMS:允许应用程序读取短信内容 3 y( o, o/ _, Q! u1 a

! h, z; ?! Q- t, `

+ l: M+ T, \3 p9 k7 K. Z# ` android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 9 B' ^0 F9 R& k) H( n& n

5 W: H9 ?" s6 t" C z% p

( D! ]6 Q2 y5 l' H" }6 U: ~ android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 : h: H: m% \( j0 a {$ V; P1 U6 |

5 x, ]' R, \: T& N0 k

( D J( h- e7 L4 s3 j android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 " K$ P' @/ |; u$ f' Y' E

0 Z$ l; f) s% Y

! j% C$ K, R$ i android.permission.VIBRATE:允许振动 $ i+ M1 r2 C! n8 X& }2 }

' u1 h/ o& ^( T, j- c+ H4 w( z2 A3 N, w

2 S# A; P& l. ?& z android.permission.READ_LOGS:允许程序读取系统底层日志 b% w* `* {- z! B

4 F6 P+ Q' _: w& @5 b

4 Q4 g9 G6 t1 u/ A% Q3 z. c; ?! }3 x: g android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  7 {! C/ t9 k6 ~( Z0 U* N+ G

. ~# e' z, f8 E0 |% t

$ |; \' V! i" ?0 @   % B# v" g* e9 J

! q+ H9 T8 P! w u; K

6 j/ ?! o6 |5 e7 u* s6 x( V 功能信息 ( V0 z, w$ n1 {" a/ O5 `6 N

: ~. a" b N% f3 m/ \6 c G

1 |+ Z5 U+ w' G   7 _% W* X& Q/ h. H

0 h+ B* R; |: p+ q

9 v/ T$ P% j/ V7 E 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 1 I0 O0 O6 W$ p9 w, k

; Q' |9 v# A% B$ Y

- t2 D- { C( r1 ^) H* I Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 8 F3 Y- C3 D7 z, V

# b* u& x4 A4 F

% S3 @8 r, Q: x$ }0 w) } 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 / T9 l: [$ A* B! Z" |

: h! k- k" f9 s! A

2 N3 q2 F9 t1 v- F 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 7 H7 ~1 x1 j P7 P/ m5 Q6 J

1 V# J% l8 D$ V9 N8 w

/ y" T5 U; J) z. q3 T vshapes= `/ |/ I4 s& A+ c6 l$ A

8 y5 A( l0 D9 y ^

. {8 [' v8 P$ r" L2 H5 R   ' N: F" u# f2 ~, R2 s

# a: ]- w3 u: g% ~' f/ @4 r( v

- K/ `/ W G+ H' g' h1 ~! m 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 " d- w( e9 k- h/ ]6 ]3 G

, a; a+ N) g5 F% k8 z' x. r3 B

( s+ B0 b- J/ s" P2 d& k vshapes= 5 P1 L: @6 Z& y6 j R

! K7 ?: v$ Q& o) D

3 B+ t/ y- ]0 V! H: M   * d) C, `! P3 U+ h" b! j

0 u- \1 n4 w! [! ?

0 P& X* r' k% \3 K# p: E8 m C lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ( O9 X# r0 G0 K) ?" _' ?$ J {% f

) A u9 a4 z W0 A% b

6 d/ q8 P3 w% y' u G vshapes= % d6 l" T j; [- ]6 v1 E- f( E

U5 z9 i) G0 V" G0 O3 Z' y) T

6 r7 z# e2 ]) z6 e3 ` 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 1 G+ Q; P, B1 D+ p# B; t

4 { f' D K; d9 C C# u$ B7 k

/ e, A# \* ~- s6 f( m vshapes= * D6 B. z2 F8 G( F1 r

. u% q& X6 \; F0 W

! K6 B* x6 q* J% T9 p4 u   1 O/ ?3 F6 I0 m3 s7 G

; N0 e4 j* o+ u4 V8 K7 s1 D

5 N$ ^9 N5 {+ Y8 u 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 . X8 Q# M6 r' w( }

, h! a; N, v& B, V

) {8 y; l" i$ h" Q4 a LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 $ I; y- ?. Z1 |

2 c- u; S q/ P4 X6 {0 _

; H8 [4 ~3 A2 V4 S9 x. Q, K3 L 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 ! H9 y" @1 J5 t( _$ F

9 S0 C5 c. Y8 d( T

: q& P% c/ z8 o7 A8 m+ @) Q 源的luasocket代码可以参考学习下 ) j' `! P, D) n8 o

6 E* @% Y. n& ^& d* v' T$ O

& B. j& u6 X& S4 S* r https://github.com/lunarmodules/luasocket 4 i5 Q/ G2 U- K2 r( Y" b

+ I# O+ h1 f1 e4 R

! E1 t' t8 m6 N https://github.com/fengye/luasocket ' l2 ^+ _% J1 g' n$ E+ I& w! ?

' R$ P3 g- w) Z5 y, ]

, G/ ?. p* i, R# ?; I2 H* l, D   7 l$ c& a) E* D- p, ]1 P

+ ], S Q: E1 {- }

+ ?$ J1 I+ q- y vshapes= 4 w! C/ `: F# n8 n c2 ]9 G1 F

: B4 p) J v/ R+ H

8 B3 t' U3 r1 Q8 k8 G% ^2 c   h% z1 y& P% O8 Z, ~

3 Y+ t. n2 q$ P

9 D8 j* A1 ^- S' z& b8 ?   ; J9 @2 z& V* r0 o1 O

: t# {0 T9 o* g9 M4 p

$ x! \! e1 F* k; p 总结 ) a, w& n) B; R8 O" A4 X

+ d0 b6 Q, A+ A+ I E+ G

0 U9 W! z( |- H t 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 7 o# I; d9 j7 l5 L. j8 H

. ^- _, N7 D' H6 W9 x! L% R# ~

2 m t. A, q0 s* f" ?2 G" n; ~ 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 / J5 a3 F4 Q I6 _

" J; P Z9 ]0 i+ a' ?. F) l

% s. i" s- M' ~( M7 v 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 / m# i" O; C9 e+ g! G7 e3 G4 s

9 `: Z0 E2 h q5 o% t/ l

1 I' \8 u! C6 U q) b 结束 6 i% f$ I! }1 M

8 p5 k4 A. s8 b# y8 z: ]

7 [& @$ }/ H) h# x' T  【推荐阅读】 ! H/ h5 i8 K( a7 p( ]

6 s3 I* M" c: \8 \/ f: K

. ^9 b( p( n6 Y! F# j 对吃鸡APP的分析 , ` P" s& N. n4 x& A; D

- [7 k& W7 S7 s/ ]

/ k' R) R' L6 x2 c+ w3 N/ Y 你需要了解的APP安全 0 n5 W' B t) V1 P# }, X$ n6 A

! `4 _% p6 C5 G# i) z+ z1 M6 ?8 X

* ?9 z& ^/ P# P0 q' C2 x6 S 你需要了解的APP安全 2 m( U* h4 ]" s: L" [ |

9 W6 p+ n- Q: K

7 U: p4 J# T8 }6 f+ n! j b$ g   $ G; @& u1 g; n4 {5 G, O4 N+ d

回复

使用道具 举报

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

本版积分规则

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