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

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

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

: A' ]& E% X0 i; ^: q7 l! x% n# k 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ) j$ c' I5 b! v) w' I* e) ]# Y) S) X

0 }. Q! R) F' ^- t8 k

2 x; Z0 _3 a+ T w vshapes= " A4 T& u" K/ ]. N

6 P: v. S8 ^1 Y3 s

) a/ {0 c0 X6 p! L5 k5 V   * P, f3 L# w6 y$ @' q

- a; i: k0 y d- M K

1 N j8 {$ L- g& } z4 k9 r. M; U 下面就以开发者角度进行解析下这个APP的功能的实现原理。 6 ^8 z4 u# g+ M: R$ w0 w% T

! s, F- t% H% J/ G% q

% i; t/ n& K: C" Y   4 W; S1 l5 V* J5 |) R [3 g

; n* E' ]; u& U; b

/ T2 r* f* U$ q( N* J 基础信息 " r( T3 ]1 x8 p1 T* z# M7 C5 C

" t, \; |" V4 K

" B, }/ ?2 s7 v, F1 x 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ; F- y% U& A- ~3 x7 j( J

' r9 |% ~" J+ v; K0 m* U

' H7 v: g$ T5 a3 @( r vshapes= 4 M/ [' O6 l. a. Z+ ?5 X

. J) m/ I* l0 Q: f. M

# u6 [. J- h5 w. A. d   # A4 \# V* C: H0 R! A( h. ?

) \6 C3 z& Y! v( I2 [) z

, I/ L4 f. D/ y, l' ^3 l0 X3 m8 X 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 + z3 b. v9 I& P3 i" [6 i5 C, O

5 n" Q7 c; f, B) ~9 N! m

7 I w7 T0 q) \4 h! s$ g# n vshapes= 1 T4 ?9 X) N+ b

! }. L! g' M& x! r

% n. H9 a2 _ D2 B: P a! l   2 J5 H+ l/ R- _# ?

- j7 y& g5 k& n8 G/ t& D

* M7 |2 f9 M) H, P7 v5 [ 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 0 ] i- T) s# L/ e

+ }: E1 g) h, o* g' s/ C

0 n+ N: @ z5 c9 Q) a5 T vshapes= 7 P% z$ ] a7 m- X- w O

9 l: R! _- v0 u# K6 |6 X* V- C

1 B$ R. c: E) i5 c1 y   / A* }( X; N) _

) y) C( s7 F6 B9 r2 W, W

% B0 X' o: W" ^9 q7 O 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 % P6 A! ~ o" r) f$ W: z

; `" k& S' k5 l

1 Q! s* H% s8 n) h5 w vshapes= " f0 f/ s* S% s+ R0 Q; y- a2 v

0 H0 g- r7 v7 q7 r

/ y8 K* A# v' v   # L- @/ c+ F9 ^" n

( R6 x9 {8 S) r0 i! D1 G/ h$ ^

4 V6 m1 B) L0 g0 Z2 E 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 1 v; j+ M6 D" ^% D! V f# Y M

& L5 v" Y/ N! s* i4 ^8 S) |

+ g& h G5 r$ R" ] vshapes= 6 f: Q! U. n( M7 }

. A: l. y1 }; @" y

: V" a) J& [# k4 _! ^$ b   & g* |8 G- N5 O

, }8 L: B# K4 @

$ H! Y2 F# _) m7 w' u2 K" Y |6 L) ?   / D R) b8 u* R6 m! }

* I6 h: ^- \! o

7 H$ Z5 ?$ P! \" {+ c) ? 签名信息 4 j" s. j, }; I% _6 ~. }

- {, M. k2 H; ~# \) H

+ b6 ?+ I0 ^5 s1 u! g. Y6 a7 D 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 - N( q9 e; O8 h4 K% l, a, U

" A4 E0 [% P, \* L& b( U

7 z& n3 d; B7 J/ r* ~ 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 * D; N1 A( t$ @0 k: I. A' t) I. e

7 H7 n, B+ R5 C3 A8 y# K

0 i9 X, P3 n8 E1 G$ |. B' y- l androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ) _0 \' W# o7 |5 ]2 H& l0 V

- [1 l7 | ~$ X8 W+ f

3 q, d) f6 p, y, ?% w+ Y, m1 ? vshapes= 4 p' d |" m9 P: a1 Q, B- m

+ w7 x, [' o0 I& G0 p/ t/ u! o

k' ?. }4 M1 w. E% t   & h8 ^) D2 S1 X" I6 i) ~7 J1 u

" v$ D+ q! d1 ?' s8 W) Q, L' k& A

% `7 W% p0 y8 l" d android签名的数字证书的一般都是采用 X.509的国际标准。 * M6 f9 z/ D) |1 {+ U' k8 J

& X5 I) |3 G9 L! ~1 s( b/ S

( c$ B* y& l& m" O X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ; J6 L/ J. ^' m3 v

7 m2 l ?4 T4 q, Z) `6 d8 c3 }

) y. y) J* W; ^, |# w4 { 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 % I1 q5 V* O8 l

0 b2 B% ~, H: g4 v8 ~2 L3 h+ J

o- }8 b. T% r8 [. ? X2 | vshapes= 3 u8 p% F% b* A" ]& t" I! u8 z

1 e* v7 z; Z% F$ W/ u

2 x& K8 V1 K' ~, T) v& E5 [   / D* |3 `/ u) R

( o' I8 Q% W4 e7 A' [% R# A8 p' e! H

) j6 w" E; C S+ Y- O5 H 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 $ Z' t& j! b) r0 n

/ O4 L0 g8 ~3 |& ]. q

! J: E$ ]. T& N* t( m' b vshapes= - \6 o. u5 [7 L7 r

2 t" Z$ o% D& L; s2 f

" g1 C, t/ R0 D- I' v4 K 1 G3 }' E! z$ ~. e# c0 \& r

/ ]" h% ]. n2 d* n q

" J w- [* l6 V: ^7 m- A   # \& j) T6 H7 E* v

+ h" y' @8 B$ F, _ h; J% H

, @9 O" L/ }' a% w8 O; j 权限信息 ' q8 i& K6 ^, G. Z' z3 P

6 K' E9 ]) _! P

* F& c" T3 q, N: \' c* G6 t 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) % P+ b8 c6 T8 e0 v3 q

0 ?% u. d, m5 S' Y5 Y0 q) q# F# H

( s# L7 E% o' G. V+ {5 F! f# | android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 : E# b0 R2 w4 [4 |/ E

: u; i' i7 ^ R0 y- Q6 B, o

! R& s4 v7 ^5 s9 t# E3 e/ X+ g vshapes= & b, @! C& v' r

4 R* u) M- o: C1 c9 u2 ~: h

% D3 o& \7 {( {, d9 Y" a   6 b' E1 ~! `! k0 o

3 s" v' B0 ?% A% k) h

8 ]" {" r( t& C5 [5 K% v 下面对这个APP的所有权限进行详解下: ; l- E9 V" }; n- v; `' N7 j) L0 u

' Y! M m8 B: Y8 {

4 J. N, P# U+ u' W5 ?2 m android.permission.INTERNET :访问网络连接可能产生GPRS流量 4 [# y& l4 K5 n3 b6 n( l

6 t7 B" T& [) \. W

3 r5 W1 }5 p) O+ j r9 ` android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ' g* ^- N$ T# R+ h. _, Q) ~; H

, C, G/ G& b! S) K

t( m5 _) U, i android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 1 }; }/ a( V. {4 t1 s0 `3 ]

# R7 c! B5 ?# }; O- B

/ a) J1 Q2 D7 m* N+ J* o android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 " N' n1 q3 k; L. W" Y/ h ~

, R; H+ k. \( u! F/ E: B3 H

) a' \5 v% G4 |, ~4 u! U2 W android.permission.WRITE_SMS:允许应用程序写短信内容 : g- }& D2 B% ?6 X& v! s

r6 }6 _3 @$ G6 ~# T6 d5 h- d

0 Q1 H2 Z. R5 ~0 X$ F1 c7 v android.permission.READ_SMS:允许应用程序读取短信内容 9 w, S( k* c2 K' B

# ]' k8 ^6 l1 Y0 d# ^9 ], n

7 @9 u; s, o6 j& q1 O android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 3 i6 n7 ]* g. A1 _8 ?

' X9 }) u6 w3 q, D9 E) o

) Q- d0 g. @: b! P8 V( F# f android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 ' e% K& Z7 V) |) k

2 n: ] `; F8 Z. n( e5 X$ ]

8 D( B9 @7 ^/ f! y" D+ D3 ^ android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 / H$ P3 h& [% o

2 G4 Y) l1 J( `5 q6 k& v- r

+ t! K+ s" Q; y* m& ]1 I android.permission.VIBRATE:允许振动 $ Q) y& v1 {% C) N0 h4 z2 r w! [

( L( l4 B/ `* P) E$ ]

7 X; @1 {& B8 ~4 |! M4 ^( D android.permission.READ_LOGS:允许程序读取系统底层日志 / a- v, g3 n5 X

( s- N+ P! h! m* }

" }- C, p3 h( z2 E& S" e android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  4 `- R. E3 z% o/ L! L# {: Q' Y

& Z# T0 t* @! R9 z( p" K" O

2 o- l+ D' l* S6 J U" I+ V8 T/ }& @+ v   % `1 j0 ^2 t+ g: a, g. B

. Z7 D+ v8 d9 [; i5 b

. O1 I& H: V/ W' l8 o! R0 C0 y/ \ 功能信息 ; f' D. K* U" e6 w. m

" L' p7 k1 T% E

2 S& X& `5 W, N) e( ~- B5 E, F   O; C2 ^/ z% q- S" N9 P

8 Z$ \ Z* p* r, X( r+ R5 {

3 U9 H, D( U: F' h 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 4 A' f9 T0 m( o6 A1 f

* C+ H' A; T% m8 }# O- Z

0 A7 C1 J2 t. I Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 & b: G6 ^# @; ?

% \; S m& H' }$ a' p6 X* l( \

% h0 v% r& b9 _0 B2 T& { 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 ! ^# m& g* t+ m( ]

; P' U2 Y5 i- D `: k/ z# }$ }

- C0 h! U! C5 b 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 4 R6 f6 {3 c1 \- Y

& p! z& C/ a7 g/ j7 B2 D" k

K7 i x) i M# g# W' B vshapes= ( k8 U, A; Z& o# d; j9 g

8 }6 V! s" l/ ~+ |% q

* H7 P- y. h; _   4 @% F; s1 C+ P2 U0 g- N' r

8 L- z! ]: z" I j1 i- V; @( m* X

/ m, k- A3 E' V- W8 T$ w 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ; p3 i+ u+ N# w" W" I

5 G: ^2 ?6 r/ t: n5 @

; J% h- K9 l) H, m! n+ M, r- _ vshapes= 7 \7 A' O# A j

9 k1 I$ [$ Q5 a- ?) n8 @

( x7 t$ O* @0 |   5 J9 B+ R! B* w3 {

- G7 V4 a% |. m8 g" D

& ]' @9 o7 W9 Y% B% \! K lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 6 O+ p' U: O6 ]& P) X

% J9 l3 G8 a: F

" ?* r2 w7 B9 g1 z" |. p vshapes= $ r6 l8 t* ?# R

; }& i4 Q: J7 C& |8 M0 t

0 }! }9 `/ V% X8 ` 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 / t- C0 Y& e9 e

- F. V. A0 G4 `" s

/ L! U9 Z# W# Y2 D& ]! g vshapes= 4 p" w2 ^# v' [8 `7 x; t4 f( W8 ?. M: F

0 X( x( j4 n: N$ u

e1 F9 E" W: R- l   0 W$ x1 Y0 y% A) @

6 [$ p- b0 g) V

5 k9 U) {# t$ k. N* \. w 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 : V) D% q. h) N. k

2 M- i; C! \/ Q$ `. N

2 p* L3 ~, c2 e' [6 N: R LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 D4 [7 K1 l+ q. V

5 f$ o( s8 z3 R$ k( y

9 _" Q' ^4 g' c6 U 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 ' p; l! V6 @: {. U

8 j( h( x }0 ]5 |) C

; G: x0 K0 @3 q) ~" {$ i6 y$ Z 源的luasocket代码可以参考学习下 # S; S, K7 I/ {4 a& V( m& d6 v' L

W$ Q4 y& q0 n$ m0 Q3 Q

& A; A5 P: c+ T https://github.com/lunarmodules/luasocket ; R9 O& g) g5 W5 d- `; F! ~' @

" J$ i+ E9 K4 N$ u1 {# X, v' g

, u2 \8 M9 x$ ~6 i3 V8 Y https://github.com/fengye/luasocket / `+ |5 {. L; `8 O4 e

7 [9 m8 b$ P3 Z: \3 D/ s

7 y1 }+ g! T/ M& V   ! p3 j/ {% H* V9 P. H. W

: r- b+ S! j0 @; F

: `# n; ?& {5 T vshapes= 7 t, w9 l( N% ^9 v$ c( X, U& Y

4 k& M, e4 n: O( Z) u9 _6 R

- j9 T9 q& d3 W+ Y2 ]   ; n% b% S' e* q4 h K

4 d! N" t' L. ^

( m6 j8 R' M# Y9 r+ a5 F7 m   3 y6 I5 @8 x! B: B

* Y" }# b8 t* ?3 y

" ~ r+ u, Y5 n6 [4 n! p 总结 3 A& o4 t+ k1 ~, D7 o$ O

+ t- R0 w& k8 `& g. I& e

* ?, T7 Y* Q4 k( c* O# P 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 - t; ^7 O; Y: S; d, {

' i/ M& W* _* h4 w

5 P2 b2 i3 _$ F+ l 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ; D) o! Y$ i, B% L" i

* I; K1 f% T" n) t

2 X8 v ?6 S+ g5 x 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 : L4 |5 K6 s- K; p6 i6 q Y; \

2 O O) n' X% Q( k% p! e+ y5 ?

' |8 t5 ?$ A6 ]: b 结束 $ p- g, U0 m; }1 Q" w

3 L) X/ @7 }, }( B/ ?

& x! R9 e3 s4 T$ L: e8 L% K  【推荐阅读】 ) h0 K6 H, c' G! U

3 P9 R+ ]. }5 }/ ?" G

: f1 z; r* ?3 N3 d; c$ i/ J! \ 对吃鸡APP的分析 ' S7 ~; ` u& g" Y1 {

. {/ L$ k" ^: z5 w' u. F

+ z5 Z/ ?. P8 {' Q* [ 你需要了解的APP安全 : l4 r3 ~1 s( w2 D

& v D) b/ P% d4 m8 U8 O

- E3 x; v1 u! _" _" h: `7 c 你需要了解的APP安全 # B$ s" T6 D; K; w r

8 ~/ P0 j1 @2 e) X c8 j v1 }

' o( c+ a! N0 W: E   . |7 V1 O% w9 {! x1 x

回复

使用道具 举报

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

本版积分规则

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