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

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

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

- d% w' D. `9 {. u 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 " b& y8 t+ Q' X0 H* L3 @, X0 D6 l

+ ]6 ^( H. `2 x0 l3 U

4 K2 v- @6 X$ {: s: z vshapes= , N3 v$ n; B& g' r: U( N: r

! U2 U& f6 _1 g" M' {

3 b$ h+ U% L( y0 E" z' w; z5 Z   $ H+ h& n" g8 `8 C3 R

- H3 H* L* i+ L

& M1 b5 {" w/ n0 B: y 下面就以开发者角度进行解析下这个APP的功能的实现原理。 . V1 y& o# b7 k: {) t% S C

4 P# f5 b- C) v

w2 `# \2 l5 i   ; g# N; f1 m: a* {

# R7 D7 j( |5 y& _) i y

' i" g. }% p# X. g 基础信息 , ?! a7 B) v( R0 B1 u m

0 X& p! p, ?0 O& W; u6 Y

5 N4 D8 q+ K2 z* e% ?4 o7 z 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 3 f+ g% @4 T, x! D; N; F! H& d

- o3 w. G/ e5 p: n4 T

$ K4 _/ A1 M7 {" [2 w7 r. n vshapes= . F8 q6 R% n" k

/ z4 A1 O- D3 e$ f, h7 g

5 |8 u2 ~# U. P! }6 J2 T1 }. l0 r   9 Y" i5 e7 n& a1 M* @7 Q

; J6 \; m( [7 K7 }. b+ o

0 H, ?2 r* `- V 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 4 `+ `* y- G0 \& X& F4 m

5 J$ M; Q( w2 H* ?) g1 N7 D

4 x/ Q x$ |2 Z# k5 r vshapes= ( O5 B5 ~; |/ S6 J

+ V7 \2 r7 C8 r2 y+ j+ J" ]' n8 ~* E

0 I4 F! z4 a7 |2 f6 {1 `0 i   0 _. {4 t P; G" c8 s

" a. s* ~) t0 y( t5 r

* Q5 s- M* _: P! h- t0 { 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 3 ~/ s% o0 Q, ~# I1 }- {; U9 p Z. \1 Y

7 t& {2 j8 U. s

) d# k# z# R1 [5 c vshapes= 0 R, k& f0 \6 \. T% B0 c

" k! Y4 R! {. o

. n' n( B' ?: w% Z+ ]   3 r6 T' W! Z: Z! k

# Y0 K" G% Y% {$ s) q( q. Y, H& R) k

( |4 ^6 i. C( H3 w4 ^, b1 b 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 . `5 ]( Z7 G. P h

, U8 _0 O( M, d3 P+ D4 M e

J D* m6 l5 K+ Y/ T% c% r vshapes= 5 Q l' n0 }; z. ?& G: A

9 w* j' C; y6 m0 x" m

& t( Y1 o- F; g9 L) [, ^; V4 u) |   . x) q# o9 s6 H7 c5 w6 l8 u

( q% V4 Z7 `2 n; d2 {- B3 ^9 P

7 C6 ?; U0 @8 v% ^ 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 + j3 W. m4 d; s* U

# |) ]/ O' I5 s0 D% V7 E

+ a; }) i) F# W2 B* { vshapes= * A# O ~4 R4 ~2 R

* Y5 D$ L+ i4 W8 ^+ N$ s) x3 P. [

5 Q: P# ?: n, C$ |   ) t7 F/ p4 ~ ^/ | j" R

A& h( L# h7 p" S" E6 w9 {

+ \- ~, f- T/ ?. E1 }9 A6 E   3 e7 r% b' m2 F" t

2 w1 C3 C( l) E. p9 \3 I

! p/ ~* I$ t5 _ 签名信息 # p \1 c6 C; w6 H, y- J

4 v( v$ C" u7 s% X4 m3 u

: y+ `0 f3 [( c5 B+ ]4 D- H 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 6 g* V9 R8 ^7 S8 U; F* i

. L/ Z9 M3 e6 `& o u% e9 x' }

! G, \! x" q7 H8 a# Z* C7 f 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ' r; E5 l; s/ R4 @

& X% a3 Y, Z" u* g4 I

. A: h0 s% S4 _- A) r3 a b androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 - V+ z$ N; l7 j2 A$ [

% t% }3 M- Y( h( o( U) T* O$ S5 k

0 }( r: F7 `. Q vshapes= 2 x0 d/ v* z8 Y' E9 D! G

$ R+ Z2 e0 E# g& b) A" J+ j; _8 {

5 E, z) \) n4 K7 `7 r3 h   # u, t2 k0 ^) R" I

5 D! J5 `( P( h& I

4 M; P) Z1 q0 p `0 j7 A android签名的数字证书的一般都是采用 X.509的国际标准。 7 c8 w% s' m" K6 V5 C/ }

$ p4 ]6 V% i y. [" D

9 m/ d* K1 h4 Q3 C& P X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 8 ~+ o N: p! W2 [9 o3 q( q

4 N$ C! Q2 M& T7 n. T" ~/ J

( k2 K P0 ]' U) q) ~' W$ X$ [ 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 3 @. y: x- v* `0 e: ^4 ]

( W9 y* |; m3 a

, Y5 p1 m7 e& y4 A1 b; c1 C3 d j vshapes= 7 [9 C- d0 j: p) z" z7 G- h# E7 i

1 h$ Q" x9 K. g8 M: {

; u, p& h3 s7 O; K! ` m   % L) _ C$ d' V+ }7 m" q

6 \; Q2 Y1 R: Z2 s" g$ Z! ^1 Q

, e! w4 f- d7 q( _! o' i1 h 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 w$ t; e$ Y4 W8 `

' {0 e$ n5 A: i' V+ u

8 y* Q) U* G3 E4 p, y- O vshapes= 1 `# F \# E. Z1 H5 D+ e

7 _# ^8 g m' D& d/ c+ @

5 e1 f% h! k+ I+ H + |: E& C' d6 N

8 S' N+ T5 i& p& n

2 N5 S- f2 V$ m" t& i1 W+ T   - K9 G8 E* E5 S) K! B. V

: _5 `/ {; h3 o1 G) M. [* T# }9 F

d) \; C' Y4 R; f; n 权限信息 6 e8 W' `6 a8 P7 ?' x3 f; p: r! ]

# a1 [& u' F$ j$ M* y. E

8 N# R2 `0 C* S. X5 l( M; M( T 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 7 e4 @7 M9 y t+ ]7 _* W- f1 j

; K. I" L1 Y$ I/ k4 n

: O# v# R5 t: R8 @* z3 N android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 & N5 j* L1 g5 i6 N( O

1 Q, v O; m4 |: ? s0 W0 m% b7 P$ _

4 n! n0 i/ j; c# p vshapes= o' ^ h4 Z* o7 h' N1 T

. z7 \% a+ S8 |0 y

( {1 [6 q* l5 C6 u" u2 ]1 F   % M# f; G; O) g) |5 D4 f

5 E' C L* E1 ^( Y

& K: O' R$ z0 A) _: m 下面对这个APP的所有权限进行详解下: $ Y2 [8 W, b' @1 T, Z

$ F) y0 Q" J7 R

5 b7 b; u" H2 ]' h+ I+ u1 q android.permission.INTERNET :访问网络连接可能产生GPRS流量 6 ^8 U* i- D1 ?, T' K* s

, Q- U% g: z* c5 [5 x3 d6 w

/ h& Z. M( H+ y7 w; R' ~ android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ! Z3 f9 |/ q q& U! ]8 V

( L! n$ V* v( L9 o4 X; F, G

9 Y3 i. Z. \9 l! O4 \9 a android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 5 ^) x) F+ p4 a1 q. i

. V1 U4 }' W& m/ {* \4 R

`) W/ h$ c# O+ ~6 e$ H* X! w android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 8 e/ c( K) k& E4 Y0 F

" W# f9 B( Q9 t4 R- v4 Q

8 P1 F9 K; ^! V% X; s! W; Z android.permission.WRITE_SMS:允许应用程序写短信内容 6 i' u3 u% q, A) f8 Y( X

$ X: ]! Q2 G7 a/ c

* k. ?; S* o2 Y% ~3 H$ v& w- |" u android.permission.READ_SMS:允许应用程序读取短信内容 ! X |. x( M' t" |! i3 w* ]! I. \

v& X% U2 u' D" e( G

0 P: }- J, W0 {+ [3 f android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 , A E/ ^. G6 x" m6 `9 A% i8 @

8 p/ _6 {2 n: r& m- }) n. F

$ J1 {! T, I$ J7 J* R, U& _ android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 g) V2 F, e1 o) s

. O+ `; ^1 \+ r9 i4 _8 X6 ?

; {: a( L3 f. f& l7 u$ E/ B8 X android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 m9 W* Z ~* F& Z! ]$ |7 c

\( F) ^+ U2 Y$ }4 |. M

k" C3 G1 j/ ? android.permission.VIBRATE:允许振动 + t' {, Q) z* p4 W% L9 o+ ~

0 I9 Y3 ^. t" z# T

/ a) Q; K" |- S8 N4 m z android.permission.READ_LOGS:允许程序读取系统底层日志 ( f1 K+ M3 j3 G) X

- ` `' L- [( F. a4 x* H, I9 S

3 t, g- \% ~! U6 p" J' P# p: R android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  % ~: I2 I' b$ }+ \2 R

: n' \- x9 O5 H( `! B; u

0 V, ?( [! V4 G& k N1 _   5 B I7 g8 v; ?) U2 K+ s r

J7 J4 v% g* v+ j

. h7 }5 p, V( o. W/ d3 [. L" S 功能信息 ; m! V. O3 i" [* s% q/ t

4 {. F( e2 P: G! K D) ^

/ v" A9 Z' E- F8 F* ?   9 _* L7 R* R7 T2 q

5 W ^$ R% O I. r+ `

+ W( x6 ]# `9 ^" @* n# N 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 & }' k6 Q5 i2 s# V4 Y. v( z

; \: x0 D" l5 G9 V8 `

7 a/ z: I1 T5 V$ l! Q" I1 H Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 . d! H; K1 X( ]% ~ j* }

- k; U/ K1 m9 {

4 }) E/ E4 f4 U8 b; R7 i) h 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 / F+ o6 r9 P0 G: l8 m! O

7 G- s: D+ r* {

7 N' D! `3 N/ ?0 S, S 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 4 S6 C9 `) o. R4 L' o2 X& Y& ^

* h% O& ?8 w% T+ h9 l- {8 X

9 `8 w3 i9 u) q- _9 y2 R vshapes= & u k3 i, ]; E; {9 b! T/ H

9 ?$ p/ g& c; Z6 `3 e, B

' D& V9 P) T" Y" M2 g/ y   1 Y2 H6 y0 D+ j' D9 I

/ e* U# `) c4 D# c! I% t

% Q9 l/ R* y( H7 N. W: C 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ) L0 j8 W" I+ B

. f& m& G2 R8 f9 Q6 \) u* p# Y# e

6 \3 B4 W3 E# \$ y* f7 e vshapes= 2 d: j! H3 B$ G( l: H

5 h; f: ^- A, ^6 ^: l5 g

! B7 O6 C* c' D9 Y4 a2 p6 w6 j! w   $ z. |% j6 x1 T" b1 `. p: P

. T+ X$ }( W1 P8 p- G! H, y$ O1 z

B$ _) ]7 ~, S' |. N/ e q lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 $ Q/ i& f3 J# X8 n' V

# {/ r1 O. T* L0 v# R6 a

" c0 C, v+ V) w0 o7 f7 C vshapes= ; _2 Y+ `; L7 w# d

6 V7 w& ^" p$ E* ^) s7 S

# }; b. G2 o3 @ 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 4 U! E7 `" F$ \6 x0 v

$ ]- G+ I6 G9 d F) u+ s

8 F/ U/ h& y% }6 `- P$ f, q3 x2 N vshapes= ) w8 Z0 l( }4 z6 ?' H1 g4 P

+ h7 Y& D0 N( U- \* P

7 P: a& n% W4 b+ i7 }   8 y6 X! {9 \7 W* A2 T' G$ d

$ Y2 B2 i' L! L/ l3 @- f4 P* b% @

9 {% x# P( \* P: N: \ ]1 G/ q 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 , k( H- _ K/ m/ n* Z, M2 _

4 s9 r' X0 y& r

8 G# S3 x t7 C1 L2 A LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 6 G2 `. X# z( ^" I

# |, i5 I5 g- I7 ` r Y

+ L1 W% U1 V+ ?+ [. h' r" s 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 ; J0 ?4 n+ V5 a

% q8 c5 @) U- k

7 l! r. @0 o0 [: R& B! s4 n 源的luasocket代码可以参考学习下 9 B; Z% B! C* \( \- m

! u/ y4 i# A5 `, I- z

* E' s& n4 m4 z# {" O https://github.com/lunarmodules/luasocket / r" F: L3 X8 a5 z

9 T' ?4 W" R8 F6 _; h2 ?8 F, E

- H1 t8 A4 }- u https://github.com/fengye/luasocket 7 n2 Z2 b# q! ~4 c

% [( W% Y5 q) q

0 q% b4 M( }* f* y6 H/ {- ~1 j! B, Z   * b5 ~/ Y; @5 ?# E$ A9 L1 v& Y

3 w. K5 ^8 g; t$ ?

/ v) P# ~$ s0 \! U7 x* N vshapes= " x \5 c9 x% O3 ]) I* q& g# j

' S9 m2 C B0 V) ~5 o4 ^

4 X5 f8 }3 _' `+ b6 p   . g' g3 a& i3 q5 l3 z

1 Z( h6 [' v" n2 m I8 p

" K# n7 L/ h/ e" X" r. e   , C* j8 M: {# @

2 A5 O6 X* M% Y! O. x

+ m7 H5 G) f; y) L' D) E. ^ 总结 ) Q! S/ I2 `+ x; w: _

1 a$ S5 n: _% l+ i3 x# N f% l

8 ], ]1 [* p4 Z! c9 F2 I 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 ( F7 o" @% E( ~5 X: v4 g' ~

* |4 s- _3 e6 n ]1 Z8 f' E

/ ]6 y/ A h" E; o8 w# W 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 * z, g7 p) D, f

) C" c* c P+ z& _2 }. h8 y& ~

' x# g5 m# u1 {0 k 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 , u- ~! P; t* h) c' L

2 ?- t5 J$ o7 H6 F

/ L! S' h, t5 M2 R- _ 结束 9 ~9 s* ` F! A, ^; A" T

% g' h: `/ y- Z- i7 F% ~, f. F

% @) `, Z0 C/ l, d8 u( u7 F6 d$ N. x  【推荐阅读】 ) F# h4 I/ b+ q# o

& h& m- }- A4 u3 r- }9 r1 F

4 b3 H! L) f- `- R% {- D1 S 对吃鸡APP的分析 " H+ Z+ j5 v% S* U

8 ^* B, [+ Q6 ?. I

, W7 `+ ]* J0 x) ] 你需要了解的APP安全 2 U1 f, q: S/ P& {" a4 X

5 ?2 U1 |+ ]( N0 w. R

. A- |& S; Y$ u* S1 F7 X" M 你需要了解的APP安全 ' o$ ]; ^2 \. h- X3 {

+ t# z5 @2 T. {+ k# y* w

2 g- W/ t n( o   - `# i4 o6 K' c, E) ]; w

回复

使用道具 举报

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

本版积分规则

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