找回密码
 立即注册
查看: 5517|回复: 0
打印 上一主题 下一主题

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

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

- Q0 {4 m3 e/ }$ o" u 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ( |6 C3 t T/ M' i

% e7 j" O3 v# f" S! U

: L$ w" [) ] u, G" y, _, ~; z. F vshapes= # D- W# y: g$ C6 }7 W3 J

) i/ p* P5 N1 m' B: y6 E2 w8 K* F

1 g1 t6 ?! i. n5 Y$ v+ j3 D' E7 r   ( u' i% y E1 r

- U4 v" D" d$ {1 M: n/ g$ I

3 B; b7 W, a* R, P5 F) Y3 F# Z 下面就以开发者角度进行解析下这个APP的功能的实现原理。 * r4 m- W% u) P1 y1 E4 ~

0 }1 L6 j& `) S: ]! B

- J; b9 Z& v( l' Q9 `4 P   7 s. J6 t$ b* e$ |% T3 ~1 _

8 }, b0 q" ?. f* C4 c+ s8 G

1 f% C+ L1 x( m/ \* R 基础信息 7 T% I$ w# [3 x- e

( j4 |' f' w8 L1 _. w% S* y& A0 f

) D1 f# k+ x0 M: @' X- q 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 . s0 l& Z4 M, ?/ A1 o. u2 J2 Q

' f- X) p: ~! ~6 U( R( O- i

1 M. L9 r: t$ T; E& d! ~ vshapes= 3 ?) l4 I. Z( i& r' f, d n f

7 r5 O5 k, j7 g' g' {

/ u" w/ s+ e3 B5 v$ {   + ~. L- g8 ?9 i; }4 K

" P8 z4 U6 \( c" a+ V2 \8 G

% Y2 f3 c9 u# n- I4 N3 X 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ) s3 e1 p9 H" K: a/ _

$ u3 g; W, c5 e- I

4 \% f, ^4 E3 `" j vshapes= ( u( O. M* S' j8 K$ x: i7 v' I( Q

8 z3 J( G2 O9 B% T- d$ \" U

1 Y4 w! P5 N7 m   5 D8 u: |6 I% W& Q# Y% |

+ M- y% ^8 S/ v! v. }

4 ^$ I, z6 `# j O, e 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 , |: {7 |4 I8 [: ], r9 h

) k' g& i9 e9 n' }

/ u, a1 l$ U5 |4 z: P vshapes= ( V, { @( @) L' @

, ]3 a# j4 w* s

! W7 Y$ M1 d+ Y/ E- c   8 G& S$ e7 p) U: L

. v+ b% ^* C2 g s+ x) {9 m5 g

$ ?/ g! a& v" w 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 + j% Z' n3 G! S0 i" i

9 d% y8 U# T, ]: O) u, t' Z" \

P; K& x0 t0 o' e vshapes= . v8 n9 o3 N/ I* e

2 i) C& o, W3 o* v/ ?3 ]) P! Z

* b0 @3 F. \. F# k   * B& ?9 Q R h& h6 {

) r; x$ j2 z" L

% C9 Y: G/ Q- d8 v3 t5 v* x9 A 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 / f' k5 j6 D+ z# U3 K- l% F

' a8 \; v$ R6 X6 B

2 o. L- U" v+ i& D" W vshapes= & k- ~# r& a3 G

- P+ D' b5 k9 S" \$ d# }

w" j# P( J- d( d+ l: U   8 R3 P4 l+ M R, E% t2 p6 H

% J6 T7 V- y8 [5 u

) H! v! F1 I$ P' k1 G   # J$ h4 j$ g3 R8 x) r9 l7 R: q

8 ~, Y6 q5 V. J* P9 d6 N

! S3 D/ V/ o; x2 u 签名信息 4 t' u8 t, y! I! A, C

8 P; l0 r, j% K& O* [

0 X3 v- T I7 P/ |9 E$ K 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ; v/ U/ }8 d& r, L5 D

+ E5 w$ J; T& i2 v2 [

* E4 D+ C/ X8 E 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ( b, |7 G5 x& C- l1 s

9 \+ x0 T/ J+ K( X N$ v9 B

& p* R6 n$ b5 Z' u0 V" t: f- v: }5 w androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 0 ?4 ~) L/ N5 s. K

/ p Z! \9 l7 d3 N7 M% T5 t2 y

9 w- N. @% z; T$ z# f' } vshapes= 8 [, i/ T( [, h4 E

8 d7 Y7 Y3 m5 U

/ k _. D& a& y9 {/ ~   6 }+ s$ u* z7 F, J3 L B

9 J$ }6 z& {$ @' D

# R; l. f- x$ x+ z9 Q android签名的数字证书的一般都是采用 X.509的国际标准。 , C% `$ s( U$ l, b

8 ?) s0 P6 D# w8 _0 E

# @; `! u7 [0 G* S X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ' p" [9 D3 x d* }' @

7 S# A5 S8 f L- x& y z4 ]8 R! m9 A

6 j9 E# K; k3 y6 f( I 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 1 U9 m) @0 A. [, Y i8 j( w

: H: s$ z1 g- `

% T9 Z; g5 j, _$ ?& k$ b/ E vshapes= ) O. ~4 t$ D- D* ?* s

# f8 d, j% N) r; H/ K

, T% N6 y; p' ~1 Q) o   : R, P+ _$ P. g: e4 Q

) Y' {# T. f; f. k5 n

* h7 ^/ u6 F0 ^) f+ Q* O- s6 C 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ( h1 P' F5 H4 r) P+ c' M+ Q

) k" @( L, @- i- j7 l+ o- A

: H7 m+ k5 C9 R% C2 `' v l vshapes= 9 J+ g7 s4 ?; W, e

- c( ^( ]2 @) t* Q+ t: m

7 N. Z. c# y: z# C+ ^4 U : {' k! b. Q# M4 B7 U1 p$ p

@4 M. j9 m) Y6 p

x @) \5 Y1 } `. u   ! A1 ~3 V/ v( u$ I! u4 O# R# `

4 {5 f9 a5 W5 w# m, u5 r7 g

" g+ ]: G- c* s% Z ~: y 权限信息 % q" I- \$ b( [7 G

1 a# s- K) m# P+ q& f3 M, q

6 [; E1 ^# `; i/ t 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ( z1 T+ R& p0 `# Z$ s. t6 G8 ]; q

. \9 Q# D" V9 i; V6 f& h& M

- @2 R5 Z" O9 X- x" Y- P0 f android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ( z0 E! W/ g2 U9 j9 l$ D5 { f" @

4 c. @/ d4 w' F( W; l- \$ u

0 u# E/ X2 G. {, B vshapes= " h% Q' Z$ V }* C

: Z" H$ ]8 k9 E- a- R& r

' t6 u( b3 f0 w   # L$ H o! `* a- k! x( [6 T

Q; N1 o! E. X+ L

h9 t. K! |6 U# r% m0 K1 l 下面对这个APP的所有权限进行详解下: 7 d. k0 v. F% s- W q

8 A7 j' z) U" r9 Y% |. q

2 m$ D4 h' I' ]1 A0 i+ V android.permission.INTERNET :访问网络连接可能产生GPRS流量 s3 f0 q+ A, b; ^: m0 _8 m

: L- r4 ?! }3 e0 L$ ?

0 _9 B! M3 i- {& A* K5 |. s android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ; i6 k' @3 L1 X8 ~ P! A

( p |- R9 Q( b6 `1 s

- i1 m4 n/ C* j5 T+ H3 K7 ~5 [ android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ; d: Q+ {+ m8 v; l5 }# v

+ ~2 I9 h" F% {* ?3 y8 I/ x1 f. B

3 D5 K* M" ^! G. F+ R) c* o android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 0 M0 x8 h+ L i! ]( z2 B

% s1 m% E: o/ K C: |) o) B2 O; `3 r: Y

; W4 \$ D1 W0 k- I) o+ z3 V android.permission.WRITE_SMS:允许应用程序写短信内容 7 m# y" m8 ~) Y% R: a; r0 n

' W" T# m& y0 i& Y8 R4 D* {! f

( u: |3 D. T, W% a4 s4 N$ Z android.permission.READ_SMS:允许应用程序读取短信内容 : M9 k5 Z) u! B7 B: Y5 i! r( l

" a. N* o/ Y* E# i; f9 ]

# |) x$ H) g* }* D( J6 ] android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 4 K3 M* j0 i0 m. L

! b4 E6 I7 D+ c. K9 o

7 L. q, I% {" o" S2 D android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 - z( G" Q0 t' X( T. g' }0 v9 C5 p

7 u1 I% Q" ^5 `# X3 {1 h# k( Q

8 X! K2 ]7 E, e0 z android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 1 p2 d* N2 f. s! g

6 b7 j" f* b9 Z0 T5 s: P. ^ p- q' k

5 T4 ^1 _- F! q: _( H android.permission.VIBRATE:允许振动 6 e, _! J+ {$ [0 u6 H( ~* Q

4 y3 E2 `+ f$ f6 u# }

5 N+ W7 \: B+ z android.permission.READ_LOGS:允许程序读取系统底层日志 ) y% r6 n0 F# m/ z+ p

" F$ G: ?9 [( Z

1 R# Z; D3 G# Q( O android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  - N& d; l5 W" T& G

/ f+ `# |- D& o0 E" a/ U

# Y% N; g F, U: r   4 A5 p$ f2 w% j% V1 |6 | F, R8 q5 t. L

, `/ \& z5 e7 H9 q

& ?4 T. @0 s1 Z0 k$ v 功能信息 * q; G _1 w* j' l, g0 _0 c% f+ X

" s2 g- i/ _& i9 u8 [

; I. f S- Q" P5 p   & A- I6 _' ^% ^

3 \8 @: W: }6 q) T2 l5 ^5 B

& S4 \ P" u5 T7 H9 i 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 5 V0 q+ n$ ]8 @

( s( J. ?% C: w- L' {+ A

' j7 Y! o1 f: `2 x) [' S Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 6 r9 ~3 e1 h7 J9 X+ B4 t

; a W( l. V( d1 a

7 ?- T' U; U5 C9 y1 b" L- x v 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 4 Q7 L' o' H4 H* |

5 T6 K' F5 j3 b7 ]3 p

8 U1 _$ t2 ^) _' X9 B3 c' S 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 $ l: j- s9 B' p/ ~# Z9 G- K+ O* P/ R

7 n4 Y2 ]( \4 j$ N- f9 g6 j( W

* ^- H6 ?* e/ z* u* q s |4 z vshapes= ) f6 W B7 \( f4 O+ A* G

$ E5 G2 D9 Q4 U, S( Y& J* c) J$ t \

5 ?8 U2 {/ S6 S+ L   # \0 u- F3 k' }: c8 ~6 w

0 l+ D" w$ i9 z7 l3 W4 L. |6 e

. V0 w" X$ m q7 q- } 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 # r8 e6 }5 Y: x6 F/ a9 C

5 S6 t B, U m/ _! [) y& e/ o' v

* }/ e; u7 r( ]; O vshapes= 2 G [% i, f" [' ~% S

: p/ E+ c) I4 ~2 z5 D

$ t8 Y& q! m6 O% T   ; b M& Q. x- G

/ F( M* v/ s0 ?; i" F: E' R

6 Z( W7 E, Q U' { E4 w* @# F lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 % T/ F& Z, N) |) P

7 Q/ { p5 _7 F; A; I# C

/ w5 q/ n/ ^5 P' a+ B4 {7 H vshapes= + H5 N, N0 E% k$ n. c- O3 ^6 u

" i! r: X1 W7 l

- w$ b: {3 g# ?+ K) x 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 4 ?/ F( C# n5 e- ~5 ^, Y9 |+ D& h

" d3 W' j1 p$ s, }6 n8 v" A& j9 P

8 H! z& C6 y1 H- h2 A3 S8 M: @ vshapes= 4 ^3 w( F- \5 ^' b" A! E

_# u$ V2 K6 J* F& I# J& k

% _- k6 }9 ^8 j* W3 f. k   8 E6 j$ Y2 M, w

' z" `# M* ~1 j4 L

8 U0 V1 Q/ W. q, X 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 8 R- a; @" T. v% x" M+ `) m

" q# M8 N3 e7 x& n

* K4 `0 H/ ^) k LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 8 p" L3 w. `4 v9 A

% S' l- g0 K- S8 |( Z, `+ m. J

1 N, e) ^3 e- H8 C) X/ |) o 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 0 ~, y. J7 J; k/ l/ e. W. O

5 Y( T3 P( i* O4 A! l" V

& G; J6 \+ n3 v& w8 h7 n 源的luasocket代码可以参考学习下 # G: l" q" A* ~( }

1 j9 i; A2 w |, z

. {1 R6 V* C3 J. ?4 Z0 e https://github.com/lunarmodules/luasocket / v! T, [! ^5 `! ~, Z) p' ?# Z: J

9 l {1 b( B+ g5 @5 b" J6 e

! x3 f$ z4 h: e https://github.com/fengye/luasocket / b/ v4 e" b+ @9 p

3 r: r. q% L3 Y+ \4 p2 W

7 {9 _) W( Q" c: a8 P" D   % s1 ~0 C) n- W2 q! M( |" ?8 Z

+ |3 V! z# n3 ~0 D8 Q' P4 `% {: P7 l

) E% i% G( v- b# m* h7 j vshapes= # T1 x: g- ]' k$ O

+ J0 r9 @( {5 b

[' V0 q: ?# N: l   6 n: f* ?+ a" |8 w) t" r# Z

5 v% v9 ?5 y5 C7 H8 \

3 W9 I/ l" f" k, h" h4 A   ' u! w. \0 g$ g' p

. A! H' {+ }) X9 ?( H) u/ s

^$ y. L h4 P% n# i 总结 ' l( y, E) z- ~

. Y: g; u( S9 l) V- r

3 ^# c! v) h+ Y 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 0 m" r4 {9 ?" b: R8 i: ?! y% m0 X

0 Q8 T# y; ~$ n7 p; d+ V: j

/ y; F- @9 n' }* A) g! ? 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 / R# M/ Z5 l8 E" }

# J- \3 H3 t. H. m5 `; w$ h

+ a) y8 y! u6 G+ c) v6 P; ` 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 1 U! ?9 R6 U1 }1 w

' f& a6 L% V" b6 U

?" W8 T$ V. d' q( ?$ t5 j+ C 结束 n* g) w# w; i$ W7 I

! k4 K& Y: j5 ~6 p' ~) }1 e

4 J6 r5 E6 w; y3 z! w) _  【推荐阅读】 8 H9 u0 D' }+ ~/ x9 L

& w7 Y# I- F c' l# [4 A! v

$ q7 ?: }* x9 V 对吃鸡APP的分析 1 r ?6 W, u8 T+ ]2 r/ q; G

, s* ]/ O' d+ z

* c+ N* f G' m0 k7 J/ d4 i 你需要了解的APP安全 2 t( d9 Y* |0 ~' g( P

6 Y6 t' u" ?6 \$ O

: Y/ a! N! E3 q; k 你需要了解的APP安全 / [7 h# ]. _, Q6 X4 P6 ]

7 r e& u7 L$ z2 G! k Y

! p$ [& ]: k& Z% y h \2 v   . f7 i1 \# G7 ~" S; R

回复

使用道具 举报

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

本版积分规则

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