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

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

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

# o4 \" G5 E( N1 q- I 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 8 \2 \# z6 _5 \6 r. f

* Y, V# L. [( Y& b4 v. ^5 o/ H' O/ C

; w D* D# I" a4 ? I! p6 c# B vshapes= - D. o; J; o: x) {9 q$ [

5 w( M7 e) |3 g, m. D9 }$ c

, {9 U3 o# `# }" {9 ~( _   $ _# k; Z H: z9 E

1 {! R% S4 g7 U: I" i* s

+ @1 q' [+ a A) e* B7 n0 ] 下面就以开发者角度进行解析下这个APP的功能的实现原理。 $ M" [" x% U9 G( X( [ g

0 \6 s. P1 S7 P- v) Q. K( W

& V9 K- Y4 G+ ?3 ~5 D) p/ t, r; H. e   ) b G3 C4 j) O9 z6 d

5 ~8 C5 b) y% s) Y

- A* _1 w& E. N2 Z 基础信息 & O) s" Q; L1 E8 |# b

* [1 U6 A+ n8 _ M3 w

$ F2 ^# d$ ~ I1 H$ E2 b 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ' ^' F3 `* N2 c0 |

5 B8 \1 z1 A2 I3 l

l% E- x0 d, s! U vshapes= ! e2 w( T0 F5 {

: C9 H/ K. b, J3 [! J: K9 E

8 A y0 g) y* q   5 N) q8 T8 L" t: }4 G% [

) g9 T2 Z! d9 t9 r

. Z2 ]; M. [" M+ [3 D- {. m3 c; u 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 $ m9 x k# @3 i6 D

}, E' G5 f1 S

- M; z6 E8 t5 g8 g8 |* P vshapes= 7 a8 k6 n3 k' o% V! o6 H: [

6 |4 J% h4 G2 b7 k

) l [, v k$ |& M/ j/ Z& t/ c   ( r9 j" y) |+ h6 v

9 z Z4 `& V" x( U5 j- D( x/ H

2 v+ S$ I- a6 H 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 4 b# T' {) x1 g5 t6 w! l& v

. w8 ?3 _# U+ k. L# z% Q& E

( v/ s7 E9 y: W6 r0 X& y vshapes= % t3 K2 `' z3 {* R+ a6 W% v

& W; h! X1 |0 j

$ `* y1 z4 a0 Q   " y; O. ~3 `$ X1 s( y& C! a0 R

; P# |' b% o- v. g2 p

4 l8 @" \) M9 a 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 2 u' _* h; s+ k9 |' H O1 ^

7 S' v3 f7 _4 @0 ?9 I! G" e4 A( h1 S

+ Z) ~# f4 o% j9 d3 { vshapes= 2 t& c9 Z: T8 |& g

9 S/ ~2 e# V4 z% l/ F5 A, u

3 l! W# }5 D) q1 `   . w! C' p x9 o) j% J9 w+ k( S

, I6 O" T* M( R. C, e

" J6 w* [ i% n0 k7 b, v) t0 s 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 * U1 f5 h/ A$ I& i9 d8 q J

% E6 i" @2 @- B7 W2 }

) r% Q) T! D; R$ V+ F: |7 \5 _ vshapes= 9 s: v+ ]" j8 a. b5 ?

- Q1 b0 e# J6 r9 q& x

1 _( n z' {2 _. h; |; y6 O5 E   # Y- o5 H3 v0 I( P

" M2 ~* U# Q; M/ ~

1 i' g) U" {3 [ S+ N   1 s$ e* t3 A2 R: h& a1 I* M

1 y9 M5 U+ n% A" E4 R k7 H

* N" \+ z8 G" }4 h; E( S0 S 签名信息 ' Y- o* F8 [8 S5 Q2 n

* L p6 \: h" \7 k0 v: _

- H. n4 i- u( ?+ D1 c 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 7 @2 N+ s( o0 ]) O

% U4 j, W8 Z! ]8 Z5 X5 [3 i

, Z% Y( U/ F# i! e5 Q, p 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ; y4 I; Z% Q5 b% x) P5 q

8 Z* w h, D6 t. g! x

5 b! O) w/ C/ {, }& S) ^' E androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 & x4 W7 X0 H2 l6 p

& B) {9 o" m6 j. {$ t7 U

6 {3 W6 ^5 d$ M4 J' Q6 U% H vshapes= % G3 z# ^4 `. m$ M9 O: D

4 z3 x4 E9 p4 P! j) B. S

: t# @- a! A+ A: M$ `7 W   % ?( P- g9 [4 X- y( a- p" V

4 z" r, J2 P7 J: B) j; y; K

& k- e9 D0 h* z android签名的数字证书的一般都是采用 X.509的国际标准。 ' f9 k& A+ X1 z

: i: N6 I% l7 B, H" e

) u2 l, G1 j* p X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 H& {) r3 O$ R

: I! @ B) c( }

3 L, Y( w* v, T. Q1 Y 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 , k; S# a6 q% m3 i8 x% d

& [% i+ d1 o: V. d+ o

, M$ B4 O$ t7 V1 p4 l vshapes= 6 ?, X& T: N6 Y. [

2 C4 @0 l" }& z

* t: u- G' G4 p! P* |, b' m; @   0 }6 m& T3 V& P

$ E& M5 V% d$ n6 g; v( \% o' f

9 B, t- G; c$ h3 h. d) } K 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ( z) f+ E9 Q4 b- Q9 X$ _

% M2 H$ I' X, ?% R7 k

, l& D, P' a6 V n+ {5 j% O5 I vshapes= , @9 X2 a5 {$ `" E& w

# u' |( F) f& ?* c& `

+ y. G* B( F W- t$ r + i7 h; i$ B. m6 J' U

K" _7 @6 h4 n3 a8 r

: A; V* H9 z- [, S2 l9 z   $ o9 ~" i6 v3 L9 C2 i8 ~( U

" u* I( E/ \, N& i6 Q

+ t6 P5 ^, a& L! o 权限信息 * l# |4 p0 F' h) d# m }4 i

* r& B9 n8 P3 M

( R1 q2 p( Y& ~+ u/ D( W$ j 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ) t* v6 c8 z" I" c+ J& \

' K0 n& O% j2 N. a1 C3 V l

% S, D+ Q2 K, Z" c4 ]: p; t% Z android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 : A$ y0 c6 Z; w# e* J4 X& U$ ]7 y: D

4 } J7 |) F+ y& l

. }9 ?/ w" U2 Y4 d) v' _ vshapes= * H8 r+ w3 k: E4 Y

- i# _( {1 Q( j1 X! G( ^( e

8 c: S! T7 I% x' n) H) [   : b& B9 O8 {( G' X0 b: C( W1 P

" ^/ |/ n6 D5 u: [

- a- L7 c( o: k# h! D. A 下面对这个APP的所有权限进行详解下: 7 ^) J+ j3 q8 M

) `8 s" F8 q# v& P* H; T- H5 s; f0 w

* \3 K' {; W+ B1 o0 d android.permission.INTERNET :访问网络连接可能产生GPRS流量 + s4 i8 w2 p9 K2 H, W$ E# U, @! s

' m: C. b5 [" {, b

4 O2 Q3 Y2 L3 z" {0 c) x android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 : w& ?5 W: q. p

4 A, r: L& f4 K$ x6 Y

$ l _' C( e' o8 _4 |/ d android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 S$ i4 y# x" E

$ r2 q; N' M" U7 v, N; S" a J

( W. L+ r y b& x8 H& w [" m% K android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 1 W2 a" ~7 H6 x' \) h* P' S/ `

! M( N" p" _ F' z

8 {8 j. J' T! e4 ^5 h; q; h android.permission.WRITE_SMS:允许应用程序写短信内容 : J: D+ G( R3 [& u9 |4 {

/ Z f4 X, Q3 D+ Z

! Y1 @( B x4 f; r2 c7 b8 o, B4 @5 t android.permission.READ_SMS:允许应用程序读取短信内容 ) K. x( }/ C8 m: W' F- k* T# D: l7 p

6 U4 x/ d% T. _, X& j

1 r, g7 Y' y8 Z% w4 t% c android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 X# O3 K2 ^- L, Z9 d4 k$ D

4 m! V5 U" @, X4 J8 W

- |/ E- k" |* a android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 & J; j0 z. L0 m' B; x& @8 y0 I4 \

# j. I3 b! g6 b. H/ X h, D8 e

) i0 \, Y0 i3 G* M+ R; L android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ! V' v1 F: g7 i' U- m

& V t* }3 `3 J( U6 u

$ u! Q @' I8 ^2 M4 a) C/ N/ X! |' h android.permission.VIBRATE:允许振动 ) u( Z4 i3 X* g* s' y! d7 m& @ a

/ L) ^* g3 J0 y( z2 _

4 Q" _: z/ _$ S1 C android.permission.READ_LOGS:允许程序读取系统底层日志 * s" h2 _# Y" t1 D

9 L G" ?+ k5 R& N( g

6 k! r8 d6 Y' M0 i3 n android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  4 `7 ?! a( V" {' b' _( }

& c3 X0 {9 |" x7 G2 @" c

+ X0 [ ]1 U4 c X; H   $ [6 f+ H- A* C$ ?

. j3 R" d% M' b4 i$ ~

3 l6 K r7 n9 @ 功能信息 $ f* U( J7 v; H, A2 o+ V& [) W

4 i- h2 G r% ?

* G! I. n8 ^ n" i% R9 K   8 q) ^. P6 i; a* X

P+ S. H* [1 E5 C

$ ^: q: S" w% ]/ F 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 5 E& d. D1 |4 e( F

) C T1 Q8 w& I

7 v) u4 o. P( v; S; C+ n1 ^9 o Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ( P0 X/ s- g z3 k0 r; H- q

6 p: H1 M: T9 m) [/ H: K

0 e. \% A- h L% e8 d) W 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 9 i K/ ?' |2 B% h. a+ g/ g

) s W" z" _# C9 C; l2 Z

' r' w! A* c; K5 w/ p( W1 K( I$ A7 _ 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 ! r: N; D/ p; |

1 T2 J. E: A+ l. E# f, T

1 Y* [, N x0 t4 c( D' }6 y) Y vshapes= ; X6 [1 a. V6 F; ]1 b

( h' H( e3 l2 T0 l: z- l! l

# k3 L' K, G$ H a1 o4 k% C   & L& S7 [+ y( o7 u' h9 }! y9 Y; J+ h

7 l: R& ]8 T* e1 X' @, v: P

% \4 e9 |/ \( i# Z+ {0 S7 Q 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ( C: S6 \2 L3 ]# m# H6 [6 h, F

+ H7 V6 N- n3 U1 h& [3 A N/ h

/ \. a r4 O: E2 K- J: x vshapes= x$ x0 ^7 x/ L( g3 f* [: G

) z& r7 |8 M6 j. o+ q( n

p8 D1 y# D# r   / T2 z5 ~% M. P4 v. E: G

; g* X p5 k: l% z& Y! B2 w' z: [ X5 ^" f

* T7 R L; D0 B" |2 v5 h% q lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 $ y2 d3 _# C$ ^9 Z$ S

# z: A7 M9 J2 G

* X: ^! J1 }& C7 H$ m: Y0 j8 k vshapes= 3 R3 h0 T5 Y2 \3 U* h0 O

5 A* q+ g% R/ ^# R$ \ w# m" s9 ]

L* z0 z0 V# Z; Y" X 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 0 O* C. z9 j" `) [( E& G; N

$ A: Y) f' \* ]) b+ d

1 F0 O; D* T2 Z# b8 \ vshapes= 8 m3 x9 R: T' D

5 n9 E2 R) R) A4 E5 _ H& R

1 R0 \3 `2 f$ e# f   1 U' o: c+ h3 E. m

) |/ z2 q& m1 z: T

/ I# a1 x, N2 w 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 $ ]5 d$ L5 F7 o3 o" N2 t/ h, ]" U

/ W- Q7 Q5 I3 Q$ K% d/ I

0 H0 K, R7 l5 Q. @9 r3 j8 L LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 8 x# d6 @/ I; N! ?) l

% S0 S/ ]5 D7 o! h

9 \$ T2 \/ d5 v, Z! Z4 D3 C 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 % o, P0 c' y, Y3 t. l) V

4 i* g5 g( h* `% S

- h# L5 R0 K0 K9 J- }( r# M1 U 源的luasocket代码可以参考学习下 % W+ m# t4 x9 a$ _, E8 s9 c

/ _% _4 `! \+ w: p' k

$ h: O$ c8 t- v; E https://github.com/lunarmodules/luasocket ; R& I# _$ L* A8 I0 j/ o" K4 F

( j2 h: N* Z- p" G" ?0 g$ H

7 W5 C. b: V) C. j- G3 f https://github.com/fengye/luasocket 4 O4 `2 ^: R2 _, s- K

! W6 K/ B) T7 f F

6 ~+ W* ]8 _0 k/ ?   , R3 t8 `$ h% _! ^

5 y6 E9 u# @, n

* v" r; y3 d4 ^ vshapes= ) ]. b$ i" C% I. k

& \3 d. A9 {* E4 Y3 E

9 G) [3 Y' F- r, O   $ P; N1 `. Y" w9 z6 c j8 ?$ W

% z8 H g# X, ^+ I: G

* k8 {6 X2 L$ @. I   7 Z. S7 D1 B u, L

, a# v8 s$ g/ n8 v! y

. Z! O# o9 q9 z8 b9 \3 }8 w 总结 6 M$ Z' l1 b9 r. L& o, N9 y

$ T& t; [4 c' }7 t! S2 M5 N

) @4 M5 B% t3 t$ q8 a 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 . x; C) |5 h, ^. ], g6 c8 f

) W$ G- C! _& I! V

" U7 C( _) I) |% v! H! H 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 0 R) I1 E+ S4 a8 ]& X

( ^* V4 N# v+ U& R

. l# B3 }- N$ Y% g: U( @ 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 1 A. |3 \, z/ o9 i1 M4 ?

% V6 {7 \+ e% w3 c

" }- a$ u( F8 }) N6 @ 结束 " n+ d {+ ]6 g6 A; c

( ?9 [3 H# ?1 Z% G

! `; P$ W3 G4 t4 o  【推荐阅读】 ; w7 Z4 E3 c1 Z& }1 U# V6 h0 \

: F7 i3 s( X. \) f1 G+ T

# o& j/ I5 U# W ~ k" ?, x1 E 对吃鸡APP的分析 1 m6 T3 V/ {) v! g$ |

! W$ i7 ~: e1 A/ p7 S

* r) W$ Z/ q4 j# F; [3 v; |1 D 你需要了解的APP安全 ) X! O+ J) e$ k. }/ D" N3 o: _" l

" P3 _4 ^0 }. x4 Z5 N/ z

. c3 ?$ v# y3 B 你需要了解的APP安全 9 Q' z5 P' o: `5 |1 u

: q" A. a0 F C8 D5 F0 H4 A1 I

, i( B+ A& o( h2 x/ S: @   7 N) t1 m. G3 l) N

回复

使用道具 举报

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

本版积分规则

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