找回密码
 立即注册

QQ登录

只需一步,快速开始

欢迎中测联盟老会员回家,专门使用25年老域名强势回归
查看: 2985|回复: 0

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

[复制链接]
发表于 2022-7-8 21:25:07 | 显示全部楼层 |阅读模式

9 i* V* [6 q6 d4 ? 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 0 H4 {- L4 W5 Q4 R" I& u

# u2 E1 T0 ~" C

5 D* f& N9 F1 Y vshapes= 7 J7 m3 T3 V& z7 x! z( Z

' E0 [& T$ ?. p7 h4 r6 Z% b- r1 E

+ |( S( W8 {) Q& J4 I   7 |! ~* z3 r8 I6 Q: x9 K

" P2 y/ M( f/ \$ c8 L

6 X1 `3 }' B) k 下面就以开发者角度进行解析下这个APP的功能的实现原理。 # @1 I8 r/ ~1 p$ H: s' k& o; Q

! {; b+ K1 n8 ?# ^

) @% Y& Y, @1 N& H# z$ Q   " z: i9 f- @) q5 Y* U

) T' L) [# t! m+ R

# @8 Z9 J% V* _0 [% w7 w$ C& e 基础信息 6 Q6 u7 X4 l5 `. Z3 u7 e2 A

8 _. ?9 m9 P; J3 N6 p% C

$ r, O+ R( P* I* E! Y7 S, l 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 * q6 U, n+ i, y4 X

* h; k) _, w+ P+ K. Z5 p: b

$ x8 ]8 W% D' @: q X' Q& h* c vshapes= 9 `8 z2 y+ R v" Z0 i n

' V; s+ h7 l- S: |6 K9 z

- k) k, k$ ]( W, R6 ~5 m8 [   , e8 t5 X( ^3 {

. ?; L! H5 |, `0 a5 C: H7 z% ?

% k! k) n0 w) m, g7 _# M3 I 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ' _! `% {% P7 i

' r {1 n$ P+ g- v; s1 }5 m* w

# F& N$ {! U' J# Q ~: G2 K/ c vshapes= : T% v: J+ _$ n6 F

# c1 t' `# w/ m& _6 \( A

$ ^$ Q* _6 C/ }: x   h, W* w6 a+ h; U) O% l

" g/ |' i. l7 J1 R' x) e

, A+ o4 D4 O5 K' Y 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 " d7 h& y& z' ]' [5 N. e; [

# N' k9 i9 k8 E" a' [

; V# V0 u" }- H3 y- d vshapes= 0 \$ B! n7 ^1 X

7 a' S1 q) k( G1 r

0 w4 q) g/ ^& t3 L   7 J, ?* n) d) |3 f/ K6 r

( i8 M j& Z& w* ~4 r" ]

* N: N$ j, ]! h 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ) G% \: n4 I/ |$ p9 n4 ^ ~* q( R

" u, B, q( U/ W! Z% E6 @) ]; q

% \7 K7 H' {1 c& E vshapes= 2 e; q# [& ]: R5 C- l

9 F# {: h! |* e3 T7 T: X8 }

6 N+ m! L8 N# `' a   " R3 V' Q: s4 f2 d( @1 P

& G8 Z% @- @; B- T M9 j& z

! J- e2 Q7 r. S# j/ j0 ? 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 * `0 d, o5 i8 g0 Z0 [5 M' C8 i

* R& E2 M1 X1 e- d- t

' n0 I! f8 p8 x: L9 I vshapes= , N8 y' D. O$ a7 Q9 C0 B' n

8 V1 C {% i; H% E; `

5 m& U. q, G) @8 Q) L   2 ]8 O( F" E, i0 {

B1 c7 w! y# f! \

" @# g8 a% u7 o; h- k5 P   & Z7 u6 l" M/ I8 g( S9 D

+ Q3 x/ B7 {- w7 f f: g0 J

! T9 h/ z- o, q4 t$ c 签名信息 2 L, S- R5 z( T* c( p ]

! E- C9 n# O$ \/ s+ `! B9 T

3 C- Z. E; K/ s1 j+ b2 `$ A1 N 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 : k2 B, H- T. L6 r" Y6 j1 Q

$ v$ R$ r0 R7 t0 y; l9 A

& i/ \2 N& T; K. ^; z; I9 I 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 : X" H' X9 \. @- x( D3 k$ y

' U4 |5 V9 \, k' T' p: e* S8 }; e

: C$ h& Y$ J4 W! K, C/ y androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 1 r* p- U+ h8 V: Q& a6 }

4 o( \- G: K+ {

, ~2 q& _3 ~( e: N8 O y vshapes= / M6 E2 t8 w5 S

! h0 A# A' o" x9 P- t7 ~

! U- n. [, m$ }   6 j' K5 w, M$ ?% }0 Q# M/ p/ K

4 ~0 Z/ J' q) k4 \; \, a |

6 C) H5 Q4 S" U- d- s" y1 j android签名的数字证书的一般都是采用 X.509的国际标准。 ; e+ a. `& C7 J1 J2 `

! k5 Z7 l9 o6 S* I- g& t

" @2 n7 c" O3 ?- b! b: s2 M$ P X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 / Z7 t2 }2 c. r" p

" c! ~9 Z2 K; ~: T

$ n" V5 R4 D" w 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 - u! }& Z+ R: M7 {! \5 o0 u/ @8 k. S. }) n

* y+ p7 @ p, ^. b2 }4 m1 @+ l

2 o" T7 @: E# i( g vshapes= 1 G+ L0 G5 p% {! b1 n: `' \

/ F9 c5 T* z" {

0 `, Z. x2 y$ N) @ b9 H   . R {- a3 _! A5 l. D) l8 q

( a8 B" }6 x3 j: l/ a0 W' _: r- m' X

9 X8 N! z; v, q) c$ ~& Q/ ^& d$ a) E 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 - k. I+ G4 m" r1 P9 O

6 R) `6 s3 {+ Q. |6 m: C J8 S

, s1 t5 u, R& i vshapes= + |% }# a& {7 K G! a1 A! X- s5 K1 R

1 ]" L8 ~ @+ s& l( }6 K$ O1 `

* W8 I m- `/ [& h " H* A' [' D1 D, k. E) r. y

% Y1 H4 X7 o5 W/ U3 t- T6 h. ^) z$ y

/ E7 G( `3 z+ m+ y5 b- p$ V   0 C; D. l* ^+ y) D

- g: i' s0 V/ }( Y. N

U4 V$ I. q5 q' _! x3 L* T8 r 权限信息 + M! P" Z z7 T0 j4 F% }* Q

. z0 q9 D5 B! @: Z$ J

/ u3 F+ {' y" T 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 1 ~( T& m- y6 u$ f! L |

: z4 f0 N6 ~8 w! z/ s! I; h- ^! ^

7 D2 ] ]- _$ m" r android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 3 V8 I6 |8 O7 z* J" _, A+ \

" r. p! ]! C' i- b) O0 q) r) d/ y

, [. ?. s( j4 i3 }( F vshapes= % O5 a8 }! M' ]9 A& ^

$ h0 R. A0 E- B: ~! d

" w/ T# v% q. s6 N# A   \: ~4 L" A# k+ ~ `% p& z Y

1 d$ m4 V+ S* p

( T4 X2 d1 K" z6 P9 T; w 下面对这个APP的所有权限进行详解下: 7 A3 I; F. D# _* c7 [

. \$ h& W4 k: @* o

z$ {' h- J, ?. t; ^6 d q android.permission.INTERNET :访问网络连接可能产生GPRS流量 ' ]6 [* @1 V4 X4 D/ R. |

- x' A' `' u) Q* ]

, ~1 J; i: a3 s* K1 O android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 / N& C6 F- G! c

4 X) b0 q. o1 _

+ q1 B. _$ I6 X1 R8 q$ J android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 5 o# W: S, L3 D' @7 ~

; V9 v, W7 B5 s

7 j- s4 }( t( K* n; b android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 3 s7 w2 _- ?0 Z) i1 Q

" l$ }% N9 C- w

% Y; O+ Y0 \: U6 w2 F1 n android.permission.WRITE_SMS:允许应用程序写短信内容 8 @( G/ B E; W' ~! M

0 o. B3 s4 k- F c& b: n! y/ H4 {1 W

( i- v* D' K1 b/ V. A1 t! G% q android.permission.READ_SMS:允许应用程序读取短信内容 # I6 M; a" h6 U# R

/ ]; y s6 G6 J

( F9 S5 s8 a9 ~% e; ~" j! |; Q8 Z android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ! L b, ]: s9 E, E+ u* P

1 `( j! `4 a, c& j; H

& s2 V% V+ D+ [7 K" y+ ?; ?: y3 P android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 % h. P1 _+ r! ~, h {% b) m% o9 G

) F4 `+ X0 x! w; Q1 h

% T* F- C( a, w m% G3 x android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 1 o8 ^& m7 Y: J* O5 J: }3 |4 O' T; g5 V

* m# c8 ]# k+ `$ A/ D! U& F

4 d& t/ M- C9 {; z" B9 g android.permission.VIBRATE:允许振动 * u# M2 D" ]8 o0 T/ z. Y' \

/ e5 R9 j* R+ Z- o$ F1 E6 ~

8 h2 x- u, f2 w android.permission.READ_LOGS:允许程序读取系统底层日志 9 D+ m7 B0 |0 f6 A. g

- J+ {4 n1 u$ m0 V8 s" ~$ [1 {' y

, ]8 N' }; M7 _# E android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  7 f, d! H& [. ~5 }/ D$ r. U6 q7 F

) y) u7 q4 f! B, C

3 g3 I! V4 e9 D9 f   - b8 D( l) R$ v. R* e( j& r4 \

9 m8 M2 p4 ~: G+ y2 u! z

0 B5 Q' h- ?- O4 |/ \% g 功能信息 & C- f- b0 P, X4 J9 i

5 S: \: J8 C# {& ?+ \/ ]

# @# d* q* |& F, E) G4 L9 {. ]   $ x$ M" h! F4 B# E

1 q3 D' o# y, `& O4 T

! F5 R% O' Z T 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 $ a# f% D! S5 X6 |. o2 C2 s3 s9 G8 }

( ], y- l0 f: X3 L9 K* a% P- r

4 ]# Q( J1 m4 m# l2 e% T( x8 d Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 # g; E2 Q0 a) f8 W8 e

: t8 i7 O8 A ?6 Q8 s N. M4 X

8 ^4 h( @# D' b9 y( | 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 ) ~; ^! Y8 z' x3 j

1 |% c+ n9 t( ~! f6 F f' Y

! `9 x0 C7 u& ^ 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 - A. O# C/ ]6 o+ z6 V. O

% \' A" X' x5 `& ]+ _

) x% Y9 }. U- D+ t4 ~! r vshapes= 2 D1 o# f/ } l W9 I$ L7 P% W) a5 G

" R* h6 x+ |3 K9 A0 B! M

) v& I2 i2 @0 c1 E0 E( S. s   2 g! U3 f* D$ t8 W

2 l. \9 G& g6 X1 m) |2 L

( R# x4 J, j8 W; G* g 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ) e; |: }0 N& k9 b

3 B1 z5 ~$ @/ R& g+ T8 u

9 m _: w, M, Z* Y8 i vshapes= ) }" x* S' c. h9 P

* c |# P9 @; f* _4 {! O( ^

& }7 t: Y" n9 X   - a/ [0 G6 P& V$ N) ]' P

9 c) ^6 \/ c2 s7 W2 f' d

& p" l8 M1 z9 p$ q0 @ L" n lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 7 c8 h# e- M5 ?' w: g. W* z

' ]% s5 N8 \4 U1 T8 i

7 U% h8 G+ T6 d1 j5 u vshapes= 4 G! {: f5 t: `3 ]+ T

% r- g4 q$ U3 `8 q1 i1 x/ W

' \. l" q/ D) ~ 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 ) i4 b+ i/ J2 k+ E$ f$ w: y5 c

; c% s2 F: D+ N

" c, Q3 N' V2 k. a vshapes= / I, f9 s2 G6 d

5 X4 V1 n( ?) O" F0 x

5 [3 q B C, D" g2 @; i" \   ' x* ~* p# S1 L! |# k

; a1 K$ S: g3 @( J' K9 M

/ D+ R# n" d- `' `! | j" m; l 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 " T5 q e; O# {- k# t7 L

/ o# o& b, K# f3 B

/ v+ C* t' G7 U6 V/ s0 r LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 / G _ y$ h& ]; K2 U. D+ d, X( B( ]

6 I, \9 l/ M8 C4 V/ e, I( o

* K; i$ O$ K& c 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 0 t& X! Y3 t& [

' `. C" S2 i: Y2 \4 R h

5 f' _/ C: B0 V1 [2 p0 f3 F 源的luasocket代码可以参考学习下 4 o! r2 J5 P: L2 v! l" O) L$ v

; c/ ^3 o' ^7 P5 @

# ]! T8 j1 Q+ @0 K https://github.com/lunarmodules/luasocket $ A/ s/ c8 R$ @/ p Y) V

2 E* `+ m& j/ _9 B

. m# s6 U- p: F& K" w https://github.com/fengye/luasocket . e! m2 F; o, R6 o& w1 e

+ i! M1 S, ?! V& w5 [

! N) Z9 k9 F0 l3 ~1 K& G   5 T( t$ g- E* ^8 T' g" z2 e

! y( A. v% }/ W

: B1 l" _" G0 x( J8 j- N vshapes= , e* g# x3 [# L1 o6 O% ]4 }5 D

4 B# p5 G7 P9 J( E# c; ?

& a, |) @. `/ c. Z2 d   : u1 A& g- p6 H, q: Y4 Y2 F/ G

8 l- S; s7 R, }/ M- Q

/ S8 L( ^3 L/ i! g   ) U$ ^! d4 m$ E3 Y6 f

$ X7 `' _ p& F0 ], |" T

% a" ]5 ~/ r! t+ o 总结 2 k! c4 t0 R2 Y7 R& C8 a! }0 B m

& P4 U0 M4 ^8 y

; l+ Z7 h! d3 c g+ W" S+ y! q* E 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 , r7 C; k) u. w! y; D

0 i2 {- `6 v* K% e2 r8 E. f$ w2 M

3 [ s. F) V$ }/ g; _% z0 q 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 3 s4 G5 I7 ]5 Q

c/ B% i# K5 v% t+ m- Z3 x. d! ^

% _' G0 v. f$ b! b. E 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 7 V" m) W& `" U$ G1 r$ `2 ?

. v h4 n* T5 H4 R

) `; [; ]# J7 P0 Q0 a9 p; C 结束 0 i- A+ X6 J2 _) Z6 |; L

4 ]0 f' t2 Y& N# d, m! \

" z% c" D6 d) t" g' G  【推荐阅读】 - g! j8 d1 c. J$ h8 H1 u1 J) y% O

! E1 c; J( r6 W, Z

( @5 ?0 u6 w) t. _, } 对吃鸡APP的分析 4 u M; f- X- O) N* P

: @% X" k, C. x4 V2 M, N

6 k) |5 C0 T5 A, [ 你需要了解的APP安全 $ E8 ^7 ?! G; ~/ L

) G5 q9 U8 n7 I ?/ k2 S8 c5 N

- L; A- w' \: f4 |4 Q( T( L% q/ @8 { 你需要了解的APP安全 6 u! {9 B! g8 j7 f3 y6 P; s

! y* f* r- a) O$ o" \

. U% M4 X0 ` t. L1 }   * P- B. K% g' j! k- M5 d

回复

使用道具 举报

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

本版积分规则

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