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

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

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

% j% O1 l6 P0 @3 W 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 8 F, Q. q+ E4 v

3 a, [3 h! h" P" ]3 ]4 x9 w# a

: c. _* F+ Q0 H% n vshapes= 0 H. n* [( r4 D" E- r7 I

; N" {, T- V- N5 ^ ]/ j; m

; x/ H m7 M# Q+ u5 V   / U5 o5 T) w# w% m( @$ P8 ?

" V- s; O+ V; G- f; c, r

1 L# t$ z2 l0 ` 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ! F" N1 A* m4 Q

4 U! d7 ~2 Q( B

8 ` k7 h) E+ {5 H   8 r$ F5 x+ E/ E' k* N0 Z, ~0 k3 X

, Q- J0 \; Z& y# [+ ^# W

m# x' Y: H! L* X, b3 h 基础信息 6 w: _5 U8 B+ U; Z* o2 G3 g1 e

: C- f" I m8 H! ?0 @; n$ w

" C1 L/ Z; t( z6 h3 h1 x4 f& p 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 & h* p3 m1 I/ I4 t- Z3 N5 I

& Q0 v7 {* u8 I# z

; e" z) T0 B; j+ Z& m" j ?: E vshapes= 4 Z( D8 K0 P# k# f8 |

0 O% R4 z' D: K0 g- M1 f

6 d( L% w& o, m7 N9 E( h   - d$ Y; ?5 g2 k2 ], g! m* ]

5 K& I8 V9 ]( T* y1 R5 X/ h

- y" C0 x3 S `1 N 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 9 `$ }" U* s/ g. p, }

9 P# L! O& H# M7 Q! ?; |1 S

, q w8 T7 {8 F$ M4 i `$ Y vshapes= : t8 |' o8 C$ H5 R: O5 t7 J% A" T

) J$ Z$ a. o3 O

1 c1 q7 h& k) B   + P: o# G8 I4 v |

7 E7 e: z" O! j9 O/ G

( A1 A9 z3 w4 p9 } M, w/ ]" | 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ( z8 d5 W( G( B# D

) }3 f7 R& \! B! ~. s8 D

% L- V8 A. ?/ Z5 d vshapes= % j: m% {' l' x# o9 X/ F/ ?: z

3 u1 Z, X3 I" K& k6 q5 b

0 P: `' B* a# U" j# p# n   + q9 h$ v, I0 G5 S( f( M7 F

+ C( m; c) Z8 H, S0 a

$ }! U! i( J& g- g9 P- B 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ' y# `% c' Z4 Y4 `- ?

# s8 h+ H) O U. G

& Y9 p% t+ k; M3 l% C# b; h7 \ A5 a vshapes= 7 o9 H6 V$ a$ h: i

$ p0 { m3 P, X* p9 Y1 m

6 }7 T! ]0 y1 `* v   / z! @% {& k8 G4 F# Y

# l, ^1 k$ W# e5 L8 {3 \3 t

' h1 R- A* o0 } m; d9 u( M* W7 r 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ' P0 c; u1 A6 u; l5 P0 q

1 c1 @9 [7 N" y# z+ D! S. c7 L

% @5 M/ H; M- A/ H vshapes= 0 z$ A+ E: f( F9 M1 ?

' J! N3 {1 E: i$ v& q6 a5 O7 e( \- v' Q5 L

" ^; P2 L; s1 r2 z/ J   2 S: B k/ r7 h* b; y

1 b5 s4 n( [/ @; l& v4 V) I; u

1 L' S' \* h) `& |8 Q, f   ( T9 H# J+ q7 Y) ]

% N( ~; H0 k- r; g+ p) X, k" q

. d, u7 d6 u2 N/ o t 签名信息 A7 o0 H3 ^( V0 e, O- v. B

: u! k7 b* ^# B/ H/ b p6 E, T

0 f/ F/ x9 F1 v) q$ Q 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ' [0 N; j' q9 [ Z! ]- \# e

7 S* M0 M7 f) j2 L- S

2 W6 E/ a2 A2 P8 u. o 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 + _' u0 i/ B/ _. p# @! u

' S8 F( ?" \0 q

0 w3 t8 Z h2 _. e* s0 h9 o androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 9 O' D8 _" C _) K; C

# B y, ~; X1 x9 q) p* ^5 v. e

[ B+ l5 @' A* w+ z vshapes= 4 E+ F$ v. o+ q0 `! \* |6 n3 w7 R

7 X& | r8 D7 c4 F

/ @( Z3 a4 N z$ ~   / _1 j1 Q4 G3 [

# U: T- V, N1 _: t; Z9 j) r

! o a; w2 u) H' X8 T { android签名的数字证书的一般都是采用 X.509的国际标准。 6 Z, d! Z4 K2 z4 i7 w% N! ^

) }5 Q) g, h- j+ W z# R+ ^- P7 `

1 `/ Q: u% }9 b9 G X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 / n0 H4 c7 f3 A5 R, q

; X9 _7 G0 Y8 R+ i/ {

# Y- a7 x0 M5 D" O+ E8 a" U" |( M l 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 5 u `. Y3 D2 ]

7 W+ T ]- l6 T- a1 t

( D0 a+ R+ Y. j; D vshapes= - `9 N# C! J( M# C+ Z7 d

! C1 Y* o. a# A; ^, b' B8 `( r

2 i6 E2 N4 q% k1 J   2 S" L/ E; i" p* c# I

) U: p5 }% ^! r* Z

. w6 D/ j, c0 E 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 # O& G5 M9 W& M* c

4 ~8 R9 H. u8 k9 j. g

4 l: j/ \7 x4 D& M6 O+ _# c vshapes= * N! I3 P. T1 R5 j, L: s

( y' [, m* [1 p% y

1 s( c+ P) r6 S1 i2 \2 f: W ) r2 O2 j+ _( e9 G- O

; V; B, R. }3 A8 O+ y

, R: ^9 K. P% {5 e L   ; D& s3 T1 t2 s4 |8 U

6 y, `8 f0 E- M/ R8 E0 ?

. J- k9 L, L8 Y 权限信息 ( M0 X J# r, N0 T: h( `

6 x6 V5 V/ y( r: ?* i

2 H0 e1 d. ]$ j( R& ~2 i3 V 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) % B) ^/ P) H; Y& d

; y- E' P3 R8 [' o6 G: f- Q

7 V% n' g' T7 B1 o android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 $ J* v* o: W& M5 D/ v9 J

6 a7 K2 ~# l. h0 a3 @3 z

5 ?. P" W1 g- L vshapes= 4 }% c6 r) N3 d* i4 D5 `" O0 a' h- f

- w0 V1 t$ u7 A1 j, a4 u

: k4 q1 H1 _& D* P |6 \, r9 _4 y   8 A* K+ E$ k, F, p; b4 x$ J

/ J* e! m3 H3 v I2 B: j

# V9 a" P( S/ x/ z, L3 ` 下面对这个APP的所有权限进行详解下: : c2 W( P" O9 V5 T, j. S) E

3 `/ u5 J9 K0 q( v

% b% ~+ n9 I( M0 _# U3 N! q( Z android.permission.INTERNET :访问网络连接可能产生GPRS流量 ' w( d, D5 {$ g' T3 h

1 j" m7 `9 W# N

% J. Z B0 j6 y$ E" q4 l6 f1 [& L android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 : B& I; k% z: u+ X+ }* ]6 h

" H* H8 Z+ i) C- C8 h

0 ~1 L; c! F8 i- z2 h9 p6 T8 B android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 1 c4 R& x+ H1 x( ?7 J1 Y$ P

2 a8 y& \4 I& D _

: ^% I* R6 Q9 `* x0 F, e android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 7 p4 Q: k _. |/ q# L, h& K

* f. |( ^+ q( q. B# p1 M! {

: I- v4 b3 r: d4 ? android.permission.WRITE_SMS:允许应用程序写短信内容 - c; X- B! }) R r0 U

# @# H! r) e! l1 L3 Y! R2 I

& v1 @1 Q; q% @% t% m android.permission.READ_SMS:允许应用程序读取短信内容 5 B$ {/ ]2 m* y: k: I, g

+ Q) C9 t+ w- d" x4 M7 @7 o) d/ v. e

' t7 x4 p" L1 z# Y+ x1 N5 |/ d; j android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 8 L# h2 j( C5 E5 L: F" O

k- r% F7 h6 y* }( i

0 \& g: q( P, l' R android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 2 f- B. G4 h) c. i) @% d

: V3 g, J( L6 H) F) U8 H% c) A1 K

7 i/ d/ h7 m! [5 w3 G android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 8 K" v% p8 @; x3 `. o

: B, W/ h' C ]& e/ c4 |

0 @* ]/ \ u; i9 n$ F* c android.permission.VIBRATE:允许振动 ( f" J2 q9 l3 I& M% ]

: S+ M' }% S1 Q& O

) V4 ^- C) M2 L2 ] android.permission.READ_LOGS:允许程序读取系统底层日志 9 N' n) l& ~3 d! }: |

% x5 v3 I% t: k" _/ s) n( @

3 }7 v( U( @+ ^ N" y6 } android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  4 T9 p# Y5 ` M; c+ z

' X, [' t3 \0 Z! q5 G7 p

5 h) c+ A# w# k6 u3 A% Z, E/ H   / W6 B3 `3 G( _& K' ]. u) K

4 Z' A6 L. g8 d' c: u( ] g

! @ h! @" J# |) h1 c 功能信息 $ O1 s" H5 N. B6 H

" U( e6 P7 ?, i. b& G0 f

% E/ F) ~0 d" E8 k# R6 V" K+ A   ( L1 V2 g# j) h7 R0 f0 O- w0 S

) @' ~* K# Z8 }' C

! V+ J; ^% W1 H' z3 D 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 ( r6 d u+ M! E9 G) C) \4 x( v

0 U$ y) g q) T0 p) W

. H* H8 C& K# {4 l8 c Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ) w0 j! I, s8 l, R

8 L( u7 [. H% s

1 T: a& m- O5 G- ?' P- i* B5 z 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 2 h2 T- X% W, a

- I/ y9 {+ ^: l# m, E3 m5 V

- N0 y" J! f- r3 k: M7 L) i 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 2 r- ~) K- w2 {; [2 u. |

$ z$ V) v/ T7 c+ z7 K5 N

, a% M; Y5 ~9 r& E8 C vshapes= * d* t& W; D2 x

1 b; Y; k1 P3 [; v Z' c h

( V0 v1 W0 @' f2 Z, X1 t   4 ?8 K, X. Z1 [7 ^! f, H# v

4 i6 |2 i6 T' @9 u! c0 C& K+ g! e6 z

8 ]; z1 P% c' j7 l' A1 m 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 3 m1 [& P/ L$ m0 y, d+ s) [% o

- R! D# t. _ u2 L$ ^# V' q

" B; f& U3 P; u/ J% C7 k% A vshapes= " {4 j8 p9 w* w; `* k, p7 R/ g

$ ~3 o# ?# V$ I) l9 R; A, A$ m

0 }$ ~2 j7 ~9 L3 d( P   . z$ n. E; D& u% I5 F* _6 F, L

; H5 Q4 o( U9 N- o; @; ^: o

$ i# x4 R4 Q& f- ` lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ) u9 K5 {: g+ q

6 C5 K6 u, L. {; Q- |5 p Z1 ~

0 f5 u+ }( Q% A* M# d1 b vshapes= # c% X! B3 t& f4 P9 N' H

* c+ u# t) d1 F+ n: ~+ b3 l& c

5 V4 S2 h- w5 v2 }; N% o" W; s 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 # r% h2 e2 s2 o* _5 @9 ~% k

- o! ?6 I' W2 ~2 [

. r; h( i& \# W( V vshapes= , @4 R, \1 p2 l ?( G+ T$ S

% `$ y( o8 f) N4 @) w" ]

- A+ H* r8 @. K, q. l* t0 e   6 A- x8 }0 Y3 U# }- f

7 {0 |1 m0 v5 E) W6 z% V1 w

0 l% x# K6 n% _ 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 1 I% f! H6 c& t9 ^* k

6 I1 {8 T) Y& g7 a" z, P

6 o# H* [3 z9 d; K8 ?& V/ x( s LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 # T- e" S: I. x6 Z* n" R) j

: u* h8 X6 R% O* X# q

8 W/ n( C0 b2 v2 C. e 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 ; U, \3 V' N5 X6 k7 K# e

6 B! {; E! B" U

+ N! M5 t2 Z0 F* H2 T 源的luasocket代码可以参考学习下 7 Y# z) o, V% w/ x: o/ X

; R8 W3 z$ _: M2 v

7 F! j' ]; l; ~8 R1 ~. c https://github.com/lunarmodules/luasocket * }2 d A7 m4 R- L

4 p. U. k) ]' f: W4 m1 f9 G

; K* O* c. v7 g3 @7 l/ c& C https://github.com/fengye/luasocket ; M" B1 |# @6 j9 x" Y9 |; p: J

$ [6 e3 {' \% d

* b! Q9 @1 w; ^2 z. s   8 K. N* E2 S/ v( e+ Z" C

! H+ e6 |: ?# ~ E

0 c- j. \5 x2 U/ j vshapes= " ?$ l% u9 m+ |' B1 L

0 y4 t9 K) e% k# `* C' {

4 S' C- b0 k7 O7 ]$ y   7 j8 i$ _9 Y+ \4 }$ Q

. ^! V& @" u9 d) Q! u+ T# T

6 N$ p$ X" z/ o t7 U8 m7 {7 W+ y& E) \   ! X7 v: G A% ^

) x$ O' s: i5 r* n4 z( ?' s

H! A% M& k* F' r 总结 : t( {9 k3 c2 C2 b

( I2 D+ K# k! D: q& e y, f

/ G5 d! t* k# e+ K3 |& s 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 $ T5 L3 l4 G; w( _/ z9 i& X! ^5 D

/ I* Y3 \7 j4 o6 Y( H4 J

0 ^* m |6 E7 {$ F( { 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 " B% a# o" ]) i2 s, C9 H

# n; i0 |# m. l3 ~

( F9 X |- a% d 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 , E0 W. I t7 k! }: | B4 N. i! S: F. n

7 A- h2 {* T5 C! B

# C$ x; x9 J6 ?" Y 结束 $ S" m( ]$ A' J2 ?( w; x

! t: p* e( y n v W2 e

4 {2 J3 v! ?' l/ T, F# J  【推荐阅读】 : i0 c$ ~! B. U; S& ?: }: T

5 H7 C+ i! U# h7 Q

0 i% u4 _. R, i( A9 A1 R 对吃鸡APP的分析 + ]8 p+ Z! d6 J# Q& D, `

$ T5 F) }9 p1 X# l

! f5 B' x0 ~5 R) r 你需要了解的APP安全 4 V5 _7 S' r. H- `2 v6 i

& d9 b- A6 }9 j6 `! ~5 M

P. N3 [$ y2 u+ v! b Y9 X 你需要了解的APP安全 J5 ~# s) E; w7 A3 B6 n7 Q6 S8 ?/ l

+ l+ K+ R6 m2 E4 }+ q) w

2 q2 Q1 O; }, e# {, O @   8 L4 v# T. R& {, l* m9 [

回复

使用道具 举报

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

本版积分规则

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