找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 4164|回复: 0

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

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

! [9 F$ C9 g5 K 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 K0 @. ~8 Z7 t M- J

" j" F* s/ Z6 r+ d" |8 [" Q

4 Q& w0 t. \& c' M! c8 M: i! F) G vshapes= " ?( k' i4 ]( h! V% t2 F2 @

! i( x; H8 H8 q$ w3 w$ u5 F* @

( k+ T# \( h& Q) g' w% M0 t1 s2 V' h   0 I( X& o1 @' u% p3 T( M0 k j2 S

/ C7 \+ X6 w4 x

, F! C. ^1 c1 v* M3 k6 I; n, s! y6 z 下面就以开发者角度进行解析下这个APP的功能的实现原理。 6 F8 D( F! u; K @+ a9 g1 n6 t+ K

# N; t& r+ q7 y a) V! c) q

" a) _, N" X% p. q8 g P   6 y6 u+ R6 ^+ d, {

, D& w- W% v; c$ ]

6 |4 b, H9 q( H 基础信息 1 D6 ^1 d1 u l V% P) x, @( J

2 D: Z1 J2 n8 m; p' B

1 f/ M5 ^" x5 Y' j( J 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 : y; l+ g4 @3 D* X% J2 c

. [* U3 r% q. \) P! ^% E

0 h- J# ?9 I* T9 K9 {! W vshapes= + m4 Y5 z: ~1 V5 A' p7 p

: Y9 P* x/ r; P; R$ j: Y+ ~

) B9 c9 U. j! q   5 \. J8 M$ f/ x! K! H3 I! i+ W, |

1 a$ H5 Z" s/ N" s# j

8 W6 T# G! m5 _/ ]9 ]% Y. [ 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ; I! ?2 p$ r# m% f* j7 i& \

1 q) a. N6 g& [) B% g+ k( W' H* W

; h. }4 Q! `2 q, Z/ m vshapes= " p& W' B+ p" k; ^' B4 ^

( @, I$ h) D5 Q: a

; {! D7 x9 l3 B3 o& K   - L3 s* b" g. t! y9 O# _2 K" O

% T/ G! w+ q0 ~5 h/ F9 _. A' C

' M+ k; j: u& B. I- H 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 9 u5 S# V# X. z: {5 G0 k9 |* e

9 }# e$ X; A6 g. \: G

% E0 `6 W5 @% a7 e/ v& T/ K vshapes= 8 N+ ]; a( K* e

+ C/ N9 V3 `) v% M l

4 R% I8 y4 }6 t7 c; h3 |   1 n$ j" G! a7 x- w- c/ G7 s

2 X `9 [5 V1 |2 Z+ R2 {2 g

3 m$ }" @! u! M& n+ O& X1 \' P 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ! \1 @/ Z! c7 j- a

! S# @4 v5 M; h, i/ K1 t" o

+ g, }" X+ j8 v9 U4 l8 [6 o+ W vshapes= ; _% r [; U: Y. p( }

3 Z2 O/ K: U. ?: S

) E7 J% }2 w9 v, @$ ]# p. o/ F   / o8 _4 g! ]9 k* U" O5 ~/ t; h! y1 Q

7 r4 ^9 r( n% W& g/ } \2 z

, k% A: F% P8 H* y$ m0 H: `( y7 \ 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 : K3 D) z8 Z- T; T

; F" y2 O7 p) w& q' a1 @7 e

" W' T# M+ K/ O# y2 m vshapes= / j/ d4 R( A6 k) r! e5 E

o0 P- E6 f* T

8 d; D1 p. I( d9 F8 _; |7 ?: C   . Y9 n. Z! F- {

5 v+ W0 @, }, z/ G7 s! H6 \, g( C

, Z: C1 n& K# j g   + C! I( l4 l4 m: a) g

+ F0 v D4 ^* i! [

) \( h; W# {. a! f$ Q3 J# z2 P' ] 签名信息 - M& T, ^6 A9 o v

) `/ R0 m/ I$ ?# ~- X5 `

5 J) q+ _; p& ?! p# R$ Q% ] 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ) o- X# `: H5 I

+ V( l" W. u7 z+ _; o" t |# E, z7 C

; k t/ ]9 P# I: s& C. X0 n 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 " i* m5 c* G7 F, c. n( m; L

9 D; d/ b8 S9 e2 |' ]

" y& U; J9 f7 i+ z androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ! z1 _* B# N$ q$ e% E8 f' W5 G" U) O, w" R

, f; f6 [ q6 H( h: C6 A) d

- `% c7 `8 u3 t, O* k4 ^ vshapes= - D$ R' j* i: n" B$ u d0 z/ i+ h7 q

( Q) [- p/ U" h' ], p

; A$ W }/ n2 h3 z) u6 M6 q6 e) {   . _2 F6 I0 w' f0 c% J

$ b8 o. i' s' H* G' ]

$ r9 s h3 C8 l0 F4 s3 {# V( { android签名的数字证书的一般都是采用 X.509的国际标准。 0 j2 x- P) h# b% a$ A1 E

7 D( ^# M# ^0 g; |4 k7 y6 y

1 ]$ M& n) @- j' ~) a X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 9 a7 z* H" \. N

4 p7 ~# o. c& O" s/ Y% ?

' ^( c" w3 U& q5 r. C 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 1 D- ]/ e# N# y! d4 Y8 _

8 O# O4 U- Y$ K1 k

' x) B+ Y2 O7 w `4 g vshapes= % V* L( r7 S! ~2 o; S

& j; J+ z! I, n, q- x3 Y

! a; H7 o5 b+ ~ t8 c: B- m) G, t   & N, c, C/ V2 J# S+ W" j

* O) i% L! a7 @9 b

& }; A6 J# T5 T/ j9 H 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 % E/ H+ e9 ~0 d0 I; }6 p$ A! ?

. a2 l* n) E4 V& e

7 h& M" q+ e5 U* |4 I. Q vshapes= 4 c$ D, c4 [( A8 j/ F( c1 T

0 P! a' E/ O: E

- |7 `! Q9 \: l: s: @( f' C ( u h! H; N8 l9 b- ^( K# l6 i2 X

9 c+ k- d" v4 g- P

9 s: }9 K/ U+ N3 T% d   ! I, u6 ?& Q' D5 v0 Q% ]" G/ j

/ m8 a9 D( F) X7 O) w

1 u& w; s& B+ b 权限信息 ; L6 I* I* t- c, o

, A4 |. a$ V/ b, `+ L4 X

+ m1 ~( T4 [7 b" d8 F9 s0 z 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) . c! d% X. k% {; a5 L' ~

" u% x8 Z- i; q9 [0 l

6 A' d! g7 w+ C5 y- z android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ( U# h0 u Y/ e/ p$ w

# e j9 O7 M1 L7 f

5 {9 \8 d$ _" x) t0 `% I vshapes= ) H# r6 G- J/ t; x9 q0 P. m

7 ]" Y; Y( G5 ?" S- ~

% V5 V( ^: o" @' W% g   ' W) |1 N6 m% q4 c1 R, C

+ u1 s1 Z4 P# o& d, M* [

8 G) x2 C+ b6 O7 l2 \* \ 下面对这个APP的所有权限进行详解下: - q8 z% M6 n; [8 U1 s6 ]% r8 Z

0 X. C# u5 @5 u& i' m! _- ]9 [: u3 P

5 N0 @" R. ~. A+ O6 Q android.permission.INTERNET :访问网络连接可能产生GPRS流量 0 _& ~! _! c! i2 U

+ F8 ]; ^ D: e' K' P

4 D7 a/ g6 [# x android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 - _: i+ f0 X& b x) L

$ n; S4 P/ |; O+ Q! c

+ x5 R1 o; p2 C# P Z1 h android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 . [3 N* n: q8 g1 J) W. M

4 }! }; H4 W: \; s" }! R6 i/ f

, n7 N+ u* u4 N7 y: p" e android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ) t" q% L5 Q9 @4 [2 S& e1 e1 t9 j* [

" u, V6 R9 B9 e9 ~6 w. m8 I d/ q

' T5 F) s! z" m' ]" V android.permission.WRITE_SMS:允许应用程序写短信内容 $ c7 `/ }# K5 ^- f( ^% l/ w' K

, K) S$ ~% c" e* F% u6 t

# B! D6 Q6 R4 z/ ] android.permission.READ_SMS:允许应用程序读取短信内容 8 P, n1 p5 ? K5 J% p7 d& f

7 C- ~6 }- Q) {* d7 R }

5 o" l* {) \, h7 P& `+ \7 { android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 : ^; O2 w6 f, l. ?; ^

; K' \, S& M# {) T

, P% ?) `7 X J3 T) L% J. m2 A android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 , s7 [+ P& k: n; {, v# a

1 ?' ?! s3 W% k5 X$ i' \# J# x1 R

) h* w, f/ T. K' _. C% o& N7 ~ android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 1 c3 k. B! l+ ?0 Z5 v

* v% ?: y: y, ^

' d; k7 q, V5 f( N android.permission.VIBRATE:允许振动 ! v& p- E0 K7 @1 m" n

& {. Z! ^$ D; q7 \" x

: R2 M- m- w, |" d android.permission.READ_LOGS:允许程序读取系统底层日志 $ I2 a( _2 \; `

+ F7 K. x8 O9 j5 U, E& p9 {. z9 G( W

* _6 _# ?7 q" h android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  7 y! l; m+ w- {3 K* J; P) i

! S Z$ o$ w* y, M( Y" z+ J$ [0 v

3 l( _. [- B; S4 m! @   ~/ Y% u. a% d7 G# X/ T

) ^& w4 b( @5 k* Q

, I) _. _2 i% W, K5 M: t: D 功能信息 . Q' Y0 Y: D! ?5 p

# {/ E, ~: x/ H# M' D

& n) @9 P7 r1 L$ q; U! P; E   . h: ^9 u0 [. m4 K8 F: ~

2 L1 |1 }( \0 A( _' j0 e: x

8 v3 i- w( g" N' u) k4 z* m 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 1 E6 ~ |0 \* V1 c0 D3 j( i5 G+ P

: m, Z* f$ o+ D, X2 u4 q

3 @* m! i8 C# C6 [' x+ d. a/ c Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 $ g2 s- J- M G/ h6 Y. p$ u8 M% J

) z3 k2 t4 ]& \$ c* f( X. F

, v' r k5 k& F$ B$ ~ T( E; \ 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 9 x& z- ` a4 o! L8 ]6 A, |

9 |) ^5 K1 V5 \

0 U1 N: B, d" Y5 ^: ? 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 & h" a( |5 N$ E! q$ y7 X

0 ~; q* L. L8 H- V, i. C. }1 e. g

2 V' N9 }# y" E# ~' B' p vshapes= % s6 T2 p% S3 C- G% G

6 c# w: M+ F# [) X/ j& o$ b2 T! Z

2 X% k% D& m( d5 |& X( L3 O( x   - O" w. |( O1 j4 M$ `6 v: c& i9 p

- B2 m% s: h7 \& |

. P. |& ]: i; T% c8 a$ ?5 f 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 % O( Q! e; ^/ z) X7 o

7 g$ | u ~. F/ T( _

: X0 l# p/ J: x. ~ vshapes= + Z# L6 H& v4 W/ b2 J$ K! v! S9 O

+ z5 F7 u( a/ Q6 x+ v f

# F- `' W3 ~$ T6 J Q   . Q" M) }( t4 n5 y9 [. D

& S' w* c4 l8 N' ~

5 D. ^. o1 t3 t/ e* {7 D" S lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 & ]) V, {9 F* \, j- }! p

4 j3 v! }+ Y |, {4 g

- K6 \6 X7 b( s& }9 X( [: @- q vshapes= $ I% {: k7 x6 c6 W( h( l

( z; W& u* [9 ~% u4 I

( K( a m' N. x" Y 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 5 l7 S/ J3 v; P0 M1 w7 J

# D3 z; y" {- A1 W" t+ Y

9 q& }" g9 X7 C5 y" o" O vshapes= / }- j9 M1 V+ T2 e6 m- L

" r$ y7 s4 j3 a* d2 ]

P# {6 v, n% S: u! o   6 ^+ u8 V- C9 r% Y$ J) b

K# k; D# X) C( Y5 `5 m5 t

% b! @% f8 J( P e% {& e 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ) N | l: L+ K, H& x7 J4 g

: l1 _$ F2 K' D8 S. X7 [

% k: E" \% X0 t- z0 @. v! U! p+ { LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 & y9 u* B8 d- t) t" X7 g4 R$ f

. I9 v2 W$ h2 k/ U- V, X

% |7 J% `5 u; d+ c2 s% a/ u7 B 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 , o& y' @, U6 M, Q. `) ^

% ]0 q) w% i7 L: H6 l. W# t

4 K- p9 J- G1 t3 V8 X9 \ 源的luasocket代码可以参考学习下 1 w; d) c* h8 _2 z: [7 Z

! B% L, K5 k2 c9 E

' g; I4 f1 \& A https://github.com/lunarmodules/luasocket , ]5 n2 Q5 [* K( y ^* v

7 y( U6 O8 ]; x4 p4 P3 y9 A; n. i

- H( D$ P3 r( K https://github.com/fengye/luasocket * q/ N, H. Z3 m3 Y- V

' w/ v) H3 `$ F/ |" v9 G

, U( p' `/ O4 V- h' o8 i   * o* T. j$ @" C+ D2 t0 _1 {" `

; K4 t) t' W" ?0 _2 H" X1 J! W

8 \( p3 M c' Y& S4 D/ g& I7 l; E vshapes= 5 w, K. C- C/ F

$ v! q! |0 l2 I4 d T

: j$ h6 s" i( q2 v# Z- q& p9 K1 _   ! a6 `. K9 Y& q. P1 `

/ ]. h9 C, U' g; U

% w3 J- ]& s4 [+ K8 T3 _" D' X   3 k, K6 F, g: M% m9 Q# _- f

2 D6 E* }0 ]! f9 q% \1 S( Q" s6 P

s8 q! `9 f, u" d: e% N% {* o 总结 ' P% a; A ~) k/ f1 I

& g) X2 l9 f2 J" I; z8 B

& t$ ~+ W& A4 h/ T& X# a, L7 Z/ \$ | 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 4 n8 a% z8 g! H# p8 i$ `0 F

, j: }/ v6 D' e( h

q% r9 d1 a7 q. j* K% j 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 * |% Y- e Q; \. A6 N& d' W

0 e0 u/ }3 Q, `$ s" Q2 v+ O

+ B# Z2 x" P/ _- p 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 5 g5 K' p5 C2 J: ~/ v

# n* t8 I9 f! \! K6 F

& ~; M% R" t: ^! |8 d+ _ 结束 G" S% x0 H; {8 o: w# O1 p

1 S4 y4 r' H/ t& ^

; N! A' \: s& W6 \# }  【推荐阅读】 + a' m' l; Z1 s% P$ E% {' l5 U

. `2 l* C( } O

# J8 b7 w( X+ a 对吃鸡APP的分析 ) H& ]* f8 u. d1 @

/ b1 Q& t* F! Z, K3 y; B) P; \

. b, @! I. l3 U9 ? } 你需要了解的APP安全 ! T* q% y$ [; \8 y) V1 [# M

- U; ]! R; y4 X

" q3 ~9 k% I2 a! o2 c" T) W# D 你需要了解的APP安全 1 a' x9 {% N1 D+ H

& F3 X' h" G* T

' N+ ?, M) H7 ~   8 X% N" M* V: ?' U% N1 A2 Z

回复

使用道具 举报

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

本版积分规则

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