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

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

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

! g# z1 L( e2 l: J$ R5 G 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 N: h# ?3 |8 F* d" s- t

3 K: R- {5 Y" O( x# ~- H- i

0 ] D, G5 N7 A% z. ` vshapes= 0 v8 g+ x" S+ w" l

: F* \. ~- k, h6 c! X5 ]) b

6 I! `; |) e; \0 R* W   : A, |0 q" b; u; b1 {

; N! k# J0 x/ n1 N

. w$ f0 g3 J/ ?9 U( U 下面就以开发者角度进行解析下这个APP的功能的实现原理。 7 x* R' m4 F2 ?& M

, v- X% n& m! w# Y

5 g2 c: ]1 W0 ?& d# K V6 e# T   1 T5 I6 r$ V1 |

2 J( J* e% \) U9 N [5 S

$ _# D) k7 f* u2 g) k 基础信息 9 Z' N8 N/ G2 O$ b

i: y, I% e. z

9 H' I' _9 x- B 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ' O X" _& |6 j& F

! Y V- z2 N" b1 p4 G' O# G

/ a7 g z9 g8 P* _6 y+ Q vshapes= ( R$ T9 r0 X0 |7 M

( t8 z+ t" ?1 q7 p

% |" q$ i& W7 t0 H   - Z8 n$ p, o2 n4 w4 I

/ m, L8 i7 s( l# [# Y

( K) R* \$ n; j% W# J6 b 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 , o$ E9 l, h. C1 V$ ^, J( m4 N

4 Q6 u1 C6 D5 t

7 k; Y Q/ Z& A( c! j' a, u vshapes= 7 g! w P4 V% l, d

' d, |- x- P+ n: Q4 Q

, `$ J, T4 y+ V   ( P% O( Q |( O

2 w" X% f2 C8 D2 w

( k: T9 A8 G- B, y2 i- ?6 \1 e 通过jadx工具查看,该APP的Java层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 # P$ R$ P; L$ B9 x0 V/ R% a

# t- U0 m" b' F8 H; u9 E+ Y L

" L3 }; @# L% f, Q vshapes= + I! H5 T, t2 U' `+ X

& f; i. l3 |0 f/ X8 [' M& ^

: X* ~; S8 @% T( u; N   7 [& h8 Q" T, u' W5 L

; t9 P0 S6 d- e, K

a, N) y% p9 M1 ?( }4 u 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1个EditText和3个Button控件组成的,也就是下面的截图信息。 9 I* ^7 Q7 J" | N# |; p8 S+ X

: _4 f- L3 _: Q1 u0 {& h8 _

" n0 c, b/ a' i. P vshapes= 0 p8 \( c1 ~+ y$ }' I

% {+ Z' z- x# y# Q

: T. D, M3 Z5 ~   # T0 C. [; V4 X( c

1 F# Q: `3 Y* p

- P/ _$ f M ?; L7 I 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 - a3 m7 u# n0 A

6 n! e) w9 b2 `5 K5 X3 @! b

. N+ J6 s* _* V* z6 a. x vshapes= , L6 a! w# D$ E7 k& r' U

. O4 K* v( [; y ]

5 h/ z( ]' J. }$ p0 z: u   / R, i. u0 k6 K) V

) V, {/ ~7 ]4 W* k9 p6 B

. Y, Y2 g# D/ P" s( r3 R# x+ Q   3 G+ N; V" C5 ~' X B2 C# V+ j" {

: a& P$ w8 q! c! ?# L+ q! S

/ @$ m' t f4 T5 u1 v3 ?+ I 签名信息 5 {6 n; m {1 p, B

+ O! l. D" ~0 F0 e' q3 @% L1 S

& [6 ~' D* G; {" G' s. I 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名。 + ^$ d3 s! a3 g" o% P/ z

" ?2 ?, v) o1 j' b( p

# ?7 J( D% C8 s+ s T 目前APP中大部分都是通过V1和V2签名相结合的。并且这个在签名过程中要保证按照V1到V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 2 O( g8 T" J( I, h" i

7 X1 N& g6 c+ ~4 @2 D7 U- j

' w- z2 A! Z. W 在android的app开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 * \' l" V, S; w; x0 @( V3 V

2 |9 N5 i- L5 p9 z

/ Q( [% T# h4 k4 @ vshapes= / U) ?/ h1 w3 }" L1 j, }

9 [0 {, Y N* }) B+ @* _0 c

4 Y+ k: F ^# E: w( J1 F   * ~) |+ j" R$ _; E- F% i

+ t6 w4 n; m" J+ k' n% d" [6 v

V1 N3 g6 e8 `+ B' T) U: @ android签名的数字证书的一般都是采用 X.509的国际标准。 0 B7 Y$ y3 U" X

8 V, Z: w& [+ E3 A, r: J& Y5 p& D$ e

1 h/ D' [4 S6 b- X$ J 因X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 8 X9 G$ n! Q, T: ^8 r: `2 a, Z

! R$ }3 c1 c: w# W9 r

8 `/ W: ~- Y9 t' D4 X* r 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 0 J, t; }( O# @( C1 \& n8 ~9 ]

4 c, a7 _* O; g( N; k6 w

, l# \1 N' K3 J8 @) P1 b vshapes= 1 u& @8 W, E% ?; @% ]* J; v% ^

* ~! E+ P; I* x# \/ l

7 e4 a0 k8 |5 a0 Z   3 \/ ]) Q, o. ]) ?4 i

7 `+ y5 F l# i0 p

9 t; v( T% O1 i2 X h0 G$ A+ x P 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 6 F, J; H, q- j" W% n! Q' z* a

7 u% u& M6 C- @& I d4 h" L

' I: ]# D! {: ^# H# w vshapes= - @' W+ J' L! r: ]( a

1 f8 \! A& X/ X8 e2 H6 c

3 Z" Z8 U E# K% t( l9 G) L4 ] 、 6 ^/ Q5 C; q! Z# q+ b! x

/ {8 S; c7 e3 u, @( d5 O' i$ E0 I

+ {) a( X0 {, X: P   . t( L0 ~4 \$ l% a5 h5 T

- c% N; ^2 l" Q, b5 o- [6 \. w1 G; S

9 v4 g, ?3 j V! b2 A 权限信息 7 C, s7 ~! _9 c' J" j

5 ~/ S2 O$ K$ `1 d$ q+ x

9 B$ a% |' H9 e 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) & u* X* g' v( H4 [+ f& q' C8 c

$ D0 [; b1 g) p* y$ K

: o" ^' L5 g5 f& V' q android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 4 s- p; P5 p4 W' H( |9 U0 F

6 o( L; O/ k' `* J2 H$ N, J

4 R; r, N2 y5 U6 _7 e3 b vshapes= , a+ T" I |2 G3 _: H" R% u* k( C

/ F6 V( E/ w0 K& N" E+ S( P4 k

1 R+ D- C x K& J& ^" S   + C5 N. t* Z7 Q6 F3 u

) f3 J8 ?# l3 q. t) ? X$ w

1 R: M: @2 M ^" w9 e 下面对这个APP的所有权限进行详解下: ' E" w$ d2 w( E( Y

% G# v& }- C; \5 T' P

9 h3 {- h3 ` B# `5 r* L! h# q android.permission.INTERNET :访问网络连接可能产生GPRS流量 3 ]: D- e. @- `

& e. v V3 P7 B0 C2 X

7 k# A. N" J6 a6 w# @4 `% { android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ) o# I: y9 S R7 ]/ ^' H1 }

$ s# ?6 F; Q0 u3 w4 V

9 M6 i* G% M! d& T! R4 D android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ! ^6 I) `' X/ e& E

5 f( ?' u& ~7 p) ^1 r

/ C F0 y2 Q+ Y* Y5 k% P android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 / J8 j2 m8 V* @( u( `$ u

3 X1 `' `; L* L% i$ x6 M' c

( t6 ?6 Z$ v& x! L* f3 v android.permission.WRITE_SMS:允许应用程序写短信内容 . ^8 D, v* ]' {' {! p/ i% z P2 x! P

4 m# J3 @4 w- M; B( ~

8 P# L* `7 {# q3 P$ D! J android.permission.READ_SMS:允许应用程序读取短信内容 ) w W* ~9 M4 m! K, V( r

/ `! s# X4 x6 ~8 t6 q2 m3 p

2 j% [4 F9 V7 Y2 j' l android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 * M* y$ ?: s. R; N' l4 J

% O3 p7 B/ u" Y4 C3 j2 R

" H) x2 u4 A1 B! `, f android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 + c3 w( _# P% ^8 D2 p) p {$ \

0 V X' b5 f" S% ]5 |- q( {. K

+ S; {) }9 |- t' I% h1 q android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 , W' n* h' Z. b, b& v; ^& T; D

6 a0 n N/ X7 e. O: \/ p: I

3 U0 n" r2 q$ L1 [ android.permission.VIBRATE:允许振动 # `0 u9 W; e# Z- @) C+ D7 F- |0 f

+ v# L, e2 t' e, o0 v$ R& Y

2 T3 ?; e) r$ O' `% ~8 U( _8 e" j android.permission.READ_LOGS:允许程序读取系统底层日志 % Z: d6 M! d- g9 c8 P" C z

; c8 J4 F, x% v* o# g2 V3 T

* m- J! @1 d& p: _! ?2 G android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  * x) T8 `+ D% Y4 J. g9 A

! G( v# e( [7 E8 j& B

: ~* o' Z5 d5 B2 S5 B6 n: F) P* S# D   0 [- P# G8 v# M% E% r

) }7 @- j+ u1 k3 N2 m; N1 Q

* p1 u- ]2 V: S6 S! R# A4 R; } 功能信息 / A* v* h! X B; Q% O8 T

/ T' Y& R, [+ M }' J$ w) D

' N9 i$ `5 Q* t- a# i- T   ' A( n! J7 S' e& l' \, k7 j

- t4 z9 @ |$ c2 f( j" F2 m( U8 U

x7 k$ A3 T; |/ K+ I: A- ~2 H 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 $ F3 j) D: X* b$ m

( s; F7 F# a6 ` h0 ?* ~8 b7 b: s

! b! P+ Q' O! B) T y$ o% H) t Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ; |; J# J& g" w1 I, A' ^* s l

$ h/ o1 _* m4 U

$ q! f0 m9 m* ] b, c: A9 F* y7 j 1、需要用JNI为Lua的C库进行封装,这样才可能在Java中使用。 6 o& }5 _3 E; z* w2 G( F

- j- p% T* l( j1 B

) w6 A5 h' B, Y1 _% @; C 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 & P* k% z5 L2 K, L* S" ~( z

8 l& J& w+ b; R9 Z% x

7 b2 T7 x1 W4 b7 w- i% ^0 i$ a vshapes= # r" D' B3 H- j- K) C/ z

% O6 T# Q+ `6 V A/ \

2 R9 _" [9 D% _0 ~% }; O   0 l' U5 }3 H1 J

4 ]3 M; {1 H$ K

" H8 p4 L- x5 L z6 Y) V# S) e 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 4 ]( b% k2 v/ j# u8 g

) \5 [+ W- f3 w! F! v4 `9 {

+ |5 M! _; t# I' a+ u vshapes= & G% f1 b' \6 k* n& a: s

* D/ B- p# J0 h/ X7 F* g9 D* Y5 \3 X

% j6 g2 _# ?; f   0 h5 |* O' F) V1 ]' t

/ i, W% a6 I$ S) @

/ v, N+ r; d( n4 x 在lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP。其实破解这个验证很简单,直接将文件的禁入信息清空即可。 5 o: k6 W- ]( [6 {7 V* o3 |' A' q" q

H8 `. |* I9 ~) C

( s |) U7 g7 c, S! X vshapes= $ u7 M! z) |$ }* b7 y2 p

6 ~- x. z7 } f- m0 F

8 j9 K; s& e8 p; d2 _4 B 下图的这几个so是网络上lua和socket通用的so文件,并没有什么可研究价值。 $ e$ X1 D E. B* K& ?# @

8 A9 Z0 _2 o3 y/ n

% U6 ]+ ^& f5 D* ^9 g vshapes= ' i, _/ M4 J) j: z3 N m

+ u4 ^4 C J5 O% |& F0 B

% x7 k5 a4 c0 D. _   1 y, z9 e5 `8 F4 z! R% u0 p, p; a5 G

# T' P" `; x7 U% a

3 [, f' o s9 A7 j( \% l 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 / r1 l( \! G8 K. n- l+ W

; D$ l! K$ `* o$ R. `/ Q- O8 {

4 J7 E0 B6 Q' v* b6 V LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。 " Z' P; ~8 I+ w2 \ |# g

$ f' k6 h7 o: w2 l# a1 A

% c5 L0 u- H' c5 y8 T 这个luasocke一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 ) I6 @/ q' ~% l. w/ b8 Q

2 u4 n) g6 U# u; B

/ E* p& i, C( `7 a, R L+ o 开源的luasocket代码可以参考学习下 6 u X/ Z0 n& B0 [ A; \

N: }0 Z. x- N8 K& F( F9 L& H8 r

6 T( ^% D7 r$ J https://github.com/lunarmodules/luasocket 2 `5 u9 L/ Q& s9 W) n

# `" S; c2 Z) a

5 Z' g8 [# W. h( W& N0 L https://github.com/fengye/luasocket 0 ^' E: ?+ V: B

. f9 ~7 t+ ~* S9 _5 P/ L5 b

" |# Q {/ i) E- w, C) D& F+ U$ ^   5 Q/ ^$ P2 r+ n

/ _& g) m/ M% c7 t6 L- [2 o Y

, e; K; q% {' q vshapes= # u0 Y: g4 y) ]$ ^9 u" g' k

8 w: \$ f! Y. i/ L, c. |5 B! G6 m) G

1 R' c' M; ~' B- U   : S7 {7 l( t! h4 D- C$ f

) \* ^8 p, l/ |

& N# G/ Z8 M* Z! r- Z   9 G, Z* d% i2 n8 ~$ j

" e& f% K0 u0 `& t* Q3 V

& j! z" a3 O* V: l* Q 总结 * i1 _8 x# a: C6 Z% m: o

! k9 U8 y5 \0 ~& ~" w8 j4 G. C

$ a$ Z% M6 e$ E 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadx、charles、ida、uiautomatorviewer)工具就可以将功能全部分析清楚。 ( m+ ?+ Y% S- m1 [

8 y/ f9 }. d6 d( ~3 q; r% Y: E

* [! f% B3 x. R0 ] 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ; L* Z- b' G Y8 J X' C

0 T# n+ s V% \

' U; u4 g m6 d6 l 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 , [) q% P" e- e

2 F) k* u9 @! ^2 b! D

) `4 {& ^0 I7 F; f: h: C& j! _ 结束 : g) G+ {0 q+ M: h t

- Z& d/ w2 p8 h# o% e" o

, f+ l$ m- x5 T  【推荐阅读】 9 |. v! C; z7 E( H3 C3 n+ G% l$ G3 f9 i

& V/ f; ]) c. t, ~7 G/ ]

X( E( v% ~7 ?9 u 对吃鸡APP的分析 5 B3 O l: H' @ X! k

2 R4 d/ D: q& a# @( T( C0 Z

! K$ ~ f2 L1 o$ z3 r' N4 [3 I 你需要了解的APP安全 . t. d u- C4 C9 H6 }, M. ^

2 ^7 c$ B1 k5 _; ^+ ?

b, H; N! [" R& J 你需要了解的APP安全 " s, N( Q E) d& F1 A( M2 P2 U8 S1 H

! c. N4 g. V3 w; Y, I

+ i% a4 x% `/ c, z' |; d   r4 u6 w, }. S t& ^

回复

使用道具 举报

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

本版积分规则

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