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

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

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

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

3 Q8 t6 x; y; c- N( u$ k

# f: `* ]. S3 z/ v, F6 x vshapes= * p. W, w$ {( `( |$ H

+ Y% d6 m$ c1 x8 ~1 s; q6 {

6 c. Z5 g4 T- C6 Y2 b2 n K; N   % ?% Y3 N. m/ w% S% `( g/ C% p) ~

( b% t: n' F& g! h. {* A! C% p

# z" z$ T, q) o7 c 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ( R+ T' ^0 ^, ?! p9 z9 l

) {$ ^4 b4 D, L' u5 H" b3 U% }8 v

. k2 o3 z8 {) `# o' S   ) \5 D4 y/ N) ^0 U

8 U, y% M* b; X

0 P, g" a3 z7 ^9 ^* c& g% g3 f+ i/ R 基础信息 ; ]8 o5 h6 p/ X% D4 o/ w

; `4 m2 w6 w6 H/ \

" p/ t) V* R4 }' ] 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ' f, N, i% W1 q1 g

7 {0 E# s9 j5 m" M! Q1 H9 _

X% c! f- ~7 H5 D2 G vshapes= $ v( A8 X" z \- ]# R# K6 ^

% P8 Q8 c: z: ~9 m0 v) P2 t

* ?, ^# W/ [7 P* b# g, T   + u' e2 Q% x6 r; Y" U: c/ S4 e

5 @8 B" v( }+ ^) p2 e' [

1 w, n. U" Y& J/ c6 c 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ) W! m$ L! e+ s5 \

' n2 U$ S# |( s

' d; n/ |; U) p5 \4 L vshapes= / q& Z! f0 B0 k# {- ?% [

" n3 ^& V+ ?) l+ ]3 T" C Z

( u/ A9 ^" O0 c V, u   " ]. d: ]7 J! C' c# n

' Q; Q) m: c/ L8 T9 E5 S* S

" K; O) L" e: N 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 8 o' D9 {0 M( f4 j+ Y' s/ O5 C

9 N s5 ~1 F- ^) b/ Q* H

/ v3 c$ A k: W vshapes= % }+ n$ a `( \/ K

% |/ C8 O! l8 B8 E5 C; A. A

Z p* j8 q% N7 K8 w   ' t5 o3 }, |8 V" e' {# s! o0 s F

$ G9 I6 p0 s$ m, T! b

$ E& O& p* R: I6 w( {* Y 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 + D. F+ c& P# e& v$ d5 N, E

5 ], R2 {, g$ I1 b: L1 P R

) ? I/ [/ V* \& `! B" v/ D1 _: _ vshapes= 3 ?$ w* m: \! z# \2 }9 B

( S5 \+ T8 s* T

, \& A4 V, p7 O2 S; W, p   " r4 M+ a, P* y8 y: f4 X8 `; E" A

# l* o5 I/ Z6 a

7 I6 i3 `& w0 v 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 8 u* |2 U" i- h. h) ^, u8 v

* u2 q+ v9 y% N# U

1 S+ p$ O+ b( B( v8 d; S vshapes= 5 \) S' u: b2 Z% Q V

: R( [- l1 a$ K2 l. U1 {1 c* t7 A% ^

9 E/ H' A! t. k. V& l5 O   3 z! |0 t' \( L

; _+ x% k4 V, R! M9 X9 s, _

: e# m+ O! U a   / k8 T8 G# a# G$ c# I

7 F' x. b3 L3 U F5 ]

' s$ _" w$ R5 Z y4 e/ N 签名信息 , g# [$ G( C6 a9 ?

! ]3 _9 l4 w2 s/ o/ d

' v. u0 Z$ H! l; y! y 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 5 e8 q9 b8 A2 ^* h/ [% P5 s+ b

' e- j: o g# E& H( \! t0 S- A& A

6 O5 Y* L" F ?8 j+ O) S/ Z 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 $ j9 K2 p7 x; ^6 i, d1 f+ T& K. T. v

1 h6 g# T# X: R+ |

y; D1 T* e/ ^/ O' F! _! s/ Y androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 2 P( E/ s$ E$ w0 q

' |0 E- h$ Q! y4 a* u ^! I# V

8 y" R* S# U9 X3 h vshapes= ; O" ?& C7 ?4 D1 S$ G: F

2 M- ^4 |. ^5 q( n Q; z; f$ z& U

+ C$ g; `- J2 A7 b8 ~0 V" ]# R   - T; H/ ?4 T" `$ V

9 \0 B b0 b+ i- n+ K3 j# X3 _

6 x O' V# G$ p; ` android签名的数字证书的一般都是采用 X.509的国际标准。 7 [" e `% ?/ b5 ]; e$ w

2 }$ j& V \, g( |

* z% f$ |- l" y2 L) z X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 + p$ m, w( d |' `' a1 w

5 C& G1 m; V& i. ]: ^( Z

6 | }: a9 Y8 }$ J8 e- e, T5 \ 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 6 X1 A# x% A. r. V( q( m9 p

! G8 d. _% S7 `6 n' o2 w

2 a6 M K6 L5 B& ^" C4 e vshapes= 9 C( w$ H6 ?! a% b. F

% ?( L% W. F" `- J$ y) c0 C

6 e: h8 ]7 C0 L9 M" c+ o1 f- H   # g4 o4 n& g4 t

6 M7 l- K+ _7 L# v( d) H

, r& {! m2 E/ G 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ' `! V1 i# [! {3 p2 f U

/ ~/ B2 a9 ~- E

% }; J! V0 z/ b+ o4 J R vshapes= & \ v, }/ q! e, s F6 r4 O* f

( |# o* T) r: o6 T, Y6 @

* T, }4 \% F, `* H/ S * Q& m$ x4 r6 v, y8 y6 f5 l

' I( h/ P1 J$ v D

: ?$ c6 q4 A$ g   ( d3 R9 h' F$ c6 k

( J. u0 w1 b% b2 X8 c, H/ n; n

; t2 R$ p( l2 ^+ ^ 权限信息 8 a( {+ S& y/ w: y- B7 v/ m

/ J" X @" Z. ~; s# q

3 Z, }1 X& k# W4 _: @! j1 ~/ D 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ; e! Z& Z2 d" f2 g" l7 f

, A- F3 V. D- k+ A) R

7 q" |* Z/ ^ m% x Z android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 : f* M7 g2 x! k! e$ a- C

4 y: B' D) P, Y L5 ^

, }' Y3 k/ X* ~- x3 L' {8 I o2 \ vshapes= + g( ?5 u. M2 ]/ E

, h9 P/ t/ q, W9 `( V

3 c; ?+ o# m: a) B N$ }) Q/ G   8 j6 E) N5 j3 }3 z4 F

: R' C( H. e3 x* R T" k1 o

- h1 L& {3 t; W6 I 下面对这个APP的所有权限进行详解下: ( ^/ m0 G/ D: i- F7 B; l7 y( T; U& X

+ b+ r) B4 H7 C* C

, p# W" s; F: f, H; g4 c android.permission.INTERNET :访问网络连接可能产生GPRS流量 + a: g3 Y/ y4 j6 i

4 Q: g+ m6 U3 l

# }8 j: U! l: }$ h& {- P2 b" L8 b6 ^ android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ! x+ w+ G3 H' M. \

: m% `8 Q' A6 Q4 m. |

* c+ V" W0 ?4 t+ Z) e android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ?3 j3 C2 m" O& ^) {& j4 l2 Y

: |3 P, M. b2 [

T8 G2 g' B ]/ S0 Z android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 . n) [2 |- ?. E( M" F F

% i* W$ a {6 b: B" w& M8 R/ r

. ^3 x: A1 s2 U+ e$ o0 ` android.permission.WRITE_SMS:允许应用程序写短信内容 / M1 } b7 X! H) h6 Q; y5 L/ w) N1 R

( c L7 F! j7 {' R# T) _# C

! f' f; \2 i8 `4 m# b2 G; Q1 N5 i android.permission.READ_SMS:允许应用程序读取短信内容 2 B# Z- N8 V. U# j

' R8 b! w* ]( [# o2 A! k

/ U8 e+ |% N; v5 E android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 8 z" |4 A4 X4 U5 c# ]+ G

# F& a. ^7 Z- [- |4 Z- H

0 ]0 ^8 N: N/ b* C' u+ j1 T# C android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 , a. [, ^3 @3 `5 n8 a* s

* a8 I: f1 G% }: O

+ l4 N+ g* O5 f0 K/ D4 L android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 5 ~5 w5 y' g! J+ X3 w, Q2 X! j

0 G- |' j; N, }: v5 n. I7 a

& W& \5 L& \+ | android.permission.VIBRATE:允许振动 9 b/ I5 Y/ ` S" x3 S# W' u

* m! H3 l" S3 V

, O; j7 u9 [& \) l' i7 H$ l android.permission.READ_LOGS:允许程序读取系统底层日志 K$ l3 S e5 k+ f9 i

' Z' ~) F! O' L1 }, o! _2 I

) @- S5 @- b* C8 Y" z1 H( W7 H android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ' H. x" l! V, d, p2 Y2 M6 m

$ t3 @8 m# r+ _4 x p% [, R

; S- c0 o+ Z9 k$ ~6 k# J9 E   $ `- K# o0 e8 ^

2 k: l2 ?7 S& P m1 L( h

5 C6 f% r6 a& i 功能信息 $ X6 Y( c8 B5 ?! J9 t0 T4 i5 ^

e! s5 D% B* Y

/ t6 ` J8 k. W- U4 {! Z   + R" o) L( A- G I" x( P

& `7 V6 I: V$ D8 { Z7 u

0 O2 {5 F; E8 L5 y) n# i' v 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 $ A$ n- ?7 z0 f" Q9 B

" y6 k8 y2 j) I) }# o o# r- J" v

; N8 z6 ?6 M# S Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 6 ^3 S0 }( H: l# r5 d% a

$ v9 I' k) P x" D7 d% |! d

/ k: W( m' w! o3 C# ?/ t$ o& ?! l 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 3 e/ _9 Q. G9 _0 N8 N4 F: x' ^

* S8 O( i! ?* Q W' O$ ?

, v. j \8 `# O9 C 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 : R0 y* D6 J# ~% M8 y9 Q

: f/ M# M- L2 }6 J

$ p# e6 |' E' m8 u vshapes= 4 @# G3 g# a3 [/ G+ }

% y7 A' Q% c4 [4 B4 i+ G

; U/ B4 M- Q; ]; u \   8 A3 j0 c$ \5 h

5 Y2 |6 V! U q- o' t

5 K5 W/ k* O- P; y( W 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 1 ]# l' R" L, `9 B) e- i3 R

# n( `9 t7 x- @) O7 v- [% w

' _: l! p- }- w1 k5 w2 C vshapes= S' W! u3 ]& C( G

+ S9 n3 ~$ K* v8 A6 a9 m* q( D

) }9 j6 Y" D# m   * {" x: U, z% y! D8 Q1 D, E6 B

9 `6 U' {5 `: C7 G+ a$ A0 _

, m! c% P0 c% V2 e" j! E lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 $ v( y) q1 l; d

5 {/ e3 z. N* m6 _! ?$ t0 e

$ r. {9 A3 X9 I* U u. |3 _3 [8 | vshapes= ; ]& g/ s# u3 y

# C8 z. X, n7 v' o: L" p* z: \" \. _

- Z) j; @/ w# T9 R7 { 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 0 m, x. }0 i, ^1 y

- W- p5 R& Q/ T

" J3 r6 {% T% X% S( Z vshapes= $ D$ J* t+ F" k

7 C: X) [& z# p) |$ p

% F' @5 o9 h; L" l: {/ ^   % \! I, u5 H U8 G8 o

6 S3 J6 {% b4 I$ s) ^7 f$ e+ ~

, T$ A& Z% z# h+ k! k# }! J' h 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 8 A8 p/ }) v/ {1 h8 D

" G; V: ?; v( l# d

9 N/ s1 g5 g \; T' i LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 % l( i9 r. o& _1 H) G9 n

) ^# U: W3 g2 n; y8 m

' P# c: a/ L. s* E/ o7 l& G4 a 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 Y A: k5 r% R; i

0 Q; p3 ^0 c$ f/ h [

" [. F$ R4 M! s; o. {8 _) |2 x. f0 S 源的luasocket代码可以参考学习下 ) W2 s9 \( A7 R7 k

; z( w! a/ B2 @( t, C

% q4 [) C' D$ |; x! u# g1 M https://github.com/lunarmodules/luasocket 0 g/ p8 N2 C' O7 f

" s# T! ^) Y( J: v4 _' z

w' O, A5 u/ U8 r, H' ]9 u6 r4 c https://github.com/fengye/luasocket ( N% e" f5 T8 v4 v! ~

2 c5 B8 y$ O& `1 l

o0 d5 D9 |# M0 M! Q* Z   0 R( _9 |) n U5 T7 t3 Z

0 p! L" z4 N# C5 Y, ?" y5 K% t# N

" P, F2 S- q& l4 _$ {2 T; Y3 ~ vshapes= * D* L; H2 |. ^* o" [. m$ ^: h% |

3 Y& k* h! N# i3 Z: j' l7 c: Y% [' h6 V

4 c" w1 i$ B' p   4 g0 k" ?- L& L

8 P# N; E4 P& i; p

. I) e/ o# X( g8 L1 y! x: y   9 U# R6 U( g* ^ Y# K

) v, @9 v2 l9 @1 G

& [' H) B$ r$ X7 w( i5 |1 \ 总结 5 N* e. v3 A1 u7 Z3 Z

& D7 F1 F# i! i& A. ~. x' n

, w6 y3 n5 y, }/ j 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 ) r. @7 P( g0 Z

) g9 ]" Y) H. f- I0 h: }

' I, I% s0 M: m" @. u7 {; `/ ? 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 4 K8 v/ K, C! K

! j3 s+ h$ S4 |# k+ r

# Q* t0 f2 j3 R# f 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 7 T6 r, L* Z. Z/ ~& J! `' w

: h6 A, j. Q1 b; [6 T4 o

7 I& z9 m& M7 m; B 结束 & d5 ^+ A6 @2 a( r

* B, s' Z' i- e4 K, X6 _+ V; _7 K

: C' M8 `9 g* p2 Q9 r3 C3 x! S6 w, {  【推荐阅读】 & `3 N* F" P4 ^$ C

9 [! x- V8 V% U( h( N9 X

2 j+ P4 T( Y$ @8 `. m; g, m4 Q 对吃鸡APP的分析 9 l$ B1 G* ?3 A8 e$ M9 l1 u

$ |$ x( T/ Z2 `! q" B ?

7 s9 A. }+ L: W" j8 X8 p$ a 你需要了解的APP安全 - Y f2 e: Y' b& j) E

" X; P6 i P" D7 I

5 ^1 Z `: Q. r 你需要了解的APP安全 ) f4 h5 @. r! [+ h$ i

4 T6 E! `4 X% i. g$ [3 L: e; A

) z7 y# M5 K: G% O( P8 p   ( ~, N- y( {. t# R

回复

使用道具 举报

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

本版积分规则

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