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

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

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

9 y# D$ A! a1 y% ?+ t 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 . Q* H7 F; y' m6 }0 O; @ y" Q5 P

0 D7 d, P' P Q+ S: y' L- F

/ W9 I q1 J( }- [9 }6 q1 p! g: _# P vshapes= + b. B4 j& E# T

3 d7 P A$ [2 I9 S

$ K- J2 k, ]* h3 c% H8 H   $ _% @5 [6 c& \3 s2 d. b

+ K4 {8 j/ j1 f& X

' J% i5 [$ I$ q7 w6 J! J 下面就以开发者角度进行解析下这个APP的功能的实现原理。 * K: m$ @; g7 P+ U! }: z3 |/ w

. }9 K6 {. x' v! j1 K% D" o" y

: k. u; E* i" C) e% C   3 k( l$ b8 c3 Y. E

: O% j$ t5 H! o0 b6 K: R

/ A6 L8 A' ]3 t 基础信息 9 B/ h' h: h% V" e O

7 z9 p, [% f) _ y: Q

) y; k7 g4 y6 T/ I1 L, D8 K& r4 f 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 . E8 [2 h% M* M& M" z3 ?0 t0 R

6 J6 q8 x$ F" g% X8 ^- e/ s

( Z! F5 w9 g5 e$ T" \ vshapes= 6 \; L3 Z. o" ~3 X1 b: M

r5 ?) K ^0 M& G% B

# W" U0 e& O5 w5 R; ]' M   . h9 @2 m$ M6 h! s6 D( r5 K8 f

9 ]( b1 j- m( i' W3 F

6 x r; z9 F4 O! \ 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 $ T$ ^( y6 w) S( k

8 c1 a/ g3 _6 n4 R6 Q- H Q9 i

) O3 n$ D3 Q; n% ^ L. Y1 ~ vshapes= * \4 e' f5 {1 I; ^9 \0 ^- i

" Z7 c& {' ^+ R. x7 M. z

; M8 \- C! q/ U' S( i9 V& Z7 u   " g. }" Z/ i+ b! R* L* F

4 g! j" X1 X6 y+ D2 s) ^5 O' ]

! [9 g* M! S( E$ d5 b# c' u 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 6 z7 `! s7 ?7 q0 q

. B7 A* a3 |" \2 o; E

5 V! L# _- a: h- S) H9 _: N vshapes= / |% m# } f/ d7 ]# q

) ]& D$ ?* Q9 W- _- C9 \

; e* }/ [" j' z9 {: q0 v' [2 c   0 e" E: S0 @) d$ s( l& D

3 K: [7 F! q; L* i

# u8 Q# c+ B8 C 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 " S% @* y+ i) \/ |( N" \: H

: E$ r1 r9 @ b4 J5 c0 ~1 p6 [

1 N" C8 t6 j8 s7 E& \ vshapes= 8 h ^$ r y7 J

0 ?4 x( K( P# y5 A. n1 e" n

* o: W0 e2 I$ s6 z8 J7 v   " ]6 O* b2 f' v: L7 s5 u

9 t2 v$ a, _8 l- [

6 W" _! U3 L$ h 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 5 E G$ N2 k& @

- v9 f- x# h' m; h

# }: ^% d2 a/ ]& `- u0 f4 @ vshapes= 3 C+ G$ Z6 c" l5 U' ~

/ t' p3 {4 j4 L' A

8 k9 ]4 A" A# _( E! `   $ @6 e; @; B5 y5 a; ]

) }1 Q, Y8 ]5 U

8 [/ m, s( `: I7 p3 g   ( p: X. k/ y8 v5 U- s* i

- I4 m3 x# m7 w$ ]# }2 y3 y1 r; k

5 Z8 C7 z2 b* w0 r9 Y 签名信息 ( p1 l K; a- G

! k( M" \; p; P5 y- [

' E& f6 a$ @6 N3 j) N. H 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ' M! I! t$ [/ j

/ k9 c, C$ O& v3 ^- m" q( `

5 s8 K' z8 h, t: q$ z# s 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ! n+ x: Q9 u: q# {( j/ d8 H( V( l) M- t

5 x" c4 p* l; @$ z4 x

O5 j- i) W3 Q' s androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ! M$ r6 s6 C) m; U

9 B0 T& A0 q. f

2 I# b- e+ W; Q- W$ _, r' a vshapes= 1 f. ?+ x, m8 v) I' b! R. k

+ t4 k8 r$ K# x+ A

* c1 Q5 {+ g; L$ ~1 o; S   9 `) f* p8 T7 d, S+ `

( Q7 O, V, I B) U

- d- s: m6 [! @% o( s android签名的数字证书的一般都是采用 X.509的国际标准。 2 f$ I" G+ i" E! J8 u

- _$ U- O0 b) k* R; ~

% x7 q u2 O+ P3 i) ]0 s7 x3 x X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ) R! V5 M' C4 N4 {$ f

/ `/ A. q4 K' D- F; S) T6 u' B

; q- k* q; P# i9 }" V! ]* A 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 I; T3 y" O- _( Q

) J7 V Y" y: \! s3 v

k- _# g; t- L5 A vshapes= * g) u' G2 a0 F0 V* t' W

V k; g/ G) O" _# E0 h @% u7 i

* r5 w# s' r$ [* e$ S! j   , \; s J3 o `1 L) M3 _

h; i, Z2 u. {7 a: F- q k8 r- M

" g# a5 h" }, c6 ^" Q! t 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 8 M# C0 \8 e; [& i. v; D7 X' g

7 u5 c1 Q* b1 t' r; G" N& l3 b

: O8 \! u. d: h/ R) x! m" Q vshapes= 2 i2 q! u9 H; b* h/ k

/ T+ L1 ~5 Y) K1 @

' m4 x+ Y& }4 O9 v9 ~ 1 Q$ X8 G* v8 B% P+ Y) N

2 o; S- @ a& p! z, L( _

' }7 K& T) W- s- i   , l' U4 l3 Z1 E% Z

$ ]9 f3 f! O/ K3 b6 J; U

% c' x2 C9 C L 权限信息 / M. K' S& I4 } U5 N

4 f+ t% u8 i8 X& N* t$ [; ]

C) [. d' H) n4 A 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) # R' L. u) v% j; p) M

% [- _7 M3 H1 M

; ]6 h V% a! j, I android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 4 c! C% d2 |7 ]

9 m @2 f+ \6 u/ @" K6 Z- k

. d4 x j! v* N4 x2 v; `! \ vshapes= ) i7 I# {, Y% W! R/ ^

% z3 ~8 z9 O4 d3 z% L3 b

; D/ q7 A3 ~, G9 X$ \. y   $ ?0 S) c; s" X$ d" `

3 h% f+ S/ h7 M1 z' K

) r" M" B( e% C" x 下面对这个APP的所有权限进行详解下: 2 v; C' W0 L# R! ?$ T

' R% M1 f- \7 ?3 t

! j! M1 a( O5 g9 ], i android.permission.INTERNET :访问网络连接可能产生GPRS流量 3 S5 i6 S. |7 J1 b- Q

' ?3 t7 @ n; r: q; l2 ^) F4 U

+ a! ]0 w" P" U$ R' E android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 7 Z* O/ [4 k, g) V

3 q a" R% E( s/ R" b

% Q8 _& V0 o) V+ t8 U android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 $ _6 K! R) O! a: D

0 `) o+ S7 _5 [ b# e: l

: r( \9 F# j {- ~ android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 6 L" w' @8 ?; v6 o- t

1 Q) q! N: t" {) ~' t9 r, j T7 v

7 B0 ~6 ^- J/ k( \ android.permission.WRITE_SMS:允许应用程序写短信内容 5 a/ G* H4 Z, O) t6 D+ `# e9 D

5 ? l1 Q c5 z, A$ V6 G

7 @7 d! V' ^/ g5 z! W android.permission.READ_SMS:允许应用程序读取短信内容 . _/ C( Y. E" b

7 F; U3 y: \! J! w0 ?

+ V# p0 m! X9 a! U( K3 B2 C! w1 T android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 , F) o: Y6 W ]# n \

# B% T6 V; o* B3 L$ C3 _

0 ?0 q, f/ D$ ~% N* r) O android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 . {9 g2 Z7 {8 V* m0 i. T% {

: F, O& h6 X$ {5 q A' W, `( D

6 P, d" t/ U, E1 l9 F/ k android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ) e. Q4 L! o! U6 h$ o" q( r

+ {$ V4 I( K7 l4 ] N) E/ x( a' z, H7 K- `

y0 @6 t& e5 K3 V android.permission.VIBRATE:允许振动 , u9 K! Z1 _; X) p; k

/ V4 i# m" s0 @

5 S$ i8 S) @5 ^& [3 G android.permission.READ_LOGS:允许程序读取系统底层日志 ) N. a% H7 F6 V m- w$ t

+ j; t( ^" X' Y# w) U2 D1 n

: g& Y! k3 i3 A; e% x6 ? \+ s) p android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ( E! j9 g" B# J- V# a C

7 G- J' x/ _' D( y) Q" C4 e& W# x

; D* n3 G# C6 ?: X; ?& M   : w! e% f( m5 e/ u+ T( N5 u; n

, K0 Q9 S+ R* L

+ {7 L) N) i& X, z+ X 功能信息 ; o* {8 x3 i* T

: o1 u$ ~# C' b, {0 Z* e1 E

6 C' p2 N7 T" I0 Y   1 i5 M- a* P! |' {: d7 a8 s/ q

: v# _6 {5 l3 B

+ r& p: w: t4 y+ I4 w l$ { 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 + Z& c; E" Z. ^/ J2 G9 r( c

* F. B, R0 P; |5 Q( Y: X

" Y8 ~" m2 C3 p/ C. O2 L Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 9 r- T, ?+ A6 ?; R2 h! @% O

& l! ^; |: m( |

. ^+ ^8 s9 g/ Q C( {) v 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 + |5 i7 b! V- G' H: r

0 @0 ?1 O6 |- G: E. S8 t

6 A0 L/ W' `8 c 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 4 z2 v0 j2 M$ ^) L, I

D$ B3 D/ k$ \0 o! _" S7 F

0 d& B b7 G+ Y% _0 a% |' \- a vshapes= ; k% j+ Y7 X* `8 V# M

3 Q9 Z4 i: D9 @; ~/ s6 j

( y" ~0 Y, S1 f7 O' `$ Q7 X   0 R! M* \6 }/ Y* x

5 ~# `5 _6 \+ P2 ~( h

3 n' N& G1 m+ y4 n& { 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 2 z. U6 D, s0 }% h* L5 a

! [ [2 J" v3 m' F9 y( _. Q

! p/ q( B4 ~1 o! W. P vshapes= ( C$ m9 L" {. o9 ]' l, n$ X

- K: ~" L/ ?6 W | m; ^4 T8 x

. u$ I, C, G6 h, \/ u* ~   5 P$ k# w7 E G% x

$ h: Z6 U" i8 w8 _

$ S1 i1 }8 ~8 m# Q lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 7 H, w- D, S: K# h! d8 z l# S9 n

# f) W' _7 l, [ ?- d

+ z7 b! P6 C1 N9 H/ ^ vshapes= + s/ c( T1 j# g6 X9 E9 @' N

! L5 Y$ ~; u2 V/ J# b5 b

6 u0 G( }/ X6 B* A4 I 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 ; Q+ Q) d0 a3 l! d; i3 Y

@! Q0 e+ _0 l. W

1 ~. f* w# H; ]6 j vshapes= + z* L q4 M S

0 {% Q8 D) [& M1 J

; b! P, G1 O' |3 Q* e" b3 ]   : P( O, O; `5 q( s" Z/ Q3 d4 r* F

( p" d! H8 R m

! k2 x0 x- C# f( x 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ) c a- h/ @3 S* S$ M; o$ ^/ G

; G( n& r0 Q1 a( z7 r/ ?. z

" U K, p- k- n0 W/ Q: i4 ?7 ^ LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 , m5 F$ V& }' D- h4 y: i

0 A7 r3 B7 V) N$ O& W7 H7 M9 c

6 d8 B# E9 I ~2 O4 l7 E 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 - v! d3 q& `6 O* U# ]3 O

) L3 h1 W, c5 A

, U$ c$ {1 h9 c2 \ 源的luasocket代码可以参考学习下 : Y$ U3 x9 ?. c& l: n

; a/ ^, }& G* u5 S) Q! ]

- s8 l1 p; z1 R9 K; `: q% G1 q https://github.com/lunarmodules/luasocket & J2 h& g% t+ Y# D$ F# b: {

4 a+ [1 S5 U3 s' `1 M

" n8 O- b+ m, t7 u9 C, v* {6 `/ p https://github.com/fengye/luasocket % J3 H3 b! [% j. v6 y0 N0 w, r

7 | U) `4 x% X! F

( ^& ~& Z/ r5 [' q# I* J+ o- t   5 i. `5 ]* b: z, n& @) g- b. v

( Q1 {" e) m( t7 E8 E: m8 q% G

) y3 [0 S& u2 i0 A% t vshapes= 9 C- L w1 i& M) [2 v+ T6 O8 B

$ B ^: R& R+ c, o2 C

- A0 w9 D+ ~' n7 `   / f2 ~' @% k' Z6 w0 k0 Y$ \, B

/ h$ ~. M9 x; s0 X( k3 a' P

( n2 }1 E4 c o1 W6 w4 A" l, j   5 A# Q- \. `3 C, P3 D

! V, I$ i6 V0 X' w) T: C

& _) z7 U' G) a$ o: z% W 总结 - g6 P7 C/ G( ?, O4 |

+ ^) ^7 e( s- S- }8 m- D3 P

+ d* Q. `! R3 }# G- } 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 & A5 f1 e$ z, i7 n* P! F( J

+ \7 [! ]: p5 P

& D! W& |7 n7 |2 U! p" S8 W 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 % f! l; d) E6 c% B8 R

8 M4 y8 y8 n+ }) X: R

5 v& i# h0 w5 P0 ~ 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 5 B3 F- w( U# y

`9 |# n& D* j3 _( _

/ W% V, k4 G( s; c" y 结束 ! x: B9 }& n6 ^- ^4 _/ t

7 k+ D& C: W6 b7 t2 F9 g2 q. j

c' k- Y" o1 ?3 L2 G( b& t4 M# n4 x  【推荐阅读】 ! e! {! D2 O0 w; `/ W4 b) P* |: e

# s1 h" d: c- Q, N+ _8 B8 K

1 i4 d: D5 s+ H 对吃鸡APP的分析 ; E5 B6 `# V& o8 r

8 I- ?" J, E/ |2 G- F; r

. n) s/ r( G2 C 你需要了解的APP安全 - M" V; F2 J. I f' g

z: h/ z% T6 P7 M9 }# l, P4 t

! @% ?; [( Z5 b+ b; d' t/ N( ^ 你需要了解的APP安全 2 z- ^ T* i% l: i/ }

5 h" z4 G3 A+ q M$ P

! s3 K+ V( @) @# {7 w   W; S& v7 l/ ]8 M1 {+ o

回复

使用道具 举报

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

本版积分规则

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