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

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

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

( ^5 {- t0 r, H6 f. o: { 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 # F, F3 ^- Y$ n9 ^, H7 c8 l* u$ S

+ }; c) Z! H( M6 q0 N8 m- c

+ R# T! n- S6 U D+ p3 P vshapes= 3 l) H3 [1 f9 L. D1 m2 J

& L! q) ^5 K2 i

9 h) W' P2 ^; `$ Z   1 [! T6 l5 U+ W: f; E

8 g E$ v$ J$ e! T) u

. ~ X9 q/ b8 k. u& |' W2 C 下面就以开发者角度进行解析下这个APP的功能的实现原理。 & ^8 N- P: s1 q+ C6 }8 ]

: J& F' C8 I. V1 V& H9 m" M+ |/ Q

& ?" x4 w- C2 e7 o* S& n   $ b/ x* s) X0 y2 c& K, {2 A$ F

$ \& R6 q% A/ G

7 S' R! Q( @" ]; y# e9 e 基础信息 ' q3 @& |0 Y% i

& i; O' H3 T. r2 @$ C

9 c7 v) ^4 D9 c 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 * O3 G! [2 J7 j, r

1 h6 d1 B; u0 U5 ]4 c

3 ]: \8 }5 A; x vshapes= 5 R: D* r. T/ k; Z

8 j1 X7 c/ m- f, J, a* m+ k# O. q' {

# I$ n. r' h( L2 g6 {   1 f* \7 B) F9 P5 V ~5 \6 I0 f

' b. `$ G0 k9 e- S8 W

1 ^# ]) H" J! P 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 * ]# R4 u/ t: y3 Z! H& }

+ G8 R/ L3 r1 e

: G1 w9 r, c4 L' |" w vshapes= ( ~5 h m% ]$ p7 d4 @

$ ]8 Q- m" I) S' r

+ S- z0 x4 W1 \; s   8 z+ m7 }( @% |% e

+ ?: x P9 {. r8 g7 q6 c* J

# J* S" M! j. E# I G 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ( ]0 O0 i4 A8 d- q$ g

: g4 f, {& D- b( W o& W6 ?9 Q ]

% G" A1 M% D" x& I vshapes= 6 F8 k, a7 F, H* O

* ]7 V4 V1 b1 w# q

2 Q* y1 ~2 n3 L2 g$ \& q, c. E   8 U' K2 t1 j. t

+ J- R Y4 n/ s0 Q( s

. Q. S- P) O+ h' O 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 8 ?* K3 l8 K6 c, C& ^

$ y" }# r( r! Z6 ]

- E0 R8 ^& k! P0 X) E vshapes= ) M% r: B+ H" c5 A& E2 D, g

0 }3 O) c# ]# e& P3 ?1 Z

: ~8 \5 u) R* A$ {9 V   & ]- ^( v9 v- f$ d. j! I

- k/ l# ], z) Z8 s

8 E; ^2 T$ ?* z* q 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 6 c0 \ i* L9 H

s8 V6 G. Q, T+ C: |

1 d; f* x2 l* Z, c5 ] vshapes= / ~' [. D2 W, F! X

, A1 T7 B5 F6 w/ z, M6 [0 L8 ?

7 x6 V( r3 @! Y0 h; o! I   ; Y' m6 \- w1 I, Y7 a Z6 c/ A

- V# I6 r2 I' v8 U5 P

! O# F6 f* N& F' i! Z   8 ?$ ?. i/ n5 I# g e

8 A% y6 {( ^! u/ m- p+ \

7 Y5 b* \+ \3 v; x* P 签名信息 7 k$ U/ E" A B% o3 T3 j

+ k6 ?* q/ a$ E

( L- b5 a: H; ~, b' q4 P+ F. w 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 2 g- I9 y1 _* S# c& q

) Y& Z9 e6 \+ `, c6 P ^0 G

- n$ P6 C1 p8 q* p0 c/ ]* N 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 9 J% d7 w3 @5 T% g/ o( _

; ^( s+ u" p8 z& Q! c& u C

1 W1 s3 t6 q, P4 p6 L7 `# l androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 7 N' y/ U7 q2 g

( ^# x" x& k2 D/ n

( W+ Q0 \/ ^: z4 @ vshapes= 1 [* ?! x, v: Y8 ^: p3 y

1 m p3 f8 C$ J/ G- y' m

" k, c* u0 X% g( Z   ) f: @% g- ~! p) h

* D: a. \ `" f9 d

i: W/ t$ n0 d# I! u9 r3 {( j android签名的数字证书的一般都是采用 X.509的国际标准。 + s3 C5 N8 S# |0 i! M2 a$ D

2 w3 n, m" k3 X" s( o

" T) V6 n; M/ p8 B X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 J6 M0 {2 l& a9 j0 `. o0 B0 n

; I4 s( H) u* d1 f9 x# S6 _0 u

# X4 T, R/ C7 I H8 O" v+ ^8 J 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 1 |5 g$ n' g; S" u

9 u! d1 K6 u. ^: m

6 x8 V( l* f6 e. g, z* F vshapes= " h, C4 \6 W+ y- _

@: f- q7 F$ P; s) `

0 R! i- i9 }( m4 o* z7 R4 n' a   9 V/ B h0 [& o5 ?0 \# z

8 l3 I* r; ]9 Z. i1 c9 u

% j" F, j s; ] a 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ; V' J1 ~. U- a3 Q7 Z- F& K

' h8 J8 d# I! @2 ?, a3 f' [

; B/ ^% r: _- v* M x vshapes= * f) R/ B4 u0 Z; L R

0 u' n: O8 E& l: Q$ A% a

% z5 @ q* M. N4 x1 {- I3 c' ^% { | % J8 k3 A0 j7 p5 G) L! V. b9 U" k$ O& n* J

# V& N1 ~& G3 Z

- e8 U' g# ]2 ^( o   / b( j5 `0 B' E

' X) F" o3 `* _, V* g

( Z+ t! S! P0 k+ c! k. m 权限信息 3 }3 W: `$ O$ {5 r

. U- l9 b6 h& w+ F# Z3 y7 b0 s

; x J! h! Y* s* c+ M1 \ 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 2 E: c/ i' ?; [3 n- \( L

* |) y' [, d b6 p

& }( p) R: B9 S8 g( ^" _ android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 * \6 \- _, a( l! s" @% D

- I8 e2 C% x' F4 {, v, a7 F7 |

6 O# n/ E& @( L+ y vshapes= + F& d5 B L r5 Q. z2 U3 u

5 A+ |4 O" \: }% i+ `

2 E7 _0 W* f6 F   , }' t6 ]3 J& x2 c- A2 B1 K

) i% o/ _1 a" D

5 _' w' D3 x8 H- ~4 q7 e. _6 G* M1 {. N 下面对这个APP的所有权限进行详解下: 1 A4 n2 v1 g; e! J( I

. E E: }* X& W

' _# { ?# b: x! V$ q4 B# O5 h android.permission.INTERNET :访问网络连接可能产生GPRS流量 1 c: L; K9 L& u! N9 Z2 }8 |9 q

5 V' H% T9 D2 z7 [8 Q m1 \+ @

; J! V$ U: u) n% y, x' q& f9 K android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ( E" c+ D% [+ | K- V

* Q. ]+ r' Y9 @& O+ P( o

d* K* Q& u! d- D, i android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 2 X1 C7 D" W5 ]2 b* u' |0 F7 v

T0 ?$ e2 l) @, l+ E# T% |$ d

7 S( g2 W; m5 \9 Z' I0 D android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 4 X& p* c" K4 \

6 A# ~, }% ?; ~ S+ p

* n( C) o! K8 U9 d$ Y$ n) m android.permission.WRITE_SMS:允许应用程序写短信内容 6 p: ?2 I8 [# S. z/ g7 p

& ^& a- p, b. A- M2 R. c6 w

, H, h6 K7 T. X0 C8 |8 i android.permission.READ_SMS:允许应用程序读取短信内容 ) Z# m* j1 ~6 l+ P

) l" n5 t% I T1 g! M4 C

- B$ m, F1 C) a$ P" K android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 $ T ]7 s" \* c, o& \9 N7 l" I

, h9 [- v6 ^' R

! t+ L( | _) R0 } android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 & ^8 y# J. K7 C+ n& z

3 ~6 ~1 V }# n& `- _# M

2 H+ ^% N7 `* g. x: ], q. `$ f android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 * r2 m' n3 N U _

0 H0 M! @2 {; i& D

8 R% W9 ~, P* [6 z ? android.permission.VIBRATE:允许振动 & E1 K0 ]9 y. I' C

* P& W0 Y! M ^" N

% g; ]% C: r; |- G$ l5 H android.permission.READ_LOGS:允许程序读取系统底层日志 4 q$ j( H1 Q7 i7 [. B! D# p

2 r, `' v* f6 |4 I( l

; T$ m) A: T/ {3 P& X" t( s, q android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  - P, I7 i& `6 M$ z Y: k

% G0 S/ P/ l" u# U% @- h6 H

D% v1 D! {; E' |7 f2 C   + p! ^3 a% H, {: E3 ?: [, U- B

0 H3 ]+ P1 e" w" I( X0 J9 N

$ V3 I: |& @0 p 功能信息 . r% w% T' Z, s0 x

" }1 R9 v4 q% L8 Z! H9 `9 w$ ~5 C

5 V/ r; ~4 i6 F+ @   % \' i# j, X) u- S* F

! r4 b. W2 o- c4 k$ O+ O+ }

. J, V* i8 l, y 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 , d- {/ M6 k9 E% w* N8 |/ j

% B0 @) z& j5 j. R

" b- l" ~- \$ {8 p Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 / M( ~) K3 R) ^5 t4 \) B

5 F" n% H; {1 R" c

e& l; u; d: v 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 3 }% k1 q8 D, c1 f8 e/ [) L* c7 z

$ I4 @+ t$ ^% ^/ f. o" H5 n0 k& X7 ]

% l6 ~( }+ f0 }8 C9 M 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 0 H1 f! v1 B! C2 E

* C$ M: p$ K* h9 c# X7 j

$ {$ v0 L: W" I vshapes= ) ^- T& }: S ~' p* x0 L* a

8 n* f" X5 u6 q Q! W

. z# G* W# Q7 M% ?5 _. ?9 e   6 g+ O4 C4 g5 p& m0 O9 @, {

3 O& e/ x4 G6 |' W

( R( s0 W- J4 H+ d% f( j! m 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 4 o9 Y7 T4 O! n/ p1 ^$ J }

9 n1 G, w" V) M' d% B

( U6 E9 u- H( n6 m1 w3 M1 i) q0 ] vshapes= ) G& [! A9 u* B( k" w

1 r8 p: H; C V0 `2 }: |! Z( b

0 ]% F/ W& u4 v& F3 s& F/ ^   4 ^8 V- Z$ G# Z

- j' ~: U0 b4 O- K% d- }

N$ B1 d7 ]) A: d3 A9 _- \3 u lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 % ^8 V8 a: B$ D( ^) p/ R* w& s

* H7 `0 ~/ W1 V

6 C# S, n/ B: n5 U4 } vshapes= / r4 T: Q3 K% A% p, g7 Z

# r9 n% `9 A- X- D, v% o

% O* [, I9 g% ^2 O4 C# x 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 & F& Y/ M. n! Z2 }) }5 R5 {

$ Z6 r( U4 h% l1 i0 e' W

0 X; F: N/ P% y) b3 p* z vshapes= ; g; S. y: t. e" @5 S% ?

5 J0 u7 u: d* M6 N# h7 m! n0 T* l

* G( ]/ J/ }# ], `6 g   ( q2 B$ g D V

* D% ~! I6 T: i* V3 J4 G! T

$ U. v: T8 L! {/ O) M3 z# E- c+ d 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 # j! G; Y: c& _& `: k& E m- b

5 T6 Y& w* r: A$ O, T& X

! i/ m6 e; h4 h$ G& |9 I3 G LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 5 V2 p8 {+ X+ D% M, s

+ u: N5 ]* H$ M1 V9 r; U" ~

& c8 O0 J$ L u( N6 d 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 1 i! J2 Y/ ^' a

# d8 o" T& ~) n0 ^2 @

* W6 _) j6 g1 [+ ?5 a 源的luasocket代码可以参考学习下 - l6 O* q, j4 S9 w4 X+ K0 D

2 w _ c8 \* ]' U+ I0 w; P

. ]- L' L2 @2 S+ U https://github.com/lunarmodules/luasocket 4 }& `+ \; o! Y& c' `# C+ j7 y% l+ Y8 E

5 W# ]- ]( \/ g0 H8 |

p- ]; v7 }8 E1 }. G: E& [ https://github.com/fengye/luasocket ' R5 X4 ?+ I* K$ @

1 v: c$ ~5 T7 U; B" Q/ l

/ ?! w# R/ F6 s; ?9 T* s   ) `) K: ^7 E% G* S1 A4 P2 v! D% t8 U

4 ?: X4 H. }0 z

8 e$ q9 g% x- K% _0 M vshapes= q7 n) w: z N; W, J/ ?/ R/ V* s

. D% G& |6 F' @. a& V5 ]1 M' l; i

9 l8 d/ G( O; W# q   - u" I# E2 m# u" R- ^

0 M. z0 G4 N- u" P

1 A y; C5 Q5 v P! _$ n4 q   8 s# c; I4 R5 b' s! h3 G M

2 s( p) | c" P2 x6 e

) f- A( U# a$ J 总结 2 V, q7 M. }9 ?) t) v

- j; G4 Q7 @1 \ B. ?

# B/ y W3 X8 u" \" U9 Z/ g 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 ! N! `0 `3 ^, B- I5 z" n

9 \9 h/ ^- ]/ X1 p$ _0 M6 a

$ L* O* Y$ h# q) P9 g 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 6 w+ s/ i4 ]3 k' p0 b# t. X

0 m# ^$ m, C4 c8 u& J

3 W/ ?: W. e- N$ X) s( r" C 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 V7 ^8 p- y- t+ E3 `8 Y

* j( W# D% x, j8 O

6 R) T( y6 T4 }( o9 U 结束 5 W! `' ?0 n0 [, C$ S/ _8 @8 H

- ]: Q2 y6 p' p* i( P

( n, g' W1 \ {* K% G4 I  【推荐阅读】 ( e4 y/ `- t8 B

' X( S/ T, d# e# b4 g4 s% B/ j9 U

# d4 n1 m# k4 V0 R6 q C; @7 ` 对吃鸡APP的分析 ' j$ e t- n- L, t, J: X. x, _8 N

: P9 U6 i6 C" h, r v; h+ C

: N$ P( U7 C+ f" H) f 你需要了解的APP安全 5 [* h1 G" p+ d8 N; K9 m% ?

K7 P% P% }+ W( l

. l5 b+ H' B% G) |0 Q9 f) S! x 你需要了解的APP安全 / @7 H% Z+ N, p+ {

+ s" v) K# M3 y" O2 H* T

3 V; ], B6 X {3 F9 M4 n" X! N3 Q; x1 E   2 T" q9 Y; q5 \- `6 Z6 y# x

回复

使用道具 举报

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

本版积分规则

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