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

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

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

+ V1 s5 J" V9 z5 O 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ! v6 R! W8 L8 h. a

) m, `) M0 l4 k* i& a( O6 i8 U

+ Y$ ]9 R% `8 k' `: g$ E vshapes= + i9 E0 R! P' Z l0 S$ L

' b* @" U9 s5 S [

e) ~( A6 q) U' ^8 e   " G6 @6 Z8 _% D3 O1 }8 i

$ b9 [4 P' L9 R% D$ p1 _1 m, e

~6 k0 r, r( S7 b/ | 下面就以开发者角度进行解析下这个APP的功能的实现原理。 1 o, X( D6 P$ V" ]2 D

9 h1 Y$ A( [2 [/ s% c* M" K

- f3 F6 p5 i: o+ Q   ! X C+ L' R4 h; _3 r1 a+ T

1 }+ {5 C$ b& ~! h- g. r. x6 p

1 @* g O' O; e' N 基础信息 3 ^5 W9 J; V' _ ?

- |% ~$ C+ I5 X1 i

3 }- Y" C+ b. i, F1 I( Z. N* l4 b 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 % \8 m0 _& `' r3 a" T# w; Z

* d$ M8 Y# N8 r& o: \8 v5 x4 k+ P

6 N/ y4 i3 R8 i$ A vshapes= + J% H$ k7 j. K$ R3 |' v/ M

) B$ Q# \' ?' ~' c- d# Z2 Z$ F

5 J3 t. G2 d) Y' t3 b1 q: p5 F   ' A6 i4 z0 \* C: ^

& X$ ~! @: P' R4 w E* j5 u) j

' v6 O' l+ K1 i L7 K; e 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 - A" \* f( p7 g% O( `6 b' j3 `& w; r

$ a+ {+ Y8 \4 c0 F& C/ R0 p

0 t: p6 h6 d2 B2 @5 L5 v vshapes= 4 V$ }9 Z7 N6 V

. e# i$ v: v I

7 H* s+ A8 S+ V- r/ S   & j& D. H* u S; l

; T3 `5 U0 c5 h2 G* ?

8 i) k" T) J- e* L2 H& U 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 # }! R& X1 ?2 M5 y) u

3 z P" w% y/ h; g1 y+ o

: U5 G2 ]( t2 m3 w% n: z vshapes= 9 h6 ?$ ]8 @# b

! W% N$ o1 w/ \3 }

0 M4 X0 o# E2 S9 [& K3 \/ `, s; N: F   ! u5 S9 p3 U, B$ P

+ ^/ C% e# p6 N" f; e3 U" T

& K; w3 S, f5 K% L5 h 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 7 O) c- G8 t; j- j, X

9 j) W' f: E6 P- n# F" d* M

" l# Y/ c$ D. |7 U2 M; g vshapes= 6 `, Z& e* }/ ^. E8 o# M( S

, y2 r" t" [% _: ? u$ B5 ^, W" ]. w

) S% U, E. |( Z E6 p$ V$ ^   + i6 M% X+ O, i# x4 p9 H

& r. b+ ?# t" J3 ?0 ]) N% c

) u" Q2 t, ]6 `) t 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 7 B6 a5 p5 F7 i

5 F j: P# I/ K+ Q6 v i

! v9 r7 L; l+ I3 O" y3 _ vshapes= ; \' z5 i; a6 u" I8 k

2 l4 n2 B& G" U0 o$ p& Q

' s, E7 X' f! c6 d2 u   : L; d& V6 B5 P7 }/ v& e

' z% M- d- [; O. ^

) b# i5 F( p$ Y5 W3 x" S   + x2 k+ a& C, u; u* v

2 _; o9 u5 @! J% b' ^% E$ H( ]

1 u+ ]! k t* U$ w) r 签名信息 ) Z: `0 B+ w7 q, i( z

3 ^; K5 t. H/ W/ X2 M1 _

$ |6 j# B0 [' u/ u/ o 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ) F$ j7 r4 ]0 I f1 g' l

% p3 c' X1 v# V* z0 }! j

% K! m* E1 F4 ?% _/ `, f3 V( e W 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 0 l/ ~# | R! m" {/ L

, X$ @7 v3 p% I5 m: T- S4 M% P: b

& Z4 `* C5 `$ |- Y androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 , c- z9 W3 Q' ?3 Z5 d; d

. e% Y: j$ D. D

8 j. r+ \% G. A* D5 W0 X: F9 |* E& } vshapes= ; T/ ^& y3 Y% s% @- i0 s" _' n3 T

/ y$ P$ j7 x* E) v4 A$ j& q8 w1 |! U

/ |' A, i- B( `; e& }   ( u! {5 \( C6 ]7 N. P7 Z! A

/ E# v. d8 Z: G$ Q( M: C8 C% w

4 F' K! K" a+ g! F android签名的数字证书的一般都是采用 X.509的国际标准。 9 s# Y3 \2 m& ]4 X' A, X

; p1 L4 g+ O W( M

. U$ t9 C. e1 p3 _4 R$ M @ X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 + _: [( ?) s# x/ w

8 A! @, {: l% w' n3 P* P

' F1 O' J0 Y2 c. ]- Q5 R 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 & A$ `; G W/ a1 _. K6 {

& I E n# Q9 d) T& \+ {' a

; m$ {* R% b! {6 J2 p7 T" J0 I vshapes= ; m- W' Q5 P8 o5 L

! d. ?" E% v2 z. i0 U

5 t* J ?3 @8 P/ h. i- V5 F# `* |   " T/ T1 Y1 j& c. x; c5 N

9 x8 _5 A+ @7 B

8 t1 d- I, K! a: c5 I! i4 ^1 A 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 - K- j: S/ `" b# n. X: [" Q2 o

2 p9 f: W8 s, b! G7 O

; J# H: b5 e c, M6 J! K vshapes= 3 X4 V3 Z% a9 h8 M" _0 k4 ^/ p7 U

: G) v. T5 J) }+ N

* b$ G: R* H U- ]& \% G/ J* r * w% W6 x: ?0 @, l

" b+ ?3 ^2 s# I+ U0 o& _

. c+ D% p2 K. L4 s& _" Y, z   , g2 z% O" {. |$ ?" R9 ^& E9 @

+ P5 t! S2 _3 O- l) l) C7 L: Y. ]

2 v9 I, v% i$ Y. A3 ]; U' w 权限信息 1 v. {; J2 \. g P

+ O$ l0 m" W4 G" F# I5 C

' y! j% e, N V0 s 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) & t* O! G) g- i7 R: n/ ^$ }

6 X7 n! b: M) ^! T

3 m( F0 g" @6 f1 f& L6 ? android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 5 E5 q# _. P# z1 K; m& V3 b2 v

$ ?9 D) d4 Q& Z/ j& Q

8 c( |) i/ S6 Z9 a vshapes= / I# F H( N2 e

0 k; ~1 _- _2 f

( R7 G2 o- p; H' @   * T& @* F/ _& e7 [$ }

& \+ {# G9 M9 [' X K

. H! H V, q1 j' H; E; f 下面对这个APP的所有权限进行详解下: 0 k# g/ S9 h( |- a* m% r

1 k# @( U- | N8 S

0 p* R+ c/ K3 d" T android.permission.INTERNET :访问网络连接可能产生GPRS流量 & u; A9 ?3 c/ A

' {% N3 `% U/ l, i- v% B

) j, N% i7 f. I( E android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ; U: O- }( H' w8 v* y3 U; c

, Z& v1 e- Y8 r/ I7 M

& W2 U1 n0 V- S9 s7 W( P$ D7 b android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 , L. @5 C. @8 _( D$ j- b

6 D4 ?, `$ }5 ?2 y/ J

: y( J5 z! C( M+ R. a% G2 y android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 - V: M7 `9 E' r9 |9 r

# c( r# y( _& e+ R

" }2 x. ^3 F3 Z0 o android.permission.WRITE_SMS:允许应用程序写短信内容 ) ^' ]- F( d9 y* a# N' _

0 @9 f" ~7 a( \0 F( X. V4 a' W

* T L6 V N# D" @+ S- j android.permission.READ_SMS:允许应用程序读取短信内容 & }: k( Z0 R2 N. V$ G

- V' r6 s1 a+ y( I- l

( U# E) ~1 u2 L, }( N# Q; g android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 1 s. v) }( ^: v, k

6 @# l _- Y0 P: F& _) T

; B' g, J6 B+ h* w G5 F android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 6 x% i4 ?: T9 {8 n5 a

0 G9 x& K3 ?( U, u6 l* `0 i$ l

' [9 T. X0 o0 U% c android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ' S: |' {2 y! O

9 \7 P+ Y+ W) f

9 Y: X% b8 l* B- B% } android.permission.VIBRATE:允许振动 * `9 k) C1 s2 {

% [9 O$ t# a4 b/ p3 v

% H. ?: M( O6 @, w8 x$ k7 D! M: U android.permission.READ_LOGS:允许程序读取系统底层日志 8 F' T1 d G8 J, R

4 n' p! |$ P$ q6 Z4 K# y

1 r% x. v" K5 O! b android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  % K& i% w- u; B( m2 Z1 u: l8 N$ ^5 _

( z6 b6 b0 \0 A7 R6 ^

+ {/ c1 k9 W1 K$ a$ G( A   # m B: o. O% h5 k# M

$ j# l+ {/ a3 A k' v

% ^+ a2 |9 O3 E, z* N- B' M 功能信息 9 ?2 ~* A" S1 N) }* |

/ W, s; l- L' _/ L% D" a) k! q

$ `' v' o* t; }   4 M8 b7 J- Q7 f2 g6 |% H

; h& i# `% g4 \5 Q7 S7 @. C! N- n

$ O+ i* E) S! ?$ h) I& `, b9 ~ 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 9 l x! e& C! Y9 \8 u( K' E8 B$ {, x

* p# R& E; ^3 z( ]

! ?/ O2 s( h3 u3 |, p2 S0 @ Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 7 r0 C7 p! f2 s5 X8 R% {7 d! L

8 u" F, e$ u2 w5 S }; S2 L# K

, Y1 g& l8 Q, e# E3 \, [ 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 : m) P- l6 s# r5 ]: [

4 O Q! W! |: O; C$ H9 l' L

4 Y. z6 |$ R9 C" ?. p" X 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 / F" e* _, L% C

& A) T- e+ n2 U. C+ k" j$ l

) M& O! ] u g$ J0 N2 H2 U: O7 [0 | vshapes= - n2 p: B/ n' Z6 Z$ z

, [4 {/ @' C$ h* Q

1 E: k1 j1 S @! E( z. h   / X( f4 f2 ?6 p- Z+ U v/ L

; \) n, l7 N+ f3 `$ j& j

1 Z/ Z( s4 V7 Y! g+ r+ D 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 7 n9 A& k* f2 o1 ^+ G0 g

" N1 l4 w' J' m( W1 c, ]

, r! S+ [( V* t; S1 c vshapes= 1 w' H3 C X/ u. Z

" w5 g% |" R B8 a5 a4 R: |

4 d6 }0 p8 @* @- v4 x6 L   7 r! P) X9 `( m& [( A% q$ F1 z

* R) G, c* m9 z" A; z' {. {# ~

8 N R* L0 P/ ^! S# k" D. |( I lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 0 Z8 v# I+ ^; N$ h

. D& h! M$ d* q

9 y% i. E9 P* e. w8 i @" B- q6 | vshapes= % }4 X/ T7 G5 c8 h2 W

. i) W1 W$ \+ A; ~" ?

" @; b+ [' N+ \5 y' z/ ~ 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 ' Z3 p1 m& {) _* s/ \- _# L. y; m

6 p. f" d( m* ]2 z6 s* v$ W+ F& v8 z1 k

/ P! ], O9 |% @0 m& G vshapes= 4 E% {$ ^$ O! U' H/ x+ T, h2 d$ Y! [

- Y4 e, v! J% H- x/ Q% R# Q

. |8 j: Y) n& ]4 ]   " s7 S3 w% A9 @

) M; _7 E) U+ g# ^* R

, I S! ~7 I; T( S4 y 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 # T$ o3 b* N2 m

) C. t2 o- t3 t7 M: ]- W

( }, C, t2 j: P LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 2 g7 y. ^! P* x, f/ w& s$ v: I! r

. {7 Q- x& I& e2 Q' }5 o

3 h. E3 N6 c# A; F' B) P 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 6 ]7 b3 I, M5 D8 ^$ B

w8 x4 J* M7 x F) m' q( R

% R, z3 r4 ]6 J& } 源的luasocket代码可以参考学习下 ; B$ a( x0 T k8 i4 C( t+ }

3 ^# h/ ?! }, a) {, P5 L' E& g5 G, j

4 ~2 w/ w9 s! T% S https://github.com/lunarmodules/luasocket 2 K+ W& h& N; Y+ `5 F3 l0 w

& i$ ?9 [- e! j3 Q/ b8 F

3 A! g+ b `- ^3 K% c+ c# I) v https://github.com/fengye/luasocket 0 K4 ^6 i. }) o3 q+ [

! T( U& g9 `8 n' d! y) c

( c# t2 X2 k4 S, @- J   + G: T7 u- T0 w' c/ B. I

U& q7 L9 ]# w" b/ M8 U

# D, k, |2 P" K1 D# `) d vshapes= ; E* @/ c1 K ^: C. h7 |" u3 k. o

, d) O4 B5 c! b) x7 @( R3 y

, k5 N4 u- o. Y' B   8 w. U8 L) y9 s9 ?

/ n4 [5 p! h4 q3 l/ k7 d0 S

' Y' u& T3 k! _- ^% V: q) o w5 l   . `+ B O& v, ?$ H( T3 p4 M

7 D j1 W5 D8 b U5 e

& Q- B' K/ ?. e9 Y 总结 . E) F: ]% K r

7 p1 E w1 }2 v0 u7 U, G; M4 m4 i0 O

6 f/ l) `# b+ m( e5 A+ ^9 Z 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 , Z$ \9 h! i$ W- @+ U8 G3 K

' |7 H: D; I# D5 x) V9 }

/ @8 z7 ~ q! ]' J2 k- L 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ! J3 { w2 V, z+ w1 {& b

9 K9 E2 r2 a" O" a2 W( a

0 f2 }: b; i9 {! X6 n. ]( v9 [ 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 5 _8 Q2 {! f& d3 }- }: Q# I

. [4 h) l7 y: i& O: _; b

" B+ f. s( ], A: z! n 结束 ) X7 F' O$ |+ z8 o1 J9 B

, o* \0 {7 n- `5 F1 w

( K5 ~8 Z# ~0 q7 V  【推荐阅读】 - M2 W. V6 @( r$ k4 z3 Q! s+ c

8 k: F1 D x: J( X4 a: k

9 [9 I, X5 }. o+ r3 \, R/ d 对吃鸡APP的分析 3 J; I$ r* s7 {2 q0 G

9 |% z5 Y; I5 A

, I! o2 }2 L1 m' i0 C: L 你需要了解的APP安全 ) {& I+ p$ C8 f n4 F* {

$ X: n' q0 U1 Y% a5 ~! |: [* S

' P# E$ k. p1 V 你需要了解的APP安全 6 y( s* V3 S1 ]4 O/ \. h

$ i5 a: q- X) r% e7 z

" ~ @% |. H5 `+ `: \4 f   * W, d, C; w& B, a

回复

使用道具 举报

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

本版积分规则

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