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

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

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

5 x7 n: `+ c5 F# e* k, Q 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 0 l! W6 e: q i6 U9 L

! s$ x$ }/ r: }* M" f8 h. _

0 |2 t7 g* n& p6 S, r | vshapes= . F% x. ~- N5 s/ h1 m

# [# b; b8 l V3 S

0 ^9 h# F3 b M c9 B8 \/ R   2 F% z+ `+ A: o2 t, w% [

4 W i; J7 a& {

0 V$ f+ G( H- r b0 k& W 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ; }4 A2 r# g1 v& h4 o

8 {% M6 `7 F+ @6 Y

" p& y$ X) B4 _- A. B& h   , r; M, I* r9 g8 D- }& }

$ y$ ]+ j5 q m% C5 i/ ]3 x9 m

- I2 r' _# [3 Y" w$ n 基础信息 # {3 H3 A, S: i7 r' ]' T9 g

9 _3 a$ R1 \# `4 a; z/ e) ?7 E, c% l

. E% [1 b0 j r& k 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 9 {% |5 [ W6 S4 }

0 X! S( q" a/ D8 ~* w- }' w

1 n0 V2 D7 ~0 G. ^/ @8 d- H vshapes= 1 Y7 t6 [2 v4 D& ?% D2 ?) O9 R

+ o- d; \2 k; }3 O

* x/ a6 @. F: o+ H   9 F/ C6 f6 ?* [+ a+ e

! |4 `$ {1 O9 |

/ h# ] x) d' ^ 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 3 j- I7 ` D! z0 m3 A: @

, d# W! w/ n7 {: N# W; t. z

4 q* r( |; v/ T% J7 _$ U* f vshapes= ( ]6 B, y6 ?! i' K6 {

4 s5 ~# s+ J9 w: N$ J* {2 r/ o) Q

7 d4 B/ H& ~- t( @5 `8 q0 E   ( F" a: O# `8 k0 o6 ?

# ]9 F* j4 ~- Z' k+ g" _; c

K6 ~* ^) ^. S 通过jadx工具查看,该APP的Java层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 1 Z2 B d% o- P- |; l# D

5 J+ w. o3 f. t; m1 K

; M! x5 u7 @2 M' L- f- l- O vshapes= . F1 E7 C% u7 _4 ]( O- G

1 p: ?' H- N2 p6 O/ Z

) g4 T& f, {0 g% i' |8 T   $ B% V5 X! D: G. X

8 F. m' b# O; [! v9 K

+ U3 f0 L8 p1 q: {: J- p 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1个EditText和3个Button控件组成的,也就是下面的截图信息。 . P3 n2 ]5 Y2 k7 ~) l

/ {8 K& v g3 c% b5 Z; R9 N% _) i

4 w" C! n. w/ S/ ?! M4 U8 B vshapes= 0 v/ q' H! |4 Q# p. \4 }& p

& Z8 `/ t5 ?, D4 N7 q( q! B" d/ P

3 t$ Q0 A0 w0 I' g8 r   : z3 J: i3 T! R$ E9 \$ Q3 B9 l" e4 Q* r

# x/ {. }" f- n6 p* \" a; x1 `9 h

/ a! j& k# ?7 @! J4 S 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 , d* ~" A: ?/ o5 q$ A

' i2 n7 w- e; H$ _. ]0 ]: I( g; n

+ m- s2 }( N' ?# e: w vshapes= 4 P" n3 k, Y9 z M2 x

& e @7 w4 ^) M# {5 C( H8 v$ m2 o+ g9 z

5 m5 E* |5 S+ @5 {/ t+ }' R   - W5 R4 K) F3 G/ e

% a* N7 j% g$ J3 Z% r7 ~

0 C' N% L% f1 ~( k7 z s   " z% K& w. \ r# v# H

: A( ^4 U/ Z. i3 q) G, g; b

/ ] `* q7 f9 n2 V' Z; M2 b9 C 签名信息 * `5 {+ I# ?; N) T' S2 U

! F9 d2 M# p" f9 e' I* M

7 e" Z( M) ^; Y; d- J4 s 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名。 8 p. @! H, o/ _, `# Q

% ^% @0 f) C) ~ ^/ H. R0 C( t

c+ l) e2 U% W* G3 Z$ m 目前APP中大部分都是通过V1和V2签名相结合的。并且这个在签名过程中要保证按照V1到V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ; O1 V) o4 Z4 g: l: `3 G" x) }

- w; w4 U2 h2 i5 P, H

/ { a9 h' ?- B* c5 V3 m 在android的app开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 9 a% l, d2 C5 j

# i$ l+ n$ C! J% }- p% ~

+ n0 e7 E _1 ?- s$ Q, @- ^& k vshapes= ' f7 t8 s% W' Y, u

7 N; U' v. e. R& K9 C9 ?1 j

: [0 ~4 n2 Y( J/ q   5 ~% L8 s3 a7 b( t% x6 C

$ Q' J/ U9 j; W2 _

' R$ z+ M9 S$ g2 I7 A8 C android签名的数字证书的一般都是采用 X.509的国际标准。 / e$ j" k/ E1 T( Q

, X1 g- f0 u) K# d8 n0 {

$ F7 ?4 p0 z8 U 因X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 & c3 s2 F/ e9 C* h0 M

* u7 F4 n5 x! O+ W( ~+ d: }

7 |! k- e# a. W& E2 ?$ ^ 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 8 W* q0 D X# @" g

( L$ M$ G9 d1 k" D) B ]7 ?

! \9 K3 m7 r; h7 v# g; m5 S) d# R vshapes= 0 V( y) z a$ |) J0 N: P2 I

( I; S- V% J2 Z R

, R7 J7 E5 b3 W9 H* K. |   2 @% v' w1 B* _( s/ Y+ V

( g" n/ r6 R3 g( N3 N, }

9 f9 x( m' S9 O+ N 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 , W$ M& H- Y( e0 }6 u# s

" ~/ v8 Z3 R1 s% e* M7 D1 [. D

: a+ B# W9 U5 }' [! ^) p. L vshapes= - U# N8 v1 d! }. v

# Q5 B9 }8 l, f8 u* W

+ U/ G/ m+ H" }5 }/ I0 v$ B 、 3 \1 F( e: W) q6 j

. A' Z& R: |" F, f( c( b

. e' d+ V9 ^& ~) f2 e$ H) a   $ @" L0 Z8 ?. i$ W b [# c1 {

9 z' O1 M* s. P0 |9 l g

( C& }, ~0 B7 g1 Y* L. C 权限信息 1 D' p# Y! F1 `* N6 U* c

- |+ s$ {) ^3 \5 q# i! H

1 h5 Q1 Q W. t( G: e* p 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) / O2 G v% W, l, q( k

8 R" G i* H: o# P

- S1 {& H. X/ U0 V i7 ]; Q android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 0 w5 F# m& j% b1 s' I

. G) V; a5 a' {" z

\1 m1 \; Z" I3 Y, z3 H* Q vshapes= $ {3 ?' [4 D' p# \5 G( b0 q

% R8 F; f% Z! K4 p

& K5 l$ H8 f4 b& j6 Q   . \3 ^0 ]! ^' ?4 r3 E

3 `) k# R5 k" L4 L- B7 g% O

" V' j+ o' f! D F ?- w 下面对这个APP的所有权限进行详解下: * u8 f# U9 [( [

" Q/ d+ w" T4 Q4 s) B

: I* h# u2 I, P2 Q5 J( d android.permission.INTERNET :访问网络连接可能产生GPRS流量 . k3 g& J' u* X- @

D$ _- a( A" C$ F9 @2 F6 k

1 }! q3 D3 z4 q0 P8 G android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ) h* ^* v* R! o: H) ^4 }

2 P( r" {6 o3 A4 ]1 Z

a4 B2 G( K. n( u- y- x! k. M android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 : b9 ]$ {4 O/ E8 }& S) b% t

& a, `( u& T4 j" V6 H

/ _7 A7 P( N+ S7 y- L android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 & O; G0 s8 F- x5 @

2 q& u. O0 V" B

* b( w! I/ j) ?1 \; u+ m4 C- A2 v4 E android.permission.WRITE_SMS:允许应用程序写短信内容 - j. e d5 y6 w6 R" d4 `: p

+ a- J# {4 x4 \7 c4 r0 B( Q

0 r- F8 M( ?/ E android.permission.READ_SMS:允许应用程序读取短信内容 : j9 y9 B& t& [

% C$ j; h. p7 ^% _6 U

$ a) D" A! W( @/ e android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 & t$ o$ @, G% @" C! I

/ q4 b6 `1 K. g. C

7 U. x, V2 C8 M7 e5 @ android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 . s; k' Z, B! f& @) S8 }5 C+ Y

) }$ a R1 ]) j+ J2 G0 k( l

( z* Z; K1 v) a) X$ h" V1 I$ \$ ] android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 % p8 o& F, b9 r

4 m9 @ e' i w' ^1 @+ K# W

" Z4 N) Q# t, l4 a# h* J3 N1 {9 x android.permission.VIBRATE:允许振动 6 \) q' c# K0 Q, X8 Q* O; o

7 y4 Y) }, ]" c8 \% }4 b; X

2 e7 Q" \4 j8 e: l! u& r+ n" \ android.permission.READ_LOGS:允许程序读取系统底层日志 9 a" a" ]* M0 q3 U

1 @8 y7 K! L; q) G% W

+ E3 k. ^7 N) F android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  % M# j# C4 f; I' E9 l: B

/ W S' r1 ]) n% R+ {8 A

3 `; U3 [# p0 Y9 ?5 Z   % \( v( h' V. B( k

: P# ?. H. k1 x+ r! o Z

7 o6 {: X/ f- A3 x2 @) i 功能信息 0 L% W3 l7 n. z, y" I

) D" Q$ O2 G3 E+ z

: p8 A7 ^) P) F   9 R" z/ p7 i$ R

, A* M! ~: m7 ~/ Z8 a) K$ M

/ [/ P. k4 ^/ a& E& N: b# u 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 . K8 O; G u j4 I* K

! x5 q5 F3 m* D9 n

7 `. o/ |8 A& p5 B* ] Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ! p3 u( ?. O$ I/ v2 ?+ c

1 ?# d, M, \9 i) t9 j: S

/ w$ j* Z! g% ^2 x 1、需要用JNI为Lua的C库进行封装,这样才可能在Java中使用。 7 r6 d7 Z) l) w; q/ ]

c( |% s$ \3 C0 E6 b9 y1 q

6 n! q% c$ x& L& m r+ R 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 * f' P I' J8 ]8 L% |9 W T

7 \" N! F2 {+ g; G% x

3 h6 K; V) O- U* t2 B- L( M vshapes= b8 K, M8 y0 d! E

8 [) v7 [* i4 q- O

6 d: R# M6 W4 H- T: W& ^   ( B/ X G8 \8 U; m

' X" _3 F0 l) A6 |/ m

$ }6 {9 [* m% l 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ( h. v4 f, U) l3 z' C q

" y* [8 i$ R! k4 y4 Q& c! O

* o9 j2 F( A# k vshapes= * _) a/ _- j% i/ b& L

3 U* w- l7 P/ s b& [/ B

5 a9 }! t& N6 N6 C* l   3 ?* Z. a) a" L+ B

" O9 \. N; s1 [$ e, [4 N

. I, M. a( ~. N 在lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP。其实破解这个验证很简单,直接将文件的禁入信息清空即可。 0 ~: C6 v- v$ F8 T

. b' I* p3 E8 b" j' [

2 l6 u" V6 q/ i5 c vshapes= 5 n0 M( ?. t& K, b8 }7 i

7 K4 U) q. Z, Y; Q( [) W/ ?

7 R6 M9 m% J( q 下图的这几个so是网络上lua和socket通用的so文件,并没有什么可研究价值。 ; c2 ^. n4 _* Q" E x4 c

9 b! k9 \; b1 A( P

6 {% S) a; F0 d3 K0 s5 B6 H, o vshapes= ! B- L4 x' ]6 P, T& c7 ]

7 v' X; I9 o, r3 |9 n0 w' Z+ J, w7 {

/ y8 Y1 o* F7 [   # x) e2 w8 Y' L" A) S' {3 f

! ]1 q1 Y2 q5 m; j, {

* l4 a6 {8 n7 m9 a: L8 }/ }, n 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 8 w$ R1 `9 F! |' L% A* g

5 _2 y( l3 z& @# `5 F( d% T, }- f

! }) ^6 i+ ^2 a g1 [- E) S LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。 & V4 g$ s2 a- U0 [: p& n3 t: B

, Y8 M1 [1 |, {9 [6 N) a" ~5 J# p

" _# [$ b* h2 d5 T! A( B5 i 这个luasocke一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 & D, b* D1 h1 p; Q l/ u+ T

- u' L. L/ v* d3 A

' ~) A8 N+ Y4 o$ w; u; q5 B( b 开源的luasocket代码可以参考学习下 6 p# j. G+ w/ G8 U; T

: \. v5 B+ E0 t- g5 H( g" S9 o

9 Q2 R# r) p9 P9 u3 g8 V https://github.com/lunarmodules/luasocket 4 z( h* y( h, {5 b! D

7 U4 d; k, U% z: X: i! n

a& p9 I) @/ r( @* M https://github.com/fengye/luasocket # O0 x, ?+ Y, @# a2 T& T7 h

& _) V$ S' m- E+ v, j( M1 W3 J& Y: V

/ u" X, ~2 g: I) g   ) G( |) }% p+ Z2 o

8 L5 q+ ?7 r1 y' D4 t- d

$ D% ]( H# `3 L3 ]% w7 h vshapes= 7 E" r+ b" e0 R0 Z; L2 e" u) f

7 V* i# ~2 B9 Y

- I2 K* f2 c$ j9 A% W   ' t- Y4 h& E. A: u

, X: S4 r* H' G, {- l. c

t% k- {/ _5 r) ]# x o- b& @   , p1 f( [* \" \# R2 }3 |

+ [' z q3 n- J" m; d! `* ]

' `1 J& W# B/ }6 e4 s& { 总结 ; a% G* A8 B* e# U& s$ A

# N. |$ p' U: k' |, h

) |' f( O& S/ [. } 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadx、charles、ida、uiautomatorviewer)工具就可以将功能全部分析清楚。 ' r/ }$ ^7 O* l6 x: A

$ Z( p$ B- i$ Q* M* R: l

+ s7 U9 E @, a% J1 B2 A$ H 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 # O# \! P H$ S$ S

9 v& c( Y0 I# s/ u3 c& G

7 h" T2 S& a# R 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 & K z$ m, m5 j) B' J$ _7 R% v8 f

' N% d1 s# m3 }2 }* a0 n5 a

0 n5 Q& f, v# K* }' T9 z1 O 结束 9 t$ L8 m! h4 _% E# G9 J

( r7 L$ z) ^3 E L& f6 L% y

6 N0 L. m* R# S% ~9 b& l/ T' I  【推荐阅读】 0 J: U# y: s$ |8 X% y

3 k2 C' [4 [* l# d' H) P4 M

4 ]. e, ~% ^# O( P2 v& M) Z% R 对吃鸡APP的分析 9 M4 @" F1 e+ [4 q; M! J& r

/ j5 q! w- X1 {

. L8 j+ w0 z3 A; K* F 你需要了解的APP安全 * U7 H* e) M5 Q5 B& @- j( n' p- B

$ c$ ]6 f. I) {$ ~

\6 j! s: G/ x$ F) ~: I 你需要了解的APP安全 0 n3 u$ r7 Z# k5 c

6 h: q& d% i9 M S3 j

; A1 W& k9 d; u1 S& |   ' o) \( _( e" h, Q4 w7 d

回复

使用道具 举报

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

本版积分规则

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