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

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

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

- T. W" N0 e$ {& F J- h+ n9 n 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 # e: s& h- I0 i6 E( O v

% J% r% H5 I, O; m- e3 G# S* d. J

+ T( h' i6 _- U1 V: a# f6 ?0 G& U3 D vshapes= 6 N! d$ S( f* x9 j

/ C1 p9 |) D- y P1 s

* G* M7 ~; x" A5 y( {   % Q2 G$ r8 n d' @" @1 f8 Z, R

, t; N2 F* m% h: j

: Y7 j) \+ B$ e2 ^: L& p 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ( F% w- P `! F& s' s$ A' B

- @) u: D' d. S

$ Z- F8 ^, j9 B: t9 h2 s: l   ; p5 T; J2 J7 N

% L7 e I* l0 P

?' D9 _+ f( ]0 R% @4 n) I' m 基础信息 ! L! a( o' p0 d# z" W6 ]* p4 V

8 \* A4 j. s. U

5 N) u3 w( S' i( H- A5 A+ e, [3 { 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ( }; [/ e3 c5 `/ X( b* V% {

& s! |% Z; T2 v4 W/ `$ y

9 m) @( P9 x2 y1 x0 { m; ]' a vshapes= 6 a0 f* Z0 w: @' U! J

7 F {7 H. }" q( t& j9 t9 S T

) d. [$ h1 q6 q, B   5 W6 l+ K1 ]$ |$ m6 a' W2 L

2 j- P' q9 z4 i2 ]0 D

! k9 H& s' ]) G: G* I 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 1 F" B3 \& T6 j7 p

9 @/ b6 ?8 L1 y7 x

7 q. o [8 D" S' p& n9 B vshapes= ! i& ~7 _+ j t E

4 A* B. l$ X+ `+ T

6 W( E$ t) J0 V3 H( K* x, o# N   5 k, @1 m" [2 y$ d' P

5 t p" D5 s Y8 ?. R) J

( b% ?' n8 f$ H 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 + y3 V9 ]" ]- }8 G' F$ k! F: R

- v( d- ~, _* e

2 a3 o; D1 r9 w$ X; C& u8 `. g vshapes= & Q& O) x; @- x

! @! ]# ?$ y- Z) G. x8 ^

! E5 v# n0 {6 s# U   7 o7 I- [1 L' d* }

/ H. p+ E2 _' p3 _8 B0 J0 D- T

, @4 ?' P, f% r6 b/ L4 i 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 " a- ~; s8 C/ @

$ d* N, ]! v$ B+ I. f2 \6 f; l6 }

6 ^- h- n4 H6 m# u- L8 M vshapes= , g8 f" h! Q2 q" ^# E8 v0 N

a7 m) e& y+ G- K. U1 j" u$ B

( |% A6 y& i5 T   q$ T* J0 K( Q

7 D4 Z- q0 [+ o% g# H

6 A" j, @4 g' K5 n6 J; ^. o 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ) o" l8 A* d6 B" _; y0 q" j

3 q* y4 E S3 n; Z# ]7 @/ t* R5 C# Y

- f, y; ]7 g& t. P vshapes= , C3 F; C/ g9 V1 i

* ^" Z5 Q# j/ D( p, k3 y

( l( o, x) Q- z2 \2 n$ C8 r3 e   - h& u u, U" ~3 i2 ]/ h# M8 t

+ O: O1 Y, o) n9 n" D6 f; k& J' f6 j

% D; @/ @6 w" S; e+ i* z   " O& o/ |4 ^& a" p3 g# o3 n2 j

6 y& V/ ?, _1 [/ G6 m. x9 R4 |7 f

! J% ^0 i% [5 S( n: n) `, b 签名信息 $ O6 s1 J$ A, e, o

( f9 u! {% P# b: B9 o% l

. W/ q+ ?/ }5 w9 N6 b 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 9 K/ U/ v) V0 ]; g/ D" U8 o; w9 G

/ y3 V1 v4 ]; ?

, M- `' @; S- b: q1 d1 Q 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 $ L. q; i5 M1 Z: Q: ^' U/ w/ e/ l

0 f2 C ^8 A. D" h: a/ p

- F( k! E! }7 i androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ) D- S& A0 F6 D) f1 M3 G' C1 n

7 e- {# {! E8 W5 O0 J+ C0 k7 I) d

* x8 q+ r* z5 q: C' } vshapes= : g3 ^6 j; _6 W% N9 k4 y

# _6 O5 R' a$ [, Y6 N" b

, ?9 X. I' I( S   . h) ^: V9 @' L k

" \3 W, z; c6 z5 y$ S

& A$ y6 k" _$ }& r% }- e: R android签名的数字证书的一般都是采用 X.509的国际标准。 0 {. w( F0 |# Z

, c, e' ?1 n8 I

! z# y- Y9 B5 L( W/ D4 W% |" w X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 + p* M7 N# A9 _& i0 ?

7 j9 r; F" E1 C0 |" V5 x* M! P: D5 P

! ?- A; J8 {! m3 v 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 6 i# A: a3 r1 R# r% A9 T

; A: R: P$ K+ [+ `5 e$ s) ~

, |5 k5 x9 z5 H3 }. w8 C vshapes= ! a9 C. W- k3 c6 P0 ]

5 V. d3 c2 m" n9 G

! J, s; S% ]" ^' F' J; I   # z* M, c8 t' [% P0 P

' e7 n& \2 `" i, ~; x: j

+ e3 m$ D: Z% b6 i! v 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 7 W" c# i8 I: Q

. Q; l1 E) M5 h+ `- u) X

" Z$ A3 |; V1 P- A$ J; S) n vshapes= 5 |# M% R4 p6 j/ F5 {

: N) M9 w$ X: s' p' r5 X

* j! q( Z$ |& Q7 Q4 j " u% D8 c/ o2 }. ?* ^

" V+ `, m$ \% u5 h

( Y h5 i/ i# D, C( m7 w, `   3 A7 n+ f" z# g6 R0 x

( R b/ r0 l" D8 `7 s

6 p" {/ n, e- N0 [+ b 权限信息 % t" ~8 C' U! L- N

- z" C7 ~( {5 _* [/ n) g

+ |9 t0 K4 H: E+ [ 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) . V% \, r; ]. W% Q4 }

. e1 r: N" p! U( j0 y

* L) z3 ~8 n$ Q) R0 w. F android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 6 B* l' x* J2 M

3 w: g5 L' T4 n. r: h1 A# |

4 H2 a3 ?& x/ T* F+ F9 ?$ Q4 ? G9 i vshapes= ) u9 ^' |/ R! Z5 ^8 Q( v4 I' ?) g& j

8 D/ H! |. B5 ]5 H9 j

. @1 X! K7 ~7 ^9 _! M* U8 J   4 o9 r% u4 s- C3 I2 j

; u, d2 R. Q6 ?0 W! p' r2 \

) j. r- O4 K% K( K# I 下面对这个APP的所有权限进行详解下: ) W0 ]! Q+ O. |( c. v

4 H9 s/ d3 x, x: p: ~

9 l% \* b0 ~' O- ]+ N, [* T! U: O android.permission.INTERNET :访问网络连接可能产生GPRS流量 1 P9 I, @$ q! ~0 g5 ~ m; L5 O. i

8 \# _; q6 Z, k, M

! k* b' G- p: O: {, I7 E android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 & P4 ~% \! ~/ e2 s0 C2 w

9 w2 k( W) B0 p q0 A4 M

! K/ L+ y/ i% h) F( P6 i android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 4 z, i% B. ]3 O5 q" Q

3 ^ B3 C4 y7 j/ k f

8 C- D+ `9 w L android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 0 e" S: e/ O' T% n9 `0 z

$ J/ ~# I9 M1 C8 ^! I( |

, j2 U+ p( L3 f% I$ J android.permission.WRITE_SMS:允许应用程序写短信内容 1 `! M3 j, L% i5 o0 D4 J% `

. `+ _2 K2 q2 e

+ L, H% `) \" y9 M/ f! m6 g android.permission.READ_SMS:允许应用程序读取短信内容 ) c! D0 `9 g* g5 b) n

4 }: l) _0 b0 l+ h9 q5 O

# x$ q6 \8 i: n5 b. _ android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 * _, h2 \6 w) e! V8 s6 d

- R8 |: \5 I% y9 W, W2 ~) q

1 M. P+ D1 w( w+ K% J; Z( c android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 9 h+ {6 _- _0 f3 v, ~7 x

2 @) ?9 K0 O: ]

2 }0 }, x0 U) \5 Z android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ! K6 v: f2 g( X7 u4 {4 M

+ E- S. c$ M" T) i# h0 T0 w

0 Z2 c+ B) _5 \0 Y$ w1 M android.permission.VIBRATE:允许振动 " \9 [6 D, l& {# U; R k, A

Y6 Y" ~2 Y4 ^( l9 F

4 x7 p3 {% }: X+ k$ o android.permission.READ_LOGS:允许程序读取系统底层日志 + D# ~, p4 }" b( |9 z) d( s

! S @4 U: K d3 H) r- @

4 L" [( N4 Y8 G android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ) l4 W: I: z" [0 `% Q" M- q) X1 B

2 ~9 N1 @% D( ~

7 u# X6 S! n( f% b& Z+ p   " f+ j' l5 k$ P2 d, m

`7 F, M4 m/ a3 y: M4 @" A% w: s

7 J& ]+ V L: X0 y! P! l, P 功能信息 e7 n, Q9 l. j4 c s3 J% Q) V

& p$ F+ n. w8 |

( R. R; N6 i* g K) K3 G   1 V% O) j4 a' u* j

% z, N) D0 L6 b# a2 D! \

% a& z; |. A: `0 ~ 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 6 a. ]: G8 f+ Q0 Z+ v

) y2 F$ A- M. C8 h& B% v* _

9 Y- @4 Y6 V: Y# Q' t6 P, o Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 . A" e- K$ F* A) X6 A

' X' N8 t7 a! B) G; Y

% q% y% \* f: ]/ f% G. z3 h 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 # Z/ _- X- h& G* O% F: _/ t1 c) r3 o+ T

8 t3 J7 G) U: Q# X! |' a! {4 \" b# {! P

6 Y' e' Y& b; x! @" Z' A 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 7 h" J! S% k3 Z+ w. j3 A* m: a0 V

5 @9 r/ \9 F- l w9 {: O( v

; {4 F* w p, t) f3 D9 x vshapes= ! N8 P) K3 d0 b: |; s

$ ^& @' E2 j; M. L# Q0 \

4 |( T+ o* Y' O5 b0 J2 \   & D0 J* X9 P( X' F' `8 O6 m6 R. y: D

& q6 Z. ~ _ i W9 r- P/ z9 w

0 V7 G W) _: D6 a; n 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ; j" F# Q& M, w& C( [7 `

8 {& l- h; ^/ q" l7 r0 K

8 [# v8 \. v4 p. m3 q, {6 N vshapes= . v3 @" J/ [. L6 S" {

) p! m: l* Q; L$ O

: ]. I3 O, q1 X   " G* p& w8 W! K1 p

' |( h3 G- F( v7 j. p1 p& g

5 Y: A; @5 O9 @6 S" N) y9 P" T& r lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 : p& q0 r; I ~6 }0 M3 B3 i

- y: I6 G9 E" a/ ?# d6 G

! e; ^8 J6 V0 M vshapes= ! [8 i( o, `/ O9 \7 Z/ W: g

/ M4 n, j6 l; Q* U& r

+ Z( @+ u, v9 m9 Z+ g. T 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 , m F/ P! k6 l; w/ e

* W- B0 n# C. N8 |& T* l

# W5 m) z0 |" ^+ `3 _ w vshapes= - R& |; ~: g$ y; t# _8 ^+ {

- v' B0 }( y) t) T1 a2 ^3 l) Z4 Z

+ H9 `' N) n2 |4 E7 O   % s' S( `% u6 ~

5 Z1 t1 }. F& h1 H' c/ Z% b# A$ n4 O

5 m5 v% Q1 o+ u 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 1 B' h. q" z5 g# G, f

1 u/ v, K5 G1 O' I: j

0 k% y* U% w' y* V$ f LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 ! E1 S3 f. t3 C7 X

0 ]) M3 [2 K. W) ~7 _, B. ]7 E

" F# W- @3 F; J. h) B 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 : [/ o- |9 N: F

6 \( q* `$ W" T* W

p! b2 ^. [7 k- } 源的luasocket代码可以参考学习下 9 X6 B$ P0 P. J& o! u* }$ G

9 t- ~( I; y& d( y1 e5 h

' P6 C( k: D6 C- S https://github.com/lunarmodules/luasocket 1 p6 Z5 b H5 S3 Y

7 \4 ]8 l2 F" E2 C/ ~$ e

# L+ S+ _% G! N* _ https://github.com/fengye/luasocket $ r' t k& ~( {9 G4 Z- U

9 U" {7 ?0 Q i0 u* u4 q

5 i# Y3 V/ _& n* Z+ @, P   ; Q, }9 N4 |9 m

. L0 c- a1 X0 g6 f9 G" T

! T4 w& \# @8 g. R/ t vshapes= 2 r% a% H' Z, h

) B5 m- E2 S) w- e+ f* L; t% r

* |2 E, c, m: e' M   1 C! J* U+ |9 u9 i2 e9 t0 {3 p+ v" B

$ K" d* f N3 W% j( X' j* \

3 ^/ X5 \; m- f+ e, o+ n   + ^- j2 w5 b) Q1 c2 B" {0 u" F$ D& Y

- h; m! w0 @; z3 U: u

4 g: _3 M/ H; J& [% ~ 总结 & [* y; f7 M3 X- _

3 P3 P, \. E) D* N$ ?

3 R6 Q/ u; w4 _/ @( {% _& Q- y% u! n1 e 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 ! U! f/ J- f" b

+ n4 I+ |; f8 G" {

* G4 w2 l/ T @* [9 P% h0 Z 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 8 D# B% X% d5 n

2 A% G' ]/ n8 T: a. t

- ]+ w; t, c* Y, }$ V 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 / ?+ j- v- B5 P) e# h8 |( c$ d

8 d9 Q* q" U# L5 W; @

8 X/ i! \; ^' j9 d 结束 & K- p7 H4 c% L4 b; @4 G7 K' Y

+ w' k/ s2 s3 c" q9 |& t" J9 x c. j

/ K& K* G3 {! m1 {7 F" ~  【推荐阅读】 # [5 i: F7 o3 w" h) K$ [

" M6 P3 p/ r) H8 L& }% d

4 [2 w, Q7 `7 g) y6 Z' @ 对吃鸡APP的分析 - ^0 X7 s% }: y% z6 u

0 J) z6 t/ v* w0 B4 t. ~+ O

) m8 G# Q$ }2 u1 c* Z6 s- p 你需要了解的APP安全 ?% t, N; h4 f

% P9 }! z4 y# v1 y; M9 x* W) w

5 s7 ]4 m4 \$ a. X2 h 你需要了解的APP安全 , T7 z$ F1 H1 \

! L1 z/ R! C( t7 ]

% A' |" h: F! f$ s   5 `6 a- U) M* L4 ^% f

回复

使用道具 举报

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

本版积分规则

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