找回密码
 立即注册
查看: 5874|回复: 0
打印 上一主题 下一主题

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

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

3 L) X1 D! m# o N: T 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 6 ?' Q! ^3 ]& P( U1 _% c3 g

% q( R3 h( ?% Z

' J( V8 D, p0 Z- m/ Z. X m vshapes= 4 q: @5 h9 ~1 y# }4 h$ [7 F/ m

7 Q# k( Y' g0 r v8 e& P

! q/ x3 y7 k G4 Z% f   # P- X- R3 L; U5 G

+ v2 b! T( O) S; e. D4 C1 K; Z( C/ q" A

( V6 `4 A$ Q% \9 u- x 下面就以开发者角度进行解析下这个APP的功能的实现原理。 + S6 a# U9 p4 F* l1 B

, h+ T* e# S8 X. r# I5 P2 J5 x

+ v# B h% E2 [0 J: P' e7 C7 c   ) y, `# y3 V$ d( \: C

: f1 @: M4 K. k7 D3 ]" ]8 d

3 w5 |" h8 [) d8 C! o, p$ Q( W; x" O; O 基础信息 5 \& |2 w: T/ b9 g6 r2 i- \

; Z$ M/ A+ M) W3 g6 ^- Y

# R& o6 N4 l9 N$ g 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 u9 v; q5 E% A5 ]( m

% I7 ?5 ~. O$ K# s3 X R

% N, e+ K0 X: g( V) Y; |6 k vshapes= * q$ B1 }* C, H

2 @5 D) j2 m5 W9 G( z

: R; I. j0 ]% v- ^; i   & o! d" e; S+ S

5 v: x' C8 o; R

3 t1 h3 N, s" x7 F& B) y 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 7 ]; R8 e2 g$ W' y1 ~4 W! F- T

) d: W+ ?/ [4 N( r% Q- k

7 z( B, H' x6 [1 l' s2 m vshapes= # ]! \ \9 w9 c2 J

' a/ L3 m- f9 b' B) Y% _8 e/ z

2 M+ ?: `- M0 v a; n/ C6 a6 F   / l! V& v2 s$ ^# o! I

2 C/ }/ \( p5 i. g4 ~. c" M3 `

7 E5 S& N D3 K9 n( f5 e 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 # r$ W% {: a( F1 N4 @9 |# e

/ x9 U; s: E" K, p5 y+ n

5 g' H9 _ \5 t; i e vshapes= * Y# m) T4 U8 a

- {; v" ] O8 z1 V! g# `+ y; F

2 M- B0 C( v( O- Z' b   9 o* ^0 v$ h. d9 |

$ t, C/ N, D: s( {" g0 H5 Z- i

8 e O' k" ^& ~. w; I 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 : C) c) V* V0 ?2 W7 L

; S D) B1 F. L* N2 ~- }

& q- C/ x- e( T. z9 B vshapes= 7 d" s8 l1 [0 B4 \! t

G7 s* a1 q+ X- n' Y3 k( Q: X* z9 H

' h4 L4 u, x5 X9 `0 k! Y- ]; P   % A S I( {& G- I+ t- c2 P" L

7 k3 B1 D `( x" Y

/ z! N. T7 p) Y2 Y! y. F3 U 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 6 d" n& H' m7 C( g7 K8 R4 p

7 [* B- C0 j* u5 A

0 w- K! i# S) @# b: a vshapes= . v' } f$ _; m% Y

) |& t' I/ q& P: K7 L

" a1 Y7 R- ?7 [0 c   T# e0 _ Y5 j8 |

& J& ?& ~- G2 E6 g) R3 Z8 ?

' k q# ~6 g3 ~' Q. G o   - \% d8 s; {1 n9 t! e/ B, p) K

7 i. M6 O) {; g2 C" B7 r

) j8 I7 @9 B# F. m 签名信息 , ^# J- i' F# Q. S

& c3 ^) O* I; \/ L! s) Y7 {

* c0 m4 b7 B8 l$ E 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ; t3 J9 o( z" S0 N( X7 Q

# B( S6 z/ G( I, x5 j

3 L; I% D* l0 d( ] 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 - Q1 y& s& A. _% M D

; N Q0 `7 N9 m" ?

) [3 J2 ?/ i3 r; L9 r# ~ androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 6 K% B( i7 j, `0 w! b, x: m

& Q3 c. d$ `* c/ k

1 }: z% N7 I& ] vshapes= 9 `6 H. K- C: z: ]

9 f/ _* W) t; A+ f% ?+ k2 U

. O' F4 k/ b/ e; p% G) h- Q& j   ' ^$ _2 Z6 T$ q, @

& v2 I9 Q* [5 a9 ^

/ D8 O" u3 X8 ~% C6 D1 y2 b android签名的数字证书的一般都是采用 X.509的国际标准。 - d" x1 l( p1 a4 M+ Y

' f6 j' W' n. N& b

; x" E& X! ^7 _ X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 & z& ?' Z8 } k

8 f% E% S7 f/ u! R' a

& w/ }; f) Q7 H 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 % n8 k2 `$ f- }7 J6 T G) `6 ]

- B8 X& i1 R' s$ O

* t- ]) R1 k" {7 G" V( O vshapes= . q4 V( n, l2 U! @) R

, l5 Q1 x5 o! W- L, S

2 f3 D4 q, b2 u( b# T2 ?   ' |3 A$ i& T! ]! Z6 z9 I* V

' T6 c$ o4 J0 I9 O b' a

2 _0 f+ U2 h7 W- _$ J$ b: Z 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 3 m% G# x9 U/ d) c# c2 \+ |1 a! G

4 B4 M1 ~& h+ |' r7 e3 d/ [2 p. G

: ]. l0 W' o. v- G vshapes= 0 y* w( U9 k5 P( i$ H8 r7 ~0 I

( M: y% f) T0 ?$ v. o& n

0 [/ S$ B' g9 D# U # i2 X9 m3 B2 D) j, ?

( B3 Z u* L# D) f2 z1 R

8 ~' G; T' f0 q$ [   5 n, B9 q" Q* x! r

. E# F+ k2 W) l3 T0 v5 [

/ A; W1 U" N$ S. V l, M 权限信息 + o% U& J D6 \9 D

) d# ]0 e- s1 V7 v

: Y, ]9 F: V' h; }" e {4 a 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 1 ]7 }0 I& h$ V% _7 l4 a

0 U5 I0 |* r/ R# n

$ u% t! O0 x7 R2 d6 t2 E4 W* p0 A8 d android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 6 v. p# U" _6 T2 o- y8 s7 Y4 e

' \$ x! z0 ~! ~3 E. a

+ Y# }8 {- D, C) S4 f3 m K vshapes= : A& C: N+ z) b3 ?; ?

- L9 ?8 f9 u1 Q! I# E, g/ M

5 a2 f; u$ J# s) w" {4 t! v& l   v3 ?2 ^; j8 d3 w/ u m

: ?8 v# U! T1 l' B* @0 F

5 K& H0 k+ ?+ N" T# @1 h2 @5 V 下面对这个APP的所有权限进行详解下: & E, y& ]* A% j- v

5 w# ?( X/ W: H: ^2 y/ w

' \; Z. N+ x2 I; c' W. ?- P android.permission.INTERNET :访问网络连接可能产生GPRS流量 , g- v* O( I) ^; u1 _ y1 a. N/ X

" _! k- F4 i e

& x2 k4 s4 J/ N9 {: [2 |! M. j7 K android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 $ ~: ^! z* J" I( V: `# s4 r! d _

* N2 {$ {( [6 L

% y& G7 u, g- @* l android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 2 e m" j5 F- Z4 M# G& _2 e

' M' r& ~, M( u5 `" X

; J6 l% {) o E android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 * F5 f& S* |% w" Y) Z+ n. v A

0 N q6 J1 w7 x5 G8 A" |; k

9 r) X& c4 x7 u* U5 E& {, w android.permission.WRITE_SMS:允许应用程序写短信内容 4 T7 ^5 j2 o. J. m2 \) E. {

6 o# W) P- Q9 q- w) F/ K% _, S p

7 d e3 i4 _2 x, o- j android.permission.READ_SMS:允许应用程序读取短信内容 * k& N) v3 k$ I" M% `

) _+ p5 f" H8 i

2 f4 q, [! [1 U5 }3 N/ @5 D android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 9 e. D8 T* L: h& K, f6 D+ @0 U0 [

1 `. Z0 e7 w/ ? Z. U

4 A" u" C7 @5 X! v+ b* [7 Z6 ~ android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 & r8 A b* F8 l4 A% B& w o. j: ^

/ {7 x' `: Q/ s* [: h

2 \& X, P. J& r+ T6 u8 u android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 8 {' Z7 A I6 _

8 E4 e) o3 H2 P) P# \/ m

- N" i1 @' R" t6 }9 y% X8 Q android.permission.VIBRATE:允许振动 . l2 }5 N* l5 [! I: ?

0 _+ S* b! ?1 C; H& H* m

8 \& }2 e; a8 h4 _( N" C7 X android.permission.READ_LOGS:允许程序读取系统底层日志 3 r9 m' c D: K' g" W% A" n

, C- W% U+ s* r, b: i- N/ T! v

( l5 `" I# I5 y4 ` android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  1 g5 K* p) }+ Q( C

, P, X$ x9 P' u% _* Q8 w

* c2 m$ C: y" s/ `% G! A J   1 p9 i7 K8 g: C/ R2 \

4 T3 m/ N, q" `+ g- e( m _: ]

5 ^& S+ o: s: h L% q' ] 功能信息 7 I1 Y3 P6 O2 D P" C* w

, t" K6 Y; P- l0 J

7 E$ q' N# b0 r; O: ]# C   3 C3 m, p6 I9 E( M* f% w

/ S$ l% H* {' b. u; l6 ^3 Z

) u$ {9 d5 W, A! r9 \; j8 c 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 2 d/ S* l# P8 i/ A' ~

6 @( r8 y2 L! }1 ?, g& G

, p9 L. Q% Q& e/ U9 q% a Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 3 |. r& X( u! s, E% v- A* f# |

% U I' L9 H9 U) H+ {$ I* ]

+ l' G1 x6 \5 m' `! r+ I 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 ) P, @ K, S; Q0 x, |

) V: A i0 R5 A. p# {& A

1 V: \% L/ N% G- _: |( Q) @: ] 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 l6 \: _- n% `! `* }

! D: W; y% J+ `9 g1 N

0 M# A/ D8 x5 e9 c vshapes= 2 K3 i" O, g5 m5 j T& ^9 P

2 z5 y. \. U3 N6 z, R7 y

* A* n: w2 h: I7 ^- k7 D) m   & Q& I' k- ~2 l, _

% T, I9 d' g$ t, W$ N) p

- Q+ f- m9 N. ~/ E2 |6 A 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 8 x _. x' n5 r& v, D

. w% x0 S G7 M$ D- b$ J# i

6 j6 `; B4 B' N1 ` vshapes= 2 x7 d9 H4 Z4 _# U1 l) |+ a1 u/ E

$ y Q; w, Z2 Q0 r4 F& Z! s

9 }2 N+ i2 R' \2 ]+ \   $ N3 n# c. S7 l

' N3 i, V2 w, X/ C. _$ X6 N

) O- W7 L, I6 M' m lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 1 _1 F% I/ {6 l( b2 U9 R' M6 K% ]

# \7 n# I' r+ |- B, X" m

6 }; [! P$ `6 ^6 B% { vshapes= + b' S* C& o) U/ p+ g B; s9 V

4 L7 t2 O, `, ^# h

) @; u1 S+ e; g4 y( Q* L 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 / N, d L- J; b" O

3 p9 f( w. k/ `3 j+ G

7 u3 L/ b8 c# C7 M0 U% l vshapes= % {4 d# o9 W/ `$ S

8 W- l0 V1 P' J+ V) f% O$ D

2 k, a7 v7 K' H' e% C   7 O. c# r8 C% q2 J0 g$ r

; z* y# }/ e: j+ g' w5 W0 `

1 `: R# C- e* ^1 l 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 1 W" f/ b2 b9 i2 A

- a2 ]. B2 |# _

5 f u0 u; N. R, p LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 8 Q9 w- H7 D! o3 m

( _" r, P3 C) [1 X0 U9 |" n) Y

p* e0 b' I8 l4 \/ F# y 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 ( Y; V) B) l7 A1 V. d/ S- e. }

' d+ ~3 X- W" q0 l$ A

' l- H, ]4 U9 X5 a 源的luasocket代码可以参考学习下 / {2 d) I2 h+ ]" v) h, i+ _

6 K- V, A9 _% V# N! H' q$ M5 P

8 C/ j! W/ r1 L E) a W; u, F W https://github.com/lunarmodules/luasocket ( i! B u @+ x) R+ ~

4 j/ @% W* t2 ?4 q/ Y! }* p

5 x9 p0 K8 w; [( a4 o, ~& Z https://github.com/fengye/luasocket : Q9 b5 O9 g1 H6 s8 S1 Q

/ a$ L. |6 h5 U9 S! R z% T

$ [# p& ~( K0 R( a' ~   ' Y: W9 J1 R4 F

* I/ B) T# R, Y$ }; y

+ o A! }: T5 t0 K4 I: a vshapes= 3 G4 v; Y: J9 ^1 R, w K

, _5 }& x1 n( p; |

3 v: k! v, D) T) P3 ?$ M) \7 g   9 Y3 r! U( ^6 L( Z; U- p

" l+ y" \- O7 D' Z% z4 R) G( {2 u7 i

( H3 J3 o6 H) V7 N6 p; w7 ~5 L   # v$ Q4 y( P8 X2 F+ A P$ r# Q' g

$ F& q2 C! H3 ~. f# i

; W) x, J' ]! X+ `+ B 总结 ) W. T) Z) u0 X% b7 w

* \# p& G; _& V

0 F2 m @' O, {5 p: D& K: p: c* m 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 5 |% w0 ^" z* e; B" O1 p

4 j7 U) e3 \ x

( y( y9 k: i/ I- @ 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 " d5 l, s7 |& B+ X' Z% L7 \

; ~ @' q, X. O' i; P$ u" f

$ Y6 A$ U; B: [' `/ b+ g3 V 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 " p! ? a2 e8 X d1 P

4 q- I" X+ ? w! f) G

7 p; i) o" s: a, k, k( I/ U% n" H 结束 2 L& l) V0 y0 [2 j; |0 L

; {' m7 m) p3 y: @% h T9 L

) F$ `: ?3 V9 ^$ ], J: H4 {  【推荐阅读】 & x8 ~9 K1 O1 T( `8 i

% ~6 j* o" u/ ?, a' A, E5 A

8 F6 a k4 c5 D9 B4 @ 对吃鸡APP的分析 6 Z' n) K0 L8 N+ ~

" e( p: v! T0 S$ N

8 j3 m) q" ?3 p 你需要了解的APP安全 5 G, G6 i/ {8 [/ c+ h# U, O$ Q6 F

k( q! }) H( c- _* d; L7 h

5 Y6 M* d( @. k3 v/ p6 a 你需要了解的APP安全 8 d0 g+ ]0 k/ g6 e. ~2 @, Y! E+ \

! ^ q) D& W& U9 U7 Y

8 {6 ^1 F! D( E' z   ) U6 A2 T( k! y$ c" F" _

回复

使用道具 举报

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

本版积分规则

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