找回密码
 立即注册
查看: 5626|回复: 0
打印 上一主题 下一主题

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

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

4 A3 o, i$ L V4 n& u1 L8 I1 m9 V7 G 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 2 d" H7 b: _' x( {% b \

( o$ \8 @, w+ m- P9 n4 {5 J: l

9 ]* Z3 n8 G+ b9 r \ vshapes= q7 P$ c5 K8 k1 u

: I" L# e' f! ^7 O

' s4 i" L. t- K9 |" M0 g   + V8 r7 R, W: Z" b% c

4 p* q! E% v2 p' i( M/ C. U: Q3 U

- K6 g% l: W4 x& S& W, x2 W9 t 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ; B( G" Z% W e: J" p

$ q. M" K& U! ]1 d7 {' r

' b& u3 v( Z: H S3 F   ! r* K. H$ ~' T T1 U1 }# W& e

* O# O4 t" s- g4 J2 Y# H+ I

9 d$ U. V4 z, `" @, K. Q0 [ 基础信息 ' N2 c: g5 j; o+ S/ W

- X4 X3 B4 F U. I; b1 k2 X

% }, }2 W" k3 ^% ^0 D 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ; \6 \0 \. J* {- Y; x( d$ ?

1 X# y+ L9 Z8 v7 i h$ L

! H8 T4 |+ p: T$ e& { vshapes= ! Q! V, d8 L o, o! N- G0 h

) [% p8 p5 h! L4 p

8 c2 H9 a1 O: Z6 ^) v1 p. A   2 @. j: ?' Y! F5 m0 \# T/ B

2 k/ D c5 @6 L8 P/ b

$ j1 D- S3 X+ D4 l( Y$ P 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 : Q/ \5 g( Q3 v* K

* R0 L3 E: u. e8 c3 a, T% V+ y4 ?

1 I5 w, `$ l8 f: h" q vshapes= $ q4 c: W8 E6 h: J0 S

0 t( V$ g- n& r& O& }' a

* a5 a0 p) J6 e# _   6 a% D, j) s6 m0 H! H/ d

5 k0 M6 ?" q" w- N1 t$ ^& I

3 ^! c5 i" {* \! F& d+ k 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 0 {, L/ i' R) i

# @' D, i( w/ `4 a6 R; F- _1 J

, q: K' h" V. Q' ^ vshapes= , N# s+ c9 i8 _( r4 i1 M# a

9 y5 e' J! Q. M6 [' G K

% M% c+ B. N5 A. u+ |: C' N   / P( O: ^" R. A4 ~" K

3 o7 x9 j* S1 f" j) E4 p6 c4 g

, T/ L c7 Y. f3 P 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 0 P% m9 L$ j$ h C/ P. H& b

) {; Y! I; Q( p5 X4 W

, o0 A7 T+ r& h0 G vshapes= # P$ {4 c. Y! t6 L. b: S

* h0 A, |5 @, |$ j, a2 G& n5 Q

& Y6 E$ l6 n) a" g   y' L `0 z5 I4 C

& Y \* @, t9 C4 p7 p2 x

6 p# H$ w$ v, F 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 2 V) H8 }; _2 i2 ]# w; }( m

) } i4 C: [% X+ e6 o. p8 m

. }& w8 L; U8 D- ~2 B vshapes= 2 R+ x; c8 R3 j# [( V) I

5 ?9 ?6 C1 e* K4 b) v3 N8 s7 ^

* i& z9 X- J O3 h   0 l' l, l/ L h, U

. T/ T- U1 t4 r7 O6 y8 Q9 b

+ i B7 Z7 n2 X* Z4 C$ R   C- U7 z" h+ [# J4 d5 X

5 H$ }* |: t. b' j$ E7 s5 S

) K4 E! [6 W# u: J/ M 签名信息 7 x$ @; R& K: K9 O. l

( z' ^* d6 m* p" n5 H

! C& h' ], A% F2 G/ k 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 2 t( c3 ^- s C: A

' H1 z' D& i( X+ o1 O z; `& x2 S" t

Y0 A1 o e+ @- ] 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 0 r4 \( N2 G5 C1 R% Y. W

" O. _' `% T, P4 i. u( u) Z

4 s% T9 k# l: t" r& Y% j androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 & `8 R# w9 h- p

5 a5 H' n$ H8 w! ]" e4 Q% X

. W9 [! Y, U4 U9 H( l vshapes= + e0 x I( P: M. o! P7 P

$ [$ d% f4 u. a+ \4 d: Z7 B

$ Y( H- [" g3 P9 P' H   ! A, f8 s2 i1 ?0 C* ^! d2 r

8 I, j# i( I0 r+ w8 h( T

2 t- M0 O" O3 ~, H' H+ W android签名的数字证书的一般都是采用 X.509的国际标准。 - g2 t- c6 I4 }" L

0 m) z E% H% f. G4 I

1 |' V5 Q- s5 t2 G. i. s5 m; { X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 9 b& A4 a0 W' S' X Y

$ y* D6 P: P- t9 Q" {2 P

4 T4 P' W# @" Y F: E5 d4 S 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 - t" Z- y8 w# e2 u, r

8 T+ I$ w0 Q$ P5 J, ]( A2 L

2 Z- Z5 n$ ]7 ^9 T1 Y" c5 M# u vshapes= & u3 ]/ A3 F2 u$ a1 N

2 W$ j8 p% d1 ~. A

+ L$ z* H( ~7 V   q+ [2 i. f/ g2 P! O

: j0 G3 }$ P. C) V% q; r: d- j

) C4 K b. e; d; W5 M. n 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 & |2 e Q0 d2 U: Y& |7 w

7 h2 w: ?- ~% O' [; Z

% P2 `" A5 g$ ?. @ vshapes= \" k+ t# s; n7 N6 }9 s

' K0 r& }- e! ~" i1 V/ W: I

/ \; c' ~' f- J0 T6 U! O " |) H6 Q+ P) @ o

3 Y `* i9 s3 T4 l( I

/ c8 q" {8 K8 O   * @0 \! g& n% `7 q

- X) a9 }# T! k8 N

! r' a+ M& e6 l! D( |2 n0 m 权限信息 / l9 {# Y2 r( c1 x) Q

' z [, H0 R* ?1 J7 K6 v

. r8 s" A2 L/ l% I; i9 J; z 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 9 a" N# n; v u$ d5 ^

! j+ @! g. K4 \+ ]+ o

( ]2 ]& a& B- v( ~! H android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 @& v5 K- d0 v8 g6 F8 r

4 Y. j7 ?3 E, L3 k. `7 ~

- I# E% Q) W2 d+ J' _5 n, p vshapes= ) A% U' l- R2 g" j8 L; j

6 W" ^% w/ V; E2 k8 X% {

1 u' x1 K& ]$ t: v& {" ^: r   " w0 H( x8 P* W1 ?4 B

! e+ f$ T) _* Y" r8 d

3 l6 S, N$ w! n3 Q2 K 下面对这个APP的所有权限进行详解下: 2 |- U# R4 F8 Q5 ?7 d' q) {

3 k6 {( P% J( U$ K% x

* d! {. C4 [! O' z" j android.permission.INTERNET :访问网络连接可能产生GPRS流量 , i7 |3 }) ]2 Z0 n

) e' E0 k" _8 G* h( [2 {% L9 ]9 T

0 B3 L R, K$ x& Y+ M8 V- k android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 * ? _ i* Y) l. i

) w0 P9 `" m7 S$ Y

: a7 Z) j; H6 L: Z android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 0 L- ~) L/ H4 L

+ g) Y1 Y% q1 f ]- R( i* y' a. K, l( X

0 @9 Y- V$ ~* `; U3 Q. A android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 $ x7 ]( Y$ `- O; r) p+ {

& ^4 [9 `' J% N L* ^3 {, m6 u

4 m7 B7 b% j) d& _' w: z* E; h android.permission.WRITE_SMS:允许应用程序写短信内容 5 _) Y8 s. W" Z; a( `6 M+ g$ J- m

: ?) w/ j4 w0 U9 ?' F% D* y4 M2 S0 |

4 l( [" ~8 ^ h; { android.permission.READ_SMS:允许应用程序读取短信内容 0 Y1 K. y8 k9 @" t: q

6 J D7 l: c7 q4 {

0 Q# j C+ F, s S6 k9 x android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ) q) B! M" A% W: ]& G

( v( }- C* k2 d6 p' L, i

$ N$ \% F' v: P1 k3 I android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 $ Q0 M; w, v5 y; ~3 S* }5 e( v9 I9 X& {

6 ~* v* K9 V1 V, h% V" [

; y0 T. m) [* I B9 K android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 : r5 m9 C" \; } x4 N7 Z

$ V8 a H( X$ e9 N3 U

$ m4 F4 Q6 |2 C \: h* r android.permission.VIBRATE:允许振动 9 W: i! A- b; a6 x: r( h+ [7 F. v

+ m3 u2 c p( s3 f

9 C1 C; Q- o* s1 E4 H+ g. a android.permission.READ_LOGS:允许程序读取系统底层日志 9 _# d* W/ Y' h) w

! F1 K" n8 x4 Q* g1 m

3 i9 y- ?0 _! | android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  9 U1 [- n: P6 N: \4 J7 p) f6 \* `5 D

. n. r5 E6 ?2 {5 y3 W& E

5 O B0 N- C( n4 k) ?0 M2 K0 k" q   & ~4 z0 A) L9 w" Z4 `

/ Z6 [+ g& P8 n! d" }

* U7 O* l1 K5 k- v( z 功能信息 * F& J3 K* F2 O+ \& i" J; T

2 u6 ?9 q# q1 h6 |. [

! ?6 j8 u/ [" J9 U3 s9 O   6 C: l1 \: @* R

& h" ?7 b* y' V+ { T2 B

+ T' z. K+ ?. n" _5 d1 u 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 6 W2 X! U3 ?( G0 w

# w+ j6 |/ B- f g3 j' f

) y: K! J" i5 F: I* c Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ! |1 o5 v+ f, J

. Q6 ]& V9 R4 T( X) i0 \3 \

7 B* h% L2 O9 N9 z7 H- }( J m 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 c i; \8 X. E5 l; U& z# A

! t. R- ^0 E) }6 W

, g" A2 |' _7 e9 _ 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 4 g# R3 P6 I1 `7 z4 D

& w; D7 U" {# G3 k) M" j" F( {$ A

1 c' m: M0 E0 Q: N+ R2 v: { vshapes= - q1 C3 ^& g5 j) _) Y1 p: p' v7 q- Y

3 {* u# h, D: N% s) d' {

5 l' b$ _, S- V; O5 j, g1 ]3 ]8 q   4 H2 K, r# F5 }

) X) {4 V; ?4 g- H4 @+ e# z, U- `

" q1 _" U. q/ ~2 [! G- k" M 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 $ t- A: p4 e/ e" Y' q9 N- ?

: H% u: ~6 i5 ?. e' c

4 u0 I1 m+ x4 s5 I% ~ vshapes= 0 T9 V* U: b" z4 [1 Q

. a( Q/ W* @4 G/ B1 A0 l# r

1 {! W L% s3 y+ L+ i, H1 F6 z8 @   * E/ H+ s/ C2 M3 I" v& g

$ n' s) u$ X7 ?4 t. F

# m( p# e$ ~- b/ b: [7 @ lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 1 a6 I& a% |, w) w+ I) Q7 y

' h. F# Y( }- F

5 x `* [. z" @" j2 q vshapes= - l5 [8 }: ^6 l5 x. I

" ^5 I: _2 f& P/ f2 M4 l( Q

4 e0 S p* q8 t3 v7 S9 _# S! F' w4 ^ 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 9 _; N, a. _" G0 k l0 M; t8 n

' Y& h/ b$ m( G2 C3 W( t

8 [& K" |) I9 T" [" P& }- I) j7 J! K2 G vshapes= , `( N- n" S/ E }) Z

1 w6 ^/ G- t5 D5 W( d4 Q0 \9 B* W

: v1 n' b3 }5 A; G" i   $ l5 ~. z) [. y. j5 o

9 y7 D# _8 O4 Y+ ^0 y1 H( c0 Y$ ~

5 C l7 a+ m2 O: F7 E p6 Y8 ? 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 * S: W" A2 Z5 ?

. P' x7 ?1 \ R C/ {, `

: L* e- o- C M, d LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 + K2 X8 X/ v" x$ h) |4 I% \

# d# W$ }2 _! y5 z( o( i

# l j) w" v* T- A$ @3 L4 i 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 - Z& J# |! {4 J, s: n- c) K4 ?

) J* E* |8 ?' [/ O* g

# M' t- e9 G( f# X; x7 E' ]3 M, [1 \ 源的luasocket代码可以参考学习下 - O; Z1 X2 `, @! Y0 Y( N1 P5 m

: y( d: Y* N: `% H$ q, o2 j; k) D

; ^- W. W% o+ P) c! b: N https://github.com/lunarmodules/luasocket ; a# R L+ r1 \( W7 _

- e' M; ]& B B# g0 I1 x {$ s

* }! Q/ [5 o6 D+ k' F* p/ ]7 | https://github.com/fengye/luasocket 8 ~/ v& A) A5 N9 H( q+ n. T

) w4 Z. l, u8 T( @2 x

4 m( B, m1 c6 ]& x" a9 Z, b: o% s   ! E* j1 `" P! w6 u/ w- J2 I

& X$ c' N: z! o/ `2 v n% ?8 k9 l

" J/ A6 F9 J4 P* M+ T2 l- z vshapes= ) E. U9 N4 l7 H2 l- T

A$ @$ y9 {/ k8 `8 n% B1 n

- K5 Z3 U5 y5 f; h" v   0 w" P6 s. Y5 k/ l% p1 r1 {2 h

. H9 j9 {: K5 z1 d- `* Q: t$ T! q! H3 B

( H4 \# x0 {) G9 s3 W   " Z& L$ U8 b ], j. ?3 E

) |0 S& |3 A% Y# |1 T

9 n. M% _ \ z 总结 * _; E7 C1 K7 H: @6 Z" q' a

3 O+ [3 W) i& o

8 ]; r* M' ` Z 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 * V3 }4 W5 f& b: G

2 b* g. A+ `6 w8 g# P+ \2 _

6 W. \9 G. N3 J' I# W 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 3 t2 L& k% t- V8 c1 O% f

' ], W4 M9 Z7 B9 `0 P7 B. Y

) C7 [+ @1 r: s- ]+ S 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ! b+ C7 Q& d+ w0 F. S. N$ `1 Y

* G n; Q0 E3 y( Z

. ^) h3 [" ]+ r5 G( z 结束 " R0 B2 T4 y" U) a3 _

* G% I E6 F$ L" b( k7 @ K* w% P

/ o. x j( ]' C. H  【推荐阅读】 3 k8 h/ ?6 h/ K) P

; D9 V3 r, G) _3 y( H

9 w# U- X3 b Z5 b( R 对吃鸡APP的分析 $ _: I: j* P- D& W( a, v

9 L. o/ P7 k; H- ?- i% k, @

1 ?" Y/ i; l0 h% R2 i 你需要了解的APP安全 & U& x+ v1 n j5 M. c

% \3 m- p q: H( w8 w, W, n7 ]

1 a3 A) A$ [8 J1 t% m* y2 b2 i# | 你需要了解的APP安全 . S" D& i6 F- I+ [: j7 Z5 i

& J* ?( \0 p) P( b

5 \ l( }( i/ z7 ^+ N5 _3 P1 J   & e. S, a# L+ L: t. j" h; T# g8 W: T

回复

使用道具 举报

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

本版积分规则

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