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

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

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

3 n# {% U8 z8 S0 W% ^% {) K 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ) y; z0 }3 J! X

2 I* }, c: z# f2 ]$ y: T8 L

8 B: G. q8 ?3 ?9 d: F) E: J- T; t vshapes= + p; E) k1 W1 L/ B$ W% W: Y

/ L0 W7 A, B% A% w% d

7 \5 g3 c& t; e9 x   6 V+ Y9 U4 k0 {8 E) X+ D4 a

. M) m4 S) s+ j' A& F) N4 A

8 l! q6 j$ ?6 T( r 下面就以开发者角度进行解析下这个APP的功能的实现原理。 3 u! w6 W* @# D4 }& a' p4 z

; u. w( o( [, Y; a

1 O/ l2 e0 z1 f5 P   / d8 U7 Q% u# n" a2 a' Z

# Q& C ?2 T3 g* [! d) S' Y$ b

3 @2 T2 `5 E9 J8 v( A# d: c 基础信息 / R' v; {5 r; d& T& f) m% ~/ ^

3 d9 `# [2 M1 N1 Y# C

, [5 ~% F0 G/ I( v9 {$ [ i3 P! _ 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 7 F9 }( g! Z: D2 O, K

5 k$ a! J# b6 G6 v: @* g. A; j

/ d7 j8 d! j9 l+ \" [ vshapes= 3 y' K6 h4 o; t' E; H/ Z

2 K- o) m0 _7 S' ^7 p0 C

9 a# {0 \( E% K   . J( u p3 U3 A

2 h- o7 u0 Y: y K6 U8 w

7 s* I: g u9 S2 K( S 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 * @* a7 p6 p3 ^% L2 c' |

( s0 k: u- e4 O4 r

g& X0 {: o" T; V B% ] vshapes= 8 n3 z+ T( z8 G! ~- r- B( g) S& t

8 o, k: g7 T4 g3 H2 |

, x' C' _. x1 Y! ]   3 f+ c" |% p& B% u- ]. A: R

5 W" N4 v Y! A8 ~

4 \( I; X. T+ E8 o5 U4 a% _ 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 $ V( W5 z$ p8 [. a. v7 T) n! N" x) k

+ c4 r! e; ]$ c; @+ s. [4 k5 l

- k- K1 i9 u( D2 \# x9 U vshapes= $ j8 c# ]7 F4 a, a! ?2 c

1 u6 f2 C8 n+ T M6 J0 c$ P7 @9 H

% D5 ^( x! h, X; R. ^1 n   2 `9 y# Z1 F7 r

, i' X8 W2 B% _9 L, ^* `

9 o' c" u6 i# s+ c ~+ X4 p 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 # b: Z- ~+ ?! Y, a- C

$ c' p0 i6 [+ J' I

7 ^( L! _" a( ]7 h1 H vshapes= # q! u: [1 j) l

$ s% M* [7 U" s( q

8 g% f2 }# g4 g; t+ ]   ; K& b$ g T$ R# @7 {) q

! i: w( O& [9 i; Q% [4 f. a. i4 F, T

) F* ^) Z; m' b/ k 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 $ n/ \, o! _9 x' u

& W) w6 Z' f$ g* N1 c5 X) F

) t; n* r1 z( o% N vshapes= 8 s6 d4 f1 I! Z- w0 }

) Q9 A+ W2 y( |4 ~( Q3 f: g, \

7 Q/ q( t1 z7 V+ d6 C- @! C! p   3 _9 W, P& [6 |1 s) l7 ?" P# j

" T/ V1 J' M4 e/ I# x+ p

7 |! J: ~8 o k) ^5 O   / }: T! ?' D" ]2 W5 y$ E7 g& Y

4 D k0 w: q/ ?4 R9 ?2 P# G

* v! n! T3 g& z7 C 签名信息 ! Y0 ?, L$ e) m ^% @3 J

. U+ ? l' F5 J

8 p9 Q+ R4 V6 F! T3 Z$ p 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 D4 [! S/ q) B. n: \& B7 e' W

& f' z4 q# i8 c8 M" s) c

1 f% y* p- r' O# h! h( Z" O 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 # b' w6 }1 M4 [# e# s

+ G. \' p$ O: G0 v. y+ ~

- |; \% Z& j5 |9 |# a androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ! k4 S8 Q" p/ y4 }; w2 ?

2 J B" ~) y. j5 g/ n

: k7 l9 I# B |: E: {- n! U9 L vshapes= 4 a* U7 f, L3 A+ X( u

# U! J0 f2 g' b. u$ D

. c: [& c8 } T0 y   9 |; U# z/ `; `! R$ b

! F& O {+ @7 K" k) ^

; D2 x* x6 J4 z1 U# ^ android签名的数字证书的一般都是采用 X.509的国际标准。 & e* Q* ?" }" y) ~6 C

9 Q8 Z! c2 m; o1 n0 C

X( ~0 t6 F2 S- z" E X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 - Y: z" l# {. H) o9 P7 o# Q

" j# {& i3 e& W' Z9 x4 `

& s2 o0 t8 I. M4 O 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 6 F: N% o6 V$ D2 _- {0 `

9 `, |9 s9 z6 U* }0 }& F

9 d/ {) f5 ]# t! Q# ]5 o vshapes= - l& T4 h( D. ^. y" D$ n: m

# P$ Z8 v5 J* c7 p2 S

% i2 l4 Y6 U; |6 D% }) w c/ r$ Z   8 J. R3 a* N7 |+ o+ N p

# d8 R2 K" |- H$ P$ u- o5 w

* \. l) v- u' i) f) O 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ! r: P7 R" n. C3 V z ?; U

0 ?- \* t( x4 V- k% A! h& n

; P. q4 L; a. k" Y vshapes= 4 v, `& E: o B$ E6 q3 M

; R' G2 d6 H. I/ m; C# {) a$ q

9 x4 Y7 S! T( h3 @ + U6 T1 w- G. i) U# n: O0 r9 ]) u

. n- r6 u1 d$ W" _7 d

: k5 h8 I# _6 f6 }; L5 a; A6 J* x   * H9 T6 Z% F( ]1 v: B- j( R1 ~

! ^: [; W+ a$ D O& S

1 L/ K5 c" F, S6 Q+ R8 _; Y& L 权限信息 & v5 j5 D# F3 M1 T

4 u+ L$ @3 K: m2 e

; D+ p' |! g' m9 n9 N 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 6 j1 K2 l4 Z# R2 P$ E

; M% j" e6 s' q4 V; u" N+ u# W

, B+ [# X$ L+ F( U) Z$ i4 l android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ; H0 b# _3 |& z6 | h- `& C

- f3 I+ {" H+ W: G0 T6 [

) Q1 l$ v3 E0 B5 Q0 T8 t5 |- m! S vshapes= ; T* [. B1 o* t# k5 Z7 y1 @7 v

. f. I0 n- _$ e' {

& R Z) ^+ Q& l- G9 q8 C   4 {! [5 v( X8 _% H" i* u

( g+ @% b' a3 \7 v( A) H! S N3 J

: Q0 l# [( o' u5 L 下面对这个APP的所有权限进行详解下: # o" h8 U: }3 _) ~5 n9 X+ [

5 t" P6 W/ |' }

$ d* d* D N7 e: u! o5 h android.permission.INTERNET :访问网络连接可能产生GPRS流量 7 {6 P0 H* H1 U" H, H

1 M9 x) n6 N5 X6 Z+ Y, @

, p6 s7 I1 ^# |& Y android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 / k. p3 r2 n" f+ w1 t

& h% S Q* W; |) _. N

# n, s9 y& J0 p* a9 \* M. f android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ! n- o' W# @, }& U4 c9 @6 s" m

& h \ A0 c" E7 v2 m

, j' V# S J \ android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 $ u x. [# ]( d* M1 N- |

) d; U: z& c2 e' F n

4 s; ]9 z. C7 N5 y, {+ k- V& v2 T android.permission.WRITE_SMS:允许应用程序写短信内容 ; @) a! x" z- q; o5 T

3 e2 T3 H. `4 a' L

# v0 Y' p( J \, m s' o4 |" l android.permission.READ_SMS:允许应用程序读取短信内容 - y0 k2 F: h% D- J( t. j. l

: _9 ~7 O/ S* m0 L. G. Z3 {

' f" Q% O. {/ C- R android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 * ?. S8 U7 K- E. i

6 v4 y8 U3 J7 N

" W2 j0 H; S; O android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 : |4 M- M' o; D/ A B! Z0 S

; M% j4 y: c# m4 W

. d( r6 q+ d- B: Z6 H android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 , B- m! }6 E0 q# _7 `8 z" t

8 j3 s# \5 [0 W, D+ b

7 O& P5 w# Q3 a8 R android.permission.VIBRATE:允许振动 3 k2 i. ~. D1 r0 e3 z3 `

( T2 E8 o6 U I" p

& r- L E( Y8 ~. }* @) k android.permission.READ_LOGS:允许程序读取系统底层日志 9 d, M8 J& Z' }) O. S; [ u: d, \

2 K2 o7 M7 V. T6 W4 z

8 ^7 d" S0 w! k3 X: v; x android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  + z7 [) R" N1 _: |$ C, D

3 C4 g. g; t# A6 h3 X- a* ~0 W

0 ?$ m+ W& p5 b   % t. ]% x+ |+ \9 u. Z m7 w

) U" A& U* j/ g1 K

# y3 M* C, \7 n' ` 功能信息 9 `* L) G' G! z$ g

( C4 X5 ?6 C1 u4 t

0 L) k9 {5 ]# G7 ~/ d3 Q: ~   ( K) e. }) s* d0 i

3 }" @7 y( V8 E j- Y1 Q3 }

. R4 \- V0 `4 w) K( X/ `! b; c 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 1 E# n! g8 M" M% ?7 A

2 M' [/ J+ P5 A. v/ ^

& @$ G! J9 L" {3 t8 S+ ^ Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 k" F& t% q4 M0 l& v9 {1 F

+ z" k9 N- b. Q; J3 Z$ J) F

' x, U3 b8 e( R$ s; s! } 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 3 v5 B3 y4 F- Q4 S/ }# C$ l

, P2 a* B7 d2 m& w( k& `

! t) Y9 O# l' H. _ 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 * M3 C; O6 i4 @" r

3 K9 u q. U+ o

1 `4 Y0 U8 X* p& O" R vshapes= " P7 X1 E, j+ w1 `7 }

4 ]- R& k8 e3 c6 | B# w m5 v

/ N, d( v3 m& n1 r   ; ^: C! E m1 V { W& c: u1 n" k! p

& J) s$ ~/ H" O6 B- p; Q6 L: B9 g

$ m2 n% i/ r! e6 Z 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 $ Q t2 X, t8 [8 A4 g' E& T9 y

5 E6 e9 Y/ O1 m4 w* v6 X' q

# W+ M# [" \( C) y% E7 u$ N vshapes= 3 L5 E( D4 {# I4 P

C1 e" j1 S0 h; s) I6 X' K) a4 @

9 C, b' Z" }) j3 p" L   8 H; r' A s4 ~! d

- y8 w1 ?5 f5 l# |' c2 y0 Y

3 e! {/ x) V2 ^0 ~) D3 ~) O8 B* p lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 " h2 m) H; w- F% I

7 b: A/ M* F J

$ q) U/ n5 M# W: I7 q+ v vshapes= $ ^, g0 o! _% l

6 D6 B) C' |0 J

$ [/ |) Q3 D4 O3 E% n$ E6 f 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 , w% G# M9 ^: U# @+ f( P3 j3 }

1 r$ z4 h( K9 ~. i: _

9 l9 O. d% E6 H/ m6 ? vshapes= / ?* r( ~; `; K3 q h5 s

! c# J' Z! B9 O! x* t2 u

1 l; w+ t2 B- ?$ F9 Z/ D9 k6 I   * ?$ U8 s$ t* @+ j" U" o

0 C: f, j; C, B7 J& {- g/ U" w; h

! R4 o$ g L! y: j 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ! X/ j, s2 `/ H+ ~

7 p8 N7 k& y2 F ~

9 X0 K4 x# A9 V5 |& ]: r$ i LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 # ~- O) @0 }: W2 y( w

, c$ X B' v0 ^: ?# W! M4 L$ y

/ _0 R. ]; T7 x 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 ! f& j7 l- Q+ R' Z

; q( L7 b. M. [* K1 X2 [+ V

2 O9 \# x; [6 P: ^5 R! h2 B/ X: d! d 源的luasocket代码可以参考学习下 ; c% G% v9 \. D) J! P3 {

7 z* @2 W3 ^' f" |- [: v

+ l1 i4 p- c( A2 N https://github.com/lunarmodules/luasocket ; s" r8 @+ w/ q/ ?3 Z

3 p3 H( q9 T# b% T0 e g! P+ r

* M' z9 O6 @+ Z3 }! @) K8 e l https://github.com/fengye/luasocket : }$ k1 I# e& {

+ s6 _7 R5 q4 } I& R- i! C

, v+ z( z, i: g2 Q   6 Z V: K& }6 C0 A% e% U

' w( d" c( E5 _8 A+ f0 j

. c% l$ m7 I# ~- w8 J vshapes= 1 k/ T* _4 I. j9 k) n

: _: p8 B$ B# A5 |2 O$ y, X: Y1 ?

" i& u* J2 m: j8 O) k   4 U% f0 B, O" Z9 m* r2 s, f% w& d9 ?

3 l S/ H/ t7 j+ L* N4 ]* K

! l: b, ?+ r, F   ( H# V0 a; }8 d) {8 n- o- L9 w

$ _' k/ X7 y+ r% M+ u8 m

& u5 ^( q. d2 V, v 总结 ) U2 R$ o: q+ H0 e0 k7 K& B

9 |# T/ s' i. I7 P4 b

# G4 a( Y7 [" H, M, P 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 ; {0 e: p( E* G. w$ w

! N6 G% H: J$ K: y7 }$ a1 } x. q

* Q5 \+ u7 F# I8 l; H! j 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 & s' C) b) F1 H! \& G4 A

* p8 h# O3 B# c

P0 n1 v' X" h$ D' n' j" y 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 6 W- V* \0 E2 ~

$ z! Y0 \' {6 i

! y6 D; e$ t+ A/ e, N 结束 % [* r/ p$ Z6 b( p! i% o

" R D3 D; n. }/ ^2 j

6 o7 W* s ~3 ]( n v6 K( K- u  【推荐阅读】 ' W1 j( u3 |! W$ b' R/ ]& ]% n- v9 Q

: M5 d$ g# i; }' i( U

; M- d* n9 b/ _; w7 @8 B 对吃鸡APP的分析 ' X; R7 M. K, D. y

. x1 W, e2 ]' Y

3 A3 @" v% g+ n6 c) v! x8 ?: I 你需要了解的APP安全 4 r0 F S2 D% V! u, a

$ y2 G& K4 O' `

2 O! {$ n4 H$ P( b. e/ w 你需要了解的APP安全 * {: [+ K. K& q9 p& p% K

6 e1 n6 x, P! y# J) U

' Z! A+ k/ h1 h$ S; C3 r* d   9 ~* ^1 e+ m8 I x( X

回复

使用道具 举报

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

本版积分规则

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