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

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

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

& J b# e# ]: V0 l' B6 R 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 + t: b! P" ]5 h, D: j. C/ b" B# {

4 r; y" O% h4 e4 z3 l x- w, y0 k" k

6 C7 [0 C7 s! W5 R6 T, n+ @% n/ k& a vshapes= ! j; I1 `) ]$ ~5 N

9 O' f2 J: O2 d$ v+ Q! j5 P/ u

' z1 W, l+ p- M6 I2 \   ' ~0 s) N/ O; F( k ~

6 ~! M, J; K% \7 k1 _9 |. t6 ]

& {. E, @+ x) t/ U 下面就以开发者角度进行解析下这个APP的功能的实现原理。 : `2 ^: _; e. W. D, e! Y# Q; T

4 Q* a6 Q2 M1 i+ P( k, x2 y$ M8 U

4 G. d" d9 f( H) P4 b   * z# h% b0 C4 Y# I1 e

& S% {+ F8 ]# p

' R5 X& ]& v1 d7 J9 R3 V 基础信息 0 P6 B, ~) H% c! c+ L# B* \9 X

* h9 u H! j3 e' W) w

7 t: D% ~* B) s) k) v# c) H 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 7 R8 }+ L) y. h; _

! r, W% X5 D% I5 P6 A' h

" K% D/ A. H# @% x3 N- D vshapes= ; ^8 C# x" l" k- r3 V" |4 O

B0 {4 m& d: t) A& U- c) \" F

" }( E$ g! {2 c; ^+ Y, d" O# J   , u$ v1 R7 @/ x4 v5 X. ?* {

1 i6 h. C. C* F. \3 g) Q

Z y, b+ r' G# p7 S; O; l" ` 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 7 X/ K9 ?3 ]4 l6 j' Q4 e0 m$ R X x9 Q1 r

$ q$ C* H6 R1 k0 S% D" ~

6 \! s- Q3 K2 l8 | \. M vshapes= . _- }# `" A3 O9 O

4 V& Y) g6 u2 S( D

& J- L: M( x, R' d y4 O" K   7 |5 J/ y4 \8 y. C. p

8 W+ M2 O+ Y' k {3 E

# I6 E3 r" T+ ] z6 c% ^7 c 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 2 V% b6 E- v6 z

( Q/ D. H" C7 L% H( n6 \0 ^

2 i1 m- |9 H1 X; S1 T& ` vshapes= 5 j" o8 K4 U, H! r2 G

, r: {2 _2 V0 Y$ c+ R0 U0 A& E5 L

& a7 i: l$ _9 o8 Q4 \   8 E$ c; n/ S& r; ~

# s1 u, s% }) E' a

o7 y) Q# T1 K$ W& \3 ] 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 # p/ x! O& d0 Q" e+ \7 g( ~! t

6 u5 r; t, L4 A/ U$ S( v

" i I( P$ o0 d, J' K. Z; d vshapes= ! b! Z& v4 l. a+ u1 O; {

- T& U( v' ~; e* }& X

& F7 x' R7 T; h. M: M8 x2 M3 p( l p   9 v* Y* J5 s2 W9 E, a% j

# O- y) x2 E }) g+ N) N

* ^; |" F, p" u0 ~ 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 5 q. |% u8 S; f, o2 I

4 I8 D0 L; | Q, |; _9 U

6 a G v0 c6 m vshapes= 0 }5 X r$ E, p1 G+ q; k/ S

- u6 C: l9 | p7 Y( x: [: A- n6 l

3 e _3 z' B/ _3 `' K   $ `' N1 i3 t* u6 e$ y

% a9 m% ~" H! D# N4 o

# }2 t" b0 G* _8 A   6 e2 f4 w5 u7 D0 Q, h" M/ C

3 P& E! Y1 E, G- E. `4 s

: A- ^8 o8 J% j4 T 签名信息 + w. U0 J* Y! W& S

0 X; V: z: Q! R I3 S

6 J1 O7 B0 O% W/ Y 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 * S' R, Z O0 y% N

% R x2 k I2 P& x( R) C/ n

' X+ Y+ T4 o' W7 e( W1 ?, _ 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ( r2 I! Z* D" H( C+ s( D- F8 h

3 t# C; f. N& D) s

, \4 X5 ?2 X: y/ B0 b( w* d0 N androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 . R! C4 r# [2 F! E+ t: I

4 o, u, }6 x' O' D1 S

8 d1 j) A# J S+ S# V) B vshapes= 2 F; }) d Y8 u5 A) J7 C

/ x9 I1 H/ ?# l6 i3 |

+ ~$ I0 `& \% b   4 W# |* l0 }3 m; X

O0 o- L7 E( P/ }( h" ~6 ^

2 r" {3 ~* p2 n; i) H* u android签名的数字证书的一般都是采用 X.509的国际标准。 + z7 D+ }! o( v; g' f+ t# T( E

1 R; _$ Y* G) l. ~

4 d" e, E8 v, J5 |$ J9 K X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ! u3 R- R. `+ d

0 y: b: @+ ? Q* {

$ ]5 t6 K+ M: N2 D/ V 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 8 K) v" a# I! @- V V2 V0 ~

' Z) k$ [9 a8 p- a6 I9 L9 O

) o0 ^. X* Y2 }: M) W! d: |/ T* t vshapes= , `+ Z# y" y6 V j, {

! w" h: j' L% C2 e

5 N( A1 ^6 f! ~5 _: Q# u7 n   9 u- L" O: q5 O- x! S1 u( N3 K( B

8 I) {6 `, N- F; k# `9 e

j; m2 I; Y$ n4 ?, F 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 & G2 y" ^: g; M+ J

4 j5 N) \3 |5 E) j. [. l4 R

) O1 F& N1 ~/ u vshapes= , C* `$ b+ h+ ~" k( D4 H

; t) q$ F/ Y: } e) l2 l) E' \# @$ @

# }3 s' h7 [- q7 Y) j 7 ?$ d6 W+ V0 Z2 P! i

' ~; @% Q# x$ Y; w6 Z/ U

. U- _; ^: K9 F* C   0 X9 B$ { M! q5 o$ S

* Q P# n7 ]( A: o; b

4 F$ R3 t2 C" o3 F- C0 f 权限信息 5 a, ^" R" G& n0 R3 |" F

- S& N* Y' g4 l1 j# j

. c! h3 T) ~% B+ X$ ? 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 8 u# L! N9 `7 O% Q; x* k8 D0 x

' C# \; ~4 \, E

8 A- D7 J( f; m2 u android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ; ]7 v) h- k. l b# X- u* B

' f7 G2 }$ s& {' d8 d

8 e) p3 c6 d3 W: G- I) x vshapes= 1 @: [/ A2 O$ P* |' F7 O

3 o( _1 ?( X" x1 N( v

. x. C* p" ]1 c. \& m0 x/ t, M# ^   ) p" B/ v( x# O( P4 k8 p+ d0 L- h

: W! Z3 [9 {% W

9 L2 `* F* a! R$ ] 下面对这个APP的所有权限进行详解下: , ?6 M) w. L3 \$ A0 g

( U: D3 y4 E3 T

3 k( L! U0 \$ Y( K android.permission.INTERNET :访问网络连接可能产生GPRS流量 6 U% P! b4 N$ U" T& l

4 c0 g, l! r4 i6 e

/ g+ }% o/ Y/ ]9 c! q6 F- F4 p A android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 , y1 t8 I- r% e% B; ~" \

8 W* b( n. p. M) P; b

5 K$ b8 A: |0 l6 E) d android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 * r9 S+ A a1 B8 _) r

; G9 c# P" x1 X% D% f0 s7 }9 N

. _% ]- g# c6 ~+ ?' |% W& k' J android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 5 |, u/ n( s* Y, B* O) Y

6 Y) a) _9 ^" i1 Z: t4 u. [

2 V" l4 {9 j( j0 T2 k4 F android.permission.WRITE_SMS:允许应用程序写短信内容 : E8 V9 I6 @* f& }, o

1 U4 t* ?4 B9 ~, P3 x3 r9 w; V) i2 h

0 |8 f" S U( j' [" [4 x android.permission.READ_SMS:允许应用程序读取短信内容 : n, g% b" [, Y

) ^& C, @. ]7 z( c. s8 t' |

* V& Q/ U' {; X# D) T; b, M android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ' E% X q. n5 t0 |0 a

7 C6 x1 b0 v$ a# Q( @' f. y- Y! M

2 q; I( t, M4 b% b5 P9 M- l9 F android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 4 V$ P0 N+ g/ `+ K& F3 ~

4 P. `1 \- Z2 c V) X: }

5 K5 _8 ^" L. I+ n4 E1 { android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 1 z8 U, U( C7 N; `

7 J P& S$ @* \0 h/ J. |

$ V i z5 @% m1 ^ android.permission.VIBRATE:允许振动 6 c- H' _9 O# C* R; j

+ X q- U" |$ Z# h1 c5 W

/ x$ R' y& `0 { android.permission.READ_LOGS:允许程序读取系统底层日志 4 |. O6 c! Z, ?

/ }+ }! E9 A# r* _8 R9 ~$ r

/ I' k& F4 _( M7 G6 } android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  # C6 w8 L' f) N* Q) W4 s8 |

) N/ {/ D# h" V; X

8 ^6 h" b+ F- p( a) s   p- c3 s) Y4 F7 r; d7 Q

* D1 K6 {+ G- e. R8 s' a

) C& p! R0 l, y4 C 功能信息 8 g" t, v8 k3 N

8 u" p6 H" @# |# f! Z

$ @3 u: t, H+ _0 }   # Z% Z1 I5 r- Y3 p* Q, X% F

2 A3 L V) _) R( n% a6 R: \" j5 Z

, o6 h6 u" f3 I2 @- d4 Z 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 % d7 ]( [& `8 X3 {/ K4 x

5 x( A N& U3 P: F0 Y( Q, B

# O7 y {8 k$ X/ F: U o Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ' \) H- r- _& T. x5 E& c

5 z) R2 H! f4 h

% A( x \ m) p 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 : @. ?0 i# L7 E) o

% e1 P. z f3 H# x+ t, ^9 _; c& a

2 g P4 |) h- t, p/ t1 Z0 @ 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 & Y- L+ W8 q+ B4 ~$ N: K

0 ^( @) F# q2 m

' A* \8 Q5 W) j9 M. U vshapes= ! Z7 O5 |( V; B- s+ p! j

% `4 K# c: ^: B

! g' ?& V: Z1 W9 H- P( |" k   ! B9 }2 \8 b& j5 m5 f) r

' A% s/ I" _1 o" \! D E

: j8 C* L3 ~% {" b+ u( S 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ' N, e2 u% E3 p( |( a. V$ C8 w

4 b9 h$ g, @$ r6 s: f3 o

& }4 c% @; |/ B: M vshapes= % M3 n) X) e' S2 A8 ?

4 v5 P5 i7 h/ \

: W5 Y& h" O! A8 F   0 G6 q- [3 \8 x3 l9 I% k, U. N

0 G p. K' s4 M0 a* ^6 q

: s+ i7 ^, d- q/ P4 A# i% f& C5 u lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 & i4 m; ]' V$ p

$ q8 {' {' m; L8 }/ J+ N

4 Z( O" [' O2 `- I( X' o vshapes= % q5 F+ ?4 C/ B0 \

' R0 v4 k) c1 G) j

A4 ^. K- k$ l3 C 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 : F# C8 `" b7 n5 P2 o1 ^; r

3 e! r7 E" x( w6 `6 F

" } G7 X2 S' X/ `6 w vshapes= [8 h+ D2 P) Q

0 k7 A! B4 `8 h0 X# e' s, r

& Z6 \0 k8 W' l- L3 `+ M   + ?: q4 m. D6 y% U3 c& z

/ I# x3 f1 j' F% S9 Y0 y

2 m( }. N9 W. Y% M: D 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ) Z L. ^9 R6 R A7 U- R

! Z' r. c N& Z0 s# f& j, G, K6 S

' G W/ T: @% c LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 2 k7 C9 `$ {" R2 B

0 D$ Q* ~6 z, l+ V: S

5 B7 a: ^: K4 R& Q, ?7 ~( P( c- N 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 : g; A7 ?. w3 U% a$ e

2 }+ Q& y( v1 ?, _2 X7 k) |& ]: }' C

8 x5 z/ A' U8 c 源的luasocket代码可以参考学习下 ( t: P" b8 S7 }. ~+ E

4 k& V* C- z5 t8 @

( s% m& K7 g& ?! x; F7 y& n, F https://github.com/lunarmodules/luasocket / I$ `% P' x9 n# v1 [7 \

m" b0 C( m! ~: t. Y2 B

5 A+ z: b& N" ]; w% ]2 g" C https://github.com/fengye/luasocket ( w& @9 V7 k/ O# r: I l2 B. U

# \" `9 q5 l% V$ Q

/ E0 R7 L. B4 `. l, \5 l" k6 ^6 W% W   " n; I$ i1 G4 p: [: J/ V, ]

( n z( E) a1 x+ F

) k- p% J9 g9 M Q+ D8 v vshapes= 1 [8 \& ^" P$ b

* B2 i1 M, v- H( F3 X

. S/ L: m9 J$ j) i/ S1 a   3 f9 b9 x% G5 b+ [- u

1 L( r ~3 i5 S3 u1 B9 X3 |

0 g5 R( E8 V* B2 W1 j: w7 H   4 n3 e9 n0 G, d( @4 u

; s+ V1 `$ @; G' } Z1 M

5 A7 y! @1 V M6 G1 \- s 总结 9 |/ \' r m$ O+ Z- d

) E6 Q. Y; o' Q( m1 d f0 r

; Q% }1 k) j: l6 D( U2 L. A+ ]) A9 ~ 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 - `' i% E" {% \2 o8 G

+ R6 ]3 w. w6 g6 ~5 h' L

6 J# a5 w3 s2 O5 A. n8 v 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 7 t& u1 P; d% o

2 a5 f" O; l+ W1 K

h2 t, u* |4 T8 A 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 7 o# U: l1 Q$ R/ b$ H

/ Z. u- V& O% F) ?: ~1 A5 J

/ |! s' E2 k3 }9 w) i H4 o" H' z5 Z3 M 结束 1 i# T! F W" j: A, {. S l9 a% {/ C

7 k+ I4 a/ j2 r3 F& ?

" n% q, t! L4 G$ f0 X" M' i  【推荐阅读】 " M3 \% L* H4 r$ x

- }$ v8 ?! ]# o8 Q' u

( R M' @: J) Z$ M; R3 x 对吃鸡APP的分析 - I" z4 N P: E! \4 l

& M2 R% N }8 d# v

6 i% X# o J4 K% R/ w! o0 V+ Y 你需要了解的APP安全 % X; w9 f" N0 z% ?% W( Y

: k" s2 P. d& b, j& l" A$ X

+ ?5 M8 s) P/ {( S9 u6 O 你需要了解的APP安全 * v6 r+ P! w& T; Z8 Z9 N

0 `/ e9 M6 w6 e& \4 v

' ?0 a5 ~( J$ O: e0 L4 J8 F b   9 [6 g: v+ B. ^- G

回复

使用道具 举报

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

本版积分规则

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