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

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

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

* S$ {3 ?5 Y! y% f! A0 Q d- Z. p 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ) d: [) m/ z, e. y

" z9 J1 P! w% a9 ^3 Q5 T1 U

: Z* \4 j2 S; R% D* I7 \ vshapes= 7 E. s& q2 R( `) Y- p4 Y) T

; P! v7 C2 Y" h1 T) f

6 R% A8 }; t d2 y) |   : d% l2 F+ u: V7 o+ r" J

! x' W4 \! Q* Q: P" b9 Q1 S

' S' m) [+ R$ T- W% g" v9 c 下面就以开发者角度进行解析下这个APP的功能的实现原理。 % x5 `3 m9 m: f9 R; i

0 q$ \, [5 C1 A' [

- b, N0 C" {* P) p, d4 W   g8 k3 K5 H$ r5 R- q8 p3 N

* l P' w6 p3 S0 Z6 }3 J8 n9 G

7 f q5 ]: [. J/ Q 基础信息 - U& [: ?% B' I/ ]$ u

0 U4 F9 c q" j1 J

, v" R" z: P* E9 Z3 \. M. p 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 / \; z' b5 H* P0 F& }5 u6 h

1 P2 }2 u$ `8 C, w; k9 f

( `; y) s z) }5 N: K, ~5 [ vshapes= ' h$ }1 ^7 x! J$ ]$ U6 ]4 @

# I# y' x6 x5 [6 @" j

' c# H7 v; l" d% y0 O8 [   9 _8 J( J/ i& X

: A' [7 h. a3 H0 D. ]

4 e9 p6 L2 z: |& G% T9 u; w 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 8 G( B3 e6 K) m k% w# T$ D/ J

( M1 ]% W1 ]' I1 I

7 W! W) G. h& P& j1 D; i vshapes= , [3 Z& a( O8 Y

( P3 I) {8 I( m" A1 Y; D6 i B

2 f& F W5 |8 p: ]9 ]& o5 Q& v   4 Z, S5 E2 Q6 D; P/ F. |

! U/ L' \7 Y) l- @& X/ I

% I+ q( m: s v u3 N& A7 ^: M9 L 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 # ?9 w3 S( v8 G2 e- R* r: }

+ o. e7 H+ x- t, _/ g5 N ?

( y2 w* r5 r, m) n vshapes= 6 d# E" z* U0 {6 O' q# U

5 I! G- Q' j9 w! x3 c

9 n% I" c0 A4 r1 i _5 i   $ t2 r. y1 d: f0 ]# T* E6 ^; n' k

% C$ h/ o2 x0 C& J0 {

0 j' t. i* v6 j$ e 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 6 [2 B6 W& u2 e

A! Q* N: J0 w4 }7 n/ p- n) V

: x" D" y \+ q/ B! l vshapes= ) \; b- b/ K4 i$ j$ m# [' V

4 r' w$ ]9 d# ^* {9 h, a+ o

+ ^9 y: h7 }0 ?9 b2 S   9 v: c, {. B# N. K3 `1 p |

& `8 m* R1 o4 R- L K _

4 t9 k, n7 r* c* u. x n% v- Q 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 6 _; ]" q" A% i p& Z" A; I

+ V/ N' S7 t) d

- u! `. Z1 C: |" r) a- j0 w3 i vshapes= ; i" a+ M# j1 h4 K& u

+ |: {3 q' O4 G- i& @# A; u' G$ f. p6 w

0 r) j1 P3 s1 Q   2 v. t; j0 T9 B$ {6 k6 S% b

$ m: h( \( [8 {0 J W- q( M

9 t9 \ {( C( S, w   / T* i' O) z6 H" h# P

0 T# T$ `' F+ v

7 D$ k# @- h- Z; c6 \. L 签名信息 6 s0 ~; t6 {) b9 z& x' i

8 V* @* E: v# {9 u# v

; V- O5 W8 [! m3 j: E. l3 b 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 5 n# n+ B2 l/ x3 t2 F6 y

& S- v% [5 l2 q0 C( T( y1 J7 @# f' W

4 ?, y3 ~) E% o+ h: _ 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 7 p1 T4 w5 v2 d( X$ \4 {

) G* t: L$ ], X! N5 L" |. ~+ I

w: Z7 e* {5 n3 [ androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 3 q0 Y5 o5 A4 a; q! P4 ^4 x* I! G

9 I2 g: K' L6 @; F, H; U

+ k W$ u( N9 Y5 P L, a% B vshapes= 9 g' o7 m& K0 s, u8 f! Y

% k! S0 t- u% V) I- |6 X1 q$ G3 j* i

, i$ q% O! P& `: X2 B+ W4 `4 j   2 u( K: z; A7 z# X0 j

+ K( s. R, ]$ p$ ^2 M

; R8 s ?* j8 T% ]- D: B3 i# I android签名的数字证书的一般都是采用 X.509的国际标准。 2 _3 L6 s8 Y" N% m8 z

X+ b' j0 Q; e' t( m; }; {* C) @

* E8 h, u, R' l3 |/ F, J X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 : [: b7 N9 y% f+ S& t8 Z

- g& m' `# [7 v9 s: b

1 f, C5 O, v2 y, v 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 3 G. J# ^8 m* u; X& I( J0 [

- z, |) {! U. `! x! A0 A

. ]! g/ S5 D0 f! d4 o4 l vshapes= # }5 p; G1 V! \* t! u1 Y

! | x/ f3 j) a" K f" l$ B

5 Y4 C( M0 ?( f1 O   . m% Z4 D5 u; t- G. o2 z. t

- j+ e7 U4 n( G. U" i( Y

$ i: p7 \ z2 ]" ]7 T0 S: O. q8 S 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 " w8 K$ F0 F- F s0 V3 {

! Z4 W. P0 l5 u$ c0 Z

8 ]( ^. r4 y% H" k8 H9 Y3 X8 L vshapes= 2 N- f. w& V4 Z! r

4 D. w5 ]4 Y8 j4 G0 Z

) i% P+ D2 e8 c7 Y; m8 n8 ^ ( o& ^$ G( E! c1 E3 x) v' l; x

& g: B* z5 T) x

5 s- F& T2 d. b- ^3 J& @1 D3 v   / N3 p5 D2 K* g. p7 A; Z: Z

' s* ?# h- q3 b4 j

h/ A `8 R/ n! F: ~ 权限信息 % k- ?. s# o: X) \

- c! x4 x6 H8 |

) U" J# F4 u& a2 h; A+ @2 O ^* P& w 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) @5 h: h8 V! S+ p! k; E+ ~5 E* J- m

+ }$ K, A s' D) O$ }

2 W3 L/ s) u L5 G7 u% k android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 0 l( n" V! v! g- E+ s5 ^2 d5 Z

& [* X5 d3 w+ H

- U8 K& X }# h( x6 y, o vshapes= & [: a# c/ {" d5 d) Q9 \( u

, K8 h C4 l* o% ~$ F

6 o1 b8 ^+ M% w0 i9 }9 G) [   8 m0 M) h, ]7 c& S1 k

& C9 E: f8 {7 ]9 o" ?$ I3 ^/ @

) \7 B5 L0 b% n {3 r7 c* K# q 下面对这个APP的所有权限进行详解下: ! m: Y5 W. [4 y! l6 c

0 Y' P; T% h2 R

' c A! X3 `' ^( U, L$ b android.permission.INTERNET :访问网络连接可能产生GPRS流量 % h* H) M/ Z) v# x5 s

, ~- A5 K* V7 \4 d5 Z3 q$ L

: e- u, W+ z+ T4 w. o7 i android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 5 \8 T" [& N, ]$ o+ i% |) m) |

+ I7 W6 X9 e+ D7 @8 b

/ T9 V. [2 _+ b3 k+ g% {/ T android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 0 J5 |1 g$ _) l. n: J+ K

4 f6 E, v; s. Z

% x. {9 [; f' {- O5 w7 W android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ; c4 Z( ]; V# g9 p( X

1 ]7 N! }5 J3 [6 d. K: B q7 T; H$ B

! O* u% i. h$ }: @1 v) Q9 l4 @ android.permission.WRITE_SMS:允许应用程序写短信内容 8 C: O6 w& h1 y' w

$ W* w) L+ E; Q; l

- z I. H& `; U$ E android.permission.READ_SMS:允许应用程序读取短信内容 & P1 }; V# e6 |/ {( l0 ?1 ^+ {) ~

! @2 x! u3 S/ ~

3 g% o5 G3 U* B0 o* |) |6 c android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 $ Q1 r( B" {4 ~- W3 Z8 W1 z# a

T; D' ~! P, Y+ v& L

6 M6 J! g' a& [& c; o( p android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 ' p5 ?/ |- Z# D7 i

- a9 U- o# i( j2 y

' S# v' |! G: s6 J android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 0 p- `, {5 q9 e; s5 Q

5 E) c; W/ C9 t% h1 }/ [- n; c

; B* [6 B4 k7 d* f android.permission.VIBRATE:允许振动 + t; v0 t$ D" I% n0 e3 T

1 ?7 d3 t+ i* A1 u. d

' F0 z a8 R# o$ v8 m& @ android.permission.READ_LOGS:允许程序读取系统底层日志 ' g. r- A j/ ~3 w' ^

. |" c# P# d9 A& P$ h

. `& i2 P8 F$ t# M android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  7 Q3 a4 X1 F. c( V! ~5 P

3 c3 m& R! K& ~8 ]0 u% ~

- b/ l) V" b- o9 B, _% R7 Q   2 P- K) K8 x0 W- ?# e, Y

[0 y7 w+ t6 Q& K

2 Q9 P9 U* Q; q 功能信息 ( a, R P" A5 ^# W- C. v

% z- o% E/ A2 }4 l

9 P. x& m% y+ r; i$ K. Q7 @   7 T4 s* Q; l6 C4 i5 ^2 W; K

5 A: ^& L3 N# n% l

8 H$ \5 {( T) O. i 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 ! g* k) O& u$ \/ g) a) r' V

7 {& `9 C. n/ E* D. y

$ d- P, S: `6 ~3 B2 l Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ! c1 G- A3 ~8 r

* I& A! I+ D& A) x' W1 ?

2 h) f6 N$ m" n) N5 t( }' W 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 - ]2 h! \7 J! [5 W/ ?9 W; f% m" E

; z: @; j+ t/ f# Z6 n1 V

0 @# f+ o6 P6 @5 g2 d' a 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 ' U. \8 r" @, \

* a% ?5 `1 }# n6 t- j( W, N

V) z0 @! j2 `7 ]+ C X) t vshapes= * A6 j, N8 F$ k( V

. y8 j( y% c( F

& {% J0 K+ ?5 |6 f6 ^% v1 b   $ p/ j1 X+ v1 V0 n

" E3 ~9 G1 i& C. h

$ Q% T9 B6 l# b7 k 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 / v: J: b, {5 X

& y( N# j1 I/ k( Y. f: m% v

3 J7 s* r$ c& a8 ^! {8 @5 Z vshapes= 7 P/ T, w' ]1 X( M% _- [% k

: Q, x! E' `+ u; e

# `" k) o% P3 y; K   ) c( {' y, O" j: Y$ a

) Q: |. y* J B2 I

+ @: d2 F: W; w1 z& R5 j! k lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ) S5 e6 S1 ^3 a

y5 f# a2 j/ t# {, a8 h

' n" f" }2 z. z% \/ Q: R/ ] vshapes= / g4 j* }0 Y; r+ \& w

/ E2 C6 o) D9 e) w3 K

0 S- x+ Y8 ]2 ~) u' y F! ]& T 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 # t9 m5 m9 h& B. [# @) c* |, U: P, j

) Y7 p( l* Y0 f' B7 @2 Y8 B

3 V7 p. i) u* j; F U* k+ u vshapes= , C L2 E1 U# G- p9 D1 o

' K0 k% l" f3 m1 `, Q- q" y8 j

- {. z' T, p- {   ; e- g$ n. R& ?# ~5 D1 H

: H- C7 T5 [, j* @. @/ E7 Z

: {( |. j9 ` D! Y$ [ 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 , P6 _* F/ S- m- ~& g

2 Z% ~4 ^; w6 @, D! g# E) [

& Q, w# Y0 i/ `, f6 a7 _- n LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 $ k7 ]+ q9 x; j9 F9 S7 e9 h! V

2 \$ C; N1 P: C

1 I$ R" c% Y2 r* G2 g# C 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 4 r4 B! Z- t ~5 Y; A. _

: a! z( I8 i+ y

7 s, u4 ?& F# l 源的luasocket代码可以参考学习下 : c5 b7 C/ D& l

# F6 i& d1 B) \1 N# e4 _

6 M* J" G: ~! |$ g https://github.com/lunarmodules/luasocket ! u! n# W9 H: x1 C Z. S; `

- c U' w t- @$ y

- ^6 b( c! @: { https://github.com/fengye/luasocket ) a; E, D! t+ w2 C; b# e/ s6 J3 K

; o, T4 k& ]' b0 n( ~

0 G2 D7 t% w2 U1 X   ' s. x0 V2 \ O. B# x/ a

. m0 I) e* g- u' S6 T$ _

2 \. `$ \; D3 w( D1 _% M0 h- _ vshapes= 2 [/ H& y$ t6 @4 r8 H1 N) h( L( k

; Q& `* L+ b- W# R, y- y- z

* H6 J" c% u5 s8 [9 n" s   , _( T2 d$ W3 x

0 x2 P& b5 H# [

5 {6 m' d2 O9 A5 b4 h' S0 Y) i$ p( J   : v4 I" s0 O6 L$ O$ C7 K4 L

' _0 ^0 p% S, O5 U% }

( Q ]0 t6 ~$ D/ z0 U% Q8 f 总结 ( g$ \* z8 {& W) g, d

. f$ B; I" S+ P2 ?0 P& q

2 S9 V1 b) I9 t! Q 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 % k d/ \6 ~2 }3 w& c9 D

6 A( a$ M$ S- m, ^. y( Z

; U$ s2 r; F5 F, ~ k8 E 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 : C: d$ s, v% {# Z2 V

& H8 o; f3 m# `) s

2 D3 \6 H1 D1 h4 a7 N9 B% r/ _6 t 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 " |, x% c6 H$ N9 s+ B9 S$ u

8 }6 T _$ S4 D0 m* U& ^* K8 S/ n

# T' I( l' U4 j* c1 x$ I& w 结束 / [) i* @ @7 l( G# u

: t' @5 C! e" ?. D" A" j

9 l: y! E, _& l8 G5 }: I" Z M6 I  【推荐阅读】 . e' _; l0 A. p' l/ x- N

8 R" \6 Y, H7 L* L3 @1 K' C! I

% z4 D: H& M' W( `9 b 对吃鸡APP的分析 " Y4 b; }6 \ t3 f. V

: w$ i4 G: Z( N9 n3 a

* z& C' }" b* E4 l: A* t6 g' t0 ~ 你需要了解的APP安全 & a7 K1 Z3 G1 _8 e! k" C& E8 F- S, W

* N* E! x9 L2 g& l" Q! n( ~6 {

- R7 t" q7 b4 @3 t 你需要了解的APP安全 `. }1 ?+ |% R4 N3 K

1 K8 m7 z/ \& B, A9 I- S4 P1 w

: ~0 A& q, r1 h: }) T$ p   4 C$ ~' A. N# M5 N, \

回复

使用道具 举报

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

本版积分规则

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