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

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

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

8 W3 c/ O, ?4 m' F8 @ 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 2 y W( @4 ~! P9 c

4 K3 G# l9 ^1 T u3 ^

6 P* f5 q% v5 j0 F$ T- } vshapes= 6 q# c. @ _+ N/ I

1 C3 d9 }% v; S% T' d! C i

8 G' G7 `0 [6 m   ( h: V' G% c6 h7 G' {

; K8 k2 I: I. ~0 S

* x# m8 F, Y; p7 r- Q g" a% c 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ' b( @( I, V, |% ^0 W$ G# R

5 Q0 t) o) q9 j+ k/ f

7 o, F! K% J& X2 o0 A   6 B) \( i! B1 w q3 c1 K

1 @5 k+ f' M; W, L9 l

, T( t3 @3 v- e+ I. P1 }' Z/ a 基础信息 9 b# @- b2 w& G* _" U0 S7 D

4 }5 @) b/ n, S* k8 Z

% S3 X. n0 |# M7 N 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 * V3 N* s* t2 F7 V4 a

: k9 q0 r+ @+ _" Y7 a9 J. k& e* t

$ j3 u3 a2 c* C# p, _7 U8 J! Y0 y vshapes= 7 ~4 Z' S& T5 m

. [+ D* _' R$ ]$ W/ {$ b4 l+ d

7 [- D, x {! F- X   1 n/ }3 ?5 M, n* _" G+ M' U: B

( k7 f! ]' {9 l0 [1 C

- f* ]/ ?# q" K0 f% U' e) H 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 : l$ t. e8 r! c$ ?

6 c4 ]. U5 Q8 O0 A: l) Z( |

$ Q q: v: ~' _: i vshapes= # q! _3 B& X g+ s

6 V3 |' Q$ k4 l/ k9 V' H

+ z7 U5 h' {- P3 s+ O   6 |% \, W& G$ G, h& {( f

0 ^) r" W& i: J# e8 Z

- x3 s9 _0 y* ?" g1 z2 E 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 $ Z" N) l5 w; R

. Q9 ~) O8 I* _, n7 z' `0 j& Y

& i9 I* |: u G" D) j# f3 X6 ^ vshapes= 2 ], z! v: N: {! E5 n, _; O

% A9 K8 H. m% a7 W1 T. i# n$ z# E

5 H- K0 S* B2 D, ]' Z! k   8 \2 W7 ?# G# \8 q* J7 L

' x4 j O7 @! |' j; x

2 q5 w( ]! ~) k; ^% [9 r6 | 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 . b. \$ ?; d! O5 C8 P: i

) r5 q, T: L% h

V6 A/ U! V/ s ]% q vshapes= - S; t7 ^0 T1 t& M6 Q" l5 p0 M

2 a! n% l9 x, E

, a6 A% _1 W2 C! A8 }   6 Z8 k; D; |1 ?

3 A- |: Q9 l" |* b- [

/ m5 Y, z/ A+ ^' @ 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ; w3 u5 Q: S0 c# ^

1 i. T' R |, F5 [8 X: |

& h' A! f2 n7 i3 @ vshapes= 8 N% o' k8 W& `7 o' p

+ x' p. g+ S# ]

- W5 K! {/ e$ |, _' E   ) {3 C: Y- \( p( q1 v {& q

" R6 B+ s2 M+ D: g( q0 |

6 D" E4 F5 {$ z   ( B2 |/ W5 s" x$ s

. D, J: z9 Z4 l4 f: l4 f

; i0 f" m. N* b" F 签名信息 * J; L( q, [$ _) v: s, M. V

3 R5 ]. o. L/ I7 W! |1 R f' V

: M# v; o5 V; \2 \6 F' v |* P9 M 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ' H' g* e' K8 V: @8 X

2 m* @$ L. U2 v3 z+ ^: _5 C

2 C5 R3 B" E0 V: u# E* I 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 5 Y4 C* l# D4 i/ T9 _4 M

6 }1 k) J" z; K8 F

; d6 B; i/ s! B% Y, m" R! X androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ; X! s+ c# b' T' Q

: _( y/ P; ^8 Y

* X( z$ ~$ |7 F) } vshapes= " w' [( \" |& f" g% A7 ]

& l- t. J7 Y2 L# C' f

" c( v2 R; K( i6 H   t& l1 `5 ]* m* z8 u

: ] w- x( N5 R! [5 v8 C

( V& f& M/ J8 |; {! v$ r9 z3 n" `/ u android签名的数字证书的一般都是采用 X.509的国际标准。 & r) q* `- |: p

7 g! _1 h% K6 Q. W2 @" x. e% K

1 k# z; ?5 f/ o% r/ U- i/ K) I7 H X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 5 ` S3 g+ V: q

; P- _% M9 y- Q* D

6 m- n% B! k6 y' y8 [ 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 ' o* o2 @8 L) s" A

2 Y' J0 g B! `

7 I5 d" Z- Z/ N$ D5 ~$ x vshapes= 6 U1 `* O" p! @7 D/ s1 }0 _$ ~) h

5 G6 s) J7 @6 [4 u

, h: G% A$ C# {) [0 L# L5 ^   1 ?/ R& r6 j1 w! [

( P+ R" c+ q+ H+ }: Y" G R

: D/ h- I1 H6 ], C# I/ q; _1 r4 k7 ] 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 2 Y9 _2 x5 X' v$ C& N" n9 I/ R

+ Y$ |) O! m5 A/ I/ [0 T e

4 o6 @- |: V7 X/ J& y5 e vshapes= & x5 `: x* c2 j# t

! G( E& ]8 C9 x5 S

* E7 E$ i' K- |: v' b. {; N& K* A/ o n+ c1 ] 2 P- u% q6 J1 a' Z' J @- A

9 t8 x- |5 Z8 G$ a0 J& b

' d2 n7 `8 l+ ? C1 A2 R9 u   $ [7 [+ E. `4 t1 b$ }+ J! N

1 Z$ ^9 i- W" y R! X

! `1 ?5 A; p7 X 权限信息 " [0 X# J0 G9 H6 c9 V& d" K9 _6 t

* }- |" _7 E4 h

, U, c$ o6 W! { 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) Q7 F, ?1 o/ R3 ]0 C3 [

6 \, m; Y' k: d" Y

6 u1 m1 b, @* T D. H5 A5 X6 `& P android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 - }- v5 X2 g2 O& N' y9 V: i

- e0 b/ `1 [2 ~. N* B' I

4 t$ C" ~4 Z# a. F: d& V$ ^ vshapes= 2 \! E5 M$ f; q

- R4 E' s) ^+ A& l" j' \

0 p: l& T7 y0 a( S# l5 ^! Z5 N   " k4 s: J. Z0 [4 Q: b. ^5 L4 i4 l8 a3 h o

: v% t& m& D \! y

& U2 C' J! L! b3 N }' @ 下面对这个APP的所有权限进行详解下: # `) v/ w4 ^+ D" c' T/ f2 r4 P+ y7 W

+ |% q3 N8 P% x/ U8 E

% \) z; Q. k! Y; _3 n( j, G android.permission.INTERNET :访问网络连接可能产生GPRS流量 7 h7 r* V4 T* b, h! ]+ E

. ]" }* N. N4 c* E D; e) r J( f; I

5 q& l& K) a7 h3 A1 J android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 8 `7 {: n# i3 N- F, W5 |

- e$ N/ A) U- r# a7 i" O F

2 ~5 t- `4 `2 U) w1 S android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ; N4 X, B U& D; u: f5 j

3 k# g4 W/ k; W! y; @

7 f/ y& A9 p; ?8 h1 H android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 7 S3 \! L2 ]4 B3 e

7 r" y" D. d; R

9 Z$ j8 \5 K, w% a1 H8 M android.permission.WRITE_SMS:允许应用程序写短信内容 ) E, N* |. A; \+ w# P [

/ R8 m0 ^4 ~$ G% u/ Q6 o

: W* u' v6 a2 ^+ {7 X android.permission.READ_SMS:允许应用程序读取短信内容 0 D: |7 ?: O- b4 l

- k! t. \2 M+ ~7 {( J6 N* j; |$ G! S

* ]( l& ~5 x7 l3 L android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 - _; m- w8 k. S" C7 M

& I; E: F& C; P( ]5 X* `

+ A" L: {. g C2 q+ ~ android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 2 N0 `% ?& p4 ?: p& d

: v6 F8 V2 C$ m2 q- \& x

% T6 o: d$ _, P: D android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 7 I. j: `4 o/ h; W) E2 ] _; U

' ?" A8 J2 q# R- \! @* T( A: p; F6 j

0 K/ h0 T) o+ P- {4 ^ x7 n android.permission.VIBRATE:允许振动 & N \0 _6 W, }* p7 g. W y2 T

- J2 m* V. {5 _! u0 Q5 Z

# \( |/ L" ~8 Y8 _- Z android.permission.READ_LOGS:允许程序读取系统底层日志 % Q4 c$ e; {3 n- [) x

3 q, E8 A# I: f5 S; }. z2 M# `

/ a' }0 B8 O( I android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  1 D# r# n$ E1 }4 Z3 R8 a

$ [4 y: ~, y; E# m9 f' T0 ^4 s

5 |. k) V' L3 F   5 H) {; J o. I/ c. p

m, |: J# V! U7 m

; z/ r) G' h+ { 功能信息 ! v4 O! ]4 Z" z$ d7 ^4 _

! k, x0 r% o* o" {( t

- N3 j1 L4 D# P d   9 A: k. f3 U, e6 ^! V

0 I x# Z- u( O0 G s

8 X: N8 I& g) R) i 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 " M6 B, t) b- v8 E+ h2 r. C

. }! C$ d& A9 b) m: T

* X+ x. J) J2 ]! x9 n, L Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 : F( w9 W8 G) N0 v1 [

9 Z$ q1 V$ g7 y- z$ z

3 N& v' @% V3 u( ~7 \8 p9 p; o7 [8 \ 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 ; Y( e0 d, Y: W# o b+ u

+ U4 o; N/ }+ O7 q& a( a

9 d+ T: ~) f6 |3 K 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 0 ~) _: k. _" C: w- ]. @

! o. F: S1 U4 u: z( r9 E/ q2 b

7 D+ j; O+ f1 y1 r vshapes= 5 L4 J9 E- s+ e6 I

9 |6 K! D6 j4 Q5 [+ E" R6 i

5 I- N8 P1 g& @9 y. V   ! C9 l1 u: }9 l. ]! X. T% k ?" s

9 P" l& Y- {4 |7 U: J; Q l, A8 F

0 c% {. W% L' Q: S! u' c! N/ E e 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ; P7 t- J* f- w5 u3 D* G

7 [% ]9 o$ X. t- I0 d8 v! d

5 i6 G1 j H$ z1 P+ C. z# ? vshapes= & j2 ^6 z# c3 C+ F- s

9 P( ?: S+ i' p: ^4 n* m: l

( L5 s) d1 z6 {. `2 N8 `+ o   4 Y) \+ g; D2 M" L1 o

% T+ Q3 d& V& A) d o/ F8 y

. ~6 U8 K- A3 u) ^! Q$ J0 v0 |7 t lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 / Y0 {# ?( c5 Q g

5 U' G! o8 v# G9 h: e

& f: v c' x, C6 F" u( s) d vshapes= 3 u9 ~/ ?5 c0 n% v

0 p0 I" g% V' ~" l4 Z& {( p

3 {4 D( D# E5 C1 V! `3 g 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 " P3 V+ G; b0 I& h/ t1 z b0 f

6 X0 I: I: E' A" k/ E5 C( x

0 h5 g, P n5 F; R vshapes= ) A( z+ f8 J+ L& |, A" M! _

7 J4 k, [* {) ?# e8 L' V

2 w' `+ s5 Y+ O: L ^# n4 U1 \" _   $ W- i- F! u1 a. E! `. d

3 X9 n$ T% K- v( k( G6 ~' E

* ^3 Z- I P, P, V! s* p/ M- ] 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ( g+ Z. ]9 R+ x9 [

' Y8 ^( S( C& ~0 z

1 {/ f) S' {- I6 {9 Z& v" M( u LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 ]- |" k% X: w

3 y0 s5 r2 y# t

' I7 X# x9 h% F, M/ p" i 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 ' s' X0 b. D8 A( p* V; \/ ~; k

0 n. M. u3 B/ g. N( r

2 Q$ f1 [* t( q [ 源的luasocket代码可以参考学习下 % I3 l! V+ g: r6 f9 }3 D2 \) W

& p/ h" r' `/ O" U1 R" f" P' Z' C

- {$ d- i }0 P/ d# Z https://github.com/lunarmodules/luasocket : B5 \ ]* ?# j3 C/ v8 [

4 x" u* e# t8 A1 S

* D+ n$ @0 d: }$ O7 J! d& @ https://github.com/fengye/luasocket $ `: F) i& L7 |

% |2 y8 f2 {2 U7 q# ^1 \

4 @$ `! J. N! N# \, Z' F% Q; i   ! x4 O% {) ~4 b2 E8 z- E: h

* \% _ D0 ~# g; e4 @

7 n/ R# ^- b! W+ ~) z vshapes= & E- g) A8 x- Q

4 q: {0 U8 @6 v5 p

- B' t4 E# A$ B! p+ M- i2 s8 v# q   - H2 e" X9 h3 `( |, v" a$ v

3 N* V# x: W" b1 | f

" A; G9 I: Q1 `& ?/ K7 S* `" I   6 {2 C+ W* G8 V

2 n! A/ E( \0 p' X

* Y5 I) x& X8 j0 G 总结 j7 }' K0 C' A

4 M4 _4 x0 e5 }+ _& i6 [5 e

/ {8 {) \* Q5 h4 l; J2 @$ v$ ~ 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 . p+ F7 O( N, e: Z

2 w8 C* }1 Q7 h7 d- }

) p7 V2 Z' T2 m8 s. X4 n 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 x1 ~+ v$ B @

3 c) y8 _5 }7 n6 A

* a( B- V! Y V/ e 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ( B0 ]; t u) y9 \; Z* x1 L

( o$ H9 w y$ V4 i4 Y; T7 Z2 u8 M

4 |) }. P+ ~( ^! }( z! R. V' r 结束 / B0 {7 p( R. e2 ~; H

! A( }' l/ Q7 T

0 a( ~; t7 Y* l C' H; G; \% W  【推荐阅读】 5 M- U2 F% i$ |9 `; P0 j$ b# `) W6 ?

& ~- q; ~7 U% {9 b+ w

; l# N t3 {9 n& A" O# L- O# k- g 对吃鸡APP的分析 $ ]$ W# E; I) H

) U2 h+ I( }: e- M% ]

, r, N5 ]% _0 M7 \6 C 你需要了解的APP安全 8 _& b1 z2 w, v7 u! |& R( W

4 j0 E5 P5 y; A

/ ^" ]7 X% y" t 你需要了解的APP安全 " ]1 {* r- t/ e6 o" C' m5 @3 p

- S& ?5 ?0 r) J4 _8 Z

0 |8 k# _) K* ]4 E8 \   ! [* T& ~1 o7 Z5 q$ {, }3 X

回复

使用道具 举报

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

本版积分规则

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