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

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

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

& A( \+ c p: v* G( W 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 0 s4 q9 h" o5 Q2 g

4 S; J+ ~6 H+ q2 [" |, `- m5 a! T

0 W& P3 F& {; E9 {% p. X" h- F3 a0 R vshapes= % ~. \1 x% r2 M

7 r. d, U- w b

6 I! H. s0 ]) ?$ S( B   5 A: i" o: O1 C" u- Q8 Q0 }

! R9 C/ D+ S1 {0 o

; s$ g7 z6 N$ ^4 R: I4 u4 F6 c 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ( U- F* M* @) r( u- x; _9 b, \

! }8 z' ]( @8 |1 o! ^" A* r

# v! ~1 t% M+ }7 f5 M* d N   / [1 g/ j6 g$ Z: P7 m

! H. e5 d' r/ b/ K3 j/ ^# i

( a- R/ J* q& x$ |. Y; ]$ Y& V& i 基础信息 * B5 ^$ Z N5 N& f" m5 w( L: O: `

/ Y3 k# J$ o% O3 a, m0 {& \/ j

: N" V" P( M2 k" j( h& |& E 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 2 Y- g; v; |/ Z/ x$ D

8 a* o2 K" Z) M+ }( z: I: D

( A; U: z! r" q vshapes= $ n8 R8 y) `8 s& ]1 ~5 q V. F

6 g8 j8 U2 v7 b4 R

0 K1 @+ c. J* s# O3 c, J   # t; h- {: f V: K, ^# t) H

- b8 n% X4 l& S8 }! r4 s

2 h+ w, t% f2 z 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 V) _; i$ ~ l* t! P; B1 E

/ {2 q! V0 o& p. D: p. o, N

5 \# p1 N w% H7 o/ q vshapes= ) H5 f8 x& f$ D

+ i. G! X9 ?! i% |6 C2 {, T+ P

/ V+ j: R4 n5 [- K. I# }. [3 d7 L   ' l0 U1 L7 J6 e% K4 i% f- T( V

^; n8 P8 ^* I2 @9 X

' q' X9 O& b8 s% f/ L' Q1 u 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 % m5 {9 a( X" i. Z( A: l I6 W2 r

' w& |( g7 q) r" @' ?7 U6 l

6 q& A7 d/ J. f3 N vshapes= + b! G( }. f% r7 f8 u9 m

6 N$ h! C8 w# {: l+ V7 J0 L6 z

/ c Y* k# d2 @7 ?   ) w2 p" h6 T5 e: E4 r

5 F! t% a( L+ E4 V1 U7 |3 E( f

* Y1 R& m2 E6 {/ S) ] 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 0 n1 ?; F8 v8 G- o" {3 Z

1 d* L ^* ]1 @: ] {% x

& x- h( l7 K) |. S- V- R( b; P vshapes= & X9 R' V" R9 G. l; y

( _3 d* n5 q0 ~: G3 N3 {+ ~8 W+ o

; F& e+ i& Y+ V+ f   8 E& P! Q, |' I3 F; U2 b! y

; i; T+ w& R* l# r- |

" u1 \* r2 \3 t# ]' J+ N7 n" ]8 u 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 , X% x# a0 r7 M$ i* l

( l9 a- ?8 M" _( `) _* ?

$ k& a+ L+ j& y# x5 { vshapes= 1 ~) M" j$ P5 J$ r' l% T

: w, x) P; n3 t2 n( _) }5 e, s& `

6 X8 Z% w' c# J9 g   6 T0 z' `9 U4 X `9 b' F, L( k

3 @" D9 u; j% H. T

2 I" n: [/ ?2 V5 Y0 R+ H0 A   / w4 n$ j6 I9 a7 L9 E& T* Q

, n- w, i% h+ C! q$ i j* T6 M, x

1 k3 r9 X& n" W* ] 签名信息 $ i# U8 e& N3 S. Q5 A/ f

u/ t' S6 B! g2 X: ~& i3 ~

. o) f" ~* o, b! T/ E" X& c 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 * o/ y) J2 w2 x

/ U2 J" l8 s1 v. H( |, }' O

" R( C6 T* l6 V0 c3 M6 S- f+ r 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 - g6 G9 l* N( Y& |. S. f) m) ^

2 m/ N8 z( u) ~" U3 ]" ]% Z6 h

+ e- e7 U" q, z- u1 q' F androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 + i& x* a# O8 }/ h7 {# ~% d

P! e+ H5 N' V+ j

$ C' ^) X; f- x }7 o% V: B vshapes= 3 @7 g5 p& ?, L" }" l

% F& U1 u+ \9 Z7 y! e; o0 {

" G# M% c! \2 V& A   5 [8 L7 p5 C' \0 g3 k8 \" s4 h7 a

/ T1 Y9 S% V: v7 P" q0 U

$ A& f' J* b* F k, ~; _3 a android签名的数字证书的一般都是采用 X.509的国际标准。 9 ^0 S. H0 ?" B1 C

/ B A& a! ^. O8 S- ` k

* |9 l) ~2 R- m6 i X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 2 n6 t, b: |% E

6 t7 M1 L7 `7 T9 W/ J

7 m4 b e" u. n 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 " S& b W& D. L9 y* X

, f/ h" [% n7 K, q) G

9 D9 z, Y$ Z1 u) {. D3 F2 Y vshapes= " N/ Z' x# c# O/ h' Z* ]

: l( s1 V9 k1 F; o" @/ C" d

$ \, |- t; r; l' i   8 D; Q$ }( q |2 Y8 E

8 |) K( p/ q2 r6 v) E

9 J) ]4 V0 X0 O 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 9 s C6 E# l) w0 o7 S

# E; L6 ?; e' n6 `$ ?& N4 x, M

* V" Q5 u0 H5 \ k vshapes= 7 x: V( m( U+ P7 p& S, _" J, K

/ @2 \' f* W$ J" r; s1 y0 L1 P9 [

8 W1 _% n! M4 W4 M$ P* H # T0 N' d- n6 J

) W4 }" A0 O3 S# H4 q5 K

. T2 [. H0 x# X7 w   + W0 K/ Q D* J: Z+ O g

w2 g; C/ _ i7 w

" o \+ i1 ~% z$ e# W" F z! ~0 b 权限信息 # e/ M+ d( \* B" c- [

# U9 Y9 Q0 R" ?3 \2 l* d

) X7 T! S. \0 b. L$ X" O 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 5 u) \8 ~% C6 q2 Z) e6 H

]" [" t4 R$ {/ k

9 ~. |6 x7 s" E0 C' g( C& J android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ) g: V S ]/ c

. [5 m1 ]5 e! f$ f$ B( @6 d2 ?

M% J/ O3 ?& O h" S vshapes= 0 p- W# d; w$ q, f: j

1 \& c& Z3 D9 L; q

8 E; h0 l2 K3 e, M   - c. p2 b, j: o" l

* b4 B4 H- z2 K* N

5 A5 {" T2 Y! \" P# P9 b2 A$ f 下面对这个APP的所有权限进行详解下: 1 m k$ A3 h3 u: ?3 D

, e( v; E* v$ e- K$ Q( l

3 o. F( D* A+ M android.permission.INTERNET :访问网络连接可能产生GPRS流量 * r, K0 Y7 o# x8 T

+ e5 W3 P" E1 K

Q( V6 T( |: k, f2 B; Y7 m o android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 2 j+ R4 p- x0 j3 j

$ O4 Y' `( Z$ Q) \2 U% n2 @

, }3 O* }8 `- K0 {( k5 G android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 4 i: I* n# L/ g1 I' m* H% U$ ]

1 h( Z4 p1 S, i8 a& z$ u/ D( ~

/ n4 G& z" x9 p' c android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 3 F. P/ {2 X8 n4 j% E/ ]

9 v5 K) \$ B7 E

' m7 y& C5 }; c8 w) T# n android.permission.WRITE_SMS:允许应用程序写短信内容 / k0 L6 _* {" s* K" k

0 @$ ^ z% B4 \

; Y! j2 p2 T! [: @# j* ^; ?* Q) D android.permission.READ_SMS:允许应用程序读取短信内容 6 ~% Z8 J- d9 J% K

% p( w! P: L S% S1 m) _

$ h- D R0 n1 M4 c% Q, {/ ^ android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 7 E( J4 r3 p! H1 H- R) O. s+ `6 E

D7 ~8 G" ]' x8 \/ i' H7 B" Y) ?

8 s: r3 Q1 t! Q) \" L8 b android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 * P6 y) H$ |% `; _" ]- [. w

1 I0 n/ V5 ?: s

, {7 B4 u" U% j android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 3 r5 [' y0 Z5 l6 h) [" s) C' \* T/ C

6 ~1 Q1 i" D% c5 Z8 X

, V$ g, R' u" W, ` android.permission.VIBRATE:允许振动 ( {* W; F# m, G, e

2 T v4 a v/ A- X+ b

9 P7 m- U4 V7 d; U android.permission.READ_LOGS:允许程序读取系统底层日志 6 f6 T/ I @0 y( U/ w

% K' d+ e9 i, J! O2 z

6 W3 H, O: S3 o4 g( J9 {0 o% w7 c android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ; B$ [/ w6 c7 j

- }: L! o, ^" A; b6 k

# J$ w( p. d/ v1 l   m; Y V; o: |1 {1 u

* t/ X( n" E$ `5 z. M

2 A8 @" V& ~/ ]! J. v" c 功能信息 : D2 [- J1 w( W$ H: e, `8 c& \( N5 }

" K$ G9 z, U5 c& g; F

1 q- P2 _: ~0 D9 x$ |   1 l& J, t2 X! A- m2 t

! u9 c1 ^5 U7 g4 ?! k

' X( a" }+ \7 R. [- i: N 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 + s) h: f9 p" U) d* M8 J

8 {3 S( V& a3 T d. Y+ s

( m, A7 a5 k6 B- E8 F. M5 i. L Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 2 U1 |# B& K5 P- y: w0 S

; P+ }3 f3 i* |2 u1 ] G

; z J$ p( b" f/ f 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 6 q% V, w; p2 H) s' y/ o! t

% u6 p* q0 d4 T4 [" T6 t

6 L8 W- }4 e9 y9 O/ j 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 & Z# J8 v- m# v, t

, R$ B. I' h: L- o' E9 d- ^

' i' [0 v2 ~) r9 P$ F vshapes= 5 y4 J. U7 {3 `: }' ?* ]

- H' s1 g( N& n9 k% Q6 c( i

! k7 F+ t8 ^1 p$ X, V   1 l, [8 W) P7 B/ U- @& l P( ^1 e ^

" @) h: F [' l* m: T

4 u7 i' p3 T+ p0 Z/ T4 ?/ C( S 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 5 y# W/ Q' G7 I! ?% I/ T5 v/ c

$ |0 t0 y" C7 \1 Q" ?2 M

' ^- Y6 ?7 t( N) y vshapes= . s* [. W t4 s7 ^& n' a6 x

4 t# A2 G/ B9 @+ U( N0 G# n

' V2 l; y. d; A. `/ F   ! b# ~# _* J! | I

; c$ {* d* e0 c

- q ~6 h& K1 {6 f6 x9 ^! D; K4 C7 k3 y lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 + ]* \( t2 f/ Q) L8 T6 M

# N" f* S8 \7 R5 K

* y8 u9 v$ a1 h1 t+ i vshapes= # y! T8 C3 J7 E

& L+ C+ T4 K8 {1 p

- A+ g0 V1 S/ h! c5 l 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 , [, T# c4 ]3 ~" N2 o7 {3 H

* W/ e5 z7 D: m( e$ u

* S( Q0 K3 Q4 \ vshapes= $ [4 ^9 l% j- F+ J

- u- @3 V) u5 Z! x X) r

) T5 i+ m7 C- Z" B   + v% v, g L0 z' Z0 p. Y

& r) A" [; H* L0 c' P

4 @% m I( G) |2 n 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ( A% q1 |, [4 J: c1 R6 Y& ?

0 U! L% g: I( n0 L) [4 y3 n% A9 g

; [. N1 e- N( o# I" o* l LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 1 H$ T& u f; u

9 Q7 V. ^6 @' F

! j. ~2 f" f6 J# D. n! X. @ 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 8 Y" Q: @' c% }; U, A4 A

. A5 r2 h* T0 }

* M9 J6 z; d8 a5 [ 源的luasocket代码可以参考学习下 ( f v% w: r3 A7 \) _

B( t5 X! \/ Z

" |: q- W6 s' K: o) u5 x https://github.com/lunarmodules/luasocket # q1 w6 M N/ i

, f: W3 Q# R' R% b- a- J

- J2 a) S: S5 O# c https://github.com/fengye/luasocket 4 ^6 X5 R) j6 }# z. X$ Q. t- O" d

; [- a4 V8 f5 D$ a

N$ J3 b4 C9 ~/ k   ; H$ }" S$ |9 Y# _' N' f

! _! ^; m* s# I* B7 B$ f) c

) ]% V; F5 P# I7 E0 Z5 p vshapes= 1 r! b0 w- R& p* |# o6 k3 g

9 A7 m8 k" H0 u3 q- c- i; z, x+ X

) ^* Q9 K2 M) j1 p# }4 K   " @9 ?' P3 y8 [' U

0 L: H3 T0 _; ^& B6 ~! J

) _. F9 |- W; U7 u   ' C' `$ Q9 x' m1 L3 t

) p4 [$ h2 x/ |& Z5 F$ s( a9 v

; _. j5 _3 j9 d. Y/ ^: w 总结 6 p% h. T. R5 D. y1 p

' a/ j6 F. r2 \3 E4 q5 h

- `- t% h# }! F/ [& H: q# b3 N# R 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 . t+ \/ F' d6 j0 K6 D$ s' [+ G

) u* @$ Q9 p% X: H) @1 a; A, ~

: `' K0 d* d' p( Y 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 $ q: b+ T4 u: Q& ~% w& }* e: h* A

6 D$ h2 G# A( l/ S

& A9 B; ]7 X% ] 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 6 h/ o5 E5 v Z# R

9 C7 O8 F. Y3 H5 |9 \

0 t: X) E2 L$ B4 |+ F8 x3 K 结束 ' _% ^' M( ?0 R, x6 _' W: q

4 a8 E; x% \1 B# |

2 @' h; X/ @: w9 P  【推荐阅读】 - f$ v6 ]' A$ @2 E7 m8 T" Y

% b' q; k( m! C$ [

1 n k; n" F& \ D; ]9 C 对吃鸡APP的分析 9 `3 H. Y5 F# e0 X! R+ ]

! s, [' ]3 M% k, i

, X) I4 F1 B% r5 G3 Q2 ]' C- J: c% c 你需要了解的APP安全 , L c' D1 @ P P( b, h2 y

}8 T1 E+ w8 ~6 ^4 U

" `" N6 }+ l0 l5 t: F4 o, C8 [ 你需要了解的APP安全 ; w1 U- S& C" x

: s2 Q }" O& `

l0 P- U" Y# p$ l8 m; S1 E   * n+ V- F: ?2 B

回复

使用道具 举报

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

本版积分规则

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