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

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

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

6 k) s3 U0 K( T 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 8 k) ]9 Z, n* y% b9 P' M

$ J. [* X" W( b! @

1 W/ I$ V- D( d, H+ s8 ] vshapes= / |$ R/ q7 I' ]' X# y

$ c. W* t4 x8 ~8 Z- d, _1 M

- p: U5 o4 L, U6 C" B8 n3 N   ' w: @) g |+ Y1 O

; i) k& N+ j+ X) \, o- f

& W( r, E) m1 E 下面就以开发者角度进行解析下这个APP的功能的实现原理。 5 z- s" {+ z' d2 |- S. {

" `4 y6 h+ p3 ]; h6 b/ r' q$ b

" f- Z2 ^) o0 E( y9 g   2 p! h. {4 s. |

& Y f* N6 j1 L+ r; X Z7 _* }. c

) a4 t: T2 N z 基础信息 Y2 Y2 ]9 Y- [* K$ a* H

- U z4 p( k. G, S/ H9 I/ h( K2 I- S

* h* |. M+ }5 m8 T( k/ A 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 - O, v! [, Z4 _! h6 s% L( T

2 z& `+ Y2 n( U8 W# x

: k0 d" E' _, J6 k& r vshapes= . U- o9 J5 s. c+ i$ |% ^8 A

4 {% o/ j& L! r" o! x

7 } r5 X( @; q6 U1 r8 j) g7 @   : B2 s4 W: H9 T4 y t2 m8 S

% ]+ o. M, K4 w# \6 P

& r+ k. X) \( S5 F2 Y6 D 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 8 X' H3 A) {; R; A- k, T/ }; i2 d; W

, |: d3 V: `& `! \2 \1 m

4 i+ Q& b# L/ L% C9 \ vshapes= ! x, J( Q7 ]; P$ [# J. Q+ v

* @1 z# ~- s- a5 s m$ T5 i4 n

' h3 Z7 P9 L+ ^8 K% s   3 u3 e, }5 o" k, i$ F7 W7 c K

w- b1 a% W& R0 s) d3 N- w4 U

1 J: S6 H7 S" D5 M2 w 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 8 f ]3 B; N. r% w' Z! ]% M: O

+ U. G. L( ~* i: M" X

: B X. P% ?. h, Q9 p; T vshapes= ! U4 i$ g2 {( p+ V

6 n+ _! d' q2 h6 C

$ {5 |! h! Y+ ?) F   % K9 R7 h1 h; R! x z+ y

2 W7 u7 |6 f. l3 G3 T: P0 [# K

, c+ j5 Y& Y1 }- `# y1 M+ v 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 " F8 N" \$ a+ N! o% I

* D- m- W0 G0 a0 q$ U) @2 e

7 Q$ |' }: J& P2 } vshapes= . g, v* x9 [ u) J

. R, B8 V! C2 f7 e$ W( n$ s

4 }! V3 e1 R$ i   & H% ]* Z4 w4 z: Y

5 I5 ?# E) }# T5 E6 }

E+ D! a' N8 \$ K+ Z 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 & `3 d. d+ g& N5 q

$ n7 I( B- Z) ~% y" R7 R

- q' V! X% p( T* t6 l) I) a( Y! f* G vshapes= ; M& \7 m3 k; f3 ]) d/ l/ `

* W- E$ D3 G* U! z6 c$ z+ r8 x! w

$ v; ~/ Y3 {, {7 u   9 {2 }# J; g7 G; e. R" v

- _$ F" c9 p( ?7 x. A

2 o1 x5 I, i$ K: x! R( K4 W   $ I* l0 D Q" G4 s

; Z7 V9 r* I! @0 J* b! c( S

$ [; o j; w0 O. n. }, H- O0 y 签名信息 / R. }) x' J- y" D7 o

( q4 V! n# [0 t, Q3 `

$ f7 \: _1 h+ a# e. G+ w 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 * M) h' O4 W) e1 W/ `5 F

/ v4 L- N* Z0 `# \0 ]6 m* @; B

' E9 g+ u$ Y. ]8 r K9 p5 a3 H 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 + ^- }/ ^$ [+ x7 z( T

- P6 I9 {1 I1 E1 H" ?+ B( O9 x

4 F2 p. I$ z0 @; H0 ?/ q! N androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 9 G$ p5 G0 h0 u4 _7 W

3 Q7 c* V4 v" U% c% m

3 x- d2 r; B, d3 U- r! Y3 ~ vshapes= 1 b2 W* e4 m: B

; E, M5 h9 g) S: [* j$ {

& B, _9 s; I7 l2 v$ f* x   + W; q8 a$ i8 x J5 P! [

! t$ G8 M0 Z/ ?, g: h$ ]

3 c" s- x) v# L% r android签名的数字证书的一般都是采用 X.509的国际标准。 4 p4 a3 c+ `2 \' i: A7 W `

8 c' `2 a" Y. ]0 E' N0 G

& e; x9 O& k8 ~9 z) ?- b X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 + K8 @/ L4 {1 d, V

: K+ o& t3 _# @

* R- J- M% l; I) i5 R/ ]; U 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 7 w& S o7 R( y) q

6 _5 f4 @* p+ |4 R1 P! E+ A3 `

2 N) Q: Y# j3 [) q5 ]3 [( \6 [0 [ vshapes= , o4 r' Q1 x/ H

- R# k+ `6 p0 h

; l0 N/ S9 K) O   ) n$ x% a( G) X9 a9 f5 |

8 U+ P1 v! F) l8 [! m) k) y/ ~

; A# t u# {& B# c' v 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 4 _# R& {) K8 E3 `" h7 e" W; b

. H ]) ]& J, T3 J; x

8 M0 p6 u8 D' J vshapes= . g0 ?% z9 x, }# t5 m$ Z! u* v2 g: R

, `. U& X: \ L0 L7 f( g

6 X# P# t& T* b# U) z . W% u( z: t/ P% u5 k, ^% z+ V( M

. o! Z7 r8 L% F! s6 L# m

) J# D& U5 P/ i, {4 h) M   + K' ~3 S, U( q- @2 f

+ q; o( ^4 K) n

3 Y5 k8 A/ S- f7 p" t2 { 权限信息 % }& F" N$ y }+ x i& ^ l6 g

+ d+ \1 v7 B0 A4 {5 l( E/ l

: z( @. \' k7 U2 f S* E- ^9 [ 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) " G5 G9 A; f9 L& r2 Q! H- s

% P$ r. h* `8 ?- K% k) E

1 s+ D8 f8 b0 f- w' S) a android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ) P. H+ r9 I5 S4 ^

* @+ ?* a: a" d7 }2 q2 ~- Z

/ J1 d, \( |4 Y vshapes= ( K3 I: I) g' M; J# Z' c

L7 Y! ?2 n; w: p2 t

5 V9 ^2 Y; N1 v; J: z& ?1 S/ P1 ]   . \( a/ O Z" S# t7 f v

" y% c% z: P* l/ w8 p

# t& V* {# g* P! K) z 下面对这个APP的所有权限进行详解下: ! q& [- Q- _) l: Z1 h7 Y- I( T' Q

# k$ Q% J& x8 s2 E0 D7 e# t

. u! d+ |2 J3 j: I. n android.permission.INTERNET :访问网络连接可能产生GPRS流量 / }6 h! x) m) j7 ~6 H8 X

' r' p# b: M6 n8 Z# q$ {

. \ T1 t: [) j! j0 R7 Z android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 / f$ Y, X' i; I: P9 ?' ` t

+ y( V; _" {# c% ?8 w: p

! B+ O( C; O L, M/ E android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 # o8 v/ V$ C: T! v/ s

6 j+ F. h6 o7 Z X6 K9 k2 E+ l

4 C& J1 G3 e4 M' i android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 5 O) ~# r/ O k& |& p9 ~

! {- C3 Y. G) P* L$ M2 ~4 N

9 n7 h1 [8 v# [: X7 t android.permission.WRITE_SMS:允许应用程序写短信内容 7 s$ h6 a* _6 e: V4 b5 Y7 E: \1 i$ h& ?- m: c

+ \+ y( X+ v" R6 f) b

$ ]5 |4 x; h% Y' X4 A" u3 o- ^; I- H android.permission.READ_SMS:允许应用程序读取短信内容 * K9 p" ^8 v6 F% }% x

& |* d. P* S9 [2 l3 P% ^

/ c' c B$ W- p { android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 / m8 k+ i, b, ^1 x# @3 n

# {# G" \, Z" g6 ~/ J

1 |7 w# ?. o+ u5 A android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 : F) y8 [ \7 @3 D- ]

, ?, L6 Y! B- g3 \9 u

7 P6 @7 \5 u; g1 ~ J- u/ X9 G android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 * X& y1 {, A9 B

' r! U% j* ]7 V6 a

, S& ]0 I7 T2 G android.permission.VIBRATE:允许振动 3 P$ m& H: g+ s) {

/ i2 [+ _+ Z" C. u& F

' }/ n5 `; r/ t4 c android.permission.READ_LOGS:允许程序读取系统底层日志 & ^6 d$ k+ A% S

5 x+ u M# k \ i/ A# {

" c* {, C: x; U; |4 q1 R8 l7 B! ~ android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  + C a5 q1 @! J/ ^

( F/ q* I5 G9 Z8 o& J6 X

" l) R7 H% J$ e# v* M6 X1 h# _   8 O) Z; Q0 x! c8 {" l

$ \2 g4 Q' f5 D

9 B9 g7 }' ]- ~& w 功能信息 0 l5 P- [$ H4 f. j! b

$ z2 B( U; t8 J

& t8 x* m4 ?" L7 J8 Z0 Q U   3 U$ k! z, J4 H+ c3 y7 z- y

0 r4 ^/ a9 c5 ~) l

9 ~$ j# j3 }2 L9 z# [ 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 3 `- k* K. r) l$ P0 u

& w% F1 b/ X( o. C

p3 e/ I$ V- w6 K; S- A Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 5 D/ J0 Q T1 _6 _

% G$ |' i* A6 z) x

3 D0 P9 u* z# E0 `* K# J$ o; h. G 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 ' k, I9 i9 A' A ] Q) R, l6 ~

X* b8 { F, G/ f9 V2 d$ F1 Z

( w6 n# I k! i! o0 p- b# u 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 * u/ P* E1 ?. [, x3 t2 d2 |& X

% o( A- Y5 S' F5 v1 a( {% \

( m8 W, D# z. H, B- n0 G& a# z) X vshapes= 6 |$ O9 a! r3 O7 w, d

& e- r& o5 _! I6 n0 ~1 w

8 i+ o! M7 L: U. X8 M7 [7 o4 D/ D   2 ?* l7 e: {( s4 D" q) j# I9 Q+ X

' ?5 ^! P2 z. O% H% Y: B

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

/ L# ?0 c$ i4 C. U( J; g* p* `

/ M0 b' x; o* T q, P vshapes= 9 p$ Z7 o8 c) C" i

* q6 o" M! S* ?6 i6 ?3 Y/ K, R* c

! Y+ T/ E8 I7 e- e. B   % C1 A7 _3 B' Q9 n# N3 X- }5 g5 q

8 E9 [% M; S" v2 V* U" M* |1 \' b+ o

4 r0 `. z8 {1 f( I+ u+ I8 Z' |; K lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 " u5 ^9 @9 ^: M7 ~$ m" n

. c z) h9 F3 C4 P2 d; h5 |

: t; ]7 h5 O5 V$ e vshapes= + F0 V5 x" ]% ^ W5 S( M% T

4 b: d6 W9 e) t" y

. r( H' ~% X* d- c$ s 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 ' m2 {* l6 W1 X) e

+ n' ?$ T" ]& P' V

3 Y+ Y8 ?/ v9 x i/ i6 \' ]( Y vshapes= 1 Q' Q; Y1 V( y: B7 V4 m

$ H0 K5 X( M/ Z% J

( V# j$ T. {8 J/ B) i3 \5 M; h7 |   M) ^& Q }1 F; a

$ j; E( I4 r; ?8 ~8 N7 _

, E% g5 M6 k2 S2 x, C; q/ @: T" K 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 7 B6 M9 x/ a. `

, K% `9 U6 j |

7 R5 g, \% S$ b& y/ v b LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 0 ^- c- R) f- E/ M

9 m! I/ }& Q8 `. R3 w% Z

5 E" `$ o% K9 {6 H" f1 m4 m# C 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 " v @8 O$ ]- C7 P5 ?

; S j" k: s& E( b

4 a. R% d- A3 q% l 源的luasocket代码可以参考学习下 4 Z! ]9 q* x2 a! m T. o; o

( d) r3 n& h8 U( ^7 ~7 f

& Z8 P* C' d2 s9 v: L https://github.com/lunarmodules/luasocket ! s" a& b3 f: H9 T, S b! Z% ]- P3 Z

. @: r6 J' R$ I+ m7 M

" d$ \& O$ V# \8 j2 o5 X https://github.com/fengye/luasocket 5 K- O& u2 T0 X/ d- ~3 B

: {2 u$ z8 s" y! R" s

2 }. v) _0 [) \* H/ J9 h( e# Z   . l. R* J1 m0 F. G2 d; c! U

" T- F, X m, l4 ^& r8 N

5 U1 f1 Q0 l( N8 V6 m vshapes= ( M: N- P- M& `2 _- ]: O5 }

7 D+ o) |8 O& C q; ?1 d

; @7 X' J! W3 L   ' b$ z8 D% V* ~7 {. c

! Q& O& H. ], k9 Y( d6 A& ?7 W

2 A0 J3 @0 o3 A( p8 M! v: L8 v   ' I, ]2 R3 W! G# U6 n7 W- W0 {

' h1 `' A N$ i" W9 j. I/ J; e

* I) n* _* i% e; U$ | 总结 0 _. B# [* {7 L3 u3 H) q

' h3 ^* |' }) d

) @! Z) P/ l5 s 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 $ A) A9 D% q9 |2 [

" @( c; l2 h; i9 Z+ p" z$ O m1 U

0 G3 _% D5 i4 ^. a2 x, k) S 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 2 k5 K* }1 k) m6 U: H& H

7 z. G2 t/ o: T0 W- {) T9 F p! {2 E

1 h% P; q2 S+ F 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ( b# f1 P" ^+ R$ M, V$ E

2 m* a. x9 \" k

0 e2 p; T, B& B, D) ?0 D 结束 1 X* ^1 _4 K% ~' t$ {

( V" v+ E3 i6 c& O9 M2 U) J# R, K

; M; G$ Z* @' I: U' ~: n5 ~  【推荐阅读】 . C, v: ~ M; c) w4 \( K" V

0 q* j9 t+ N/ J2 [; a7 G

5 s; A! J# {9 k! ^( ~ 对吃鸡APP的分析 $ q* B+ d u6 k; b: Y$ r5 O# H' ?! t

5 J- ?- S. X& ]

% q( Z( C6 \$ B1 d 你需要了解的APP安全 $ k, H$ X3 s$ v4 I$ c, s

# y7 b4 U v6 m* I/ [4 W, V

! k. x) ^, n5 V$ l 你需要了解的APP安全 : n0 l- F6 G' b8 n

1 Q% D" h6 c {* k

' _1 M; a, p9 a I+ T   , u& ^* Y$ h, P. U* w0 G: `4 j

回复

使用道具 举报

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

本版积分规则

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