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

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

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

) q* x$ u2 `: e5 L 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ( U+ A$ n' Y0 c- W: I/ w: A; K

/ s. t. ^4 `. W, f( _

- G& z" F0 E2 m/ z% A. |% | vshapes= . e# }8 T8 _* B) h" E/ {& ]

! n" x1 \3 a2 T$ Z! g

3 d& c5 x% U$ R6 e   3 }; v# _/ T% [

* ^0 V2 [8 I) s7 f

! {3 M0 t# x: z V; m- n9 g" `9 x3 r 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ) X8 J; A+ ?1 }7 j" ?/ _4 Z' k

9 @, ~3 n) E# D7 g

8 Z1 b/ L! J8 m& Q' ?+ S   * y/ S9 b# r4 v" H, i

) A2 q' s& `( O6 f9 y0 N8 X

4 X& }/ g7 U* T4 e5 o 基础信息 , w5 Y6 h/ N# o+ @+ |

9 Y( n! a% |: C; F% v

; d, L& F9 t) C3 R! l" c5 m% H 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 5 T$ u; f, [" w+ J% V

6 |2 p" Z6 b0 Q. y: G

9 r; N5 ]; \+ u) M- e! e vshapes= 3 o: A! p I$ a( {9 K3 \! N% r

- Y& |8 z2 [4 U+ ^

. O" E# M" p$ {* r l   * F+ H# R) ^: z, ?; a" K

8 B$ i8 M2 |& q/ U% d0 @# c

! l- @1 \% m5 V, e 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 - I0 n/ f$ R% k- w @- f+ ]

& @6 c0 p- ?* V* T. D; V) u* m7 m

' @+ e; B. ~/ M( V) P3 L' e vshapes= # i+ A; L) ?( z( o6 l7 E) E B* c- {

* \+ t8 i/ \9 ^. {8 x

/ w [/ ?% B: o9 u6 J   Q9 l7 j, Q& N F$ J H

" I+ P' [9 D" U- P; I

8 P+ i1 }, S' q, N" n 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 % x; H$ I5 }. _6 h6 R1 @$ i. I

9 z" Q5 k/ g& I# p0 Y ~

{; C' n8 W) q& a vshapes= ; Z n- T5 T* q1 \2 I3 E( F- e

; t' U2 a; y, L/ z+ c2 H2 E( {( u

3 u9 F$ P1 j& [: L) p6 u- A   ; U S0 G8 w+ V. ^+ u& _

; v. n- O$ m' y

1 U! ?/ h+ ^1 K7 z) B; N4 q0 w 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 1 G8 Z4 }" w4 z& U. C3 D

- [. V l1 ]( R: b7 G) x7 {1 W

0 E5 c- ~ L2 ]/ S vshapes= 5 k! M* \" ^9 n

6 L# K4 ` [( {

9 X- x- J5 O$ c% k# ]   % U& Z; j, U O% U' I1 Y) ~% T9 {

8 K! g8 e+ V( o; h |7 e" G

3 c1 z# h8 w' Q; W 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 % u- K! m1 w- w& x

! T" ?; _2 p _$ k& p

7 v+ T; [: p% w3 ]9 J4 u, Q vshapes= 5 z) l J4 R9 a! M/ |

: Q- [) I9 c* B# T) v

, j: i' d/ i6 u6 ]9 o9 M$ ?   . Z9 r$ I, y, A

& A# q I& S- M0 ~

& X9 k: a" j( }' b+ |   7 |) n- J+ M$ b: e3 b/ i3 O+ d! y

3 U# m9 n% [/ V' \3 \3 W9 `: B4 K

5 W/ e6 f% S7 i7 U5 E 签名信息 1 P+ S z( s8 |& A. g, T

* a" Z0 D+ w1 r- V4 s3 j8 A

0 A* Y O6 N2 o+ b/ X! g 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ( [: l" c. g4 ~4 _' a) y* y: ]

$ B6 g* G' N N6 O9 }5 j7 \

! p7 Y/ o- A# A. B4 V5 V 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 0 _5 I& m8 \2 F {7 E

; }8 D# B+ ^8 Z* j7 R

- z8 D* Z. X$ x! d: [+ H, ] androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 8 C2 a- |& b. \% w b' h+ P

) x- l9 t; J% R+ G2 O) u9 Q

: n% u* s1 Y" h" q* N* ^ vshapes= % ~0 {: s; k1 w. B: w: L6 t5 ]

3 C7 X/ e) H1 a G+ v3 v

`. B$ @. d+ d0 ^9 b   1 M6 M1 X+ Q; E

3 q8 B4 I1 I* G; N- b

9 D0 w2 E. s1 V8 | android签名的数字证书的一般都是采用 X.509的国际标准。 . ^ K7 O# N- v$ l' X+ h3 `" [

5 c4 Y; H; Y3 _/ @

4 Q( m# p, p2 M; k' x9 C6 @7 e X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 6 c, T6 X4 ?% v/ v

+ @' q- f9 w3 L! [* |9 i' L: w

! A+ {( l2 N7 g5 L0 f8 z 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 0 z' ?4 e2 l0 a! }0 w: d

! N: { f" O9 w" P& F) M1 |" h6 w2 f

! a) w$ K- _; h" o/ k vshapes= 7 a4 |7 q% x2 t! a9 ] E; _$ L

; I4 c5 f4 ?$ \# t! U/ H! H2 D5 `

4 I' o$ y; v4 q' ~, }* H   : A( Q) T$ G* q! I

' b6 y; m6 O! g8 I0 Q% A

- y8 f# f G* T2 r3 z 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ! }! i) G: [) l4 J) b( u9 Y

2 A# a* e" e9 L0 G- X

7 G3 C& W# v5 J: B1 E vshapes= 0 M: k1 d/ h/ P; [

5 D* A8 V* F* x" b# Q! m" r

' z! d/ Y: ]6 \4 e* P / p0 [4 V5 I0 F% [/ R8 w

( f5 Q6 C& e& p) r- R% b: R

& l# }8 m: S) M0 z! `/ q# X   1 d/ H& j! i3 N' S$ v

8 A# c) H5 F: o- g3 M

( p. `# Y" q" z 权限信息 ( U0 D$ L5 z/ Q: K

" q! e: v1 t2 k% ~3 N

- P R- Z4 k* h0 Y9 \! { z' F 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 0 `# e6 Z) b9 l

* Y0 f/ J2 v( a6 j6 |8 _+ W) E

9 D( a' f: t- G3 F. b D android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 , U; }8 K" t* ?: ^ Q0 p& n5 \

- a. y% c. D7 R! ~

9 }* R2 g! r) w9 k vshapes= % K; i$ d/ K O+ d

+ x. z2 g( J" e* t6 N9 M: r

6 V6 ?: b* p, c ?4 ]2 M% O   " e# L* p" T3 W8 X" k1 o

$ I- m0 s" f% k; W" J9 q, Y- h

+ f) \" X: J+ Y% ]+ ~8 I' @ 下面对这个APP的所有权限进行详解下: 7 D+ l( L9 t3 v1 U1 ?# q9 [) ]3 A

$ M; B- Q! A, ^) W! P, M) D

' F- p- b2 ~4 g A- [ android.permission.INTERNET :访问网络连接可能产生GPRS流量 $ S- p8 K8 ~. x: C

! M6 g, W5 r% ]# G5 v5 a

- x- `. N k+ w0 E android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 0 I% Z/ P( A4 Q( M5 t* I

4 x; r! _6 d7 T, E* Q, \

& x! D7 k/ Y& k2 k7 Q android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 / z+ n {) X& M3 E6 {) p

2 q* g- h+ U: P2 J. |6 \! F. | c

( k8 R/ i$ R5 B4 n; Y1 H android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 % s( A, [! X& G

: f0 x7 n' }# t* i0 [$ l

$ U& l7 I5 u$ e/ Q5 }: {: s: r android.permission.WRITE_SMS:允许应用程序写短信内容 U& F+ ]# X- p$ V3 Y/ h7 }

5 c- F. r% L9 R4 B8 d) i" v2 x

# o% L- S( r' e* x# F- _% ^" n) b android.permission.READ_SMS:允许应用程序读取短信内容 4 Y, p: H" a$ E0 D0 U9 B+ t0 \

0 T& ?7 ?* K: }' R

% w! Q6 l( q* y# d7 w0 P; l1 s android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ; B8 }7 b6 g1 J6 ~1 U- \1 C; u

6 _ q5 d' v5 j) A+ v7 O7 m

8 d3 V0 f# N$ I1 R! E5 h) v android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 " ^8 m. q* a. v4 F

2 c3 K: K+ A$ Y- c

% K8 w1 ]" ]! Q {8 o( O4 C android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 3 Y6 l+ L4 L4 R

- B J" a1 S* C" t$ |/ u- ]* I

* h' R. `) B M# t( m android.permission.VIBRATE:允许振动 5 q2 ]6 H# U" ` T& \

0 D2 l( k6 i+ {. J, b

3 m ~! O' ~7 f% ?) g3 p android.permission.READ_LOGS:允许程序读取系统底层日志 G8 p0 \: ]8 T

" U9 u+ }, o: t9 S( R5 u1 B+ v$ \

f/ y2 X) @$ N$ ~& f9 w) q2 M8 X* b android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ! f& ?- {$ q$ b0 h

( d' n! a. k n, Z

M; m3 `9 x9 W0 V   3 ^% ~5 w, ^2 Z7 f T

7 A8 T% V3 e2 `

! k& c( V9 I/ N2 x5 ?: t 功能信息 % P; p( n* \$ R9 X# n

, ?4 }% B6 u& `5 L, t6 v. I

) e0 E% m2 r6 n( p7 w) r   & V* {( Y7 ^ E* C

8 t' `1 p& U: d% C

* H. u4 k- O5 b5 G 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 & \6 L) e% X( U9 E# x" h/ j

% n$ u8 }1 g4 q& H: {0 q% ]

% u& e3 R/ s- X9 v& L Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 % |/ ~4 M: }% W+ X9 }# t4 B

0 O4 d9 [( |0 V# J2 @, p8 h) v3 h: u3 ~* {

' m8 V+ M1 S5 M- Q9 A7 L$ Y4 M 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 : N: M+ g, l" b

: g5 s- h9 j f9 H& B, ^ W

9 q2 g8 |, k+ O4 E. P 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 , Z' _# L+ D0 [& a( z8 Z

; I$ z1 o' ^" m3 Q% ^

4 T z" A: X% G& o vshapes= * d) r" E+ E9 o

6 T* c) d" T: Z

7 l0 X. C0 x) Y* e0 d   7 N" W& r a# l) t) e* {1 t, R2 [

5 f( I8 Z: M6 K. h

: o, g% ^& d* `) n8 B, }& | 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 . o% ` U% }$ c: H; N" `

: G7 z7 j% m* @( X- T3 `

2 ~$ Z: Y$ b, o- {8 O6 ~& K vshapes= 2 S; k0 P P' K. b. G" E

$ @7 P/ v, h& K1 k

' Y; ]9 x9 A# U! ^* P! r   . {, b; q1 \! v# w `

. G9 J+ X* @0 ?- _

# c! Q [& Q3 `* b+ X lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 & g$ o3 t! w% E7 i

1 I9 ^& B+ H7 K+ _6 D. z, _

+ A/ V1 o. B1 N3 G2 S vshapes= ' z/ Y+ k9 a5 p, O

8 u+ D& C% ^, x

( r0 t2 E' Z+ P$ o7 e! g 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 + G9 o* v8 y2 D2 M- r/ g

' P7 x5 u8 o$ y& @

/ z3 Z3 I9 S4 c* p6 F6 b1 ~8 x vshapes= 2 Y# q& ]: w# C A: I; |5 T

* j# R1 W: K* E) V2 N, u5 O5 u1 R

) h$ }$ v8 ~8 W- X! f& h   ) N S, e' B+ [" U7 Z2 E

7 P& z V P; b1 O

, u' l @7 w; z+ X" z6 e 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 # H# x+ f: V* V' C/ c5 }/ @

: X/ m4 U. H. h5 F# M# u

5 a9 C& y2 G( N. @ [ LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 3 j6 W% _8 e. H( I; T7 y

3 A# O$ L/ b5 o8 J! m2 t1 F5 ]

9 \' U t8 A" j2 q 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 7 g. G+ y2 u8 y1 q2 B& \3 h

; ~7 D. T3 i# h2 o8 C

, @- m' ]& X1 v3 d 源的luasocket代码可以参考学习下 % T S( N% G; g8 X7 k! v

4 V* _" v5 p, J4 C4 Q

* z4 X' j, [" I4 t1 C& o4 G https://github.com/lunarmodules/luasocket % b2 }3 [6 [' S' Q4 `

- F7 C* u% } [. C J

; U% J- i ]9 v G+ z+ O https://github.com/fengye/luasocket # e& ]$ H, B$ k. S; b

3 h. V$ A; A- j* B3 g4 |

) N+ R: X* Z# ], [' t   $ K$ Q2 s' X: |9 E+ a/ _$ |

: G" \8 J& @9 Z4 o4 B

/ O/ t& F+ `8 E, X4 V; I vshapes= $ C8 Z: y7 y n. n: c9 ?

5 Q/ }% e" I; K K4 n

" E% e6 Z# w( Z# c, c/ J; B   . L3 E- Q- }( G# N$ p

9 Z5 X g1 ]" O, F

8 k9 i" G1 ~% F   / M; s1 H( D; x6 m

9 c0 y$ o9 ]. a3 Z$ d( |

$ G- s/ A/ X+ d. f4 [5 I+ ? 总结 0 w- t8 h" j+ {- n9 ]- h

1 e, i6 Q. D9 E2 e

9 q4 f- t' Q% z* b: R 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 1 r$ o' n8 i; B3 q

( i8 P. E U' W' J% m

9 ~9 K* p% \4 n! U5 ~! D/ W6 O 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 3 \1 J6 c1 b* K ]! w; ~, a, g. d

1 ^! R6 h V3 T( a; H0 v# G6 w; y

1 H4 G8 `5 \' Y, H3 L% I0 N 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 8 p- l; ~! f1 m$ F

% n( D, w. r+ E6 s0 @8 M q

2 A! |/ l" y. D 结束 7 S3 W+ _- B6 n

! d7 Z0 |5 c f L% a

9 W) }' D- o" s# x& V  【推荐阅读】 & l' c9 ^4 M/ z3 l$ a3 N* F

9 ~& @- p! V3 |0 T1 f

8 h& S/ V- d: _& r+ a, u9 b( i- C 对吃鸡APP的分析 3 g. z5 |9 z8 X( [: s

, z* A% t" \, o" f6 D) s5 x

/ @; f5 A& ~, ` 你需要了解的APP安全 ( G. n+ l* j+ t5 j4 l! q5 N& p

/ A/ P, `7 F, H4 }

3 A0 s/ h2 x* j. s' B5 s4 K. J: |) h 你需要了解的APP安全 4 Y! L. n" l4 [" n# p1 e" e: g

6 P. i8 p& w* g6 M. B! F) O. |

: e6 ?8 Q i n* I* r6 W: I   2 n% C) \* V' ~" T! J* ?$ h5 Y

回复

使用道具 举报

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

本版积分规则

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