找回密码
 立即注册
欢迎中测联盟老会员回家,专门使用25年老域名强势回归
查看: 3646|回复: 0

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

[复制链接]
发表于 2022-7-8 21:25:07 | 显示全部楼层 |阅读模式

# a+ L$ D1 y! w4 F1 i 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 , s9 ^& M. Z9 A4 c

3 {. }7 T( p; j1 r: Q7 T

. [" H1 t/ c; @' x4 c" j2 { l vshapes= 7 q! l9 h+ K) V+ e. s0 d/ \

% N; ^) y( }( ]- ]

- ^/ R7 W# [6 ], p( I/ w9 i/ B& x- X   + V( w/ d# Q: ~' K* j6 h

0 P8 n4 F8 p @# o6 u, L

; A* O$ J7 n7 p! S' {5 c 下面就以开发者角度进行解析下这个APP的功能的实现原理。 0 Q& v/ T' z O4 T

- y, M8 O- T3 C

, P0 J3 h: o; E7 L3 U) @   ; x" J7 T5 S) t( o4 \

- p( j! S b P! V$ o E; k

' ?, \& Y* C' w8 T& Y, l( |6 p/ P) F 基础信息 8 _" x5 j; K' }' r0 |

. E3 P m% L: W3 L+ n s

/ E+ {9 `9 }& `& m6 P9 m4 S 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 % s: Y( E9 C" C0 H! B y0 e

( N2 e- d% T& b5 z9 p3 s

, F( u: |% I+ Y+ ]: Q. r5 \+ A vshapes= 4 \' L( I3 i" k

* E0 P/ G5 m* m) t- p

# u* ]% U) @. n$ Z/ G+ m, _   4 ?4 _; c7 z7 ?% G- }! I1 |1 e/ N

/ A6 S5 B* Q" l

, D9 K) H' w0 @. `6 y5 l; G, A 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 7 L/ Q. }+ D0 x! O4 X

. Z! e1 `; {* h3 V5 l0 T5 x

+ E% e/ W; T% B S9 I vshapes= ( ~; O; e I1 l X

' H' K2 `/ Y6 j8 k1 O

+ }; X) H J8 G1 E) R   / [& x% f5 q5 w5 e

/ _, o& a8 X+ V9 [* E) F7 X

" t% }# n% p5 S) u* k" G5 _0 T 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 2 ~" n: U3 o, _) N/ w8 k

. @5 Z [6 E2 J7 |) S& J

1 _: P- ?: F6 d& D ?8 E vshapes= 1 j7 V0 a, O% s: W3 i: F

( B3 S9 J3 g5 E. I. F; J& @5 }' K

/ [* K3 p d! \. s& q   5 G4 h( _+ t/ v$ O, y" _! y

. ^& w! i2 X0 k& N8 R+ q

. l2 j; x5 j9 i! X 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ; p& t& q& I2 b) \7 X

& J7 g3 `3 T' |, W s% Y( R

, j- U( S @6 F. C$ m7 l3 S2 V vshapes= ) L: R% T) I9 L

# `" K3 v% w# M* A

, s8 x2 r) k9 n   ) L6 |& n* a( |2 N

+ G+ t: i, `# n' C& F6 g( R

9 V: i' q1 `! R2 z+ z 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 : X/ Y0 j$ B8 S- M

( P4 Z3 m& I9 g) C

' ~6 X% U0 I) o8 w vshapes= & F- h) E* o( \# l: G

0 u0 ~ a" [' `

$ u) w1 n6 r! \2 p3 z6 U6 _8 a+ S3 I   ! o* ~5 k4 m5 E& |- x3 ~" [: Y

+ U, I' p- c: m( t5 D: \

& }1 w* H. n! i* f: w, v4 C" J   # ~% O G* B7 s4 ~* q" X

1 K+ S) }6 @; n) j6 q( l/ {! z/ V

2 O8 y. m6 q- q& P7 P 签名信息 8 H1 Q+ B3 Q5 F1 K; D# a

! x+ C4 Q2 S; `1 }

5 c/ r( H8 a6 p6 O# d 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 6 e% U: @; o1 q H ~, J2 Q

2 s1 j; \$ C& f( v% w2 A/ s" }6 U/ x- S

; N' j' [: s$ q2 m 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 9 n5 u; b5 f, S* W( D' v

o: A4 h" d" m

3 [* D Z( g' C) M! v( ` androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 " Y! s0 H0 d( z. Z t7 R

9 K* ^0 {* n" e$ Y: s% s

* x- a: N/ l6 G, Z1 O% p vshapes= 5 f* Y$ Z% z2 v6 Z) Y

9 C8 Q7 o' G( h4 l

8 [9 c0 \# c8 z6 X   0 F4 B$ J+ ]3 c1 D4 \0 x

' v; H6 D& h4 o0 A" b4 M& I

+ ]4 K, i4 k& H7 C android签名的数字证书的一般都是采用 X.509的国际标准。 ' z7 F: K4 |' r& g% F; ?/ U

# d( t( H) o" [$ M2 g8 L

+ T8 x, C* \4 l X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ( j! m" k8 }, v9 \" I6 l

6 f) C( x" v0 Y( r; L% a. _) a

. R$ K+ P+ i- r% a. q& F* T 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 / y! Q5 ~4 Q' d, Z

- ?& N6 p* s! k

1 L+ j0 t) V% I% ~ vshapes= 2 v( B5 L$ r! Q# i6 L

' x+ B; f; s% x9 U& z! z2 N

( D) Y( u# I9 O* S0 ]+ q) M$ L4 d' b   ) g& S+ t @! [3 d1 w* d

# \2 K: |* Q$ x# k" |

% j, o& I( W& |2 A( f- J. L 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 - t7 o4 E( Y5 K) k5 X% \' A6 {( F4 g/ s

+ z* X! e2 r* Z/ D7 d7 w3 E! v

N- p! Z. j+ a6 J2 ` i vshapes= 6 X8 F% e$ x9 Z( |

! y$ q2 m- S! p3 y/ `1 t. R0 b

: Z: j% _# i0 l( m# L1 U 8 P" u9 o6 y: [$ e* k7 m4 Y

" @5 V1 \$ F5 w$ }

, p) ~; q! @# R; _2 f2 e   4 X2 R/ Z3 R; C5 n2 k N( n

4 D- ~# G6 |3 r$ ?8 b

. f! K5 h7 h: _8 g! U 权限信息 " s( b& e- ]2 u8 i( e

+ U, r4 S' N2 C

& z% k3 H5 E; e! T7 E 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) / C: t: c/ L. m8 |0 D+ Z

\* g& D: f- O& P) J- I

$ m' D# N- B5 ^. g& F& ] android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 0 G- n( F" `/ ?+ F3 b) e

" {( `* R& V3 R: B1 Y: [9 r1 F

1 C3 I0 e& e" g4 _6 L* V- k) y vshapes= * r; B$ k0 u% z; D( s! R$ `+ \- o

6 a1 k' V6 i1 ?, x& \3 K6 L" q

, y; A9 W' H7 ^: Z* D8 e- k   9 M# f4 L) {- K: K/ n

' \: q" W! u: J+ N/ P

4 ^$ p) m# h5 o8 N( G* j b q 下面对这个APP的所有权限进行详解下: 6 L/ L* e9 l$ R- t3 A" V

1 k0 s: v- T+ s( q

, X# w: T3 b" R android.permission.INTERNET :访问网络连接可能产生GPRS流量 , x" L4 ?# \- b" L+ V) D

! {6 H9 E1 D* U! m+ [6 J( G

! B7 h* p7 O0 K+ ]/ G: A( k6 D$ c1 m android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 # p! V- J3 G, O; S8 j4 v. z

# D; i0 r/ l, O5 l

) n. i) C c3 X. g5 V- O; ~: ] c android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 2 I- G/ I9 | s6 [9 q

- o! p4 t; q$ n0 v: q+ A/ v

) C2 ]4 I8 l0 X# p7 x0 s9 U l android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 # u. N7 g7 w! q

6 J* N8 Q* I* f

! K8 A4 i0 {) r1 { android.permission.WRITE_SMS:允许应用程序写短信内容 3 u/ M; P8 i9 E

5 C- ?/ Q4 O1 u

& Q7 {# D& Z3 U android.permission.READ_SMS:允许应用程序读取短信内容 + P* d3 N% ]) Q* _3 z, Z% I% f

, d r7 x% a0 F9 ^

2 ^ c" C1 B" S& j. I# C android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 - ?$ c% V" s' _$ W

7 U; u. f; i9 T# M" Z

9 [: _" X/ A' k% C! j/ F android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 4 h+ {4 A5 ~+ y( o6 O# s H

, z' e- Z! j$ a/ S8 n$ }' \6 z) S4 I9 h

, F/ f& Z L6 @3 z. @' ^" N' Y android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 9 L- i" M! R, U# g `

9 _$ j1 a) R+ c- `0 f; ^ r. G! q

7 `4 }- y5 o( V8 d/ c* q5 S android.permission.VIBRATE:允许振动 `, R2 m+ Q* Z8 e4 B

& w; P k: Z8 H7 q

: [0 x5 V% O% \% p' ~& a android.permission.READ_LOGS:允许程序读取系统底层日志 " l+ m9 G" G$ R1 O, J6 r

, m4 h# u3 x& B# r/ ~/ |) L. z

3 I2 S" ?0 K8 y' N/ |, W android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ! ]5 [1 k2 X+ \, K N

' h/ b4 u2 I z& x9 F i; U& z

. k1 Q5 A& Y) p' C1 `- ?, f; f5 A   + A, F5 Y/ }' m

# J5 m1 B9 V+ x; V

4 g6 Y" k- K4 h/ r9 ~6 z8 p1 }) n1 L 功能信息 . A0 h7 n9 ~, D

, \9 g4 @5 y/ i2 m

$ h$ M5 ]& h+ ~+ d   . A$ ]/ U4 {6 n3 B

2 y5 c7 t9 I F: h5 Z' `

* B d$ e' c( x2 j( ^ 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 & q7 A0 `/ j3 w+ ?5 O4 G

% O3 D) _* Y& A' Z+ z9 C& c, @. f- @2 x/ P

; f/ B0 F( P/ {1 ?) _ Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ) ~4 o5 h- a+ G( [

# y' c% J1 l' G6 M

7 Z0 b2 x# h ~# \ 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 / m' b9 n* p$ s) n

9 g4 ]' G3 ^1 ^' h1 L6 s

2 R0 L( J6 g! k1 k* t 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 6 f! S( v- z1 y1 c+ M

* r# C! F' k! z; {8 M2 x

7 Q( W7 V: `" ?. N" k! \) k$ V vshapes= |( a* x% a0 Q3 m _: E

1 \4 R/ \5 ~6 N- V2 ]

9 j) s" z+ s% ?, Q   + q3 x: X( s" k9 [5 G/ F" X9 e( t

- {; {& i- A T p2 l

, a& d. t- a5 A& @ 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 6 g2 b, m- i* k7 ~

! i$ |( o) ^9 i% r3 G

. Y" c; ]7 p6 w I k# {# { vshapes= 9 q f$ a7 i# ?1 q* f3 ~7 Y# K6 b

, [' [& }, h- f M$ o* X

- P0 q3 }$ w) P H0 f   2 ^5 o: x! ?# O8 e$ x5 x4 k

1 V4 G u \2 _" r7 t5 d

$ N) h3 p+ C0 ^$ e# E- g' \ lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 - a" ~9 j/ y( D

: g7 @7 X# k- j; c

0 `7 l5 l) E; V! C* x6 G; h3 } vshapes= * d/ J& g6 R: m5 ~/ B& H) n

) A% Q L$ C. I$ K' C* y5 U

' g0 z$ w2 P) o8 N- @ 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 . S: q( y7 g2 K( S0 X

" P6 R) A+ v& _/ {: y! V$ [

1 `5 T8 k) {, a1 K vshapes= 9 ]9 {7 l" \% s- D- f

) J0 M# s$ S1 s6 A( q$ z3 n

4 G* i& g% m# K   6 Q' g: [7 c* e9 E& G; s

: t+ I; y! v# V1 X! e* S5 I

$ D K! R5 e5 F( O. e* l' E3 A 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 1 B( o& f& Y: Y' s2 ~) q

+ D2 R5 ?( I$ G

N- I6 X4 _% K" F/ v LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 & i6 j% a8 O' P( a4 O) D; k

2 W" B0 m) E- I& X; F4 I# M! h$ i2 Y

+ M- H! _. ~+ T 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 & q" T1 N( v& J# v

$ |% v- m' k4 E+ p) J3 ~$ U" w

5 Y8 P$ l2 l) F" Q 源的luasocket代码可以参考学习下 ( W* f! g' g# s* N( E

0 m/ g$ b7 x8 H

& @( [7 h+ o: i* ? https://github.com/lunarmodules/luasocket - N5 |2 N- {* Y* X' }+ b( a

4 l8 m. I" G; F" r# v4 f

$ R3 E& X' Z2 W5 v; I! U https://github.com/fengye/luasocket $ B3 n# N9 \' _% i; l/ F0 s

$ A- B4 @3 W* \6 n' y. z* _

: I2 x+ P% j2 B3 E7 O3 K Q3 {   2 D2 X1 T+ F; a: |

4 {+ {6 D2 L! O. s0 K

/ w1 _4 t/ W: ^% d: a V6 \4 O vshapes= , g& ]: N/ {; v5 N* Q4 W& |( M

+ s; `8 }! N8 q I. L

0 Q- \# w. m$ x   0 G0 S; S8 E: Q/ }6 ^

) L( b8 N+ b" G; L( J

; j2 |" w# g4 I' ^) Z% D# V" y   2 m3 ^* `1 O: z- B; |

! b. g* M" C# Y# B, l

: h3 j7 o7 S3 T, O) ^% s3 d 总结 ) |- b0 r4 G; M3 h( Z6 [0 s4 \' {

; F' r. t9 H+ k; H7 `3 |. t

9 O7 E0 Y3 B) x. C 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 7 W, J8 B4 p; X

5 ? p2 @+ |1 M6 _# B

9 E. @( y: p2 U! y9 e, f: K 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 # d; M* _6 r8 ` o6 J% m

4 y w* n, q9 K! C3 s2 X/ X, ~& b7 P5 Q

6 U$ E1 P' g9 [' f( K3 V. o. ? 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 * {3 f. w" O0 p. T# v; c

8 [0 Y+ ^$ E4 |4 T3 l: d

& X# _% \" y+ L 结束 0 i2 K; o/ P! _' S+ F& E

; @+ |3 f6 N/ C0 ]

! [1 A3 G( T) o  【推荐阅读】 1 _# O7 N+ C5 {8 I6 j5 j% o. q2 q

& \+ h+ x# R3 \: c7 U I8 O: F

. ?, p Z! U5 E- H- K" ^ 对吃鸡APP的分析 ) B. n: E8 f5 Y/ W

4 p- {, u9 d$ L1 L; r9 y

: _) g* Y F3 X 你需要了解的APP安全 9 m) z1 [6 A$ W. Y; V7 W

: b2 m' H Q& X. w1 s( Y

7 [0 X3 A* ?; {! B2 W! f& D 你需要了解的APP安全 5 j% s+ E) k. L5 k. b9 p) A

! |( c' \) C6 I4 ^7 h

! j! [- X6 V4 ?: D2 P   - X; F* T H, G/ k& z- H

回复

使用道具 举报

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

本版积分规则

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