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

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

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

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

* A0 g7 {! I" x5 z: @

: P5 d: Q0 d0 T! V" h vshapes= 5 i8 }+ Q2 V; h

, r( s% I# }$ b+ ]

% M/ a8 U. v# A; u   + L H9 l# m& w: ~" l

& l9 w3 z) B: M7 r& t) f

y5 }' t8 p" G3 K& l 下面就以开发者角度进行解析下这个APP的功能的实现原理。 - v% a0 r: ^% t! d! Q) M" |

/ y/ r) Q. o6 P5 Y' G

( r$ Y1 L* N, w' V: m6 z$ B   l3 Y3 x" ?2 k% p- n

2 ^7 @5 ^7 n6 X( B7 z

8 @# t' U2 g2 p: ] 基础信息 ( H. Y! U8 p( g' n1 W: i

7 k L) w0 {( }. G8 Q6 P! r1 N

7 M: I6 N8 T! y. b; N; a- r! R 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 % u% x* I9 v) N# B0 I, M# h

9 e4 [" d9 d* a! ]8 |4 Y

6 P( z% ?2 e5 f% d vshapes= & ~& R; ~& A" a4 ?6 P7 F

' ] S* H" \" J0 \. I

' [, l/ d; Y1 E- C% m! P5 U5 w   3 U; p/ U! J* T# Q; o' b

5 }4 I5 c6 x7 T; a3 {8 r

2 z+ x) F, u$ y0 ?8 N) t 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 1 t R7 P8 | Q0 V! _7 a

+ j. \2 U1 ^ J: x0 z

3 m; b9 ] `; @8 V& _! o vshapes= 1 `9 J' s# s$ [

- G. ~& K# D. p5 k2 T+ W

3 ]3 n, m9 r% s- }% s& o6 k1 L" s   ' J" |# ?5 c7 X( u2 f. l

; \& o {* u( G& l1 y9 J

* R8 o5 ~+ Y+ F @3 M% R; h w 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ) A, l# d; ?1 W7 W% |" H

; G9 u( h1 F" A# X9 f4 ]

. z# X8 f7 y* R" r3 s vshapes= * h5 f! D" s, y+ z, X$ i

% L. U3 v7 F0 `! F4 j* H3 ~

& o( O7 ]9 i, ?# r0 w   : U% n2 h9 H& b' w

, _3 P; c! W% x* x: p7 I: Y3 \9 x% ]

+ R5 K; N( V7 g* d! s 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 . V, Y& z( N; D% d

4 G. F; V% X! m8 g/ _

+ k/ ?( m5 `; ]: I7 u8 Y J' a vshapes= - U; h; g+ {, T

/ X3 W# t$ N! }0 r

! R8 X9 f _0 t9 u! {2 a   : g7 D9 P+ L/ N( y# r0 J. {0 }

* p% g. x) L# C8 G5 H+ D6 t5 y

5 O7 H" R$ i0 V- {; @0 B 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ' }8 T0 [% k) {& v1 [2 p9 x- {4 a

0 s: R1 @! x9 b5 r

! q1 B- D2 Y0 O4 Y vshapes= ( h, k" j+ x6 G, G6 I2 _* N! d

8 \4 K" y- R1 L

9 V, {. j7 U3 U! S5 [/ N   ; P) p( }! t) g1 b

% C# ]( e0 K' [+ M, @- P

{ f# c8 o, e1 h( z   8 b3 S- D3 G/ K# ]

' _# _0 u7 }: V: J$ [! e2 k- r

4 C3 ~9 C+ _% {; O2 u 签名信息 - t, _2 f. y/ e- k" _- g, ]

: ]1 m& M- W2 @) M

, q3 C7 i6 k) G" m6 H" M$ k) ] 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 / H# |* c; y# H& s

% }3 d) ^3 D+ F! Y$ q

# U& K$ c3 c: F 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ( t# O0 H( C: h

4 k: T* x& y5 k) G" m8 A# v

, H% `4 d2 ?; U! }. S$ Z, ^( f androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 # O! b2 @7 Z# O

- j3 E8 I7 B( B2 x) L

, l! F& P' C+ Y n7 b1 E vshapes= & k/ S5 E1 y1 J3 C4 G

. t- D1 k& y! H: I

/ a6 G4 B7 }6 j0 A; e, P8 f' m; s   1 ^3 Z- F' M( [4 U5 S: l; O

2 n# d- o: Y% S1 D

" `+ Q5 h1 f" j7 i1 n; _( i) q android签名的数字证书的一般都是采用 X.509的国际标准。 " L1 t7 i9 Z5 L; W0 `9 g

`' K+ e+ {7 V0 ]# h

& o* Z$ X g9 E k+ \ X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 0 f Q9 K8 b2 o& X+ s2 I0 _+ K

% Q, X5 v$ j' [4 c

2 U" N" T& ~. K+ ~4 Z2 u& R6 ] 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 3 n* d: `- g1 v! A9 F8 G% @ f! {

}+ `/ u% h/ y

# g' |0 N7 ?1 O9 E) \ vshapes= \, v; b: o( u& J" O

3 N+ d# G- @$ V, v/ ~3 [

/ O6 L6 R4 z3 _$ h9 Q6 u   ) S7 M6 F2 ]% s! ] W S

4 _2 Q. T# h5 d: @$ Z

* `4 P$ t, Z9 X J5 S. d 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ) ~* c3 S j9 ^" { g# T. p

$ _: y, \) i! i% G L- ?

) [+ j+ k q9 s" g vshapes= $ _) |0 S5 Y* O. L

) Y6 e, J3 c; O5 i

" z$ G1 B \: l2 d, Y c 4 B2 K4 H& A) n ^0 K+ Y

* p+ f3 _$ U. f( f* t7 k

* j: d, A1 z A1 H( k   ! E& g9 h6 ^/ p+ d; K9 k

- k5 G7 o5 o/ g/ J7 k7 h

0 g8 b+ ~( H! J1 G 权限信息 ) B$ ~3 n5 u- C4 V9 X( g

& q) ^+ w# E3 E* K9 V

& N; l; K7 `7 I4 {; Z9 h5 d7 [% q 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ' V% U+ P/ p" E' |* H8 U& I

/ G3 ?. |* U: S8 n) m. b5 j& F3 y

, ^. {4 Q9 H8 t$ b! h7 S$ c6 w# O android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 # V( ]% |( j' X5 |! g8 e( c

$ q# {# T; S9 D/ u7 S8 u3 y

2 O8 {2 \" B' F6 z ^0 X# W vshapes= * C, Q" n" T5 W( w7 ^$ o

0 }6 {1 _6 X. e

* B$ S8 e5 K D% b4 Q   $ O. J; o' G+ A; D9 }

( @7 f- G' p2 d5 f

. }0 C( Q5 Q& ^+ w2 x# [2 U% m 下面对这个APP的所有权限进行详解下: 1 j9 U/ Y0 F6 l

# m; K! c2 u( }' K/ y( t

" n9 Q3 h( d* u& B/ I android.permission.INTERNET :访问网络连接可能产生GPRS流量 7 I0 @; S& X3 ^9 k

# Q+ G% ~2 f' q1 o# j* `

) `' n' j8 V V, g; D android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ' G; v- Y8 W# r

9 Q. z m+ C% n; u' v0 j

; j4 ]1 |; r- W% h* I0 ^ android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 9 y" K5 H2 V8 p6 G, b2 R. {

1 {1 Q+ @( i/ _* B. C

# y( ^3 {* Y$ @ android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 . M0 ^, U( b1 y

2 u K- r7 G7 X1 n8 t

: u3 I7 {% m, v0 j android.permission.WRITE_SMS:允许应用程序写短信内容 , t2 W) X. _0 X ^

0 X3 [- k% i$ @! V

- A) c. i7 X4 m android.permission.READ_SMS:允许应用程序读取短信内容 % ^( X( J5 Y) v7 U

, K+ N7 Z U: I1 Z/ x5 N% D

- J6 X6 |9 M/ t$ F7 r& ?5 O android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 3 w [: ]8 O. E% n/ r

, i& a9 l) n& `6 z8 c+ U7 H0 k- f

. w* X$ d# X7 {# r' {* i! o android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 " \9 e& h4 t4 X( u& n$ x

+ a5 r3 A+ [# m. X a+ b

1 F* D6 v) J8 Z) e8 H2 r0 x$ A) h android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 $ j0 \% Z* m* ]# v; `: m

; d. ]# Q# i' [6 c( c! h3 y

/ C: S ?/ B! B3 N5 R+ { android.permission.VIBRATE:允许振动 : M: |# g7 \) L+ F$ Z# M2 n$ Z

" q$ V0 |2 W' a/ _8 H# G

9 I& d5 f0 Z+ N, U android.permission.READ_LOGS:允许程序读取系统底层日志 & R* y% m( ? E9 ^

# c" c I4 a5 Y7 S$ P: g

" s. C" F7 d- ^3 m android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  3 k+ s1 l( Z. H. X

6 c- p& q( q% F7 ~

9 _8 |+ t# A) {7 B   $ w# }" O: `" D; L

- e8 j3 G. e* E! v/ ~

+ t, a5 I/ E6 h( a 功能信息 $ N2 U% H2 A( Z* \8 m- v

2 M [6 f* l, g

4 x( V B* U; V/ _- I# [   3 N2 c1 \* ]1 v ~; P& P/ _

4 H2 B% Y+ @- [" V6 G6 S

! x1 v" h( y8 \* n( W: z 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 + y/ K: R: K8 {& X1 ]3 s A( \

. ~, T/ C; ^ A* r2 D8 b. k- Q

, w7 i6 G- F6 q" \+ t6 i& y" r5 M9 w Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 8 z2 G W0 A8 |+ S$ b

8 g& a. M9 @4 ~2 w; o$ ]

! c3 {7 F/ t$ U A) B( i 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 $ F& Z' J( G) B) w! V

/ W: D7 V" w4 B; V" R7 ~

S- l" ~* k! b7 S2 k 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 1 h! |6 a" d* |. Q, d! e4 ?

5 m* r2 R8 h. s

/ j2 _7 Y% C( u* Q, k5 l% H vshapes= 5 \! M$ D6 {: k6 u8 D j

: r! \0 Q/ l4 {' p, E

$ y4 B5 `. i+ |: s* q   ' h% K; [/ T! b. g

: _5 q! `8 x- B0 ~8 W8 H3 ?, E3 @

* |6 |& {: f9 ?9 X5 I 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 7 L6 z6 h+ o) T

2 H" B( c, l: R/ C9 `

5 g9 q* l* {* N# J vshapes= ( D3 f4 B7 b( b. A9 C( B: Z

$ Y1 K3 S! n D* d$ k/ z4 ?

0 E Z' z; }/ F1 [$ d0 w; W   4 x& p0 U6 D5 ]& a$ X+ n

0 l7 q# U. y }& ]% ?4 b

3 @( B; i+ @2 F" Q lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 , n8 ^+ x8 V' f- H- w. i3 z

9 C: y3 s9 B+ N Y

2 K( \5 Q2 ]1 \ vshapes= 1 a, E: [' O% R& z

/ A) p* ~0 X, u/ Z/ \2 t

" L" X: f- v9 ^ 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 0 Q7 N; q/ ^- P& c/ S8 E9 O7 W

. ?- d3 c6 Q- m( e" S: G+ p

- L2 `+ N3 n# w2 R% ? vshapes= ! q; v' G& |3 [; j! A' Q8 s% j. k

; Q& P: h1 m; J9 l

; M1 a. b! U$ H" _$ c7 @   , c! K% l0 R+ B

+ d9 @& u7 d2 z( o2 h9 @6 T) r

! Y' t. j4 l: s) Y7 k$ T 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 5 i' J/ L( i( l9 }$ ]" v$ ^3 Y

+ p; h) j0 P7 U( w6 q& u+ {

7 P0 R; |! T! K/ I% ~# u LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 . q" ?6 a$ t0 h+ `3 ~' |* i; W

6 }6 S( j" q% U+ h* c2 l6 ]

! W2 |* w: }6 Y9 X+ y- i; | 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 * x; V* H; I5 u K3 k$ ^' h

( V% X0 s6 r% ]1 T" e. h; F7 O: W

( ?- |( j! j" i7 i( w7 b 源的luasocket代码可以参考学习下 6 M F M% }0 [& R, t+ N7 h# V `

# a: C" t+ d" }" z- ?7 y- u* b

& b+ u2 k8 |4 n! I X) @) t: c https://github.com/lunarmodules/luasocket & U9 Z& a' p. ]* w

. v, i. A2 R* I: A+ R1 L! ]: R% `

7 Z. k Z q+ @. K: Z k$ r https://github.com/fengye/luasocket . ^2 T$ y7 {+ ]; Q2 w1 z4 V

3 z1 b/ |$ Q+ ~5 {3 o' P6 Y

6 w& m. M$ e# l1 I0 q6 f   ) @1 I* {0 L" |- @0 e

: Y- h F7 A% |- {

4 A* e9 @! a U! J+ ~6 A vshapes= 8 N$ U. C. f' o8 \( k+ Y7 N

& V+ ]+ i* P" F" n3 [' i

1 E% M2 z) O( |   6 S( T6 d- o5 R( |: X' {* w/ t P, e

2 B7 ] p2 |# l% p V) r9 ?! o ~

+ {+ e9 `$ d' P7 c8 I A% x   ' y0 B% h7 ^/ {2 g& j. H

2 e- ^' C: q/ L( b4 {/ g! h1 A% e

5 H; F) h; T; H9 w- u; p, o 总结 j( \2 \' M# U% O7 a9 }+ D

' G4 G! X& _( L0 Z6 d7 t- m

6 j% } B) Z! B1 L* Q6 {4 u! W 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 / E3 p, j* P% G# L( z% B/ o3 B& d5 J8 T

& f+ r! V% O, C" T

8 X. U! C( M$ {$ _ 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 * r( P4 J4 o7 X8 ^/ Z' ?/ ^

" ~6 Y$ ^) E1 I, S$ I3 A9 J

4 t+ V0 k. |' [- j2 S( v 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 $ D6 ?8 P( }* `7 b7 `

* ?0 x& ]# i/ H

6 G4 j( s% z4 C1 Y D; ~( Q( t 结束 , R$ a& P: [9 w- B) F

9 X6 T6 y' y* ]- W) ~; X

0 q: s) W! e0 m; ~# }( U [# Q _  【推荐阅读】 4 u% m5 S- z+ D' C! S% t+ J

0 ?! L' { ~' k0 w3 y* m

% }! L8 y8 `# K 对吃鸡APP的分析 + r$ l; e& P3 ~3 u, r: _& _

) L! X7 p* n; O( Y5 c$ D

# v5 A$ { s. e; w2 O 你需要了解的APP安全 9 v2 c6 a1 z$ a6 r+ C" n4 @

4 T `0 U3 e2 ?& R7 x) D* Q4 \1 i3 F3 n2 z

+ A7 D7 C1 Z0 X9 V 你需要了解的APP安全 7 _; j6 q0 U/ A; r4 I9 p6 M% Y4 Y

+ ?9 K" y2 I/ g( c

7 Z3 N) q; U' a   5 m5 d6 L a( G: \6 F

回复

使用道具 举报

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

本版积分规则

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