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

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

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

# @- |+ S( j* @! F 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 J7 x$ J: n+ y' u

/ u' A: s m$ `

* O) m3 Q' {8 [) t6 R# }6 o vshapes= " Z3 y' { Q$ G- Y0 ^: m

0 Q& \+ }, {4 j; ]1 b. v" d

3 I5 Y; ]) a5 M' a# [8 g4 k   " e7 B$ Z7 `: A/ G& j* o7 ]

& S. j2 O; u( E: B6 l4 X

2 a: z. k$ t \0 F3 W& W) D' H 下面就以开发者角度进行解析下这个APP的功能的实现原理。 , K, Y. A5 T# ]( K

% e$ X# t5 U6 a% Z

6 {. [0 Z9 n' `$ {0 V   ; p5 n; d( L% t4 q* u Z

5 r6 T* {# `9 H( t8 b& J% O

$ |: X9 q1 L; I+ D% g, A 基础信息 8 ^8 G$ q+ g! l; h$ i5 U+ M

1 _+ y- b$ v" O1 x, c

; l9 a4 @$ S% u% O; A2 Z. O 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 * n" B3 f7 R& ]

( O% P) v+ @2 u4 q

) {) T6 p1 c, N- \; n vshapes= ) r- T! t6 @' s8 @# q9 V5 h t

6 Z( N% k& M% o. Z

; e( q9 x* X1 w5 [   ( A/ ?7 s* k" {' d5 t

9 R! U7 \" D2 L x* T1 ~

* b9 R: W4 I4 a3 ]* K 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ! L9 a6 \* U0 }0 W+ r5 G

7 L" i! r0 p' J& `

8 {$ _4 \( p0 k& E3 Y vshapes= 4 N7 ^9 ^9 n7 X! @- g

3 V a* b- x' B1 o7 N" T

2 a& i3 ]( y* I* G7 U2 P8 t   " ^4 _0 S1 Z1 o1 b1 j% s4 P

& u& {8 l% N' z7 x$ H. n' @" P' ~- M

: n9 _9 g8 R C/ ^$ u4 o. C& V4 q% X 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ' u" S1 M. f; \+ Y% s7 K

% L" H8 @) l8 u Q

8 g$ Q" u+ ]5 ?; S vshapes= ! ^3 X6 _, r: n! m9 q

' I% W0 U" |1 C

. a6 |' h3 S7 S2 H   H; s+ ~& P( S1 x, T( _

( s: C: u( Y' H" F; T: d) b

6 ?& a2 w: P! m' k 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 3 r7 o3 |* z3 j, F5 L

! H+ @, s+ K' Q: K- `) a6 m

0 l6 D6 Q$ s3 _0 e& n/ k5 F3 _+ r l vshapes= # n4 x d7 W4 R" o- v6 T

# I- U/ p- i v8 L+ E% s2 J* [, H

' |% M0 y: L% H) |   / ^+ B3 w7 F8 O/ C. g3 e

+ S5 B* s$ ~; t1 D( C [, V+ [

( l9 G! {/ H$ p' ` 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 . r: y4 d5 H% H+ C. O

0 Y/ P6 _3 k l. d, E9 Q; Z5 [4 z6 _

% q5 {) j( a' S vshapes= " `, c; Z6 @8 e6 y5 U

( q" W3 i' i' V

; C6 H/ Q9 f& ?- M/ H( Q   1 S& D" G1 q% i3 f9 S, H. A7 Y

' I! Z& A$ s ]/ m$ G

1 _/ o; d2 t! Y9 v$ t0 A- M' r3 C   * H" @8 X. g8 h) `8 n @) p

4 ^- S- P, D& J/ ?9 z/ I" N. ~

6 L2 x' L) t+ j, U" g 签名信息 " P1 K1 L+ K- `" }

1 ?7 g8 g; _- T- h; R$ Q1 ?+ `

1 f/ A& b) k# M1 j5 q 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ) h: {, Y5 }7 T5 k3 w3 D

" m% j% [: _( [$ ~: [

! ~/ _6 ^* c% T' x. j 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 2 g# f; B) H+ }

, p* h2 z$ {0 ]4 B( S# M% E9 G

4 ~! m- M! V' k androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 . }0 k- f* S* ?

, J" H5 r0 H2 U. e$ _& c+ r; Z* g& d

/ A. @ o' j* E8 R- [& P vshapes= . N4 x8 C. _' ?

" W, d7 c& o8 K4 h1 }; Z. l

$ F) m6 l7 A) r: \! b) C   W0 a' `. H9 c8 n9 S( [

; z" Y; n6 y/ _' a: A( n1 ]

* ]/ P+ {- P4 a% F9 n android签名的数字证书的一般都是采用 X.509的国际标准。 . `1 v/ b" Y+ d+ H

# V) y2 N9 b( B& T, V

$ Z; { R5 q: V7 y' S$ Z X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 9 {, U y1 D2 n9 P% l

) `8 U5 r6 X5 Z

" w, x" L/ X/ m' q! V# U 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 4 w2 R$ J" m- z6 K

" g2 _. }) _$ X8 R

n/ d5 L; ], }9 A+ }4 y% T9 Q& _ vshapes= 9 U. ^% @" ~1 J# `3 O* m

% @4 t0 G3 p4 ^) z3 s, K0 d7 A

* Y2 d4 E. I5 E4 [$ Y   - C2 j2 n* W* P$ `1 m

8 \& n# M- u. L& s- C2 r

4 b' @0 P: |8 }/ i( c" r( a# \3 A 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 3 a i5 p) G+ Z9 x# y. v( {! C: d+ Q

# S. n! P1 Q! R2 j) c5 B" c

% G6 N; c, q7 j o2 J* m5 A vshapes= ( K, `2 S& l4 Z- |$ v) T" j2 v+ z7 S

, i) ^# u N- N1 a+ `6 g8 o' {

" [9 w$ G1 ?6 a6 z1 E " r3 b7 ~ }4 V8 K$ v

+ ?: i) {+ e* Q `0 D8 B Q' J7 F+ g

* a$ P- v4 z8 f$ a, _# Z% j   9 }% L0 l8 y( k# E% y

1 F1 B5 I8 [& _! E; \ a

/ G, Y3 K9 H @0 b+ @% Q4 Z 权限信息 # h1 [" J; _5 A, O

% i! W1 K5 M9 n i: c

1 A3 L. x# v9 E& E: N 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 6 z/ [! G* S; }9 p$ f4 j1 e# @% u/ C

0 [( p9 [8 c5 @; V3 L) A8 Z

4 `! j! q# A9 E% F/ j1 n9 F android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 2 m, @* o) i& A3 M. P

- H, _/ f8 a7 Y) a

! w% G$ { V2 }9 B: w) k" w& o vshapes= 3 W1 X/ Z( p: `

. Y Q* c& U" r. e6 g! `. h

& y, { A2 m. Y4 u' B8 S   0 F8 z& ^+ j! r0 [7 l' Q

6 M2 T0 ]5 j/ n% z* z

. h* R2 U- Z: r3 I4 K 下面对这个APP的所有权限进行详解下: 1 X* B9 {0 b+ o: }# s0 j( p8 U

4 M& a5 h3 t) _ N$ r

- {) Q$ D4 J2 e9 o- Y android.permission.INTERNET :访问网络连接可能产生GPRS流量 $ l% p" p) _8 f9 Z* q' x% P

% {1 B) x0 s/ J

& k8 Y" m+ c! ~6 f# i3 G; | android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 / X) _8 J! L7 t+ k

0 L/ `8 i3 D. m. ]! r* U( W

3 m7 T1 x$ [) h9 `2 S/ `0 }- M% l android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 $ ~8 W$ {9 L/ t: u1 T) S6 L2 S8 ~

3 c, Q6 A' [% w0 F- ~

" Q* ]6 ~( t: ~, y: P6 x android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 3 F. G9 N. Z, D7 H. [0 e# w6 D

+ u0 I$ b) A& A, d" S& i

) J1 S# ~" J2 v) S: V0 L android.permission.WRITE_SMS:允许应用程序写短信内容 % |, O( r+ H# o4 _8 a

3 q |! S- c/ X" X' E

" ]# `4 ]# ]7 Z8 g& y; {2 S android.permission.READ_SMS:允许应用程序读取短信内容 A1 ^+ h" U$ j( n! R/ z; Y$ P

* t# z1 ]1 Y/ S" l3 P

$ Y, o D5 F" L8 {* D8 b* w android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 1 H- u+ |7 u9 m' S/ @( Q

2 p2 Q& Y: [2 H$ S l* t

i, E' \, t4 H' _4 i+ J$ O- c0 G: L android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 2 m1 t" G$ t" ?$ R% T

" t8 `8 c$ Q# @2 A! J1 o6 c

) M/ o1 Q$ H' ~. Z& v" X" w9 ^ android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 : l k/ M, U$ L2 L, l: |8 M

$ ^, H1 f. U& ^' T+ V4 e4 a# N8 L# a

. P# P0 z8 ]8 g$ O android.permission.VIBRATE:允许振动 . {, u7 f% T3 W- [* k$ q

# |6 [7 ~* R! }5 ]5 O: ~, V4 n

. i0 @& z5 S" g( `$ v" P android.permission.READ_LOGS:允许程序读取系统底层日志 % c& Q6 \0 H: l# Q

2 f1 K! ^. h2 ]' w; U+ S& v

' {4 d1 P$ A; L: b$ [* U android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  * c- ~; H' n1 i9 }1 L2 O4 Z

7 B- r) E7 B! l" u5 a0 a' g

1 X- g/ @4 E' O   2 S; h8 r7 v; V2 \; [% v; m$ O

8 {9 g, h; q7 z' N) H

# H& v* y7 K/ u; U 功能信息 . T, ~4 M* K) `) D; Y! n

! Y4 m- Q6 }) d% h% ?

0 H5 T4 _! @: ?$ h5 o/ w0 i6 e. `# U- b% R   % G7 d2 c3 k2 [. t& J

0 C4 D. H! Z" C

3 e& c2 ]6 ^( C _, r, g+ ]# K9 \" L 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 3 m+ N: Y) l* u5 ~+ z

, o' J. n2 e8 }' k1 C$ m

' O& t& J) ~8 e' g Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 / m# t: m! C0 k/ _

3 d9 k+ m9 F' x9 h9 e5 q

8 `+ N: e, T$ [3 t+ q* w8 Y4 m 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 & D" Q+ T% o" m% |

9 g: p1 J; I4 B- d& s

. D. Y; [5 [& X3 |5 B 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 7 k; ~) a" c |: C( P4 W4 m

9 S! s; ~6 \! Q& X; V+ g

; w: t" I! P, K( q# k' x4 U- U vshapes= 7 Y2 @2 l1 Y9 X8 n$ A: b7 }

0 M$ P6 P2 B; e/ z) q

* v4 ]/ [. j2 T   7 T/ t4 p: e# W# p" ?# _( p' R/ L

4 M4 ?2 i+ n* X0 O6 T* ?

. v5 e! I- z7 U$ e+ n1 G 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 , l6 W* s+ G% D2 q* ~1 I/ x

6 H+ s4 N( J; F

* I; a7 R9 H t3 | vshapes= " D: s2 G/ u8 y' c* t3 q: Y- ^% N: h

* F8 k$ s4 o5 x4 {3 D1 m

; @. {: ~0 Q- V4 e   " j8 l* }7 B3 W. m7 m. j' T

% i- v) G! E1 @7 w( {6 h6 ]

" p p* o6 j5 O) f lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 6 L: {2 V& o W9 _) v

. R R, H' ]5 o: G d$ P

0 Y# |! d+ h; C& e vshapes= , [9 R$ x* n+ Z

1 J0 B, P, `4 j1 g% h& @, K

0 r( R8 x6 k. M" t 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 , u. Z" I9 d# y. n( t6 T( j( }

7 K4 ]( \, k7 E! y' ]' b% H' Q& q

- ?& Y3 f V2 n vshapes= ; d0 q. C& q! J- L: K$ g6 x

3 T' o" |6 {" I1 L

( _& ^6 Y" ^# O% E+ f5 w: @) Z   " i9 i6 f0 c9 S7 i4 K o; _

" ^: K/ \: M- x! X) y m% P

6 q9 |+ y& [ ]0 S 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 $ d+ E% `5 w% w6 e2 Q5 J( D

Z) ^7 H0 ]9 s, u3 `2 P- t8 z

4 W6 \3 e- K& E6 {# j LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 ! l- @8 W4 k& E0 t' }+ |8 R

* N4 I' X$ p. \1 R1 V W& j1 l

W- e5 t/ |$ K* ?) x- U 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 4 `/ T' f( _& K

# l* B! U [6 @2 I6 O& m. M

% a4 i! ]2 ~7 Z- x- u! r2 [ 源的luasocket代码可以参考学习下 6 |4 Z4 w2 E7 x+ a; J9 F

$ _9 B b8 r6 n9 l: K, `' o

8 M" }# E9 Y2 J' L0 X' V* c https://github.com/lunarmodules/luasocket 6 v. M. b# H# ~* r3 O! `

5 g8 A2 q+ D% }" h% ]' f% t

6 o4 S7 v" N; K+ P1 ~* V0 Q. A https://github.com/fengye/luasocket # D# U4 r3 E8 h% i/ q4 ^, |

9 T2 d5 r' L/ L4 D

, s# J. X8 m! K8 ]; e/ x6 V   , V4 b# H3 o9 F: P5 b2 V

0 \5 X$ P" v: k- O/ B$ G2 a

3 r9 t7 ], K. P7 p0 v' `% h, m vshapes= & F+ M: x. ]2 U8 ?# L* r j

f; R. p+ o0 l- G- R" L

1 a% y; y5 c' ~- N% a4 Y   0 c# D0 S5 E% u- u' U

6 d/ A$ z1 ]& S7 e- Y3 z' M& `

1 q: h w; [# ?6 I& a* w   . D! V& B! O a- G% V2 w: C, A! u

: K c. h8 X: ~" W0 q! j/ e4 W! T

: l4 E& Z. W+ X8 w 总结 # l( F7 w, w6 J' A* K0 W

2 x$ T; T& C( x; D3 A P) X! J

/ L. Q# p: G, U& j# b3 K. [ 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 0 T: s4 Y+ o; e4 [& l! b7 Y, _, |

; N$ c$ T5 q5 o' `8 h

& G+ v: W$ F$ p! Z3 Z6 E4 [/ f H 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 2 { Z; T/ g- t9 a

8 Y- M/ J5 w! Q3 E

7 }! o- k6 h5 A; k 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 0 z$ f, a) o5 y* t! t- b+ e

6 s5 Y2 M+ Q" K$ [& W8 h4 f( O9 ]

6 r8 s% v: Q1 F 结束 8 K; m: g# h! D# G# s( |3 v4 T

. L' W# a1 y7 c9 h

# x* g: ^0 Q+ ~4 h7 U  【推荐阅读】 9 d. X9 A5 W, Q0 I9 z1 A( r

+ ~7 e' T) @/ c8 e: e

/ h b4 I+ u; p% w+ z 对吃鸡APP的分析 & \" o/ W$ ^/ t4 h8 i I m

& S) [* r8 X/ k

# K4 l% t$ `7 J 你需要了解的APP安全 9 h) x5 W4 D, Y

; |2 I6 N( V$ \2 Y5 R2 n

, `" A" R/ }2 [! w! J1 A 你需要了解的APP安全 . {' h5 a2 H- v$ X

% m8 q! q! A$ b

! X# Z/ F9 F7 F4 b/ R   % y; W) \5 s4 S7 v- x; o# n1 [

回复

使用道具 举报

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

本版积分规则

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