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

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

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

/ T; N$ z( b& A 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 9 A! C4 l3 g' B) F

) {9 }' s) L( E3 ^3 D# R) P

! M0 Y4 t+ c' s0 S$ X/ y* K6 Z vshapes= & v- h: `/ K$ ~ S8 Q

3 K' S3 M l$ W' Z* j

4 x+ [# r2 x; `1 S; |0 @" h   2 j E9 f2 [' h* M, N

2 [( R( f: a' w6 ]+ d4 V$ ?

. V" Z/ G) m! X A# X 下面就以开发者角度进行解析下这个APP的功能的实现原理。 / }7 J4 K/ V/ l0 ]

7 ]% L7 i: E2 }1 N' [+ J. m

& `& {3 S3 v& S   6 k ?$ u$ \8 |, V }* g) T

6 \* m* j: A2 n( G

8 L) C) w' V4 J/ {. m 基础信息 + r" Y+ w$ o% K# {0 N. q- e/ v

( g: J( n/ y6 l w7 C0 _6 p9 I6 U

w6 t6 }7 \( ? 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ) K# E" U4 W5 m7 ?4 }5 N! B/ v. ^

( I. b9 W2 s+ D. o4 ~* P

3 a- k3 ]$ B$ f7 _ vshapes= : b9 R0 q& c' l9 B. U: I$ i) b& D

5 _1 W' R; A, H* V6 J$ D- R

4 L* v5 v8 r( `! y) {   9 h; g; f: e5 {& P

; {/ Y, [: ^$ W4 ?5 {, T7 M+ `+ y

0 |, O/ M8 f8 n; u1 k3 S, z7 B0 J 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 % Q8 ]# z: s Z8 Z

( D( b1 o I9 C8 P2 [0 n

7 ]* J6 G% V3 u5 K vshapes= 0 R4 J; L( u8 K: ^ q( ~7 w+ I# a9 N

0 P, S9 R2 ]4 m6 J$ c% C E% D

4 q) F8 F9 h& j* U, X- u5 Y   / ]- A( M @, Z; [; `# {7 z

- H, ]8 x% o3 C5 F# e% p/ Y. ^( P: e

, X" l% H' V% W 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 , q2 m# _9 e3 [

1 H9 m2 R6 o! G! T1 t2 l) U

# c; K: ~3 \5 j+ R: D) D vshapes= 9 \) L4 F" c- F( @/ \3 z8 T

L1 U( P" ?$ C6 Y

' p2 k2 B Z2 Q   8 |. ~* l% I) W& b; Q- _. R6 s

4 G' M0 Y" c* t0 q* A) F% L7 C T! O

$ z& Z% V0 _/ G( W' V- t 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 " g; G e7 @& u& u" _% |

) p3 ?9 L( r2 Z2 }5 c+ B5 `

/ z7 f- d+ K$ ~; H* g vshapes= ! Y b7 k \$ ^3 _3 Q2 y

/ d: }+ `% d4 a+ r" E; X

" C9 B- L, d; M& D9 Y   , _' L! E7 x$ E% B* F- U* f) b

. N6 ^1 E" X% L" y4 j

: ]9 j8 Z: {5 G( c 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 , l0 |' o+ L7 S f( l

, j; h* g0 l$ @

, q1 j. u' p5 a4 z3 x: X$ }+ n6 T vshapes= $ }2 J m6 Y \6 C3 {. H' \/ |% ^

! C2 _- ~7 I, D' t# p: v

7 z- [# A+ w2 M, J# M; e f   " e, A0 R J4 R! j6 U

, v# C* b3 c2 s: e9 [( m

/ m/ T. w1 n, x- y2 X   , E3 |: m7 O4 B

$ Z! L# W. J1 I# ^- V: q

, O) R! s, P" D3 {4 j 签名信息 . F& Z5 F" V' u

. E/ u C- U/ b! Y6 E. ^) k

% r" d2 f4 a1 d; y 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 , U9 D4 ~; f" ?7 S( T) S

. p( Q. o3 L8 p5 F" B2 R6 | _8 s& f9 K

! P9 s9 m: j* W' j: y$ ~8 P 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 $ p' q& q3 D, o5 @" O. m

& C! }- d; f) T3 K

1 |9 w9 y+ @3 j' }- z androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 8 S* I# K, L' T

- h. w. H" V S

# V: d# Z/ R8 Y S, i! i vshapes= $ G( B$ s% T- h' l8 \" r

6 s) H+ N7 w4 x; K" I2 b6 B

; v9 u, W- W/ R, L" z0 }   7 v- c( m( c8 z/ ~

( |9 m- a$ K% Y6 s

- E z$ B) q" f& F android签名的数字证书的一般都是采用 X.509的国际标准。 4 k& f! g, {* o8 p4 e% e

) |" k E' {3 y2 [/ J/ p

1 ?* l; x, w2 i& a6 R X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ' w. y& C3 C- O, O3 m" W

6 x% y: j9 x# h! c: {; l

0 t. d, e) ^9 Y: J! J7 U1 E 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 4 \7 Q$ ?2 w7 {% O6 z# g: V4 h

4 B) J- L6 Z0 W# ^' s' h

& z7 w5 C! l U; k! z0 Y vshapes= 5 Q7 Y- H+ F9 {4 H; s1 h

" Y6 o! T a& v0 y5 C; Y- k

; L q# l9 W7 f q7 D   : W7 I b* F s" \

_" l4 M1 Q8 R# o) S

4 a8 j* c+ u) F; x& t2 `0 u 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ( R% B; O7 S8 r: A: @" D- {6 o

, H. u, O- [* s% ~8 c0 l$ h0 k

2 H7 ^% B* S, d* @& |9 E- a vshapes= ( y: E) k6 G( a7 o7 A

" M/ ^; p3 D# x/ e6 P1 X5 e- L

3 B/ N" b6 }9 ?! k7 Y $ j( M8 l; H0 a& U) [

- p) R) l' V! g q8 O1 ]9 X

# j0 j5 `) k! D7 i8 ~   ! y& |. K7 U7 s5 ~% V! q

# D* E6 W0 }5 U- s/ C$ T+ n

- f' _* m. q$ E' G) a6 { 权限信息 1 x2 k' F: ~" R$ K, w4 d* M

, [* k1 Q0 g$ D: c2 ?' }3 T

$ a! O4 `8 `. a i4 Q 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) : a2 G; E8 a- T6 b4 y/ B$ e# ^

9 U/ x; t4 {) N$ s

0 V% j1 q$ }5 S! S# O android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 . B& x! C6 p* R; o4 y

8 q- q2 E! O0 O/ G

) v# \* b* k4 j2 g4 z$ G' W vshapes= / j1 a7 c5 t8 f- H

$ b% b, a, @/ Q) W

, I( S0 |5 Q; b* M7 M, L' z' o   * P4 ^& v0 v+ [/ G+ k0 Y

4 {3 x0 M" H' T7 V7 z9 T

* f: _ G/ |3 E9 @ 下面对这个APP的所有权限进行详解下: ! O* b3 v) Y) ]! R

( f. W5 D8 n* S3 R! c- E: M1 }

W9 k% X+ h7 Y% |: c3 A android.permission.INTERNET :访问网络连接可能产生GPRS流量 # K& S1 J+ c$ B7 h) q! X, Y

& m5 g% S% P( T& T9 J

2 ~" z3 g8 t5 C android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 / W: {6 ^* @: [4 l4 g

; S* y6 _) M# J4 n1 c0 t' M3 l2 D

: d% A% l6 J, a3 O+ J android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 * H* M5 Q' c' u5 k/ ]

3 _; j! m6 U. U7 W/ j! N) P" p. W

, l" \- g7 H! A# e# ? android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 3 a2 q6 Z6 |. g; Q2 B

' z. y7 _. R% d# j

% Q/ o: }/ D" H3 Y( k android.permission.WRITE_SMS:允许应用程序写短信内容 1 I- f8 E# J2 r0 [/ X

9 j" U" W* I- n. w) }/ B0 c

! D) e+ C4 H8 s0 M/ t android.permission.READ_SMS:允许应用程序读取短信内容 8 G# m5 {1 {; {9 y$ c$ F

* G: I/ `, ^8 O V. b- G+ c6 X) O4 J3 a

; p4 P* M" a* z* q) [ android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 5 B4 O) x- W6 g. l

9 Q/ \% l6 w9 P/ O2 J) U4 S8 ^

* h0 q+ G( N$ w; z8 F% v' E android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 - H( s, w% w, T" Z$ ]

! |$ Y7 g. P6 r, D

2 t4 H. _# U8 L$ | android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 " i7 D1 k6 |7 \

2 L# `' n+ {% T& y

' _3 J4 Y5 P9 [2 ]! k& } android.permission.VIBRATE:允许振动 * e- ?7 S; r8 u% c% d. } ~

; |3 s" s7 o' u$ t* A- g [# i

! ^4 d8 X0 p( E H6 B, ^ android.permission.READ_LOGS:允许程序读取系统底层日志 * R3 r6 L6 U! r

2 W8 l, g n0 X3 W) F" O4 Q

1 w# j/ P0 Q- v3 O3 m$ Z8 m' H* P; o android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  % n5 P, c) }9 t% u

" v4 g0 k6 p& `7 p l

$ N- z8 f- I# A$ u, t   0 S' Q/ X) n8 m% O( D. t/ D( y

4 I+ O2 [* I1 u9 H

# D& g* O9 e9 ? 功能信息 4 d4 R# L3 I9 B8 z) H3 F% N

% a/ b0 g$ f- }

0 |- d6 i! V9 }   7 f- a c' ~0 S d5 R# b9 M

4 ~' X @8 S3 B1 R- J* \+ v

* @, i `" B: y7 z8 R 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 + X: V0 y" d. C, ], I

5 C$ \) ^( E0 E, f) S; G

Z) W: t& l# _ Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 % z5 ~ ?. V. F/ o5 B/ a

# |" H, ]/ P9 C2 Z9 P- x S* @

+ {; I4 M9 l4 m 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 + g2 I5 p+ ]3 v3 w3 y

( E" t2 E; F T, g u

$ H& S6 Q6 i! p3 ?. E* ?. U 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 ; n/ f3 N6 O3 Z, m) _& p

: H4 d9 r& B1 e! s

" i" l" e! s2 q! ~) n vshapes= ' z3 L6 \% S3 C

) g/ W, Z; c+ w5 Y) K/ B+ @

, w1 e+ T4 b8 c. z   ' w2 ]& x- B2 c7 I8 l. w1 _

6 \' b! Z8 `/ ^9 h0 }% {) i

& {+ H. }% J) @" w3 ]* [' p0 w 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 " L9 l! \7 Y" p8 f2 ^$ l

& {; T7 J# E- ]5 C

! L5 @9 y3 v z5 F& Q, M vshapes= 3 X: `" W. G- G& f# i

( x/ z: i p9 j5 A& L" x7 w$ j( B) V

6 P: w2 ~: l9 f- a. t! t   0 ~. E- a" F& A

3 |, q* i# V& E; B

0 A5 \8 x- [) m! H8 P/ ~ lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ! ~+ x# U N3 u

* G7 ?2 g% Q; P

" x- m4 {9 \# o) { vshapes= , @8 b) b$ m6 s/ M5 Q$ O- h8 e

4 K+ |& `8 q' ]0 E" n! ^: M1 E: J# i

: F }+ Z5 Y6 }' j% Z 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 1 K+ i9 [0 _/ S& \; a% B

1 M! L K2 _6 E" ^! M( V

8 y$ @0 f$ S; [* j9 ^! Y vshapes= " O" f" W) ~3 d$ F

$ [; b5 C7 Y9 i/ x1 B, P) s

l8 y+ b8 U, m0 V   8 b* J) [/ g: ^" i

6 D, k% j- N' W* B- c' L

* h. T1 Y {5 z4 V1 P( N 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 - Y: k2 x4 E/ B( [4 @

2 v4 \" w! Q7 D8 ?$ n9 V: d

+ S2 ?8 R* z# [1 }; Q. M' A$ R LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 . H' l. Y; ?' |% ?

0 o' s7 t, |6 q

O7 x! G6 I/ R 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 a& Q9 q2 X7 v

. Y- x: o+ s( s) |

4 P$ `) @) f$ Z2 g: b: N 源的luasocket代码可以参考学习下 7 r+ A. y" d! @( c7 R" B: O9 @4 K

' M' L0 f7 |) r" \* k3 C- X

' k8 q, n: e' I( ^3 j https://github.com/lunarmodules/luasocket " s: P) P( d2 g: R Y6 ?# P0 s

) `8 i/ k+ Z `8 h8 r5 O6 d

6 ?3 ]4 C: N0 w* g( @- \ https://github.com/fengye/luasocket 2 ?5 J0 C" x1 A8 y

7 e# Q9 Z" o% U8 s- a

( B! y( X: ]+ Y* [+ z2 K) m   . ~* J, P/ P3 \) `% D

2 Q- g# i7 S4 R* _) D/ Z& E4 S

4 e2 o4 N7 L' q) L9 Z vshapes= 7 B5 I3 Q6 g9 D) k5 A

- G* N) l3 i+ g" E

, a2 [% A# U" X8 g \( }2 L   # f; A" Q: `9 c

5 G7 s1 {2 L& v3 w: |& r& |

4 V: ~/ P1 s2 s* {8 U! H6 H3 S   $ I1 T m2 b" ^ s( o. ?

5 J" x0 u: k0 F" s* g- n

0 o) U$ Q3 Y$ i& k, s0 a 总结 * K: [: d) P4 p9 A/ n1 p

" v( F7 c3 s* \, ?4 K/ |

% ^) T+ A. ~ f9 \8 D 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 & t0 F, b' p6 j5 e* I' }7 y

2 a& Y* |: V; m

2 U, v4 `- {/ R" V( }# t- } 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 * d3 S' z) a3 z# ]. @

8 e/ ^+ C$ N, ^3 M( L4 J5 L/ V

) F8 S# ]$ u4 ~1 V+ W, N 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 " j- }* g3 I/ V: b1 D

1 C/ g7 E( g9 M) B( C: h

, J# }' f7 w' [$ ]5 p 结束 ! _- _7 `" y. H2 F: M, W1 A

% r) ^3 h" f! D, Z/ l& }

8 ~; b' |, W7 @- h6 {  【推荐阅读】 - M1 N; S9 y; S- W

" K% G+ }* F2 _9 [9 Q* J

" Q3 p \, ^4 q 对吃鸡APP的分析 . ~& [, X* u; n0 K/ m

' x+ _ P7 U- `3 H; Y" t" N

, ?6 c( M- s9 b0 P6 ] 你需要了解的APP安全 6 w; G6 T C1 Z7 k

/ a8 q# V% A. o3 B

4 T1 j4 h- U) @" [/ u; |4 l0 x 你需要了解的APP安全 + V0 g" h! X3 x( b; C- Y

! m; u* y' h2 y0 @# m3 R' y e. [

U- ~% ?9 g& V, ]+ a   # b+ g$ c% j, v/ c

回复

使用道具 举报

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

本版积分规则

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