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

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

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

" Y. [8 b7 Q0 B, ? 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 2 h4 K- j! A/ q; J& [

0 V* E% L; F% U9 N, [7 I7 N

9 {* ^# s- ~) j% [% W$ _ vshapes= 1 N9 V) k! i* t4 a

% }# }% p2 q+ E: g& |

- U# l& U% K5 Z8 o   9 G! |8 n0 J/ C! @* Z- \

8 s. f7 N4 O% e8 A3 |. U( c8 c

9 [+ j1 O0 t j- N5 R0 k 下面就以开发者角度进行解析下这个APP的功能的实现原理。 , X Z& D5 R K8 n- t4 S2 h

& P/ O6 F0 }7 H. S2 R! U- o* P; {6 k

/ y8 H9 p, `* ?3 k) ]0 v/ J   3 ?" h& P: L: `; H! d% H1 m- |3 k

2 P- O- L1 ~- U

$ t, o& z# g% \4 {2 R 基础信息 * M; B0 I6 _1 {6 G c3 z- v

* }# g( E9 Q5 h! s

5 M) J5 I9 |$ B8 H3 @. y" N 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 3 E. |6 |" K! a. c

% u; `- U! E% d

& z% |6 }5 H1 T* ^ Q vshapes= & q2 }% s4 R" L F/ |2 e

# a# S( b2 p7 H9 B6 X1 g @9 S, s

" m! M4 R- `& _" S+ ]3 D   ( r3 T. l& v) ?

; f3 M# F( S8 S# |

" b0 B/ v6 ?* [3 }) ~) u' {% y 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 1 d8 ?0 J6 P. l7 G% p) k* K

( @( N/ w0 n8 m4 J% w& P% P, q

' E1 R% R4 e; M3 v/ A' K* w vshapes= 2 |% m1 J% C4 @+ A( e1 ]7 Z

/ ?! C0 A7 j" o7 M

8 P/ ~# `$ d+ [8 M" }   / D% q, p5 ^, k, E0 [3 ^$ U3 f( z7 H0 a

. Z7 q$ ^0 ^' k: i9 T

( Q! p- T' h& o/ \' [/ V) g4 S8 k 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 4 X3 a) X5 H# n8 z9 C% _

& I0 O8 ]6 ^; Q) S

5 r2 }% S7 t. G% a5 @ vshapes= 8 Z- [0 E+ Z% F, I; w+ b) K% w5 E

S1 S2 Y, v, N+ S" Y, F, K* v

0 ?$ `5 S7 z5 \ P9 j   + n* d8 k# | H( r$ U3 M

% K+ b, q1 X" T7 O/ m' C

+ V4 ]9 T. z2 g/ q 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 7 x. ^+ s" O6 R/ E

5 k8 _1 _9 Z' e& e$ m7 M2 ~

3 Z. a. s8 I& e# ^0 S vshapes= 6 [: m' l$ C6 q4 ]& U

7 Q3 `) w; A! P" h

7 P% t8 j* [( Z; I   0 k" d& @0 |$ o5 {, z$ a

7 R* k% }" c7 l7 u, z

0 x6 s- y* f$ o- ^# H 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ( }- c4 Y1 W1 R2 X/ f) f+ h% \& v

0 B8 a8 r7 P( B: J

/ c/ V+ w* v3 f vshapes= 9 a6 ?. F* V9 d p% V& w2 g0 A

[3 T% {4 T3 g

- o2 O; ~0 }8 ]7 g) e% U   - L! _( C R* t4 m; A/ ?" u, g

; X3 S2 K# {& S7 K' U/ i+ c( C

( v; v' L( H& X8 ]5 U6 J   5 X" z0 ~- n. R

6 D& y+ Z/ R! a0 R- T. ?

v. L5 u/ m. b: f" d 签名信息 9 x6 l( p- s! y* J W$ D d. o

+ P3 T/ Z+ {+ @9 Z: f$ o

' K$ n3 X1 E( U9 l& H 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 & L6 ~( N$ Q6 v- o, D

" d4 W/ g6 k# @2 f6 m- l

" T! q8 W5 P$ P: Y3 r+ c& e 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 * d- K9 R9 S! K" S! b" B# |& R

6 B3 ]$ q" n( R+ G( |% W

% q( k7 P" a1 ~: U5 r4 a androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 # Q, {/ J# f8 H/ }, }9 B' e2 E

* W, E/ x# i' ^2 e* [! V; C8 D

5 Y4 Q4 i# I* J3 m vshapes= : ^6 S- I! s2 @+ |& y

2 }7 l( [( j/ h! z8 ^) K0 z

7 E% Z0 b, F+ U0 P" Z   ; q9 W4 ]* Z$ Z S1 p0 e! k

5 p: O& v& O& Y/ c5 I* }% K' m

7 @ {+ j2 @; m, L# R. M android签名的数字证书的一般都是采用 X.509的国际标准。 2 b8 N. Q" ?- ]8 e# i( z) [

/ L& c; n: v# T) V# z4 b$ j

: o- D0 t6 v! ^ X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ( L4 I3 Z( L* l6 L

6 j' t8 V# z! h. w8 V8 ^7 P

7 t8 P( z R1 ^9 n 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 6 X- y! R2 l& i/ A0 P2 Q

: L4 `$ M6 N4 H1 T

' Q1 e$ B1 }: W' w. e vshapes= 3 z/ G( P% x3 C& ?

, F* b% k9 z& `: ?6 Q

5 ]+ X% x/ Z! Q' p- A2 e! G) M" J   $ z4 j" G# v( z# e; }" X. ?9 M

, B6 i9 I, e S

+ L) p+ s2 x6 I0 f8 d* q1 |$ O 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 1 w8 s2 V& L9 x

+ i5 N# X5 [% w5 c& v, |6 T

* ]6 _; @4 i( P2 S vshapes= 8 C- A; b, t8 S5 r' Y# y% E

4 G( b( r) ~" l

% k( N' F. B; H6 S+ L, Q" S4 b 6 ?+ F# G9 [8 f. n0 C8 l

# |7 `5 {/ D9 F5 t1 ]! a7 H

/ O$ t5 W$ f5 i/ A0 g. C7 F   / U( Z. n3 L1 I# p: \

4 g+ f* p9 B8 X: w; \

6 q" h$ d! e4 k8 U 权限信息 ; q4 \2 T1 F- v. M0 w" F

0 y9 k9 j4 ~0 K* x; e5 Q! J

5 C+ y# c7 _, [6 {+ J& T 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 5 \/ h" C# B: W

' A" F3 _. s7 p& L* d

% D+ n2 T d( \+ G$ ]# O/ G android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 7 o8 F* W/ h8 H4 ^

0 R# q6 c5 q( [/ J# P1 [; B5 m1 w

' ^& W, W, X4 ]; f/ w Q; @% b- Y vshapes= 3 W, K+ u8 f; e! h# D

6 F- z( L1 N7 D! O

0 H1 i& J6 w4 s. n8 L6 i   ; ?3 K! e9 G6 v$ x5 B

$ Z, y$ f7 G% X" |

$ \2 O- w' [$ r5 N8 ~. r 下面对这个APP的所有权限进行详解下: u7 d( V" L3 G9 K$ T* t' I

" }9 E+ A- W$ `9 q6 p W% b

) g+ I" x# {$ H android.permission.INTERNET :访问网络连接可能产生GPRS流量 : i9 t1 S" A" n+ z, z

' P1 B; F: i+ I

% v7 V+ D6 \# [/ H0 U8 X android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 / u: o# M1 A1 C7 W& p

2 T7 p3 k7 @6 J

9 Q L# [ @0 g. z android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 - n' j+ x& d7 v8 O

$ R* O4 p6 S. p/ z) x& e0 ~

6 f5 e, s9 k- _6 E: N; v: H3 } android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 1 T) n& Y" K1 |5 o) T4 X- `

2 Z8 ?/ s4 F2 M5 [! i; G& g; b

! ^, f5 r N) P android.permission.WRITE_SMS:允许应用程序写短信内容 1 z2 x7 Y9 `# j

' A" H4 N, |: v/ g# W( H

* o# t6 o+ c& i8 o9 W+ J) p& d o android.permission.READ_SMS:允许应用程序读取短信内容 ' ?; M( o7 r: {5 k9 n: N. B

- J7 X" v0 x3 x; u& ^" d# A) Q

% P- y- N O- D1 ] android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 3 h1 ~2 \3 a1 H3 ?% G9 T& J9 I" ~

, H: @' L1 b! @6 \* K/ ?; ]/ H3 A8 y

( |0 I/ g9 V% }+ I: ] android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 2 {5 t1 o( ~- d7 p: O

0 U6 Y/ T) i R& M: b9 X. G

. y6 F5 a$ @( F. z! a android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 + v/ I8 d$ Z1 G+ o9 g" K

% @, c9 w6 R( |! C+ M! {0 O$ A; E' o

# A! Q5 m5 _$ n$ j$ y& x% b android.permission.VIBRATE:允许振动 : q: i7 g( O8 |% `% n* g

2 q: a1 y( Y4 _8 l8 G8 C

" y6 h0 q+ Y" \6 o% ~: O android.permission.READ_LOGS:允许程序读取系统底层日志 ! f) b& Y- ?) q! R+ u4 Y" L5 f

D1 E, o& O0 O9 [- |' r

0 Z$ S" {# V3 X2 ]$ v) r android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  7 I2 X+ P1 X7 i9 F+ L$ a

. T4 G5 p6 z7 I* |, H

$ c0 l* b' a( ]# E# w% i# W   , B# ?, C4 x+ v6 C$ m

# g+ Y/ x4 S; L8 { q4 L d' u

* g' I: U. N' c 功能信息 # p7 E) F2 s# T/ V

) W, b2 U7 q$ X' G1 w# `: ?: [7 W& p% l

! j }% J, I* g/ M   ' p7 V }0 n2 A3 m

- \9 c" ?! y+ s* U& G* O1 g

, d2 N# i. [: I+ ]* l 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 V! R; y' e1 I o. E' l* [

. B5 }; O1 P6 P1 M5 r& {

) l, C+ R' D& g6 K Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 # X* B! ?+ f3 \# ^

2 m% r% v: X( k, {

& Q/ p/ r3 E) y( B3 Q: B7 N 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 , e0 f- W) Z, `2 C) D- }1 f

6 o9 ?8 \& U1 g1 c

7 z) @$ t9 S' Q5 E/ W8 t 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 ' M w: D4 R/ j4 {0 `0 o8 ^* }

: W5 ]- H2 J. I

7 t, H6 Q2 o( @ h& w vshapes= 9 u) |3 ` D) P* b: l: H$ A- b

; M1 H6 U) |4 \6 h1 f5 v4 d5 b7 e

; S2 }3 V& l4 ^   + U2 d+ K% n! |3 _! Z" l, a

1 E: P- R- Q( N6 `/ L

3 c8 V0 w7 l% c. B, h- v. r: `3 D 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 : X1 l `9 j5 z

% P8 Q7 h5 @1 L2 ]1 ^& C6 a

7 O3 j/ {; [+ L2 l4 W/ s vshapes= 5 w4 R# G; D' j, X

' ^+ x% ?* _7 E8 Q

! G6 m: M4 Y; F4 c   ' m3 C s. ^6 i- A+ H% { S

# D5 |, n0 x. m1 Z+ m

' d1 {" V+ Y6 B8 V+ _$ W$ ~ lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 n8 }4 i/ c y3 f/ n- d: F

1 i* V+ E: z) F. Z6 u

* r) F# D7 B& B: `1 N! C9 E' A vshapes= . f& b7 \3 l# M- J. Y) C6 H

1 ]) Z! H# ^. {) N/ z6 R3 V* c

) E8 I4 ]; Q# _) L3 y 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 / p: e* W# b D# Q

4 p( X6 B) d# P% ]: I: E/ c6 s4 o

1 y3 t# c) ~7 ` L vshapes= 8 m! ?( F. R: h/ u* b

- t5 }/ Q$ B3 G8 g" D* L: N5 W

+ T* |8 f9 p* F0 t   ' C2 h! g; Y$ q+ L

+ ~, b9 _9 C X. o1 R

' ^0 R8 Q( Q5 Y" f; J" k3 X+ k 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 + E- t: z2 o1 \: g$ o% `8 c

* ~1 H" F; F$ |: e5 Q; c

O$ |8 [" y# d0 \! d LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 3 x2 l. ~# ^' n. g

9 d+ O! F* ]1 P

. g. H; I5 [% q/ d% \$ S 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 * `; S; I" b8 } ~9 J# o

* S9 o: A" ^$ o9 c" S

: J3 y" Y7 B/ t$ L0 f$ [ 源的luasocket代码可以参考学习下 0 T' N; w9 w! t! m, e% }

' Q6 h( F7 W5 S

e( K. c$ J! U, G! q% O https://github.com/lunarmodules/luasocket 1 \2 i! U: x; x

3 U! }7 Q6 M% n# {& Z2 C: L

7 h% }5 A q: Q4 f5 C( r https://github.com/fengye/luasocket 8 B e+ r( v5 O% O! @ n: P! ~5 c

5 \* _; ?$ o0 N* b0 M

( | N1 c" S) f v; t3 }0 R   2 P; r: u7 v/ a& o" ]+ ?

* z% p0 ~9 J4 P* }

# l9 W, L8 {1 j9 g; ]: R* Y vshapes= . V6 t+ ^, a" {% O$ [: ^

( P# c& D% P4 P2 z& U6 @

5 V( r5 P0 { [8 n   ' y8 Z& v# _6 g# U+ h* p

8 w# e# K( M/ Z! C$ r" r7 n

/ L) `5 Q0 [+ ]9 |* |% I) v   9 K, z& G, ~, H2 B0 y$ g7 r

/ y, ^! B& A$ F5 h4 x

. L* I. V; K6 ]9 Y x" }: [* I 总结 ) k# X/ c' i2 P( w2 A

3 E! h) P8 z! U. S

V' k) ^! \6 j B* R1 U 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 4 }! k9 C* ~1 p. T% n

$ [) Z# }2 i; @+ A' p Y

% k; ^& Y' N) O7 c/ y 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 . n* ?: u* }6 G6 J( Q+ W

0 K6 B1 G/ H: A4 {

% t* J# f3 n b2 `/ q. V4 T6 d9 s: ^ 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 + G/ T) V8 M, v" n0 [% q) U* Q

% w1 ?* W; Q' Q0 f1 i* M

( E! d' P. ~ [: q4 r$ T 结束 N5 Y' |. Y7 T* m' g8 _4 {5 M

6 o! E7 u( B/ i( G6 T" w$ O

2 j ~0 w; ?$ b1 i6 T  【推荐阅读】 / Y5 @8 D( u; f% r% m6 X

, A) y. L+ l8 t0 Z( z7 h' u

# H, x6 M6 x0 h1 ]4 t$ w0 s1 A 对吃鸡APP的分析 z- r: B, y9 R2 I& x

0 `+ `1 Z- u% \# I; l4 d

1 m6 [6 f, d& g5 f+ U) u 你需要了解的APP安全 & b) A" F; b9 u; w

$ |8 g& Q# m8 g/ {1 ]

5 V; @4 V# n6 L4 L 你需要了解的APP安全 " ~# H1 E" s% p2 C+ j. I5 M9 f

/ t" U$ N0 C- o5 f) S$ G

1 S, ^" i. b# G   ! ?/ q4 I! r# l* e' T

回复

使用道具 举报

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

本版积分规则

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