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

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

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

, i- i3 a6 p) v4 [ 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 4 ?& |2 M2 S; u6 W/ _ O! k

9 L& t w6 u5 o$ G' y

8 l0 S8 }9 ~0 Q8 t4 v vshapes= . b% p3 h/ P; Z

% E! P! s0 a. `1 k9 o! ?5 @

) E$ G# a6 s5 i( p   * R' j" n5 x5 |% }: ^! g+ O

) z0 d. Q& J" X$ m- I0 c2 [

) {% V. `/ q1 p# w 下面就以开发者角度进行解析下这个APP的功能的实现原理。 + v# F# d; Q% v8 n6 L Y! Z

# K q; T% k% C' ^

1 S+ t% p8 x' U9 t9 W5 v6 D# Y   + T. v# A& S' |" y

8 V \. o8 q* j) G

0 R6 P# h# `! M _, g' { 基础信息 ( ]8 H8 u! d. ^' M+ V( J/ b. E

' h4 U# H" Z4 O4 d# l; F

: V: w, P% `4 M% _7 m) m, l 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 / S$ _; e$ n6 F. z2 }, k6 z

* p4 D4 f3 e) ^0 h$ U* e5 `$ [

1 i; D* q# R- A+ {/ d1 A# O vshapes= " S; y. f$ M2 B0 e/ m7 R

7 X: g8 x5 \( I% P5 b# r

5 T& ^9 X2 T* \6 ]3 {( f! K   / Z. F- O; b* O% Y" J: ]

: y7 b4 X: }- ]9 a; c: T2 w

* X; [! U8 x: I" m c' | 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 0 @% P6 \- a0 J& a, f

; i" C: p" c. g. w

& S7 m6 r/ x5 i! x: n( q vshapes= * J/ t# ]7 f. c5 w! @/ q A. I" V

' ]- l' Y. t6 u* o* L& ?

5 t2 B* x& Z% h; `( M# a   + L4 d ~' m( N) b: n/ b" W Y

' [; h1 i; M* d- W! s4 N N

+ b# {: H/ }7 k 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 & e, p# u+ @& M) g0 I% V

- N# n1 H5 N3 ^3 w

5 \7 @* v, w' k# `' d6 [5 Z' H! J vshapes= 9 Q J+ h8 O! o, V

4 ]- e- }. g4 M& K0 s& |4 v

! L# z# n$ f+ P9 V j7 e" T" u$ C) I   1 r& |$ V4 x) h& l' t6 x3 F2 s

/ |+ A0 g9 i0 U) T3 h7 d6 G( J1 h

& M2 [! @* t- r! K( w3 t5 | 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ( A. y% P# h" v5 M- \* B5 N/ k4 [! [8 i

: o' M* t8 ^6 m8 S F

! S6 |* l$ H+ X( F, b8 D: [ vshapes= ! i; D' j& i T! g

& n, ?4 u8 y% H/ T6 p

( i- |! W! J" R" g. H   5 T: s9 y. O. B

* F1 c K1 Y6 J

. V- V* _! R( k 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 5 k6 ^) P+ T* I0 M

& A7 x9 d1 L5 n$ g

" \$ K- {7 V6 D$ a4 O5 V7 P vshapes= 5 ~7 i- Z& h. }: z0 O3 T

# H& F, i# k, P* f2 O4 s: ?

3 y& [4 f" |" Z) n" e   % U& N5 m' V3 j( q

/ t; P$ V' F2 P9 L

# ?# f' E, I$ ?8 `$ ~3 M2 N   2 }5 @! W! _% x0 g

( R( t" T/ z2 _" w

: v: H' t3 V. M( X 签名信息 m+ A3 P8 u3 v$ g$ ]

u9 B% d. _5 Z

" Z, ~$ S5 e {5 b6 @ 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 3 }4 s: T( Y A7 x4 L! O3 r' G. x6 o9 @

& g2 A( g0 D6 O2 v1 r7 U! O

, u3 |7 e% m7 M6 m0 [3 x. e' W 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 & f4 @+ T7 r& G! V5 X% K% Y

3 o2 v, g& f' S; W9 q

7 a" H3 Z7 c0 D. I# C) ` androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 6 q7 g( Z: c8 Y5 p% a

1 P: T( |) T, E/ e8 \" f0 H' Z- z

) @$ U/ ~! _7 o5 c, ^+ Z# E vshapes= 7 t/ o B1 F! ~* Q

- |1 R, i0 S( F+ E9 w

! i4 u* t- w7 v2 q( r( }0 V4 {/ S   ; J% a) U8 t# c; J' F m

2 K; `8 `' l1 U) V b' }( ^

4 e0 c! e; s: i r; K% x( [8 n# S android签名的数字证书的一般都是采用 X.509的国际标准。 5 D( G1 X0 Z4 u, C

& j! N$ `7 U4 _, Y8 E! ]" F! k

& E/ t2 f& \; s; z. ~ X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ( L) h& ~. j+ p# @, w% M& w$ h" x

1 ^0 L6 y$ k3 l( s' A6 f8 n- o& P

+ }, l O$ K% J# H) g7 j! t( j5 L7 k3 r 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 1 z9 C) i' R8 T) ]/ u/ ?

6 N" g% j1 k6 \. E+ ]

3 g) i2 Y) X+ K7 n vshapes= ' ]8 A+ V6 r5 a0 e! F

7 m( N+ G6 v3 v3 v

% _( M* ^- J* I- L$ ?+ Q) u% C   ) |$ M2 _ L: I( I. s; @

( n# b" z; S5 A6 }5 j6 C3 t! j: Y

N) J( G/ w7 G; `/ D 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 * S; @+ Q: N) y, E

2 Q# d8 o1 H2 [0 }3 j, M' m, t2 D

; K C1 G: o6 s1 F- R/ Q: V, y vshapes= 7 p1 [) J: j$ t' A @2 V: ?* t

/ q$ k5 p( m n

7 y9 n' o. V& ^% t8 g* E5 [( }1 v 6 c$ l- F' e# h7 z3 {7 J

* E5 ]# _" } {+ N1 \% F

" d$ u2 f5 B7 i2 M8 b( s; K   / P' E# T L# X, z0 ~) L! u9 s

0 W/ o# f# @1 [) A: |( M# n

t8 [1 W0 a2 H, E 权限信息 - z, O- Y4 U" `7 V* ?1 g$ i

/ t+ p" i4 P& Z- Z( D

9 X* ] `6 }% m F2 I. M/ [ ^% D* t 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) / }1 o. D6 v" ?5 Y; O+ _! l% Z$ B- v

- m8 m& {7 ]( E2 b1 o7 ~

* C8 W1 L* \( W, E/ T8 O R Q android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 $ k" G5 X+ w' n( J

+ o: p, Q0 g% H& |# E, o# A. ?! {

5 r( P, C: x7 f( L1 _0 ` vshapes= 1 h3 Z# G `! b6 }4 Y5 _" c" A0 @2 _

8 s. n$ b0 \% G3 s0 U! ?& q& M$ U

) g, r( `8 V$ A; X   1 h2 p F4 B1 s# U0 D

; @$ U/ h3 m( s) n) h& l

5 w, E2 Z b; T. v( s% L 下面对这个APP的所有权限进行详解下: , b z5 [& P( G& W O

4 h4 l& ~7 v* T) W

8 Q. J9 n2 C n# H6 h android.permission.INTERNET :访问网络连接可能产生GPRS流量 4 f0 l" Y$ n2 g% U4 }- N

" k8 J* f+ B: M v) }& G# q6 R/ [8 N. T

$ Y9 k. p9 E G8 S2 t5 P# \' @* G android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ( b" J! f/ S$ |: U2 S* d5 X$ x

& w4 [1 ?: O! L5 |

" K% F" A; v& @% X% l7 _ android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 9 f9 _( h; }4 s) u0 e

0 R* @7 Q3 v" L; @8 |( X6 g

8 n" i% _- F5 Z* i5 U android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 8 W+ F' L* C, F% R% d

9 g8 y9 ]8 P' p/ P. c& F3 N

7 |& a6 j8 E7 s android.permission.WRITE_SMS:允许应用程序写短信内容 1 A- z. e z2 |

. P0 O) c$ j- d3 _4 v F

& H* e6 i- h: Q. I/ j android.permission.READ_SMS:允许应用程序读取短信内容 9 V$ ~/ ~. {* J% u' s1 e8 Y

* e" i; Q' K' b0 ?

+ M$ I4 z' p* R0 a2 ^# A; U, H- J1 G android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 + F' G7 ~9 z( t8 T

1 e- N7 N3 z+ Q2 _1 U

& R# i9 o1 a7 S$ X% V android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 ! S2 H+ P# d5 g9 ^; I, ~! }

/ W; r% H# y Y! H4 v3 a) z9 Y

0 d6 w+ Y) ]) X9 s! p0 P5 g6 ~ android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 5 y/ c- W) X( I; w5 a3 Y

- T2 M, Q! J$ l

1 O) g( |! C [" E7 v" ] android.permission.VIBRATE:允许振动 ) m# D% O& G8 z! P D+ o

; d. @( e" Z. q/ X- x4 @% ]1 l

$ c5 V# k; { O: i android.permission.READ_LOGS:允许程序读取系统底层日志 / Z+ U2 T! k j, A- P

0 X" a* h+ R5 i8 k5 ]0 N l

, \% s- T j- Y$ N3 C: K, P9 h android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  7 x, C& D8 ^9 l) n* C2 @

) u2 T# p& u1 i: J* u4 u% F

& e7 P9 E6 j/ `   4 W# H" ~2 l& G8 p8 W

6 W( X' C) I I+ [$ |9 `1 c

4 T; c% G! }4 i3 } 功能信息 3 _# X) y& q; y m, i5 i

8 f8 G# @) p3 W

, ?% a4 d9 {; P: v   ' W% |2 n' A4 g( ^4 x

( d [9 K: K6 ]& A

4 a& b7 E ^# e s5 ]' \ 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 7 }# ?+ {5 k+ [5 T: f. `

4 S$ ~ y$ t: Z+ h& w* K

5 f1 g, s5 A# j Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 / C) m, B% f G6 @: g0 s" f4 B+ l

3 D5 i, v- E0 f( {+ [5 }! Y

8 a2 D3 m) r" Y) c9 I6 o* ~3 u7 N7 l 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 - c# l& W. d- h4 }& z- p

, d# h1 A/ A X

1 U$ m7 D& F* y 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 9 k m( ]+ g6 ~

) Y$ l3 R* I$ Z

4 ~8 o! F; |+ L, Q$ h9 v a vshapes= $ @5 j- {' L; O& Z! v5 T0 |2 a

2 c* k" s4 y5 ?

9 X+ @1 f1 E) c7 {6 @' ?   1 m) |4 m7 y4 c: @

. r% b0 z; x, |

) r/ o g9 q0 i: T# i 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 2 X* ^1 D3 _( a, [1 r

- X8 v9 a" p" i9 p8 \

* V. E3 r. e- N2 J4 M vshapes= ; r6 S0 F5 l6 O

! \. E9 e+ N7 V0 M& H( N0 u

+ G v# W4 E' C& @   7 X w. F9 O. m: @" p, \% E% G5 e

& r4 ^$ @4 T' e

3 w1 F0 U6 \& \ _ lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 8 w2 m, p- { U+ R& R

6 f3 H7 ^/ w C

3 Q) d8 Q# x! G0 P vshapes= 2 b5 t7 y8 @3 U. k; Z, y6 M' i

, F' k- n( D, n1 B/ I5 R

+ T* ^# o! g) _$ o- m [ 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 4 D! x/ M* O9 |7 _2 p

0 R8 p, v5 I" Y, C9 f8 } O

% V8 D9 o7 V& }2 J: O% e vshapes= ! ]) u6 A) C1 C$ h R! v1 S; r

- K0 q8 I$ V6 c R

2 _6 n2 d( M3 `7 s8 z A   / V5 ?5 k" Z0 F- w$ L6 {

* x+ }/ a! {! ]

) E+ z# I2 U* b2 t& ~) A7 ]/ b 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 8 D4 k4 q1 x8 q

% E- z8 I1 ~/ k2 k4 W5 t* {

: n' Y2 P" ]" t8 ?4 S: f3 I LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 ( y1 N) q' J- d7 ]% \( K

$ Q. ]- Q% f. Y: e* [: T6 e

3 H, T# N6 w, Q 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 7 v5 v2 Q0 D8 z. I8 ?" F

# i% h' L* {; ]# N9 Q% U* b

: D) C5 w- |5 ^. [( t$ m; s2 d 源的luasocket代码可以参考学习下 ) M5 w+ w; \+ Y4 H( {. B1 ?( I

$ v$ F4 B( A+ p6 p) X8 ?

4 |4 |' M! S/ X& X8 u' X8 { https://github.com/lunarmodules/luasocket 0 T" k( m6 w, `3 \

1 I6 G! o9 f- P$ F1 A

" a. c+ B' K9 c8 T2 H* U: g https://github.com/fengye/luasocket : j7 x7 N. w2 k) S6 }2 n* V

, |8 M1 K5 M" \4 v5 f

1 b& Q* x3 }( z* O   ! Q0 t: t0 J- T: u

+ i+ H- g3 g; O0 n0 t( N) ]3 R

/ z) }- T$ `( b7 } vshapes= 5 y# p! ]4 c5 u; P q

7 d' A: N+ ~. N/ s- ]$ _

3 _6 L; F, G2 J   8 P( F1 C* H- n! g$ W( A

0 Y7 D: I% W' W/ @) _. h

9 Y9 W2 P0 E% j: C; r6 [* W# }   ! T+ U a0 H, v, Y

0 c% L* M: q3 F7 M

/ h0 b2 n1 q2 u# J 总结 4 N. s) b2 E8 B8 ^ s) u

. N; J" {% ^6 s5 J. [

* v0 i- U9 e+ Y5 {/ A- D 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 4 m% t) P1 x% N7 Y" Y

( K5 T* [! a2 D9 A+ k# S- I

/ N; F3 D# x7 h$ ]( g! Q( J 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 2 w! I& m9 r. o9 o' ?

! ^8 L% U; P! n8 I G' w* V

; f9 P; _+ u; N. \- ~) w 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ) I5 s" \. J& s1 W

& R; ]7 j+ M0 L; l- c" f' S

& O6 I* L) F# ^- Z 结束 2 y' V X9 X. H9 O$ t; C/ N, ]

! A' p, }$ T; L V

3 s/ O. g" G8 a5 Y) d& `9 Z  【推荐阅读】 4 _; k) w6 R/ m9 ]1 g+ F# S' b

7 b0 P# G) ^. g/ x" S I

! I) b9 {0 a* a9 r 对吃鸡APP的分析 ( K+ X! z, c- g' {. d; a

" d' ?8 G0 ?* u6 G& U. j8 r# l0 C

2 X [" d, N* ?# d/ m; S 你需要了解的APP安全 7 s* V: l; |+ Q# S3 @- L0 R- r) }$ A

+ z' Y! S3 j- n; F8 V( I

9 C N1 e- |! k4 A# y2 m& S9 I6 p Q 你需要了解的APP安全 1 }2 a& \. G3 Y9 s3 \& H

`9 `8 p. y* q0 ^6 g

) L8 ~4 ~9 f1 _   ! [: g! m$ X5 Q k/ ~# A

回复

使用道具 举报

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

本版积分规则

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