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

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

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

! g7 N% W/ q& L: h5 |6 y* Q$ O 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 9 p' F+ H, |" Q' g

. g0 A% v% b7 q" A1 p0 z

- @. C4 z( p% t; d0 c" l- y1 y vshapes= ) V# E) z, p9 Y+ z7 M* N

' C u0 N0 D d" Y

( I5 h3 z7 j6 [   . [; c3 B9 R. M5 h5 D. b+ i% h

9 p/ s+ d4 Q0 S

# z2 t$ J0 F" V7 |2 H% B% |; i 下面就以开发者角度进行解析下这个APP的功能的实现原理。 # y# t, [3 I+ q

3 }, J; M' O4 _$ e3 u

0 V3 B0 u# y) {/ M+ @9 y0 c |& e   6 `' A0 O% n) g0 Y8 w: P3 q

. w0 s5 N5 r3 h& l( U1 u

7 o* w+ T: }6 a9 G 基础信息 6 ^! | S1 S" b9 y

0 i3 q, [% y7 Z9 E& Z

4 r" a" `$ U% D! l ^ 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ) w% l( |# ~$ }$ A3 L9 K4 v- j

% e; u9 w& k( |; [8 k0 U! m* {6 X

/ Y, L3 |; c( z% }0 l+ } vshapes= - t* Z: C8 ~& [& m

- `7 j* h; @# c+ w- ^

8 t4 S* C I# I1 c- W! @   " W- d& A3 I1 ?2 Y! i1 T) o

" _' X" o3 ]/ u! t' K9 g* x& l, ]

$ P& r- T0 f) W0 Z. Q+ i 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 # A/ M# J3 g/ _/ O9 N1 M" z

x6 U# I* U! [* y& [

5 U2 J; ~' k' p: @( y vshapes= 5 I' K( C- Y3 O

2 H2 K- E$ [2 D s

4 A+ _6 B/ I: `* o; u5 ?   * b! {) I" x7 ?& ]3 Y

8 H) p+ S, I% S) _8 |& _1 }

1 {4 p- c4 O, }: L, h) ` 通过jadx工具查看,该APP的Java层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 4 V# R. i5 {7 ?! u$ L# z+ T

: \0 n/ k/ q2 [ w+ ]

) S& r) h; }1 j; |/ c vshapes= 8 R- g2 m8 S5 P8 e6 B P

, y! V1 x9 }; h: U7 T+ {2 H9 F

/ G8 K) l6 Y" f+ h# T2 D2 S; w   & Y: z, g7 Z1 x) {) V

h9 ?6 {* n7 g }- Y: L8 n/ f

- O. @: [8 k) [ 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1个EditText和3个Button控件组成的,也就是下面的截图信息。 2 n! `8 G$ Z+ a7 B# j# e

j- d% J! M% N, S' R

" Y5 x$ \" P' Z7 } vshapes= 5 p- S; [& n' G: c4 S& D& H

; E' `5 k# _( n2 Y

; R, c3 G* c% }; f& R0 X   : _% t1 B& K! G% S

( d- Y1 m( D( Z0 J; l

; A: P6 X0 _9 P) O! s# b7 |8 }& s 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ; s! \0 Y1 \6 l2 l. v3 ?

2 Z" v* t' v$ f) Y* P4 D: ^" E

/ R C v5 E j$ u j$ e' [# u vshapes= 5 q6 _% L* o5 U) ^% Q. `

1 e( Z8 R2 r2 R2 }. Y

8 i0 g% T1 w8 w: N0 c" H/ j$ ?   ' M3 J, n; q: b+ m# F

: n1 }7 \2 g- D2 }# S

. L% W6 {% A% O2 C% p) q   , D( G6 i. s4 e' [

) K# H$ G! X- o# m9 p

7 E# J# e, Q' I$ n: T" I 签名信息 # H/ G' w* V8 W: M

8 J% u" I& O& p2 R" S9 [

6 w- v6 t. R+ a+ F) _" k 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名。 / g9 {% v* W4 g/ Z

0 p$ c2 |, f9 T0 ?

; L3 n) F8 K1 x 目前APP中大部分都是通过V1和V2签名相结合的。并且这个在签名过程中要保证按照V1到V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 2 E( W* a3 I- N! J3 m/ ^ n

* c% d3 D+ b& Z" o- ^; M# C8 f

. m. {0 \; F, }8 l7 `+ D 在android的app开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 : x/ _+ a6 c. `

8 E- K7 F$ I" p/ [* r* M; T

* X! w. @) E i, K5 l# `2 O vshapes= 7 O5 U+ c1 T$ w2 N' t

, _" ]* C' `; ~% J. v

$ y: f3 Z. M% o% C3 ~. r   3 J8 ]0 R" Z2 h6 h% {& ?7 F

1 U* A: j7 O9 y" {# x% N

, @) `- L+ K8 { android签名的数字证书的一般都是采用 X.509的国际标准。 ( e6 `; {9 {' K1 }. @

. s X5 W4 o3 N8 W* s1 J

' X1 H$ ]3 b& l1 R 因X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ! Z" B8 k2 e' \: k0 W6 r

' r. y' V! D+ l! p( N/ w

# X$ m* z4 a9 p* w; y 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 # [$ y+ b' r! u7 a2 T

) `' |3 `0 ?' j; V! {

+ A4 {0 l' u! l' ~& ~* [& A$ Y2 K# [ vshapes= 0 G, {( x: f# ?8 V

, V6 D2 r, R4 L$ u& q5 c+ o

! A4 c& Q- M, R# U4 H5 z3 A( v8 n   6 ]9 o% u) ]0 o$ w, p; V

# F+ K& ]3 m$ ]" E; E3 P+ N

! |9 P! S% P& |/ D4 s) y 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 0 I1 [2 r& F, P. j0 U4 ~/ X

' @* v z: |+ V5 Y

- b, @: O! ~8 j% q8 D9 a! A vshapes= " E. J3 G0 e4 S# T+ e# ~$ T! `

5 O7 ~& n, G9 Q" L0 C" K( G. y

* x& D) o9 q+ R9 d5 } 、 4 L4 S& R2 X- h$ _- C

$ x, { ?, c# [1 d8 o) m( H. V

1 s0 n: F3 n |% B1 O   ' Y! `. q. [9 O+ s3 K) [/ Y* `

I) T2 ?+ P: N# K5 J1 F

. G+ v; M5 k0 I4 n8 ?8 W 权限信息 0 n6 U: k d$ Z) [% E7 b2 A- q$ t( P

' e8 k' d3 w, m

! l6 _' X: P3 @7 i/ {- m2 x 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ( i% F, y/ s. {) I9 e) P6 M

2 @* d. `6 c6 m- d$ E

+ c8 q& W1 Q+ M8 c6 x android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 6 t; C% V* @" l5 Q( F

3 y0 b4 @% a: T/ R

* i$ {/ \2 l' U6 O vshapes= ' h `8 o6 ]) n, Z8 O7 l

; [1 B3 M9 o* A5 h

1 U" T1 F& |9 n. N9 C; W   ( D7 j7 [1 D6 t7 ?# U- R1 U

% M9 [. \0 N3 _( i/ [

% c% H) C4 W6 p2 _9 f 下面对这个APP的所有权限进行详解下: - V3 z! U- {2 s# X7 y

W: @9 s# u" w

: Q9 K* n' Q1 t _ android.permission.INTERNET :访问网络连接可能产生GPRS流量 7 Y2 w" k( z3 \

9 c* C: |* H, L* ]/ \2 x

4 X' c0 E, J w* p6 g android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 B* ~% a7 P; Q+ h

5 ~& N6 X. ]- Y: l0 R

* g! {1 N0 F- @0 O/ i* m0 S2 n android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 . q; @5 |8 E- j/ o! X( @$ _

; A+ y1 B6 u/ t) S2 n8 Y9 F7 U

& y7 P& H( [1 ]) r android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 # D+ v/ h1 Z2 b6 j* t

) E# H$ x5 N M9 s& x- W

1 X7 ?4 m7 j5 ?. c# w android.permission.WRITE_SMS:允许应用程序写短信内容 9 E G& f7 |1 ]& i" f; K; x" L

& { i9 E4 A5 P- u' D- I: L, L

, K# e$ G9 [* E5 I9 o+ M android.permission.READ_SMS:允许应用程序读取短信内容 + V) ]) g r6 k* D" o

, D( h2 l0 E) H3 N+ J% n

F2 E9 J8 M5 ~( S; d android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 5 | x* u/ c4 P' c. H

! M! ?( a1 B3 M1 b5 L, @. Z) X

4 w) S _, F7 H* I! u9 e6 ^' _ android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 5 P* T B. B5 Q' w5 T" N4 z

; e/ i$ v) E! N/ Y/ z

/ `5 |) e* @" G0 j android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 0 S, v6 Q# L% C8 y( n6 ^% H

+ h: D( V6 {% C8 H# I# {! F e9 W

- K2 f/ _5 U! H2 h( w. d android.permission.VIBRATE:允许振动 5 S; O# S0 X' b5 w

2 }4 b; z J- u4 A0 }0 T& G1 \

& S! X6 t& J. d! f1 m5 e android.permission.READ_LOGS:允许程序读取系统底层日志 8 K% b" A1 e: e% g2 C0 [' d

/ f7 s; y" H% S6 ^) }

9 Y# j: S. U8 p/ |2 J' N android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  + X1 Y5 F+ [4 V# h

' l7 w i" f9 O% D0 y; M6 a

# h" W' B/ p5 q/ \   * @# n6 e; X1 ~

" {# T2 g" o' u& N4 p4 U

# x; ]7 J+ O/ d4 B) j. Q# y2 Y& s! F 功能信息 ' ]6 \+ z" E; ?% N$ D2 b! E6 X

: Z1 C+ L6 ^9 Z: e' ^" {. x' _

3 Z2 k1 R+ x/ C( ~: a: f   0 ~% ~9 Z: |! q2 E* V

C0 S" @+ F/ D2 p9 c. Q

7 [ R0 j: e) p* }% Y2 ^( w 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 - \2 i# l% n3 ~2 L! ?/ H3 @$ s

! M' E& ~- ]/ v3 c8 K8 ^, R* G

- U+ z2 n8 L+ M5 h Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 . z+ P* I+ W: |( y

0 B& }" @, z! N! B( s- \' u

8 o& K! c" j$ z L* T 1、需要用JNI为Lua的C库进行封装,这样才可能在Java中使用。 . k1 W3 r4 H2 |! V: Q

H: x4 g$ E" A5 `) T% J

2 [7 T. f& q/ m. N 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 ; P# P8 `% r6 _ j. y' y/ o" b

p: F- B% Y9 J6 c1 S8 s

1 ^, H7 f" G4 p: u4 y3 Z8 i. a vshapes= 2 q% J* V. t2 y: W) ]& M1 H

, Q7 ?0 c9 k% Q

9 s3 @5 r! h3 k9 z& b: _6 ]- a   2 z, z8 K& J& m6 R

( ^/ s: \6 n) w/ P- F5 d4 v$ Z

8 M: t: @4 Q7 j, @ 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 - T8 Z0 i# J7 n8 ?0 i

, a$ X- A8 v- I1 I6 k/ u3 R

1 s: W+ Q3 T1 S vshapes= 3 A$ h3 e) _- O/ [7 r

' j0 d- M u* _4 a/ k

1 O+ x0 l/ `4 H9 _6 l; G% X" W6 N   ' x4 I* y0 i6 c: H; N& s3 o, Q

& h1 y4 Z. ]1 r5 g# @! n

9 J. p$ g' l+ ] 在lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP。其实破解这个验证很简单,直接将文件的禁入信息清空即可。 & F5 g" @' J! f( b( r

. {8 [% B+ z4 k+ A

+ E; [# Y! @! h% t6 s, N vshapes= 0 ]$ N. P2 A4 [" ^0 ?

, E Z. ^+ u$ T# y& |8 G& \$ |, F

' j) U% J" ]0 I* |$ E* p 下图的这几个so是网络上lua和socket通用的so文件,并没有什么可研究价值。 # v# f4 c/ i) V4 W+ \1 ~, o

7 J* v* v- N% m* A0 V1 b

1 K. H y' ^! I- `0 n1 h6 v vshapes= 6 B' r/ e u3 v* g% f, @, J

7 M" ~1 B0 r5 O' y- l. O& ^

) f G1 E! l- R: j8 W o4 M   9 G1 N/ M0 @' V+ h/ l

& n1 E O! S/ Y, O1 m9 ~ `

% X) @7 u4 E( V m7 ^ S+ q1 J 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ; O& h" \) l% x# j

4 r4 h$ d/ }; P: H. A! }, F

3 m0 K4 N$ H1 k+ i; w: N/ @9 L# j LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。 9 E ]$ X2 p. n2 ]4 l4 ]

7 Y: }& n8 Y7 \$ L. h

' M7 x0 N- q$ W% p% }3 _8 Q+ O 这个luasocke一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 ; A. ]% y; \: s, L8 a- d

: s3 h$ q; U- O* d# U

) |3 G- a/ k! Y 开源的luasocket代码可以参考学习下 7 c5 }% J) S, G2 e1 F

, q5 h$ u5 @) ~, m

, b9 N+ R+ H0 D https://github.com/lunarmodules/luasocket 0 y0 w" j1 ?& P& }

' W& x6 f1 C. |+ V- s. A- K& t+ s/ b

% K6 J0 F7 ~( R% d0 l https://github.com/fengye/luasocket F& f+ U6 w2 d1 _* I3 y

0 A7 s% T; J% t$ d) |

/ t1 B! O3 n+ {8 o/ d, s% ]2 }   4 u+ W0 W* q) U: Q

0 m: v! c# \. ]% j: o) k( w Z8 ^

% @, L: U: N; h vshapes= N5 t9 G# O( p0 A8 K" l1 ~

/ Y* p' ?6 C* r0 f+ a' A

0 |: P+ D. D: ]6 |   , f, C# C3 Y# x) K( r, P* v

3 c/ C) D* ?" F- `* t

% I, Y/ d; k+ d9 V# ^+ Z% K   / G) E- Q, m$ V3 Q$ O

9 | c3 d. t' v& z8 c. x0 {

0 _6 n1 e4 x# O ] 总结 ' x0 U. _1 F, z4 ^- @0 L

5 @! @. [' e0 o

4 [) h2 P; b7 L/ o9 K1 B 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadx、charles、ida、uiautomatorviewer)工具就可以将功能全部分析清楚。 0 J+ X2 o( s1 |: a$ U. m7 Q

; c6 | W/ k9 [+ T" c

- S2 {9 H6 B" L6 `4 S3 Z) p+ F 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 - \8 \: D5 U( V2 @% u

" ?9 h3 B+ M) b4 ^9 |$ v7 C. x

* ^( \2 |7 D5 c/ u 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 * B# \" q U/ k# d$ f8 |! v

8 D! l6 [- C: t/ ]* n7 w& |

4 R [1 S0 O5 S) Y 结束 1 Y- d7 V! M2 z: i# s

X1 T/ n$ Y" ~" H

7 m# E' G0 Z; o0 h" w* E) ?) f  【推荐阅读】 1 b/ l5 Q) R; C+ H

9 r+ e/ `+ ^" R: O, _0 n# ^

5 T. p8 t6 m6 z, R) B 对吃鸡APP的分析 & q, E5 [* q7 o e

) ?- b5 r; T( I+ B$ K# F* y% M

' `& s9 [2 |* K- G% a 你需要了解的APP安全 6 H) ^( k( X- w! N8 O3 Q

8 K& N+ B/ s S2 p

# u* c: \+ e; `' {: |9 t: F9 u 你需要了解的APP安全 5 L0 `- V, C* V

) R, T: V' H* Z' Q/ ]; u2 z

3 \2 p0 i! \% b; S   ! Z6 v1 r% u/ P, Q

回复

使用道具 举报

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

本版积分规则

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