找回密码
 立即注册
查看: 5316|回复: 0

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

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

; ^- x. Y. i3 p E 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 x- s5 ?; Y5 v2 P7 a& u

. w5 ^1 \5 z2 E; U7 [* X" ^6 V- C

+ V7 h% H# d; l, U {- c vshapes= - G+ K. E1 i* v9 J8 ?4 z' n) K

* p& u# g" V ^8 Y& @$ v: ]

# z( G! }+ ~. j, Y3 Z   - ~+ q1 h' {/ D- j" e

/ I: D f; a5 h" i+ V3 Z' N" E

2 m4 U8 Q; a' Q 下面就以开发者角度进行解析下这个APP的功能的实现原理。 - M, l; l2 G- H0 G8 G* p6 i/ E+ S

$ }/ h; G. F1 x! x+ B- E) B

: a" Z z/ t, M" x   8 P$ n/ t1 G4 @) R' _

5 f4 ]! f) z0 ^6 ~

! z5 }- j# ~; U9 a 基础信息 - J! l# Z( m/ f4 `- a& |# B+ Q5 U! ^

) h( P9 }) K( H

f$ \, K( E( F. ]; G: Q 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 : [$ B% ]8 w8 q; B% `8 [$ P5 Y4 K

" W+ T2 u% k0 S! I3 v

% I. e% @$ g- p9 @8 w3 T vshapes= $ e# z- N) L7 b; f& S) G

$ F; W& E4 R, b

, `- K9 t0 G9 }' w+ K, L6 r   ! Y6 |: C6 I2 r- L- j- v, Q% W

9 t3 C7 n/ c+ o) E" a2 f# {

, J Z8 Q, m+ F- V 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 , r$ O9 z( u* w& A: P( j

n: ?* K. J; I( t, U; ?/ [

1 C# d0 I% _8 A2 y. G3 ~ vshapes= , W' J, H3 R. m5 |$ k

7 V5 U0 q" d s: F. ]9 V, \

0 r* [% C4 q E" i   - I9 v) \! A2 G0 _

/ p+ z' T! D% Z9 ~( ?: L

% ]9 ?, n$ r$ M3 D/ i& w 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 6 I; l7 f1 ]: K- Q1 b- v

9 d1 q' h) u' I

" S' l* r+ ?8 z+ Q7 n2 y- q vshapes= . _; C" k) l$ ] R% n. S2 Y

& S3 u5 t& t- S: z6 l

& c: \- R# U5 b% l3 h4 E* V( s: y   # _1 u& u$ g1 w+ D

" d5 P- q4 A. H

^* a2 c3 K( x& K7 n& q( Y 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 & c S# {! x( F- Q$ A

9 c. _7 B+ O7 [% h" l" \! y1 D# U

4 o8 Q1 t" ^! J" T5 U vshapes= ( N8 [! i6 S% F9 U) z9 H5 U+ C8 h

; f2 l# C( X$ w: _4 _# O: ^

: o; m% Z/ X. T   z' E, J: f7 J7 I9 [

8 y; p7 t2 I, R; N* a7 D

# X& ]' C9 U; `$ @( v 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 $ ~( C; M' D$ X# n$ Z

+ \( g8 X+ ~7 {' ~0 a$ t1 W

) X, g0 j3 h/ K vshapes= 8 n6 T4 T9 ?, P6 b) z

. h7 j% j& [# P- [5 j3 H

' Q6 a, X" Y5 r9 _/ A/ v" e' \ |( P   ( ~, U) m0 t: `2 q' [' c! G

4 }$ p6 B; m: J. G$ X

' J" E" v: Q$ F) k   " I% w& N; l$ m2 ?- A N i# l

( ^4 [* [( i0 n& N; s! w1 j2 z

+ L; n( Y, q5 | 签名信息 * v' T* {3 S) Z) y- ~) C

% p8 V1 m/ O5 @8 D5 H1 l( a- S0 x

% z: ?* f8 s/ X. l' n5 S 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 3 J6 O4 C. ?! M9 f

+ P, @& ~/ G& R( s: C4 f

, W4 m" s4 C1 M( G3 n; F 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 # v4 f% T4 d- |

, |; [* q4 @: S6 O

* K T/ _# i% M# f6 T androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ~, U! V4 T- l" I* ]! v

8 X3 p, C* I0 @. B

: V5 Z. [( J1 q vshapes= ) a' ]1 ?2 D1 n2 j6 O% ?' P

0 ^$ [2 \ D$ y, |5 |) B

2 g1 W# q* ^1 `& @   7 V% | Q4 C+ f% C; G

6 s# B9 Y. n" @4 E

* U' W, {# @/ q. b7 k- |+ H android签名的数字证书的一般都是采用 X.509的国际标准。 / P: u0 b$ @8 g& P/ J. V; T7 I! ]6 H

5 [( a2 ^" Q7 x- H9 J

- N! A9 W a5 g+ L- C0 R% q X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 / \; {$ Q+ v# h- T" Q+ u# v

2 x N, N" I% u3 u, S

( B) _. `; @" i. [3 o. p 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 t C0 m' s9 W k8 D6 h* K7 T

- k8 ?' f. t* J7 u

( y- n5 A* Z( {; t ]! y5 C vshapes= , l9 l) n$ `+ i/ M& l E- L3 J& l

3 a! d0 B+ @) k7 j; i6 T+ V q

* @/ M h9 Q- M; x   + T) @0 Z) d5 G8 t7 C% P3 M

1 w% s% ]* O. U6 @8 n6 |

: S# h; X1 d* J1 y 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 4 r8 q, t/ y% m& g# g F2 |

& w6 H$ g8 n9 T! f& }( G4 y8 L$ B

9 [; b7 t8 D/ j' `, f2 y* M- W vshapes= ! r. S- G" d4 a; I

2 v5 d% ~! _& Q7 r' d$ |

6 x! m% G3 u' l2 j & `0 c2 b; ?6 a# ^8 a) ?0 l

& d( _6 t& z7 x( L2 T

$ @) m$ y( ]; z8 _$ e: i   % g! r- {; v& S2 w2 Y( A+ D4 r( @* E

/ r* N3 U1 S4 }* R6 i

. M* M2 u$ z& M1 y8 N7 z 权限信息 ; [/ K2 H& b5 k/ q

/ B. U+ J! `+ D% l; V8 @

4 }" T2 f; i# ~( t9 E. }% b9 { 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ! X. [! y- Z; R$ J# ~

# u: P" Y3 H7 ?- o% J I5 R0 @+ i% [" f

7 N9 w c/ D, Q! F* K android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 # ~* G) f6 }, G0 q! b9 }4 N

c( A/ Y6 B* b5 k+ S0 N( O

8 |* S0 ?- N2 Q4 r& q0 \- E6 k6 T% H vshapes= ; w i1 e( U8 D7 l

; t& ?/ a, f. H/ Y" p

% G1 n6 O% _/ ?   # W. S, ?5 b' G, b& w

% z; |# Y' f9 K4 _% \

$ F( u% q, I/ @ 下面对这个APP的所有权限进行详解下: ' I2 N, S+ J( f4 a

/ V" B9 _9 G, x; ~1 ?3 m6 y9 a

- \: ~& X7 w( x2 [" A, o' ` android.permission.INTERNET :访问网络连接可能产生GPRS流量 2 G& ]& Y0 e/ c1 j; Y) ~ X; {

+ n! x% Y. D# N0 M9 \

1 @1 f) ^% s+ c5 |& u" b" Z+ @5 |5 k android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 & \3 v6 z; C2 {7 M% u/ e# |

0 ?4 x" M7 M, \" q8 p) l

$ l, Z+ C/ S8 T android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 + _4 R0 X8 U( a7 b- p

! n8 k' u3 m4 ^4 m, L8 h

: b" h: C# O4 A# V3 t8 d android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 " l3 M! B1 @: U

8 g, l, d6 |1 B9 c) Q4 L

- B$ j8 z- h, k! i7 | android.permission.WRITE_SMS:允许应用程序写短信内容 * R I; E, _" _6 h" N' N. I( r

. S! A [5 s+ @# {5 J

( W' i, e$ N" D; |$ Q3 ?' O: B android.permission.READ_SMS:允许应用程序读取短信内容 ) J( a8 y1 O: C2 n. H- V& a" v

. s7 C; d# N# k

- I% A/ z8 l1 Y android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ' H0 W/ ~3 T; e

& G1 m$ ]) m7 C1 J

. K1 }& K2 E8 w! `8 z8 m# G" O2 j9 Q) s android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 / H+ c+ k# P1 ?" c" N% n0 E

2 J2 T- ^! u" V! e& _: U

% l7 E+ K2 W8 }5 x2 g, S- K) d android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ) R: t& V: R" G

3 Y3 g- k s, @% _! F4 s" ^( |, n D

' X2 d6 _$ g' t! q android.permission.VIBRATE:允许振动 m; s4 U8 q4 f

: v! Q( g6 ?: V0 }- ~! ~. t

! P: w7 k, p2 ^6 m android.permission.READ_LOGS:允许程序读取系统底层日志 3 m- [% ^# j, E2 z8 d6 p Y

' T( r! ]& `: E0 g0 I; R

) }& b% a) N5 b. z+ H android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ( m+ N- y1 W& l# m4 ]. M

, g7 ]# h6 S+ g) U

c9 o3 H/ x/ N! f8 |   2 Z ^6 y+ t0 M! y

- m0 @7 t7 ^9 r' \: S

8 K' H* g1 O5 L; o& G$ E 功能信息 ) w1 C7 e! h6 p% U+ f# j$ _: l( r

3 b( @2 m& J6 Q. c; ^

+ `1 A" a& `+ }$ X# v   " r1 s. C7 }5 a( t- `- J7 N

# r9 b4 _5 _! ]6 M

8 r% D) ]$ ^9 r 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 . q( |1 [5 t: T; d+ t+ F% n

* c2 H1 R' U l) t) S

+ K4 r8 c2 k I! ]) t Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 , D4 z. N6 }) T& E$ W( R' J

$ f0 Y( W1 V1 z4 p! K/ e

( l- Y7 ~/ B' ]/ X+ X& z 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 4 k9 e9 M. s# Z. \: H

% F; l. b& j/ G. ~- x: ?

9 R- s6 b8 H' L# U8 f 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 ; U" j; N4 q$ n {7 g( X5 l7 f

/ |$ e* m. m8 H! K3 V* G( c% a

7 z/ [% u4 m2 b1 h% K( K vshapes= : ~5 q0 i/ \ s0 O# T

; k7 `) T( x: [! i! V, X

9 i$ [) v0 D1 }& f4 |" Q4 J   * R4 N& |% ~8 B4 N" b

4 Q5 u9 e) R. P5 x3 b. ?0 F

4 U1 z( D% F B) J* q# v 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 $ L& S, \' a2 N! B# `! y

& V8 ^$ Q Q! s! f& ]

8 A& Q- B5 Z* ~" w, o! ]6 s8 S vshapes= ' S# e2 [4 Z4 A0 g6 i& j" b# F4 U, o

" y6 p! w' J8 Q3 R- O# X: M

" u7 Q% Y8 e2 q& p& h1 _& C   ; @7 E8 N( j1 b$ l, P/ `7 ^7 f

i3 ~; H7 c D3 Z. O- d

6 b; E6 D, p, U+ v6 t( D lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 8 B4 }" |/ _& ^+ X# p7 M ?

1 N6 B3 i1 e" c" L: A/ @: i( t

: W: `5 \! w; ~$ H' q vshapes= 0 L1 L( m! j+ y( a& N% d7 x

" N3 L2 u( U( g+ w

& C; E0 L1 J5 h: T. V( P2 i9 l) c 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 ( a# o A, W& W

" ]: W, q# D6 n% U! R

) {# a: i, ]! o! H/ Y8 u; V" { z vshapes= . Z% Z. [) c1 z; \

1 P/ e7 ~' ?' K" U1 \# Y t

; D8 b% C! Y1 @- s. H6 O1 o7 Y   / b% V3 |4 F$ W6 T, Y

1 L9 r/ U' `( t9 G. Y

1 X$ j' j% X; \# l# ` 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 - @- a' i0 h( h$ ]- X- q, T

* G+ H, D' a* C/ a

* U) a+ x' c$ y+ m2 I3 I LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 * b# u0 @( d9 U2 O6 N' `( x

, r7 y1 ?, c. H' N, _2 F+ u5 C

# P2 e0 v7 W% Q' b' C7 r 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 # w y5 J+ q9 n* g: }

. h* R0 X% j, {9 r' S/ F$ M- z

0 m) N& q2 |5 \8 @5 m 源的luasocket代码可以参考学习下 / a9 y* m, j. L5 r) z3 a* L5 |, x

3 b2 M, N, B9 @

' M8 @( [0 j: e2 H; @ https://github.com/lunarmodules/luasocket 2 g4 e2 `+ V: G

2 z* t' K7 w0 ~+ i5 H* E

+ _: f) p8 _0 Y3 b https://github.com/fengye/luasocket / D: _% ~. k3 I

+ x [4 S; u E% L

# w; G# r8 X$ [" Y1 I   / C7 j9 Z- r0 I! i$ r, r0 }$ z+ P/ a

1 Z+ |$ P* K0 p' v" b9 ]

/ X, y0 q* W8 I vshapes= 9 b% ]7 [* m- m! `4 ^

# u! v T1 H9 i* l p8 c

( q; e8 o' S0 n) U0 j. a5 c   ' ~4 I1 K% y1 a9 }+ _- p/ y; U, q

5 ?2 R5 v; B, |1 z0 t7 ^; c: L# v/ N

) m4 `8 v' T/ Y   : N) ^( O1 M0 @- |2 P! E

3 Z+ y7 O8 l r2 V2 b0 x$ m

* f+ l+ Y. K, s" E 总结 ( Y6 G2 J& W5 `# ?1 W! t* C! ]# d( f$ h

: J$ H; x+ ^; g6 I( ~; D" X9 _

% P/ C5 H1 U6 i! ^ l5 a+ c+ a, E0 O+ x 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 3 M' C% W5 P+ }8 T& A2 }) t

! N% ^+ ]2 o( E4 c( w' s

8 e' l+ v* R2 V t) U 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 / ?0 {6 E8 f# H% |4 i7 \7 T

; d, l$ U3 @1 v1 x

/ H, `8 f3 e5 l, X1 z1 E0 {1 E 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 7 f# C* k7 I% K" X2 ]

& m( u# v2 x6 f( y, j" a1 w

1 H4 m" r- |" j+ i6 `, a) ~6 p 结束 ) O0 A/ C, w! ?1 H) _

* k2 l' d1 N/ @4 T2 C) z; j6 R9 E

5 u5 r# \' p' P" d  【推荐阅读】 " A3 T- b5 X1 @. l5 }. U2 W: D

+ X' w+ t1 h- `! @4 f# ?* }# m! ?

4 M% `4 N9 h* K9 c* {9 k 对吃鸡APP的分析 ; _" c# ~ L% ]' ?, R

. ?9 B A$ a* e3 |- L9 `

3 Q/ U9 C7 j7 q; X9 g1 ` 你需要了解的APP安全 - W& K& m1 p: ^- @( @' ^& p' H" T

6 w0 h. i4 G" f6 O( F

* z- H; W) C, o" f' v# f 你需要了解的APP安全 ( i: C7 \8 I5 G

- u1 o7 P3 ~& _

" B1 y7 h/ C3 a2 q+ }" d   8 n% j/ Y- B$ |/ D; |" \

回复

使用道具 举报

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

本版积分规则

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