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

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

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

( [. w5 a* |8 z- H% ^& H2 B; V2 a" m 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ) L" U& H4 q J# x z

" o4 K$ j+ d/ [% k1 J

/ A- N% x9 s$ `) l) k0 q& ^ vshapes= 7 [+ ]$ v& ?; L; g1 |7 W, M' d3 W# R

2 ]; T8 R8 y9 @3 g+ b

( V& F+ g: y1 Y& O9 @; f   1 w3 j0 k, y6 m; T" ]* h$ J9 J8 |

$ z+ a& o( h* V9 ]% E

+ e' l: Z) p2 p3 L5 w" D/ U 下面就以开发者角度进行解析下这个APP的功能的实现原理。 : l" J6 `' i: Q% ^5 E+ `% r' M

/ G' h: |8 G! w. D/ e5 |# P

2 {* |( g, \4 i/ `) \   & ^) a7 X' J' T" r2 I! F

3 M# E- K1 M+ }% K8 Y

+ C) {# {" Z5 o! Q 基础信息 0 }- \) K! s1 F S0 M% u# x

% ~* K4 _3 E! z6 ?

. k) i2 m& A' t) O& y 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ; s8 I: s& z+ j" ^

3 v" h9 m1 e: L" b& c( ]: z* N

/ G. N8 _3 s: V$ p) s, } vshapes= % e+ ]% I9 C/ e# @! d- {: |

J0 N* C2 w1 c2 A* u) `# a0 L3 b

) O* }: H: d# }$ F. A o   . g! v9 e4 U$ b' R$ {, p

# h5 i9 D- Y6 a

, s+ T! ]; G3 G9 u1 ]& Y# x 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 3 F9 N2 H* y% Z

3 _# U* o& [ J

" f* L8 D1 Y N$ k5 W# `# ~9 L9 ]( x" R vshapes= ' i$ _2 @' q1 B+ p8 ~ A( o* f. l- _' [

% [8 z7 |$ N& K; [

% K- L: f0 C' h) j   1 G6 ~9 Q" L* c2 l! o& i

* `/ I p8 e. x3 d8 h

: F6 {. O% Z. h- u 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 # F+ Q$ F5 E& ^' m# e0 u! f

$ e2 t# c5 e% E% @) u5 {! ^

% [ |) U& K0 t8 {* @4 z! e/ c vshapes= 5 ], y5 d0 X5 u9 p4 V) F( e. v: |

+ |, k+ X; L+ K- w$ x5 K! ?) r7 m

0 [$ t6 M1 M2 P x2 V   ) k, L4 {( S& y! b$ c( N

8 x7 R3 j0 ?8 M2 W. L6 I" D

( W- E& S7 ], Y, l P/ f- ]; N 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 : u+ P2 a/ P1 [8 m% C. F {

) n6 K0 D! Y8 v& b( p4 C

) `+ H" {$ z% O3 B% z vshapes= - L- g! X \2 n3 ]. p/ y

$ y' |6 v2 d2 s* L( S8 C! e

* |: x2 ~8 W2 P9 G   $ B$ k* c" W6 d' C) ]' @

; J# }) k8 d$ F7 Q" q5 q- @

* y; R+ H; F% K! ? 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 x+ c4 C: p4 F8 ~# j9 c, u

x( S9 Q* @. o! ]1 I0 H8 Q

; V ?/ }: i2 }1 t6 t5 k vshapes= # ]% @ ]. {' j0 y* Z3 f

6 w) S% Z( k' u! i0 c6 u% ?) P

) }. ]% b$ S4 D; K5 H   7 v: C& }) F. b# F1 v

+ ] r* i3 ?/ d/ N3 r% o; I7 [

0 ~) j, \+ v1 Q5 V   " O' l; ]* N" y' i* r* d

% e/ G- S4 |' c+ |/ u$ o

/ S9 \, J, C6 M1 ], Z1 q7 m ?0 W' l 签名信息 4 F4 k* w/ z+ X0 j

, [* U8 i/ s/ w8 X

& D+ f% @) _( t1 H 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 . [& }+ f' @, d. i

2 w2 A5 M* c6 o# w

) E9 G- K3 Z! j, L1 s; e- e* }8 Q7 z4 ^* y ` 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 7 d* W6 f- ^/ f: ?1 K0 N: u

- b: G4 ]# [ u, m

7 [8 D: v: `( \9 S- C androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ) D; A0 U# j0 c% h5 h' Q

1 G! v0 o' `% _1 E

+ G0 `: C8 h9 E0 k+ l$ p0 }4 N vshapes= 6 D g! N) K' i

- q5 |, h6 i- I& H' A

# P2 P- A8 L4 h; P" r   ' Q3 p7 @. K6 c) B% ?2 v6 O/ g

7 I6 x$ C, F$ c0 D9 ^) R

6 G4 J0 L5 t2 Y) ~5 @% E android签名的数字证书的一般都是采用 X.509的国际标准。 6 s6 t/ W9 t8 S( `: M- Q9 x

?/ A' X/ v. O& m

. ~( \; q$ R+ a1 C c X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 & x' o% G, r1 R3 z

9 W$ g2 x! R( Q: r2 L8 s. B1 s

2 c1 m4 E! i3 M 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 8 O2 d! x" I ]% P# }

d( |* I; `/ a3 a( A0 R

8 s% k1 W; D# c9 X! A/ c vshapes= # k& U$ ~, o; N5 J8 U2 t7 e% a8 u

/ O4 ^$ m6 e1 u! ]

3 Z- r$ O5 C9 g: w1 E/ ]' H0 k   # |: d0 |$ S/ {! c2 o2 |4 n( }

- k+ O/ I( s$ n1 Q, L

/ X% p7 u s2 K, Q1 v. z g: G 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 * ~- t+ M0 ]* G& i! }3 Q" x

* C* \9 b+ ]; m: ^. K

4 B1 L: `2 `/ P vshapes= ~3 i' ]2 C+ f6 ` M7 ~

3 b- C; ^8 J4 F6 d

! Q1 k- e! E: z , U7 ^& R8 `' \ N& x

' T% u5 |4 w/ I; r2 P

' j' \8 j( Z* K7 `: m   $ O" A8 [+ x6 I6 ~: c9 D

" k4 ]% y* q9 r# f& p" Q7 A% J

7 H' R8 [% D$ A3 Y1 K4 W 权限信息 $ x' U. ]( j! N& A

% h# s6 O' P1 k( O

. L& |8 S* m9 ?$ J 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 1 X+ N# Q' ]" m# R& T$ G" c

( e) z1 h9 F. y& d( F; s

& R" P4 r1 C c6 y+ f android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 $ E9 P# V: e( C6 p Q3 r6 m

9 a. g1 z9 M/ Q3 [' m

2 E: \$ b# H I vshapes= ; s( u5 t! v6 T7 X H3 o1 q% a

2 e1 g$ Q1 {' q9 ^: d; z8 h. p) y+ `

! T: C0 _; m. y! h   ; b. `* R/ s+ \ y7 j# j3 n0 b. ~1 ]

3 ~6 ^# y4 F, ]

. S. M+ f( f* q) x2 m5 h 下面对这个APP的所有权限进行详解下: 0 C" S4 a- M# n$ l' _, @8 y

% a/ E% r' Y: n: E6 o: ^; k3 X1 `

6 V! a7 S0 Y. N* R# l3 T& @$ U5 ] android.permission.INTERNET :访问网络连接可能产生GPRS流量 % A9 g3 }5 S5 ]

4 U, [; ^% B5 K' s( }

8 l5 c0 h' m0 P* x android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 i( U# Y. [2 |+ z$ ]) D

* v- f: L0 \/ M, Q

0 K) r/ a0 u% w# a android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ; @! [8 C; f. ]; j) T/ C! Y, c

+ m$ |) |7 B Y2 ~5 E [) T# V

3 }" X- ]/ } D" i8 @ android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 8 G' I- J1 x8 z! F, P

, N+ [( t5 k7 M) T7 J6 K7 p

$ a3 n, y, e$ P# r5 p android.permission.WRITE_SMS:允许应用程序写短信内容 # }% t" d& {+ r( ^

* I: Q& ^# `; y8 X: Z: l

5 U5 O9 K/ F0 C/ ?. s9 I android.permission.READ_SMS:允许应用程序读取短信内容 0 m+ _8 a6 P" X, N$ C# `% } }: p

2 i+ T8 i1 l3 N& k) P2 A

: B! R: J: E) s9 Z android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 . E4 v. R! _5 [

9 t" |8 f( X% W" U

& ?. S3 w6 k( K. Z$ `% R: o M android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 " e# R1 {/ f5 \6 F

: ]! O, ^2 E; L

3 C! g1 o" m( j$ B+ U8 v android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ) R" k# u6 g- ]- ]6 j

) v1 R3 a/ _# g( A

7 K! B8 i, J m$ o android.permission.VIBRATE:允许振动 2 u: g/ }: n* H8 j

1 T* a& G! Q+ j# R2 A' g

, j$ b+ U2 D$ k android.permission.READ_LOGS:允许程序读取系统底层日志 . N W3 ?! d/ [+ [

/ L% W! R$ W' a2 h1 h7 ?4 f! M2 \

0 R, x8 N( ?0 y2 y6 s m5 F4 L8 Z$ u android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  / a. d0 b4 _9 E/ L

* x3 ]5 i0 D h

3 r5 z W; T6 q# [4 H   8 R+ p, ~4 P: g7 G& k$ t

. V) H0 m% I0 s* [9 _& u8 u

4 ]( t% E X( L8 ?( H6 N' Q 功能信息 2 @ v1 K+ b! H$ x& |$ z

$ q5 I& B+ P8 h' {! \- R% f

! A; K9 @9 A% I0 R- ^# P   * [ O4 `7 y; d* v" C8 @- m

% B" h: e; v2 [; U

7 `$ ^ |3 i" j1 O8 k# x 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 8 l" G# [! H( @* E, x1 F# d

+ F* z) I! f/ ?, ]0 r

# h; f9 x r2 q, B! H' s T2 m9 R Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 7 C0 Q# C: ^- d# ?

+ N% I: \' \. r/ q, M

F, R8 I* f& o4 d6 Z$ ?' B/ ] 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 8 V9 N! K4 h' E. A! {

* Z r7 Z2 M7 y7 L) c3 @* K

. E6 S6 P7 f. T/ s 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 6 k+ V0 y$ _' ^

+ ?' ]3 [' M5 b, c( `: Y" f0 D

Y* }+ O3 O! Q7 V2 N4 r. @+ D vshapes= # D) B+ }! D" b9 N* e

4 Z, D) t8 r3 T8 h; \& k* Q

* {. Y, A* i7 [   ; ?1 { e6 O( a6 W: W* M+ _" {

. b; x% n" M+ i" t4 R

, w9 L/ E; |8 m0 K 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 7 G% q* y6 A1 U/ }0 L6 P V! ~

7 r3 M8 l8 L! s

: c4 F* e% [9 e! g vshapes= 7 T j. g% R3 z8 R6 C7 v

) t5 u. ]0 d4 t+ P

( g3 ^2 _* Z4 s   / }/ \: @* Y4 f3 V7 _

: _$ o$ x X3 e/ f: l7 X( H. P

! G; p8 ]# F* `3 u6 D& x; W lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 % v8 x- J B& ?( y' k& p

0 o6 Z" C/ n/ o7 o, O7 _

# D, @5 T6 x6 _+ j. [3 h vshapes= 4 r$ D% C6 B0 w7 L" v: t" q

8 t) k& t5 f I: V4 B* _1 u' t! ?

3 z* n! p& B4 L' H, w# x 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 2 F' L" I8 {" R5 C1 a8 W6 r4 B

+ l% D( m& d" I& L

1 u$ A" C2 \4 g k% c9 n" a% h- p" d vshapes= $ b& B. A8 f# t8 m1 K/ j

7 ]1 h$ \) F! `! e) A9 L

3 u! |* x( m2 q C0 j; D( u" r8 @+ y   ! v1 `6 m8 L7 e

. `: m9 g$ _. m5 A) q2 A0 Y

8 i; P8 U/ ~/ H0 J* b6 h* C' ^ 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ; E' u7 A% z0 }! [ f

. N! Q" Z: _: c* [8 Z: R7 v

+ F8 s5 Q7 F$ m1 s, x LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 . l5 {1 \5 Z7 a% Y7 p+ {

6 A5 ?4 z: ^) w% O9 ^0 V

$ k/ t2 x, P) \ 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 3 F4 C+ G7 j- d: |$ e$ @

c/ o9 {8 w4 K j* a2 r' v$ C- d* @

2 t5 B$ J7 @! T T6 Z. ~0 ^8 T, G 源的luasocket代码可以参考学习下 5 s4 ^' u% G4 O3 V" P1 S9 X

3 F3 v0 a- ~% i( ?! L4 v) A6 \; @. h

7 c3 C* [4 }- h( F1 M" i* u https://github.com/lunarmodules/luasocket : h) o- X7 p2 W2 V

0 f# z& Q% f0 x; X6 S

, Z% c4 w/ L: z& q: b https://github.com/fengye/luasocket $ R8 Y7 k- e7 w9 ?( Q

! S5 s! E3 V& m- T g

! o6 j& Y$ e! j4 K. C2 f$ X   # Z5 J! y. ^( t" ^0 l& i* t

9 }5 j/ P" J5 }1 t

4 S% q [* B" v) a$ n- ^: b vshapes= $ a( Y8 M! p. Q: T

1 ~" \5 K2 u8 j- B( q( e

' e9 f# P5 F4 K   ) g& Q! H1 U( d% e) e% E5 s0 M

X3 G, H7 f0 r2 X; c @) A! \+ H& ?

! C' N: ?4 Y) U$ A4 t; G   " ?8 ~/ |, P$ H: D+ n' e

1 I' G( K, |) v" h0 o

( Y( p3 m$ C+ d 总结 + `% q7 A5 N$ i9 c( X

" [. q& G1 e5 A( q$ j/ \% Y

; ^0 S: v5 |( s3 v/ ?/ S 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 9 t( V3 Y; [8 V" i7 {

- e9 L8 @/ q p0 U

& a6 Q) M1 [) R" ^# b4 u 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 + [& K, P' I( c; i

+ h0 G# ?; [4 [! E4 Z( b/ H

7 _7 }8 [8 }% ^& c: v: e' A 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 " `1 s& r, c# A9 G3 X

- K- q) h* _! H4 P0 W/ X

5 M; d1 p: k3 m# g6 H2 ` 结束 , R" R. x) n4 N3 U

/ I6 @9 ?3 `, B& v p1 o

/ C. K- Z0 z7 m B/ u/ m  【推荐阅读】 ' ~% R/ i5 x F2 m- @ ?

- |0 O1 O: W7 |9 I

' [ S" S8 Z, g! P) Q! o# A; R 对吃鸡APP的分析 8 o- F% U9 ?& ]6 N

5 C7 r" r0 ?* p$ g

( z( L3 L* T7 i 你需要了解的APP安全 4 M8 M# H4 V+ p0 K* N* m* ~- P

- n& K h2 `+ M; P% N+ E+ i& f# `$ S2 e4 m$ E

1 n g) j+ c; e+ m6 G 你需要了解的APP安全 {2 y. S1 }4 `& L

, L K; i* l) k1 K, D

. I( v# |7 p# ]3 {' F% \: |& s   - k7 k: ~3 ~+ p" g I( F/ X8 |

回复

使用道具 举报

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

本版积分规则

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