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

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

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

, h, N0 x. T4 [- u4 x 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 5 R6 R; e% y5 V- D. b

* I/ L6 Y1 M9 m$ V/ C5 E. Z

) X/ W6 b# q2 P3 |' P4 Z vshapes= 6 h+ I3 ^9 H; d) W$ K

- s7 a8 p3 A9 n

( z& A# g3 z3 b! |& ~+ ^   8 h. T: S1 \5 v

, _0 R. _6 r6 j$ w# t' n& E f5 ?% {

0 t5 N/ p- s! E& U V2 ~& c 下面就以开发者角度进行解析下这个APP的功能的实现原理。 : a& j+ Y8 n) ^7 j0 l* O5 I

9 ^- ?' Z/ v. I1 N

0 N& Q3 L; m( q" ]: q: w   # A8 t. {5 s; M# J1 f

9 q7 O( t1 F4 Q% B

- v4 {' _* a8 s2 E5 o 基础信息 / L& m: n+ J) L; \4 M

0 V) j, Q- S4 w$ t. a

! n; s. m! d6 o2 v- I/ { 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 # E; v& b- e6 c% h* H% c, P! @

3 m4 D! M h z! {0 m3 g4 ^+ ^5 \

R e& x, c3 A, P vshapes= 1 `. S) Q' x' g* |" D

( y4 E o( R7 g) i6 e x. w

) W/ i g$ {6 s/ ?! w; g: B   + Z" z6 _* u' F! O

- \3 e" ^2 W7 I0 f7 ]- `- {

j1 y. w" Y% Q4 v& C% ?4 M# b1 Y 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 , | R r! t7 u5 G' b

; _/ e. v" D7 j2 a R

/ q4 [. u) w8 v vshapes= $ S* ]; q4 h' R( q2 d

% i, t4 z j/ B! f/ T

+ {7 y; [; `. M   % s% d0 i& C- }2 o1 U

9 w {' P0 g9 m

0 w' j4 }0 m7 _8 S5 b: v) R 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 1 x! A7 B" Y; b" m

. X9 Q8 j( L( R3 f- A

|3 o; X5 B& e( k7 g# {. W vshapes= ' }6 [. l& L: l5 h; M

4 `0 p" r& P% i. V. b" E

, M' m7 W0 e: ~* S# V3 A8 e0 g   , Z8 i- h9 V5 @; i* ~( Z

1 s8 D% e. Y5 I( T

2 j% b4 R4 R2 S* f* r 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 3 p0 w6 u4 G3 v0 d' I; P

; \* E0 s( p* R3 R1 Y2 o

* {6 Z# l2 g8 \- Y, e% _4 [ vshapes= , j- j/ Q8 z; `

$ C: t# F+ Y1 D4 Y9 i' s

( ?0 e& r, d w! G1 U) |   / e5 Q4 X- V& G E

3 [* e1 K- j H* ]1 L7 Q( F* Y

* s) M7 `1 S; f6 I- i 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 & H7 Y( q0 O }: P L& B2 ^

) {) r S# x* @6 r! w' k

1 {; M' M7 z. ] J3 v: U& p vshapes= + Q) b4 ~5 Z3 c

" \! Q' p8 w8 M ?( M, t

; Z7 {! i' v5 @4 f" s% _2 ^   2 k( ?% B) B, K

% m& o. _' H B6 |

- u# o) c; o/ ]6 O" R6 Q9 J   7 v3 I+ I8 D! h; t$ C& P

3 c8 ~$ i; L6 t {- g9 c" l3 Z$ q6 G

9 S+ S$ h6 _, w2 j! _/ ~( {6 F0 ? 签名信息 6 O3 Q4 S \7 N9 { L

# @1 s4 H7 X1 t$ {' e

+ t0 s1 b5 y4 Q3 e9 B, v 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ) R7 b4 t* t7 H% a+ S* h

% }- a& A: T7 ]9 E6 u

2 z& e+ u( x i- ?" z4 l 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 5 @5 p' `; C- N4 }* z/ e8 ~

3 w9 N* G- A/ Y! O7 ^

4 }7 u' B, ^% ? androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 # ^! L# o5 O/ h4 J

$ a" p: F& G( n; X9 n! O

: N: y4 @2 C" A9 S vshapes= 4 D/ Y7 C7 Z. t+ R# A* l4 g3 b

/ ]/ g/ c+ Q$ X* K3 w* D3 ?

; B6 s" t0 [. t, S5 R, [% O r0 {   ( y" T: W! `. P1 S6 t: Q$ _2 Q

4 Y( k ?7 L& R

0 `4 F% F% R4 N8 n android签名的数字证书的一般都是采用 X.509的国际标准。 $ v( d& u' I/ W( v

, F) Y9 R8 X( h( I& v" Z8 I

+ I, R- e0 t# L& ~, h& }1 k3 t1 ~( Q X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 $ p0 R( D! X) |, w! I

( K0 C+ `6 ~5 M; P j

# X8 b9 S) \% s# i l5 R 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 ) i. T7 i3 O1 P- C2 D; H

. i: _7 H4 z, ~- X2 C# G

3 f1 m. i1 _% P( h8 | vshapes= $ k# y5 ]; k7 e1 Z0 \+ X: S

1 p0 S, S0 J* r: x. c7 x: u' n6 [

p8 n" @: G a6 s! Q   7 ]( U0 l F0 q# M, K7 Y

! H5 B- e0 F- R# [, B7 l6 p

- W( W1 y! I t9 g/ V 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ; D: Q. ~5 @8 ]

8 H, w9 B% f2 h' C! p+ S6 |5 R

" Z$ ?( Q, z. ^. I4 j vshapes= - Q9 T2 a. T* u$ [: H

4 o3 L( V) @2 q; u5 L; i# S

/ [7 W5 A% G( N2 x . G+ d! i5 [& f/ h9 A

9 H0 u f# f2 I: C) y, @! A& K

( ?) w" c$ C& p$ L$ f# a   3 E, e9 q5 S& E

8 R/ k. [$ A* i, X3 Z6 _

7 u/ L6 x9 W b( J" A- Z3 t2 Y 权限信息 / h# `; @1 G; M- k+ E5 ^

3 M. D) S2 g$ w9 P8 I1 l& C

1 F! f. g0 k3 X% p 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) * N. R, \2 T# f7 ^# ]$ p

. m( h; n" d5 c/ [& e C% G' c

+ D3 x5 { I# g/ @4 t android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 , Q1 y1 u' G0 d

% W* p4 b3 U- X$ Q7 S# l, Y% I

5 s4 R: O8 x0 S6 L. w( \1 ^ vshapes= - K( l$ b; P: z7 v5 ]) c9 |

2 R ]1 f" E' i+ H; ^. m8 z

- `! c) b) y7 _7 _2 {( w; ~5 V   7 m! A5 ^3 A0 I1 g6 \2 h

4 u" f( Q$ ?$ h ^, h, a

: v' \; q7 X6 \ 下面对这个APP的所有权限进行详解下: % e P* m' {8 m! F6 }5 |+ d+ S7 E6 G

6 f+ }8 k( A4 R# D- R C7 U7 E

) |# U! X4 ?. g/ ~ android.permission.INTERNET :访问网络连接可能产生GPRS流量 ! ?) Q0 c' _; K5 E+ e8 `/ s: g

9 W: t" ~+ p+ z. w/ [

+ W, I4 K9 S: V# G+ i) I android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 9 |0 U2 V; a5 }/ Q

& ]( q5 @1 a; p5 J: [$ A3 M& v6 h

2 O3 ? U4 z5 r; F android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ' V2 q9 _# f$ j$ t+ R

2 ^' M, m, f- H

v; \1 } y: l# @ android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 9 n, Q% q% m. _5 w- T' f( M3 A

* l, y; r9 ?0 l* ]+ u: O

& t4 e2 u/ J5 g9 s: ]) V+ F/ ` android.permission.WRITE_SMS:允许应用程序写短信内容 ' C6 H; H/ {. h o+ A$ w" l6 w

* M: P& L) C7 }6 I

" w; D+ q+ W* t q7 |# B4 q2 c0 d0 { android.permission.READ_SMS:允许应用程序读取短信内容 ! c5 X7 c8 @7 U- D

; C1 ?+ w) u+ T9 w4 ]* S5 A) O

& y! X# Q0 L6 c' ]. k3 t android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 5 f) E* J; I6 p* V7 B8 i- g

6 J0 N k! x7 Y1 s' _9 {" \' o

: k* r, M6 A7 Q android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 5 `5 R r- G: z" @2 h

! \1 Z' B' J) {* f" q/ Z

/ e+ f. _* P/ n( w5 X android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 * O* _$ R; \6 k. v% f) A) R

6 r! k% Z) G/ f1 G, N

1 v7 X* z9 z' ]0 E2 T# H* m android.permission.VIBRATE:允许振动 / i: f7 |+ m& `' i+ B

w7 x. f, _+ L8 p4 b4 v! v- T

1 G) q& V3 S# q+ ~2 i# }# U android.permission.READ_LOGS:允许程序读取系统底层日志 ! j' U" D; p& y" k

. F8 l8 ^! X! X

# [0 [2 U d# v( g android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  4 n) g! q9 j8 b) ~) U* l

! Y7 C8 j( W; L! j! y' m% S

6 ~' F; D3 ?! f   + r, w q. H% a- [

- g- z0 o2 `; y* `6 I

9 R' M0 G0 v& h: x 功能信息 # z- }$ ]) a; q' `

: t9 z0 P4 U* u

1 C! O6 n7 y. c2 u   ! ^& Q. T( y& n2 C! L

4 K' F% N: F, B" C/ \

X2 n t% ?/ o. C 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 ! P( g1 e- ^- [9 s4 B( g) _+ m% ~

$ p; {2 Z* n) L+ ^1 z

" R) ~. y9 ], v- L, p0 X/ Z! L Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 . f: R E7 N' f$ B3 }

) O; C$ T0 ~3 o) F3 [. U1 f

1 z7 H* c, ]2 P) o7 F 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 1 n+ f4 F1 M! s" ^ ?

n: z% ]! @7 a o3 B ]

" f, c+ H4 D; D9 b N, d 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 3 U9 Z' B7 z2 k+ J8 |: m( d; V

, d+ n5 T& R" A `2 s

( t0 u# f) s. u/ p4 @ vshapes= 2 P* B* z* k/ F: n8 S$ ]2 c$ R

2 v; u! C) D1 }8 ]

& C; G% w; F" X- G, g; \( H$ n   / m- N7 P- `" g. z

4 s) z7 j v$ H6 a7 B

# j/ P% E, v) ?: Q 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 4 O4 Y" X% w) I( P4 b+ u4 p6 I

) T. f3 i) l) Q5 e# v1 ]

$ D- W) X7 Y4 n8 H- r4 K vshapes= ( Q0 c3 o) p+ q% }; s3 p+ c

2 X' L2 x7 d; W& M

7 z/ F* c7 p- X# C7 T0 G O   * K+ H: j% _4 a5 }* c5 G0 W) m

$ I/ j3 {5 |# y4 z3 H# w& ]) T4 C

+ |7 K( J/ m3 Q& Y lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ; v& Z( \% I/ I" a* z

4 h) A* P/ j- K

6 _2 ^ ]) E8 _0 T: g. o vshapes= 9 k" h( d: C# J- \/ ~9 Y

) V1 \1 y: P' O& Z+ G: I4 F

, R( C A- I4 M 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 ; e# {9 j. M7 t, I. e% a+ S$ R6 m

; |: {/ C$ E( V9 X: ?: t

3 W, }: E- P/ x+ } vshapes= + l2 P4 }/ u# p2 \

( B( A+ P: @( z4 X

* G2 A0 H; X% d$ t9 Q( m9 P   % e5 \: {) P" i0 h9 p i

2 E$ o! D" O5 _& V3 ]+ f

1 s @6 U/ { K 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 6 l5 w$ N# Z) j" {6 B: |3 C

: ^0 e7 c# O& j& ?5 E( `: w

9 s/ E" \' V! i! l) H LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 , h( t3 _4 z: _% N7 v0 o, ?& w5 G

) O( F6 F" |; ^! x, w8 M+ Y' M

) O9 z6 R9 c& n7 @" j& k 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 9 C0 R( U1 B4 T8 `* D$ A

$ D: J- O d: J# X7 m" B- J

k7 E) W2 H4 _& V# x- Y 源的luasocket代码可以参考学习下 8 H C; _2 _' P6 ^

! D* G4 A# u8 I) r2 c

/ ~7 h3 c. P" | https://github.com/lunarmodules/luasocket * P5 H2 V0 w0 @; r

+ ]* u& H0 Z/ Z/ w2 j1 U& t

2 z0 o' E" a9 |7 L6 U9 A2 e https://github.com/fengye/luasocket % I: K1 n9 @0 J( I' Z, E6 `; A1 ?$ O

: e$ v: e1 q4 C9 I5 I8 Z/ W

+ z- m- p; S+ ^' I) @! y- X$ o5 [! @   , z$ t+ I- M+ k! |# _9 S$ s

& W9 C8 V D/ a# l; O, H8 t) }2 u

4 b3 S7 u# F8 i! g/ A vshapes= 0 |9 y. e' _0 G! Q2 ?2 {$ N8 P

& L6 |" F% ^# w, U1 j, d6 `

: _& f5 E; |- X9 K% c" B4 x" }   * e" X5 K6 u& G" _8 L; V

" [) m7 a" G% g5 A! D

, j" ~, `) I! q   * `6 i" G3 H0 W& I. @( j9 _" F

2 A Y5 d: w" U# i: Z

; s( `8 X5 i7 v) {, W# o, z 总结 . J" Q1 L9 T8 P0 c; ?

: @) I7 Q- G- d% ?. f% Y5 P6 @

2 ^6 T" c% g% L h; a0 u 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 " J [5 F0 e3 Y, J: A4 e" ?% z

( M6 X" z& _- w0 H# A* c% r6 w

0 y/ U2 `1 C0 n8 k 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 0 P/ p9 x1 d4 J+ _% |* ^1 B% i

# W) B+ c/ K) x0 s

: A, A! p7 E4 l 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 1 J- N+ E$ A% T; T

) r8 z& V9 X! _8 Q) y" z

% _7 j, H e6 c1 z0 _ 结束 ) l$ o8 G/ P9 ~# p

! z; N$ K# M: R& @$ I1 D

( f8 G+ R2 K1 w5 G  【推荐阅读】 ( I8 l( r! i: d. ~# J' l1 B0 M

3 K# c( [5 K5 X2 D" h5 @+ K

! }9 k# X$ H8 u/ v0 p! L 对吃鸡APP的分析 + ?# e0 E2 r; g( \ ^" \# E5 b

# t; o1 Q2 V2 d

! X1 u+ P f( v# [ E0 K 你需要了解的APP安全 2 J0 M; E+ ]. m* k* R

( B, r+ {# W1 v2 Z0 H5 ^ D2 B

2 h7 j1 J1 @9 S5 g- R R 你需要了解的APP安全 . y( Q. R0 n5 u* {: a0 Z

- b: _1 M* l" x1 e8 F) c% J& [

/ B1 R5 p/ w0 q* p' o$ M/ S   : J/ c* G; h6 E1 s: v+ ^

回复

使用道具 举报

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

本版积分规则

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