找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

2 {" L5 j2 O; i3 s 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 $ D+ g! |- w9 J

7 M4 k6 E7 R6 d3 e8 e8 S* l/ Z% O

* a' E8 k7 l) s* _; `# H$ a t* y vshapes= - D; m; d) _4 y3 h! f: X, q- o% b

2 n2 y& `( W/ l5 o$ y

+ m0 O( J5 s7 w- D' N   + F" w3 F# n Y! o" c

. w D4 q' C0 S6 ]) P

) g% ]3 d1 E7 Z* @ x 下面就以开发者角度进行解析下这个APP的功能的实现原理。 $ V$ L; b. d1 K, o7 j& C

1 f) v5 Q) ^9 v9 w% I9 r

1 N! h1 F- x0 f( C( V   # Q" }+ @3 I% k B! L9 K

$ f! t& F& o; K$ v

# R- l0 ]8 t- G/ \8 U+ ^ 基础信息 " K/ p& Y- s& Y8 @$ T: p

9 n, s) }: Y5 ~5 N4 o

+ t7 E0 [3 w. N3 @$ z' b! T 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 0 ~' a8 H; I$ B& [( S4 f$ s

1 {8 n7 \8 D) t' |2 ]/ }

3 R7 V1 j9 j' D9 U4 X) c vshapes= F7 B1 x- ^( S9 X

; J. v3 ^1 J$ r h

- Z4 v; V' M4 ^3 g" I1 d   : h9 z% B1 S; ?9 s: {

4 W& Q* ?: l. C

" A2 y$ Z5 U' h# O& u0 [& I 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 2 b7 t: G: x8 N

% p/ Q7 I. W0 ~7 `

# M) g: u5 }+ f, u7 c vshapes= $ F5 R4 ^8 V/ s' }) h# Z

, s% z- i9 J* o; @ L" z. G+ X

; h; W! ]: Y3 d6 @   % A, X; |3 ?( Y* A2 Z

" V& W" s' x/ J; ]# O% k

0 d1 m4 B9 i" J2 _ 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 1 V6 r# L, A( F) j6 {; k8 I, M. x6 P

/ A) @! B; p9 B6 S- N

8 m" R+ m8 H% a! Z vshapes= - N5 v) n% l' O }

9 y5 C. C0 h I: l

& y6 J% g) O* F8 Z2 Y   - J, J% {3 S0 k/ y- V9 n8 R9 M; u; H/ R

5 x! |, [& V$ S+ v

8 h3 i: s) S+ E# T' ` 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ; _0 g! a( O0 G6 [ |9 t! T% ~. ~

7 Z- X, T: I8 @: C

# b' w1 n% v, R5 b; f vshapes= % z1 r" v$ \. m

) O* m& {' s0 K3 F" q; N

: t! f6 b. ]7 I( ~   & ?3 z, j/ A c! N/ a% g: D

6 K3 B5 }! X. r8 e

, ~7 v0 }# l1 p+ Z% F. ?/ y 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 + ]& B* u% j* w% E/ T

: U3 Q- {# b4 v

5 N( m( \0 @: L/ k5 K, r vshapes= ) [4 A. C8 k( H& p) D

8 _9 R4 W) u v% Q) |) J9 v

2 }: t, I4 Z5 T& U6 ]; z   1 z) \1 k+ D: N- [

, [" m* ]% b8 N/ ~& y

. p0 G& S# f4 q4 i: Z$ Y   6 p3 n; R! j9 U w4 O

7 j n$ O2 F/ ^% v

9 r8 H/ ^( p% ]* G, a, p/ d 签名信息 / {: a6 z, l6 p' C7 Q. p& D

" t; y7 h2 T: z7 x5 a9 u7 F' ^7 _2 J

+ i. |; [% `+ j 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 " Y" T" {( R0 o3 L9 R

# |# J g- I3 f& o+ s

) w3 N0 w( C/ h7 @7 [4 Y+ R4 o 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 , s) A5 F0 J3 K9 _9 c, t9 A

/ c, V' l6 y) b! C4 L6 S3 l( B

. [7 a" Z& D7 N7 C: v androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 $ m5 j3 j% W7 g3 L8 {7 L

q* `4 G2 e# h7 w+ f; D2 E

8 u% O; [ [" g: _* b8 I- w) V vshapes= 2 {* N/ r# ?7 F3 a

" F2 y8 x, } G; [- k

9 T4 K/ M$ j$ _4 j- Y1 K4 _0 G- \   & P2 V, z* \3 T1 r. C

; N) l; G# [) [) ]! N

8 f( P( |- `9 m# n) r7 h O% u android签名的数字证书的一般都是采用 X.509的国际标准。 c9 j: I4 D$ z8 j, j$ u# v8 E; h

2 ~# J! Y; G9 m/ y% `/ K

7 V5 R3 s% \: z0 Y/ R/ e: B3 ^& F X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 + r* H4 `: {8 r1 l/ V

' r' Y. ^! {, a9 a! G* x5 c4 W

3 d# F; X; n, z 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 0 p: T; ^) _' y Y0 z: C

" `7 l, R( f- t& t" Z

9 e3 B, p8 I+ w vshapes= $ j4 L5 @, e/ j" D8 t

9 i# X5 W! o8 P

, b! t3 q0 B2 l! ]) V+ |- N   9 Z! ^. |/ P: M5 I

1 o; N! ~, F: v. u- N6 V

% m$ c9 N' d' G5 y- I2 n8 ? 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 # ^# Q& i1 B5 g0 u3 d- f

: J: @ F7 F x7 O/ r

) ^6 w5 O2 o/ Z+ L2 L1 u( { vshapes= - e/ b5 V! Q) }: u, h

* b2 a' e) m. p

* ^1 O6 ?1 {6 y& ^5 O5 t % s4 A+ v* k$ ~, \, M

% _$ Q) z! [( Y& R

x. `7 h9 x) q$ p7 h2 z   % k5 n% n4 [* p8 @: c, E |& @. f/ \

/ \% l* `. {! t; u

# h+ g+ U! m8 [5 A3 [& C/ J 权限信息 5 v3 n; H& ~ ^2 e0 c! T. s' H

* Q% P n' v5 S" Q' G

" x, t2 p& U0 S4 M 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) . G% H; r5 _! l0 \! E

1 i2 h. l" r, c8 f% D) K

: Q* T' ?- F1 g, ^- Q* T android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 . l1 }8 b( B% ?- K+ V; m4 I+ t7 R

- `- {) A5 P* J

4 B' m4 {! ~/ l) U& L( V vshapes= . Z+ d, O. C \' \- [

& @" @* O$ E1 O, {% l* M

7 K3 A. i7 O/ W+ l   ) _, H E1 X6 Z7 A0 t8 Q$ L

% e7 [9 M4 M) R4 i* M

8 N* u2 @% n( z' ^5 j/ K/ x 下面对这个APP的所有权限进行详解下: . S8 Q; Q7 K+ m

6 w" {( F0 v: n- b# g

: v- R* T5 P' ]4 z5 `( u" C4 ~) t# C6 x android.permission.INTERNET :访问网络连接可能产生GPRS流量 I; Q2 J% S8 v* p2 f

2 G3 e o+ `, k* {( [, t$ ~

% u2 W7 ?, k3 |+ W7 ]3 n android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 # k' v. S4 j; `5 k* [0 E6 J( ]

: }+ g) B* _- _# y4 t

% R2 }2 H) b! g; r L android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 5 f8 l S0 t1 o* s9 j4 ?

/ ~1 C3 u- i- j; i J! |, T8 y

% s- a( |& l J ]/ R8 @1 [ android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 $ i# w3 V8 L$ Z$ L5 r

5 I$ t/ W, u0 V7 |/ k

2 j, c8 K5 S$ ~5 s android.permission.WRITE_SMS:允许应用程序写短信内容 # c% j- w: n& F

7 k- k' ~, G1 h* x4 f8 o- i

+ \6 P; n% ]. \) O android.permission.READ_SMS:允许应用程序读取短信内容 3 F F! R/ M; P

' [7 D" l) d c& N4 v

8 F- i5 d9 b O. b+ u, \( _1 o" R m android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 # ^, _/ Q1 K3 }+ W

Z! R' i4 F7 k) X% }; ?

- j* k/ ^% h9 s& k9 ^/ a; L android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 " e2 f% ?9 t6 [, n' B( i8 s

p$ C* t3 z5 b2 B! a% g* l

, I. m$ c S3 s4 f+ o, V android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ^, N' u J: c0 ^6 J' {

3 e" B/ T7 |$ u# ~8 V) [" q

& u. H2 U! a! n3 g7 b android.permission.VIBRATE:允许振动 7 e3 l) D8 j& M% j! R1 Y

8 z" v: i" ]! q/ Y. r. i

4 }; r. j% Q* V x3 [ android.permission.READ_LOGS:允许程序读取系统底层日志 + \' s. U5 \; u) k1 Z

, ?0 f: z9 J* f( v3 W

3 N; l" K2 F' D6 V1 J android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  f, i* z0 H* [" o% \7 ]

/ I; d7 y6 S$ U; b- c

8 l% x3 g8 g' B   6 d0 q! W- ?, K+ E9 K O! s" ^

; u) r* I9 L. u

8 _9 N, o: t9 U 功能信息 - y1 n& g% ~" J

" R! e; I; P! ?+ _7 i

- A$ S+ g; _+ e; {) k6 b# r   ; x9 ^ D* S8 m2 w2 t# l+ w

9 x+ V& S; ^( k# p! I% C2 F

$ @/ _) P9 B$ G9 W 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 ( n8 \6 Z: I3 U8 s! ?1 r

+ g) o3 K4 I7 d3 E+ i

9 Q/ X, S# C- i, U; @ Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ! @5 a9 g! k5 \- C

7 H6 |( D$ p' G% {* a0 j

) M8 V' K; {% U2 R% `/ X$ O0 Z 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 3 k9 a6 ]5 u/ f: O) K

1 }& F% C9 F& f- E

3 ^& b6 W' X7 z' R 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 + c/ C7 i$ [% i( A$ m V! }& I

5 h- f; Y3 }2 V+ ?& c

+ A2 M: k3 a: c5 ^' Z0 @; C. |' @$ D vshapes= 8 D$ x% ^$ N$ I" X0 B

2 N$ n( y/ Q4 d- b4 h; a& B

) }; W5 {9 ?6 b   ( G1 H) c0 E5 M# m4 m4 e

, n* x+ O7 z& ~9 v2 q3 r

* Q! A7 \: H; w" P 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 4 _: {& q2 \4 G- `9 \) o2 w

1 F7 g4 D6 f( h& j+ S) W

7 N: S* n0 E3 ~; o4 p9 g* b; M vshapes= 9 ]2 r: d9 V' I3 @% F

8 r+ C2 {$ ?9 C/ d# p z

2 B5 N$ I; |$ ` e- J1 c- o   . x$ N9 J2 Q# x

( t9 D2 c' d7 ]% K1 H9 H5 h

4 u+ E7 F6 j* Y/ Z; f lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 : G) h H9 e+ V$ q8 `5 p( G

+ J6 R& B5 w: }7 V5 |) |$ v" v

) h/ a$ s9 s5 U8 J: ~ vshapes= ( p: D4 a$ J' c. X) I7 B$ ?

' d8 T+ a" n6 i9 B0 u1 N; e r% ?

$ G. b* y/ F0 [' {2 {" p 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 ' d" M q9 _5 c' l; N2 w! w

4 W( ?0 w2 n Q% r* v; f; d

- b1 W/ t& F6 G vshapes= # ]) O+ e# K8 D

2 T; A4 F& L7 y- n J2 Y; I/ ^6 k5 Z

% W" @4 M3 K: s+ ]   * s& o1 ^+ ]% Y( c( c. t

2 \( N O1 U! ?- r- g8 C) [' @

^: t5 M$ R6 {! l8 n, b 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ! H f" t0 A8 A }. ^0 R5 a

, R+ M. [5 }2 {, B4 J5 R

! B Q% b1 A2 r4 b& F LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 ! W) @. g* S- G0 [, u9 @4 U' E

1 c, @4 u1 {7 o; {& ~- E7 O- w

# D7 L8 M0 U% f% r 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 & S0 x0 K) N5 s" b

$ e5 Y4 A8 U2 b; u

1 h/ C" ^: O3 k( g5 e T4 I 源的luasocket代码可以参考学习下 & U2 m5 z& s4 L% ~& I$ O I7 ?6 Z+ h

8 x+ ^* Z3 Z# u* J7 o

( h9 ]8 I% y% }! ]" E, s$ h3 Y8 m+ N https://github.com/lunarmodules/luasocket 2 i) g2 {. `5 I7 S9 [, \

+ Z0 t6 _0 l& T7 I4 z2 h! |7 I

+ q5 C, Y" `: ` https://github.com/fengye/luasocket $ Z" W# s# |' }5 k, c7 |

5 I$ L. V5 i; G! K+ L

8 ~+ @* R1 J9 ^/ ]% u   * I* V* k( {# ]7 @6 [) ?9 f3 O

4 o0 A) W, f# C' s7 B: ~0 n

9 [8 N# p( e6 Z vshapes= $ H: {; N( W) V/ v- M1 k

! Z' f- l: I: y1 _/ L' F3 D' N5 |

4 [. g$ w5 b' [: _3 K& W7 N   " i9 q# j# I6 ~

6 e+ P, c6 o; W1 V. H

. i; [' H$ Q' V. w( O   8 n0 n5 `1 _1 [; X: o% i) p4 u

7 y6 v L5 P' d" h2 k: P

: A' ^0 z% X7 G9 L 总结 ( x% t; T e; K

$ |4 \1 \# L% F5 p+ t

( {: _& M+ ?' \( G 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 ; x b; m& Y! L" _. c# Q

+ E" r! j& v7 u7 A9 R0 _1 z

; i; p) [: t6 T& g0 p- o! t/ [/ T# l 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 2 s( s: a5 E( q3 X/ ?

$ V5 a- ]% a: E/ L, v) {( P# Y

5 O# d, V) r& @) P2 g: A 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 4 M- W% B$ P6 B% P; e5 j* p% @0 u

O3 X" f8 c- i. S

5 N0 ~( O* J! {- l0 N' F) R 结束 ! B# u5 O$ G/ N/ J

& h2 \% K6 h+ P" X

( T3 K3 ?8 r6 M2 w* S  【推荐阅读】 ' G0 r- }: k4 W- u

- r2 J0 |4 H4 |0 \# |

" m0 d3 n% }3 e 对吃鸡APP的分析 $ K) H0 F$ Q3 [

4 E6 s1 T# I! X4 e! S% H

. A7 z0 p1 b/ Y3 D7 d7 l( ~ 你需要了解的APP安全 1 M# |5 b4 |- B) j; t6 K

7 p6 L- y! e( Q! n K+ E8 m

% l* P8 x+ Y# \$ y, U/ t3 L8 n 你需要了解的APP安全 3 T- D- u' M- z3 i& I

% _9 k2 y' Z9 k K

5 X, g9 N3 D+ ~8 [   " B1 c' M9 X# Y* L7 ~+ i3 g

回复

使用道具 举报

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

本版积分规则

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