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

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

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

" ~3 n- z- {( f+ L9 P1 e- ]8 K: w7 s 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 7 ~% S- u n/ n0 @' A

( `0 l, x+ [+ j

9 I/ y- T. r% z vshapes= % Q+ p7 q7 _: K3 b

. o. Y- |9 ]( g7 W

* t* K7 A# s3 R( g& ` y2 ]: A   $ h1 t8 L) u8 N# `! X' K3 u/ t. I- j, m

! [6 D* S6 T# h% H7 R

. a V' H, b) z+ ] 下面就以开发者角度进行解析下这个APP的功能的实现原理。 # a4 \ S% i1 _- ~5 T0 o* {

, ^8 e8 q% ]8 {% S- Y6 f& U, }

; G/ `/ y8 ^+ l; H) @   & W. u. p( t0 p* L

4 R# r. D; [ p% \ T3 ^

. `* m$ Y5 D/ T+ f" W 基础信息 4 X: ?0 ^: d. u! W) g; J) h, }

! p! n% \3 i. ?) ?1 G( l* F& F

% N% ~ x* f# u( E! {! s 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 , ~. w! @5 L' G& C% R' R8 s

, i! S3 D! l& K) P

) l4 ~ k+ e6 v( ?3 Y) Q vshapes= / z) X" L) u& S6 C. }) U

/ K3 F" P1 _3 n& P \

9 j$ P; H& K3 z4 x   / [% m9 D- S* m1 U

?: ]) |3 z, i

* [" O9 x' [. I* a4 ^; Y6 d1 G 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 2 g' o2 s' I7 S+ T

7 D2 Q0 G9 b$ U4 K# N: ]+ V

9 \# W" K; z7 i vshapes= # g7 S7 D2 U( C0 b) W: r% m Q! |: U

/ R8 G9 j" m) J

0 Z; Z6 G! Z8 q K   & N+ x4 R2 Q& L! g

( p+ r: T [5 b; Z' ]7 n3 B

. u) T$ {% f S 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 . M0 F* e: K. s" x& I( t8 v

1 F6 l# `' I9 U: x

8 l: j! ~) ^5 q) `) F vshapes= ! q1 P/ N4 U* i

2 Q, I9 ^; }5 Z7 T; O

# `/ h% ?4 | s   # Z5 K( ~" j5 E+ v& r' j

$ l2 _8 \, v: [! q8 S. r3 A) j! y

2 ^/ r# E2 T) D1 d/ n' J 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 # W. G* N: m) }) K+ C5 g6 w

6 ^+ M7 J4 [2 \% o% L

( O) D' | ~7 K T6 f. | vshapes= \( ~* ?* _# P3 w' Y

. A6 R4 s# ?2 A0 g, N6 a

# q' p) Y s* y, r* `4 B. M   " k2 K v9 P' u" o9 n6 a7 ]

. y2 O+ `, i8 W7 a3 j; e

$ R/ ~" n8 ], ]' P8 K5 A- R K2 a 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ( S. W: w3 [0 Z3 r

. e* b. `" Q! [& [! e

$ B8 K3 B3 a% r" M* r4 P vshapes= ! Q8 x. e/ `, F5 e* a

" J5 y t: w& I1 V

4 \4 q: j6 c& {5 o5 \9 Y! o   3 M0 X+ n2 K6 b' ~4 Y

! n% e+ W5 F& }

! d; D. f8 w2 G   * n. f2 A1 D; i( l% g2 Z' K# f

8 e% M% N# q! g& c9 C" U

\! T8 Z$ t2 D8 x! q 签名信息 / m! K/ ]% p$ n

' w5 ?$ t, ], \) ]/ W+ a4 j" U/ B

* u- l- `" W% m! K3 o' [+ N* V9 ` 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ! S# L" c9 n- ^( K ?; W7 N2 ~

" L- g& x7 H5 v# C5 j; D V$ b; f- [

0 E' M2 P4 d" I$ f2 f 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ' C( @$ q9 C- ~0 v5 e

1 C3 T2 x5 g _

( g& U: B6 [5 @+ V- f) }! o! n androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 + s- v9 f8 \) Y- {! M. b- d

5 c1 g, y `' l

6 m( c# F4 A% k) Q9 U+ E W vshapes= % X& L7 E9 p! C! ~

+ F0 D# i) {9 ~. u! @. s; p

6 X; [) s% \4 u: Z3 L/ R: w' @6 u   7 ~; Y* v0 }" b6 L

, M9 {& v& K$ e4 t' t% g

9 u/ ]! Q G& [- B android签名的数字证书的一般都是采用 X.509的国际标准。 ! Q1 t( [ C* N9 O! d

: W( c T6 @% ?

8 I$ k: F, r: z/ I X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 9 }0 O4 @" m+ R! S! c

9 [+ k8 {7 @: k; G( v

5 y6 R8 [& O: z5 Q" L 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 8 ^& E# W0 v* q2 e& G

r; R J1 S! t0 k( j7 N5 w$ J# L

: g R- {' E% z. @) s. Q4 F vshapes= " f" [! M: q0 ]

# r8 Q, W! ^2 y& ]8 l; Z7 X

( f( e( \* ?8 f$ y, A! k* N   / G' V3 N5 S- x- q! R. R

$ Y+ j9 [* x4 m8 h$ r

% a( _6 m1 ^9 I! N+ I$ @; n. J& O' Q% e$ n 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 3 E! |$ k) a. h$ j

$ R8 j8 k' a3 p$ a+ X

' r, g/ p; b" S2 R vshapes= d6 O9 A+ M+ o8 ^6 n

5 U4 }; a( B- _3 t7 i4 k

0 I Q b! _$ v0 {& A2 n 6 o* P, J. V K9 E

, L6 \' S; ?5 _! [& I

- B, K3 R9 @( B$ |4 L   ; K$ r2 Z1 Q( F1 ?" l5 |

) V; Q& d5 |6 ^" T" N8 d1 n& R) G

( X8 l0 ~. _% }5 W0 y& O 权限信息 : T, f7 e) |7 w( b8 h

8 Z2 P3 P1 U0 g' W& G

) M: r+ n8 B! r Y& P: w" w7 f, R! K 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) * ~2 o# M; G8 j/ D

- ?% c! F! F: U, u5 u

4 b( M. e3 s4 r8 d- q" u android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 : t3 o3 M6 J& X) _2 Q% K

- I; X$ G& v& h7 J. a O Z+ @

1 h7 C' V$ K' c( t' I vshapes= $ f7 Z6 f6 }% q& y T6 X$ f1 x

1 Q% Z- A) X6 c& g. ]( O' q* C

0 P; `/ {4 C/ O1 f( k2 r0 P+ R: G& M   1 Q. Q5 k; r& _6 @* _& F! [

) T/ B4 H5 z' e6 x

3 j& _1 z$ A8 Y: Z7 l. C 下面对这个APP的所有权限进行详解下: 4 }5 M M3 E. W$ `5 }% Z2 D

- c+ Q8 M5 ~1 m9 v5 ~

: Z( Q# s& D8 s7 x0 ~: n8 h; ^0 A android.permission.INTERNET :访问网络连接可能产生GPRS流量 ! Y. M4 Y1 u$ m1 I

P& z3 H$ g' b. a8 @

* J2 s: W" A. Y: ~ android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 1 J2 D g5 U& A1 ^

0 e1 {* s1 D3 M; w) T3 M& M( |

! \- p& G2 c& ] r9 N+ i* w B android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ; y: p0 c3 P' f; U0 n i

) m. Z6 P; L z* n

# h1 [+ |( b& v5 q( }8 f android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 5 G5 x I, w7 G i

: J: W, ~) {. Z1 {3 G8 `

4 z& `7 Q4 n1 _( o$ b4 Y' u android.permission.WRITE_SMS:允许应用程序写短信内容 ( x3 h" ~" @7 \1 q+ R" A0 r

" K( Y9 j0 r. |! z2 u8 x

: S( [ q: G3 B, O. A" q) | android.permission.READ_SMS:允许应用程序读取短信内容 + r- u& ^. u* d" E1 i# M

- K4 n, y/ b3 [5 S/ s+ c9 \

; n2 W. u5 n: ?7 N, ~3 g android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ; K: z% ~! u( H7 i

) a8 g" H' O8 M# a

2 `/ V5 [' N A2 V android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 3 v7 r& b4 d. [2 i6 H( z

! }. N% }3 J: r

* {0 D; {$ z. O8 E$ K1 d* B android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 * b0 {. S7 Y/ D$ E! A7 ?# x

. t1 U# X8 ^9 I* j/ w7 _$ Z

9 o) Y% K* C$ a. A: O; c+ ~ android.permission.VIBRATE:允许振动 7 `5 h; C+ P0 P

" \3 K' A8 I s

2 f' i+ B8 {5 _6 c android.permission.READ_LOGS:允许程序读取系统底层日志 * l1 h* [4 L, @# @

8 D( v8 T4 L0 ~' K3 E& N( [" t

. f& s# ]) c* v* W android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  5 \# l+ l3 j$ C3 b" u

% c- Z( o1 \( ~+ Q7 j( L9 a8 w3 L

8 R1 c# O$ G# V! j8 Y3 [; H   + O, v$ |; M6 g$ }9 Y) X0 ]

. h4 }7 V) B+ n# m4 D- Z4 `

0 U3 G& Q9 p" E' I5 p# Q$ p: G 功能信息 ; o5 j* s$ }% l2 \6 W8 l* u! b

# z) d( x, V& q# E

- M1 S7 b3 v( \1 U   / }/ R7 X% k% x0 M" ?9 `6 f8 {( L

% g9 u. f: H6 n# b6 |- w* v+ c& ~

! r( {! e" B7 B% U3 C; _* } 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 . r" `2 r, D/ p" K, `4 F6 K

$ s1 h6 t9 D T+ A5 g

0 b2 L: n8 l# w. f Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ! j9 ?3 w4 J3 b1 U3 m4 e

6 [4 X! D7 i$ R+ \' B" N; h S J

; V5 ]6 m$ _6 }5 B( Q1 g* s& i( ] 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 0 r, Z& l1 {+ p. v7 P

- j+ l# C9 M G. ^' ~0 ]$ \ g

* t( V+ u8 j% n R4 L3 e% a% { 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 0 G8 H( P; H7 T- [8 ~' W; U

, x/ p) ^ m' g) h+ F

+ [& V; g$ ?6 ]6 Q& | vshapes= ( c$ x9 G1 s! ^ w; p

- W! b" @# g0 w8 | ?

6 ?* e' a, ]* o   & Y* D8 R2 P' B3 Y, x' l3 K

) O7 q) P/ {: ?- t8 ~, N; h7 ~

, Q& C/ G5 J7 H( W5 T5 b4 P/ ^ 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 \7 i+ W# a* D& p; A) }

- K; d$ y9 R" R3 o* Z' U

/ v- `. b! ?" S+ x7 n9 l vshapes= ; K$ @& O) S* m% k+ E1 r- \6 }1 K2 d- W

8 [. t4 J6 @7 @/ f E

; D- h" A/ Q, J' X   1 y/ L4 q4 ~$ y; S) U" \

" V# D1 \$ D' l: t# X

. v* S3 [# p/ o% a( m lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 , U' W7 I2 f' X& h9 L: q

% {6 ]" z; e @; A

1 P1 P" e, A# k# x6 i9 l7 `5 T vshapes= " o0 K3 V* W; b4 x2 J

6 O9 m2 ]5 I" A) u8 w! N! E) N* n

+ R# P& H7 O! f1 X9 e6 Q 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 1 h5 s- w1 c7 H) f- m: H; C

/ U7 ^. @9 V/ a0 G D- ], }+ U

+ b4 V& w0 v3 y% b0 L9 X' C vshapes= \7 u' D5 W% \0 Z* v, ?6 U

* C1 v1 [+ D$ ?7 @% i6 j4 [9 }

1 f- ?) V! F( ]   ! P Z* ]- Q% u) L0 h' v4 Z

* T: e* M5 \: [. P& ?# n' `' D

+ P3 y- N v! r9 }( v 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 & l" h k/ w& i; _" j

" \! y: I$ `" C1 @- d

/ @+ f( B) B6 J" z+ d. [5 O LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 $ g, {$ |1 e! w

- p0 X+ ?3 Y6 \, B4 m! Z3 a

5 V: m# g: m% {8 ]8 x 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 - A7 a# X+ H" ]% C, [1 G9 c

2 X! ?- |7 v Y' j2 D$ J; g

) g( u0 D0 }7 R8 w9 z: h1 c 源的luasocket代码可以参考学习下 8 F2 s$ L" y0 ~3 d5 ]2 \2 e5 r

& l$ d4 [3 J& i8 v& ]) X

) R3 M7 {) y+ p& V$ B https://github.com/lunarmodules/luasocket t. a: R, q8 M

" n* f; Z! {1 O! }4 N4 \8 Y" y9 ?7 D

; ?( f' d$ Q1 ` https://github.com/fengye/luasocket ' r3 [& S& }8 b W* Q

( K1 L( i+ E; w2 Q

( ^- v1 K, `6 t k8 j* ~% u3 } j   ! M' G' g+ ~$ ]9 `6 n

" C0 Z7 ~* S/ u4 y

( Y; q2 T# y( h6 U0 t6 n vshapes= v$ I3 J2 d; u0 Y! `7 U$ o

8 a# b( j( y7 y/ R' P5 F8 S

+ |' E/ b3 ]/ G V- ?   # P2 Y( o8 y# t8 ]

1 T2 l8 u( U) U: M. o

" U4 W) U3 P" ~9 x! X) J- K% B   3 B$ p( p0 Y, J2 {, v9 t" r! g' @

- V0 F) g* l( v5 V

4 g( K3 @* S# c% B d 总结 & G7 B6 v( q' s/ l

6 e; q s s$ J& c, a3 o

3 ?) c; ~6 [8 Y- D 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 & G" o; t) R. w* B+ N8 }3 Q- e& e6 B

J4 U$ {9 R3 s2 U' ^" T5 M

9 L7 {, R- @9 O+ {8 k8 W* r 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 % T( v9 p2 ?! o3 |3 Q1 w. C7 }# i

' a7 s* ]" g- B

; \6 K* f0 B$ ~% P3 m# _& J 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 2 f6 c/ j/ u( p" |$ F

4 y+ S# B* x4 S& X! R$ s( T! `, y8 Z

( ?: d; ]1 P/ I6 _0 p7 T 结束 " \& r4 e6 g. |! X: J `

: {4 s1 B! w" U! R5 E

. }) B3 l U) u$ H E! j  【推荐阅读】 : Q1 g2 M f9 X

3 I6 @3 r, s+ g$ I e- j$ |

" Q% D: A$ S- Q L8 T0 Y) E 对吃鸡APP的分析 1 g9 H+ L% l/ B* T

/ F( }! X5 Q7 _$ O4 p# \

) n8 E2 c9 b* N. Z2 u. U 你需要了解的APP安全 ; ] L2 _) ^' k4 x- ^

# ?4 L' N) X) A

% n. R! _, E+ ]5 Q3 y. x6 q 你需要了解的APP安全 - \5 C( y e8 \% N9 q4 t Z. c

' g, [4 o/ t! ^& ?

) }* g' r6 o9 Z! { B, J   ) S2 _( d2 J7 d: V8 I

回复

使用道具 举报

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

本版积分规则

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