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

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

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

& R3 H5 f0 I/ ^! [ 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 5 c$ V7 Z# ?5 e+ D

( W) I9 V# ? C3 x& C6 ^) n. _. b

4 y8 Y! B- J6 N& N) d( K, { vshapes= ) Z1 O. a; N4 K% x

3 T& |; U# k6 H }! D, K

" b1 x O; {' ^" u& P   , g3 l# r, \+ k6 d9 j

' g/ U$ J( w8 P& \

0 n. ?5 G3 E9 ]! [$ L& M4 o, H9 L 下面就以开发者角度进行解析下这个APP的功能的实现原理。 & |( s: D" k& u9 o

9 F6 g% O) Q2 c3 i9 N, d

1 d+ b) N2 X( U' a8 G   % P+ j& A4 I0 f

/ D6 X G! h, M) g0 D5 \* B

$ E& k2 j, K) v 基础信息 2 q: H+ t( d$ x- K/ k8 o

4 N4 J, y1 R* I' a

/ w/ K% s: I9 u, [! j 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 : `2 G: H% {; M0 b+ x

: m* ?8 [- M: j' \0 B

" j8 p( u3 J( [ ~6 _# ] vshapes= 4 _3 L# {, C" I% `/ W

/ F4 N: i& k& v) x

, g/ D: m- P$ ]: N   * C2 {- c9 D* Z7 c/ b* R8 v

2 B m) |+ s5 R1 p9 f

. q. S6 j7 }* ?2 p- ?/ ?' @ 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 9 N7 ~) y% K! i

) H! ^5 |6 @8 |- m" q7 C

: }) j% C% k* c$ F! ~ vshapes= , \/ b$ Y( O$ c- [# b( w

/ J4 F8 D# U4 K+ j9 ]

3 K) w- @/ `$ S' ?9 k V, W- q3 f   ) x1 h3 c. ~, U6 n9 E

* I1 u, C- B: y, ], S

7 ]% k0 X+ a: ^2 g$ m 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 0 S4 V; f- c$ H/ r- ^ i

2 y. W" ^3 z6 e% M

& T. l' Q! j/ H0 u+ K. l/ S vshapes= 9 C/ y% H/ w, H! u0 L

, @% T, `4 b3 I. I( |+ k

8 ?* d9 S0 n5 I& H   - i" v% M5 e3 V( v% ^

$ h F- A; [, e. J$ u* y: g

2 U9 A% |* I1 b/ K 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 / k f" C% X5 A1 j. e( f

9 u! S& p# s7 j, m; W& E" y5 u

+ `5 E6 y. B6 P: }- Z vshapes= 0 @# ?1 d0 F0 q+ C; T" T K& D6 L0 n/ g

4 d# s9 Q- T5 P" }9 e3 g" _. J* ?

7 A, `. ^" U8 o- e   9 {0 d; v: ]( e) \" z

8 X9 ]3 I% ], l6 P7 X" D

0 Z1 E/ K2 X! e7 x3 D* U 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 * a+ K/ A- B* h! O

2 N% I0 U# r9 x' S+ { Y! Z

' m; P, s0 z% ]( G0 H, J R vshapes= 9 T; S) F7 h o9 p) o* g& ~: i

7 S/ G) O8 ]& V g4 G0 a, ^

' C' N2 |+ a& \2 i$ H6 R/ U" u4 u: l: O   * W$ V8 e! U2 x* v% E0 [

! K: B5 \) Y9 l V' ^- ?

; L# L) q! f- R4 k: Q2 j# |& t   0 j/ C4 s4 c+ N* l- f7 y

9 U" n7 z0 N' f8 [5 m$ M9 i4 ?

0 Z1 `/ G9 V9 n7 W" ]; L 签名信息 : Y5 H7 M/ d8 Q

. N8 N( R O+ y* K- K1 E# P& J s6 ~

, p" @; U0 `+ h% j 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 3 T9 i1 F; B% N+ ?8 P6 o( {5 w$ q

/ L* c7 x4 p+ Y" C6 h

, ^! ?; ~) R6 J' t: m 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 * P$ c F, h0 J ?; x0 a# h" ?2 R

, v" J6 E0 u5 U0 g7 l: e

# k" k' \( O# p! f0 D2 e& v8 \6 H androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 # f" w) n B3 G' i# \! e( E

$ ^* b. P0 ^1 ~

% j% P$ {! T4 k% N) L/ l7 h+ ] vshapes= 4 x. h# g. s$ i/ T

& k' s1 d6 m1 m1 z

- }0 J" f- n. b2 ?' R   . }8 L9 }# w$ r% M# P: Y

" i _0 v9 z( _9 t$ v. }9 |

& U$ Y7 S; q: y3 v r& Q android签名的数字证书的一般都是采用 X.509的国际标准。 7 c7 P6 h& R" w; `- } h: |

" c1 C( u3 n3 V

! o7 o7 Y! J' S, ]# Y9 Y; F X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 0 E7 R9 y/ l# |

+ n- c8 K8 S9 S! ^

7 ?. Q0 Z: l* z, d 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 ) k/ f7 r- f# s1 K% i" {8 e/ r; o

6 s/ U) G# t+ @' j

: P5 V$ K( E3 j% Q7 x vshapes= % i4 \. d- e/ f- T, j1 G+ H

1 Y$ a' n8 \; g& S

+ N+ Q7 ^5 W. s- n% D+ K$ ?   - h: ]8 A4 N; e9 x5 k

: g& n( \6 {) ~. l

9 i0 r% v T) c* _ 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 + w+ ~3 N$ ]1 d4 ^- s, [; E# o

, e7 z, F- I; K7 D' }& W

- _2 Y o3 X6 t vshapes= 0 U v0 `8 P: g. h

/ v0 ^- Q0 t# M3 Q7 B! v6 d

; _; g t H0 }# y" L4 M- j # N0 Q E1 ]+ b2 {* t! C6 M

* r( K+ M/ F) H9 r

- ~% j/ l z+ e: i; x   # {8 n" r# V- d# ~

, r% s6 m" E4 u1 P, e3 D

0 L: j; I- z3 R6 {: C 权限信息 ; e/ q. \+ y$ x/ S$ c, B

" R1 O2 E8 H6 V3 Y) W& D+ N

7 K% I- @" M, ~4 d% R \# n4 H, @ 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ! |3 H& X) o( y' G( @7 S

0 r F+ M7 p; j, ]* q

0 N, V) O0 {4 v android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 L* e# o. c2 D K

# C7 V2 N" z4 {4 g% }" c; _# Q

7 u( y$ Q* K* j% h, H% Q3 g6 f vshapes= $ a* `9 u8 A0 ^3 ~9 r

3 w0 q( o* t2 o E \

8 S* m: \7 A7 K" N   & b9 n- a w+ Z6 M, A

- B0 w$ K5 Y+ a* I! Q* v

! y w1 A6 P- o, W# J 下面对这个APP的所有权限进行详解下: 6 Y7 N4 t% N: b' e) M

* ~1 R1 ]) P% X% N$ d3 _

) u4 G( ^6 ]6 a9 s$ T3 O& A. [( t# ^; @ android.permission.INTERNET :访问网络连接可能产生GPRS流量 ' Y) |# g; Y1 k' |

& {" M5 S8 M7 v* W

' T4 q9 |3 f) ~- p( e: p android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ! C' N8 l# B* m8 J

: m5 P; R- ^; G; Q; G

+ B# [0 B; I2 W. I+ u; b( L6 d( A* k- p android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 2 A( y9 G4 _) `% l% c

# h6 ]+ }) W2 i

/ C( c7 @5 \3 t A2 W! ~ android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ; A& S: ^. \! n* E) X1 P9 L2 j

% |) q4 s3 |* \& ~' B! S& A

3 |2 m' |" o+ E android.permission.WRITE_SMS:允许应用程序写短信内容 2 `1 s7 T" W5 u7 g3 ?8 ?

& S# i( B0 c* \5 ?" M, ^) O* Q

2 T; F: o Q& l( E, |; U& x android.permission.READ_SMS:允许应用程序读取短信内容 , Y: p# H5 k7 b# a$ t8 x# x

6 r% ~8 `, w& A9 o* X2 j: h

+ Q7 r/ B) y6 h1 J android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 & Q) U" k" D* y# L' [

5 }9 A5 _, _3 L% u5 k/ z& ^1 p

1 a) B: T: V/ a0 k# O+ m android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 - O4 |! f# m6 u# R

5 \' [1 K. |7 G, Q# Q

8 | ^/ S; {; y- }4 I2 T4 M( d android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ) `2 _! Y: I4 d6 B" m. b7 Y5 Y0 q

3 `3 Z7 W/ R& M+ Q4 I% F: ^* X: ]6 v

: ^. s& P6 G/ X android.permission.VIBRATE:允许振动 ( J/ B% e7 o5 |( }/ A

& L# l1 e! ]% `3 q B- X

( [3 ^% R, z& W1 H" h/ e$ d android.permission.READ_LOGS:允许程序读取系统底层日志 1 o$ Z6 u6 z" b$ R) B* A7 G

0 v0 S2 O) ?: J, X' J, \2 |$ S- f

; \; C( h: @- ?# C* _7 \ android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  , d$ _3 @: a' V% G9 ?

1 W2 z6 C4 C$ M% w* D

% x+ y4 X& k0 Y% h2 F; `- }   . r. N7 y; B0 J6 q0 \

5 v+ `3 ?/ a8 }( h

& o% {" \& w# t6 ?9 z 功能信息 2 T8 b6 r' ^7 h6 y1 h$ D; C9 O

* G# |4 C( ^5 |2 ^

: z( w* y! R; e* F# A- l( C   - a. q# ]. o: j* l8 [) r f3 ?

2 u3 Y4 O* b' J3 h

( l6 V4 w5 r/ y7 e5 a! d 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 $ T3 O1 ]. t. a3 [8 }

2 \$ H; [2 u& ? h1 V5 E$ ?3 Q# b

a) R8 o0 R! [% U: n8 p2 \ Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 0 D3 `- l. c, ]2 y' s$ Q

5 c) g K& ~/ O4 q1 V- ?; ~! V

* S# D$ H# \$ u; }" \+ S b 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 ; K* e5 {# @3 y' M

, K0 Z9 w+ [3 X: y* r x* e* j

0 u2 t: ~" c7 X3 H 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 7 `; t5 s2 D4 a

$ i" _, A+ t9 \$ t5 |0 W

5 F: u5 Q& |) j, X9 G; a/ A' w vshapes= 5 u6 b$ g/ B: e3 o$ O: U! j5 K

4 | w, K& p* A5 N

% Y* }/ G- g$ `# S   6 k2 E! w5 W# }' X J \; K" |9 |

7 z9 ^, ?% v$ }( M

- N& G; }' U' S0 L8 w' q9 Q: f 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 $ K6 v" O/ n# x( @

7 k% j5 d6 @3 ^( t

: v2 L: \/ G8 g p: m vshapes= " E: W# `( {& Q

0 C; y" P( m' o# o+ @* s: s

$ G" z* s+ R0 x   1 K; r* R! d" l& a5 n& F

: H3 {- a& Z: o

; c- X4 k# X2 r: B9 E lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 + F3 m: [& n6 C7 g/ u/ Z* d

/ p: q/ P5 O: Y: S' E/ X

* c2 D1 N6 A; O; l" P/ e vshapes= , q+ k; N, ]5 V$ l, \7 E& V0 T4 c4 I

1 h) A9 W4 W( Y$ e" O* g& [

) r7 I+ h6 D& v% g 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 8 F/ ]: |; Q; M2 C5 V( {

7 N% U% T f) j% |; S) N/ T, k, g8 ]

' j& ^9 D. ?3 l8 p vshapes= ; ~- W, a2 T1 a2 B) y% z

8 @7 I X, d' I3 z. k

; m# w( |3 ]: V* w   0 a# ]0 ~" E' e

6 D) ?4 M$ l$ b. B4 H: i4 E$ E

' H; |: t; y6 m1 |! S 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ' q* N1 O3 V4 e: X, _( W6 S* g& d

3 U; }: I2 ~3 J# Q" f. |

& U7 e% `# S' S6 V1 _. T& S- ^ LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 8 D& \% a# A m1 C y7 Z; B A

" K$ y% s; ^" y" ^" e* `3 S* V

' `6 q; s; j* O$ U$ y; N9 q3 \9 u 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 9 [" \* M! c: T8 Y/ U }5 w4 ^: g

2 e2 p3 B# |" ~5 G6 @% @. A$ o

: L6 ^& A& X! t `4 } O" i 源的luasocket代码可以参考学习下 2 N% K- G6 Z7 e2 g/ [

. K$ X3 y( |" i/ Z% m8 d% g

+ l( P! u" M* r/ y% q! ^ https://github.com/lunarmodules/luasocket 4 I) W5 t" E3 C

4 F& `" a; h( ^2 b, w# m# H

/ S- ^) K1 o/ g! F. y https://github.com/fengye/luasocket , s) R5 B1 R3 G; I& u8 x

5 u1 b( c7 v3 M! r3 \9 e0 T

8 {! W3 L1 f5 t5 R) Z( P1 d6 o   9 v2 \: `) o. @' b' {5 C

# d; G4 `4 M; T4 k/ ]6 f* T

" `( Q3 G" L+ C vshapes= . ^ d; m L, l1 B

- \, u& s* ?# ^) ]" r

! S# W( ]5 G/ }   6 _0 A: H( U. v+ F, s+ N3 E; b4 g

* _0 T1 ]% `0 ~, f4 e8 I

& h: T- u- ~. J6 e' _- v. B   ) z1 K9 T* ~' d: U7 T! K3 Z0 S

" E+ I9 a# v- Z8 D& y3 S4 q8 G

) r3 q+ M3 a0 D* M5 v# x! {. }& S1 b Q 总结 : \6 S3 [( m+ \: J' ]

8 N) `( J- i1 t& C

3 S: E: R& ]5 D 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 2 ^" C, Q/ n7 K/ I5 l- c

3 b+ }; [9 A x7 @- K

4 F4 ?( W) h* L2 H/ H0 G9 P 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 7 ^8 J/ S# X, [. o

1 M& H5 b# Z; r( `# t* T- [

7 ]+ F9 n: L$ S1 x4 d) M; ] 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 4 x7 a' P" b H2 w2 _

$ x$ x2 W4 k: z

& t! K% p7 ?- z 结束 5 L c5 ^! |/ i- C

( x' V* r* H" X

b0 B2 H( I) {1 s  【推荐阅读】 5 m$ U* g9 ?' ?" L# k- P

/ R2 E( v! [, j6 \" d- t$ w

8 I" u" o2 v1 C% v$ s. G7 ? 对吃鸡APP的分析 & L4 y: a2 G8 _/ V

8 C0 Q3 J8 U3 v* q

7 x' S' F1 r- ^& u* Y 你需要了解的APP安全 . n1 X' u8 q! K+ O

; w- g% U$ a$ ]4 J- y5 o

# {; X6 \' t) J7 l$ r 你需要了解的APP安全 % b* g: N4 ^' d6 y2 R

+ X L/ |& ^% `. K& b Q

/ _. a8 o& j6 y/ l9 Q* }) }0 u   ( D) l ^- N3 o7 { O; `) d. B6 [

回复

使用道具 举报

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

本版积分规则

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