找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 5386|回复: 0

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

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

; B3 W. {% }+ }7 n% ] 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 7 T/ S9 a+ ^ D* m) E3 O

2 d, r- \, y- s4 s/ @( c! m4 H

* A3 z2 S( b* w) H vshapes= 0 P4 ^) \0 p8 {- f J/ d# a

6 M: E0 d3 x- L4 r, e

- g" x5 K1 X: x- F3 i   % C2 X% F4 @) A7 t, s1 W

: M: X" u- O7 n6 g" W5 q

- e* n8 P: ?0 g6 `" w3 ` 下面就以开发者角度进行解析下这个APP的功能的实现原理。 1 R' X+ N% v0 S( }; ~! e3 ]6 e

* m5 j7 Q# {% b9 \

' ^. X$ @& g3 n8 x; g- x( u# j* Q   : t8 T* |, T8 a) ~3 q" W

; o3 O' P/ A* @0 Y5 f

& t: {# E7 x! G/ P" } 基础信息 0 ~% k' I+ S- x# @4 `

% m3 L! j$ _( q1 _

/ n/ K" x2 O- @+ d* j 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ( X" j5 a+ ^* |! h3 J# P

% U3 [' q! O' i2 I' x

0 p2 \1 y3 h3 e) t X1 I& i* q vshapes= ) Z$ Z& X2 H- r9 D2 b

3 S) [3 S5 _! s; z7 L

) w4 K! A3 o- B% `$ U n   : D! Y) S7 ^' s* w

+ |/ s4 B; W5 G$ Y' G# W

8 e/ |9 i3 V I 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 9 [+ I$ ] \2 `3 j p8 l. O6 z+ Z

. n( _! o6 P/ v( ^9 ?/ Q$ |) x

( O& n- l' v! T0 l/ i: Y vshapes= + N: j, K( [7 _

2 Z# `+ i; N3 z+ M6 g ~

4 h( s" d) y' O/ b+ f+ @   2 }- G: U- S& c1 R5 K6 f

- X5 g$ U1 ^ p5 m3 V1 {

" N: F9 }5 N' a4 }8 g, b+ z+ w 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ) W/ `+ }, \0 a$ G0 _3 N

; w( ?, H5 W& x+ E' v" X

* j5 p$ G2 l4 ]; P vshapes= . }$ ]! y$ D% [9 X' _+ I

" I5 v& R2 m/ P+ f0 Z; u& r

, b) n5 b+ M* R( ]. }   ( _6 c" T9 A' Z2 k+ f6 v, p: H

2 i) s7 T* L; D9 k4 s

& O0 C( _/ K( e# G& R* u- M5 D 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 5 y. j l& x; U! {$ @* z

; v# y: ?# J: B

3 H4 U9 @8 v) L; s4 E5 g9 c' R vshapes= 5 y7 r' D! F! n" i6 j3 r2 h5 J4 _

8 Y7 c& P4 d' X* v" K' n

% k8 S! F6 `* p   ! ~5 D) c- q2 L$ P

- O" n0 T" L/ P* ?6 m

! ^+ P1 w k, Z* u 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 & j: A3 f% T) @( W: v. ?; b

2 l% v5 L0 A& w' S/ ~# a

3 k0 {6 F* N# _3 p5 k; Q vshapes= 4 e$ [1 e( Y5 a. A- S

6 I4 v" C1 Y! E* |9 s4 X4 }; q8 {

4 f9 S7 p3 k* h. M- u) k; v; `   / N* C, I7 ~0 o3 |% U

8 |4 E$ V" | i6 x9 y% k: x

- K, O- t9 K0 Z+ R' E   " I; g4 \* ^ J' P# N5 G

% X+ T' W- b* @# h9 u4 o6 k

9 M$ N$ ~9 p: [+ N/ h 签名信息 $ m8 H; Y6 Z% [3 |

& g, G! K z& U- L' A+ x

y' B3 q2 W; k; T3 x* h 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 - P+ r) ?+ p, Z- d0 y3 t. B

5 q. ]3 N8 t& D/ U6 ~: @( b9 V

( ^ C7 i) O2 U2 T 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ) ~5 u) k7 L8 Z; Y5 D

$ {5 e6 U" l9 E

6 l5 S% G+ r, S8 P androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ! C5 r- N$ v2 J' q

% V p# v$ J9 L

p- e; v7 g. j# e! G; J vshapes= ' Q I5 {1 R5 m& `

( A- o2 J. a2 C) x8 L3 T

V: e$ K1 s7 o   l9 `! y- @& X* |" S$ B

" e5 ^' \2 L0 b

# R8 _. l! q c8 E8 l" Y; N android签名的数字证书的一般都是采用 X.509的国际标准。 $ U: m2 S& Q* l d

$ \" c O; d' f# k4 _! L

* Q% N) Y8 |& J X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 1 l; D7 t' N" E( Z

7 F& N, I* V# W. \4 a! U

. _9 L2 O5 J0 a! f i2 v" P 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 & l8 Z7 p! |) M

) J3 f( E1 z8 a" A A* n

' G; T' G! t3 w: _" x& k" @; f6 h- I- a9 ^ vshapes= - P% ?" g/ t1 Q, v

; S, {3 |; N- @ V4 j* h

7 f; f8 x+ z+ v4 j1 `8 i' G   0 d/ K" F0 y" g

" c2 {+ L5 D8 A$ Y

' {' n. V1 F% [% L. u9 L: V 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 * X& N. R1 g, y2 E: R

8 H. j5 z3 v$ L

4 q3 ]+ b+ T( C; y vshapes= / [6 u" ~: M+ O( ?& J

- ~; }4 ~) ~8 q7 ? B

. S. J4 y! o7 ?3 a) p1 w. i4 T$ W , ~: K- J8 s# x% r' E( t9 M

+ |" {+ f: B; u' |

/ x& r. w: x$ h   9 I* A" X5 s R4 R7 d3 \" A9 L

+ A8 G! O7 M# D7 j1 ]9 s

' }- }$ {$ S' W' q# y 权限信息 ; n- D; s7 c# n" }# g9 M B

0 G6 t5 D, I8 P R& h

5 z# C' e4 p2 e& p7 E 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) . j8 [# @# u( H" h

0 Y8 M+ w: u j. t8 l# v+ g v" H

6 F( x/ |: H! i0 b android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ' h, }1 ]% B/ ^9 }2 s* o

4 _' o, e7 b& h

( ~& v* J L: e: b3 S vshapes= 3 V9 I1 b8 A r9 o4 Y

7 T+ w' Q \% y& ?6 b& ^6 z

0 {+ w+ ~! T7 u- w! @* v; h   5 h8 `- j" v# b5 ^; p1 g

0 G" n& w; h7 ~+ w# o2 q

* l+ s/ V' g4 c" `7 B 下面对这个APP的所有权限进行详解下: ! A' ^, v( }9 ~' Z* F) [

% f0 y; N( w0 U

: s- U' a; X$ j$ U( n7 Y1 }0 E android.permission.INTERNET :访问网络连接可能产生GPRS流量 6 U/ _4 b$ \! n$ x% j# E

! C% e7 E6 _- k7 v

0 t s9 `, _ R android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 6 [" k/ L( k" q' D* {: y9 A0 A- E

- m4 m" g$ j9 Y( v0 y0 t

. b' ?2 ]" e2 I8 W android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 + z! }! z ^2 v6 G% D) p& x+ k

, m, n. h( d4 X$ c( }5 R. S4 i+ \

! w0 K' f4 |3 X5 g) W0 G& N android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 1 M9 q3 O) w) \# n

% A2 P! ^$ K @) |) d: o

* ]( ~' x2 ?: @9 S% A$ A. }; O9 N; K. r android.permission.WRITE_SMS:允许应用程序写短信内容 . F! ^3 @3 G$ Y

; M* `; D2 e1 {, H/ c* y) o

1 d6 k7 [/ R9 P4 \- M android.permission.READ_SMS:允许应用程序读取短信内容 7 F4 v, B) f' q/ }: l

8 E$ O# {+ q, K; g7 y" a

. y4 ]6 r6 {! z- O android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 " M( Q" Z0 i1 w- R* w+ p

8 Z( @' U/ [. U9 u& ~) a1 z1 Y" w, b

3 t' t& q/ ^# [: q+ d android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 * f9 K% y K3 b( `

9 F+ d/ c. @- l: f- |

& M- a0 G: x) O6 M android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ( T/ I) u$ X6 F3 J2 K/ I

+ Y" c" k9 ?% d2 l& \

" t5 e' k- }& b6 _* E2 Q; N android.permission.VIBRATE:允许振动 5 x L4 K' k2 n7 g `3 ?& _; H0 f0 ?( Y

+ B7 U4 t3 a9 L4 P9 s

+ z/ @) Y! K- @& C8 R) b% v android.permission.READ_LOGS:允许程序读取系统底层日志 5 `$ r/ ?/ w" A. f0 p- l

$ J9 W: g+ ?! W+ |: F9 R, w( v

8 x7 z/ g3 ]4 T# U9 Q android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  : n. ]% n# B/ K1 H- m

7 |7 j% Q, v, z4 q" n

+ E1 F( _4 ^; U0 b' L( U   . f6 z6 {, [0 t3 w1 H# q

( {2 P5 K- [/ P

: ]$ ^8 Q4 o8 m/ H& E- v7 m 功能信息 9 r- Q4 ]* U; \- g' M

3 G; a; |$ w8 V& x

7 N, l. P" i1 Y0 {$ z   * D3 b+ M( @/ p1 E {) W" @

4 ?( ^' l4 S3 Y: Z3 L

+ _$ I/ v. u! e 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 ' ]6 \( M1 P A$ j

! T% h R# |* r6 ]7 O7 u

) b# X: S' |1 z: ~7 p% h Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 . ~( Z) K. N7 [5 o" |$ F

! W3 k Z. R) ]* ^" A- J

5 f% t/ ?6 N& x7 \ 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 8 v" X. y4 G$ ^. j4 K2 s; U( Q

" l$ a" t2 z9 ?& T6 S

) h% Y/ z. l% o; a6 Y% ~* G 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 3 Q3 t, w# }6 X2 w; ~

7 C$ @/ D. L$ S( [8 Y; m

( {. X9 d- ~& M1 q, u% ^4 l vshapes= ! H! I4 @2 @, U% a, @! Z

3 g5 F5 y+ w( p9 |+ e

M- T3 L- ?: ]6 U Q" v4 b   ) F$ _7 u. {- A# Y9 P: g# H: g

* x8 i$ q5 Y. J9 A/ U

8 H7 U. Y% [! P" i 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 2 R% P5 p" s% Q5 k+ n5 i

* `3 ?, s5 u5 _! P/ s/ R

9 x0 b! J4 t4 G9 v vshapes= 4 c: {7 f: j$ Q+ g! D- @

( @( l- s- |/ \: q2 C, t

1 W' R' \& u8 ^5 d3 @   , I" b+ }# p( Q5 ]' h

7 k4 F; k# Z% @( I

; `! C/ [3 X; Z- _" A1 ^ lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 . c3 y/ }& c& n8 F4 O

9 Q7 y7 l8 t$ p

- s/ i/ o7 C- |, f5 v! C vshapes= 2 j" f1 H2 v: D! E9 u) Y4 J6 o

8 y( r7 ^7 ]" e% Q0 c. b" u( y- u( @

; H0 w0 G. ^: D7 i0 l* D6 B 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 ; s, y& V6 f7 C2 }2 f

& S( q- h) s" c4 ^

6 D( [- L9 R5 m, w1 ? vshapes= v$ c/ O- t g% c8 R

! K* b, {2 z+ @6 S5 ~) b! E" q

% e% M0 l* X6 I V" h; E   2 [/ i: N, s1 W9 Y4 ?4 t

! i$ \/ {4 L, J; i0 P$ `# O

, F. z2 ^* R- i4 C; H- [9 t6 W 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 % N' i" |6 D: L; G. R8 j

# d5 x' F3 t+ z {9 h

; h, g D& S& b! O# X4 ]; @3 ? LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 2 V5 k9 m* q2 \

) s6 _ m/ ~1 M

% c' D# C' [3 H4 f" Q 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 ; ]# |0 u5 H# O+ H# U4 u

8 _ @. c+ b/ q9 a

- {; G8 y: O0 _$ n5 O5 O6 r 源的luasocket代码可以参考学习下 : C" |6 f3 B# Z4 }5 `: k5 f

* \% I1 p: y/ J( f7 c1 z. F# s: G5 O

6 w* w+ [4 m) ^5 |+ }; d2 h+ G: k5 m https://github.com/lunarmodules/luasocket / C; L1 m5 s5 t e" W

, x! l! j) A, b/ z* L

% y2 H* w1 r k1 A% s: \! m1 m https://github.com/fengye/luasocket " a' a4 i: x0 B+ A0 R& C7 G

; w. t/ a0 T/ X" Z) P; W

6 H9 P- G) ^$ |6 t   , i# I2 [6 a2 H3 l0 R, k

% G# q( k4 x; ~; V' n

# X4 I# y0 { B vshapes= 7 p( E+ R% L7 [$ z

; s: q5 Z2 f) M2 ?! O! A4 x

- Z! Y7 T5 s/ r) ]   - L; n1 s; t) p. ^4 r) {5 k+ c( a" j

2 d% @% k$ q8 a7 ]

5 N( |4 o8 |7 c" F/ h   ( X D3 z6 e8 G4 Q) u

% @( _) T8 P e3 w

# L! k7 s/ z. B9 t8 x& _ 总结 * l" z6 C) k/ p. ?) ?0 p Q' i

5 {( ?. B6 R7 c0 H# k6 D

4 m4 m A8 G2 K1 X) @& F3 ] 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 + R R/ K# S& J" G1 q% Y! i

* y( K4 q. F2 i1 | O5 G8 @

; Y4 g+ \1 n" _9 t 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 % E+ z# {% {& C6 r! p. }4 v$ n1 j

& W* A% r2 M+ {, J# s, w

4 \: C5 G$ t q) ~ 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 * R8 v3 D$ L: Y; X7 X/ m% t

t+ P: y \7 T# B* l

$ n* R O- P( d 结束 0 `) c# ~' i2 C

: m' m" L* j9 y' P

; T" L- Q8 h A C  【推荐阅读】 8 S6 ?& I# _" d- v# z5 l

) q E5 q( ~. P/ F

J3 K$ q/ p& | 对吃鸡APP的分析 ( C$ L( [8 S% F3 x: O& x

9 a! x4 M) m; L) @+ h8 Z( s3 G6 i

- G# h6 Z, b! ?$ s 你需要了解的APP安全 4 H' h9 w3 M) X7 a6 G

6 j M. ~; U$ s* a. a

& x$ E; D8 z( K! r 你需要了解的APP安全 ' J0 I8 O3 j- @$ i5 p( u

9 M- I( X3 d4 [' \* C- z

, y! B# V0 [4 z2 o1 q5 i: }   9 E/ _) F F: P6 q$ f$ i' j5 i

回复

使用道具 举报

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

本版积分规则

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