找回密码
 立即注册

QQ登录

只需一步,快速开始

欢迎中测联盟老会员回家,专门使用25年老域名强势回归
查看: 810|回复: 0

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

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

/ N& I g, V: I& [9 J; C 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 : N8 Q4 O, m) X: a

7 d* z- s7 C( J1 }9 i. v+ S. P* t

- y! d) q0 b% _' Q) N3 { vshapes= 3 C/ s' D% \/ V4 a, ~

; q1 X! Z5 T+ {( Y6 e

& L- k: y) ]: o   $ x0 l6 v8 j7 W# ~ q

# r: e9 k0 }' j. D7 k8 T3 |

, M, C/ m7 W' ~0 t+ u' u 下面就以开发者角度进行解析下这个APP的功能的实现原理。 $ Z" R+ k/ P9 b/ Q' `3 E

0 g* a5 F' ^7 T& `, q0 t+ D, {

3 n3 s7 X5 P4 X5 O# n   ; R% ?6 p% p& M" r9 w2 f W/ t0 o G

6 s2 n8 R9 T6 `0 |

. b9 T5 v! O/ X$ [2 [) } 基础信息 ; A7 M. L( w0 ?7 |; K

& X& o( D* J+ |# ^

& u2 ^. x2 L& ~ 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 - d- L4 G+ Q9 M0 d

- f8 P, Y+ D1 q! l2 U

/ y d3 h3 p1 i {, N vshapes= f2 T# O" Y: U8 W) A6 G" y9 H

3 A/ q: B/ O1 c' M c8 v

0 Y1 G( d5 F9 s6 w: f   ( Y* M) {1 j$ B" d

0 I$ D3 R5 P# C

, D; ?. w' ~1 M. W! ]) z 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 6 Z; h% f! n/ o, K# O

6 v: ]4 q* Q# ]% E" `3 N) J' E

F2 q5 }9 o# r, n! C G1 P; t vshapes= # j. }' _1 _0 [7 D0 E" t7 R

1 d- F6 i$ Z) J' @2 s( d. z% X

% f- Q/ z* A, m! e |% x   " k0 M( C* v" q% k1 Z

: v$ B7 J: C1 B% i' b

* \5 i3 a; y- }# G& j' E7 g3 F 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 / R6 s/ q, e# `! T8 I# q8 U

5 s: }- m- _) F

- }0 q% z% X4 }! h. x R vshapes= ) r) q7 ?4 `. q* n

o& _( H% ]. Y

. ^, ~ @ M* n# h9 X   7 D, I% w! R! i- l8 Z8 h+ B

5 V7 p3 n# T4 D7 J5 W |9 ~

% M( }) ?$ n$ N8 C/ } y% e 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 - c7 k. g# E2 t8 O" f4 Z/ w. I0 L6 [

6 n! B4 p7 ~8 l

( A- K6 y/ f/ \+ u' A6 |" M vshapes= 0 K$ l( F2 N Z+ D( {. l

" d) D$ Q% c" I$ b! b& D+ P

* _ d) T. V# h# b& e0 \   / x" x9 p2 _: w8 e) [. D: [

0 H6 {2 k5 G. T0 i; t C

, q9 ]! K/ p7 U- I9 Q& J 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ' O1 R2 x8 J% r; R- R/ J

$ {" q$ t4 k* K+ |7 e& Q8 F

+ Z" i$ L/ r% l3 o7 k) X* z) K vshapes= 9 v T0 X# x; w) a$ C! H& l+ Y3 {9 D& n

7 Z! h6 \* B9 ^% Z( @( {

" q5 [5 [7 ~$ n' b- R" n# j   : M: P( N$ z* {9 _9 M; Q0 P* _

7 J2 F) i- a/ Z( \9 u" B# v) n

, w" R9 m* y; r1 U/ E   ; {( a7 |0 I: t! R, o1 F0 Y

8 y" Q/ s0 a- \" l+ q

( E* J0 C$ [2 k 签名信息 + n8 C7 u: O& j9 s

6 ?% C2 t( c- s# c3 D5 P

) c+ e3 b+ U6 z0 F' u: @ 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 : l* D( a/ Y. u; [& _

4 E; [/ y; S9 {

9 P8 i, s8 _$ e$ e. E, c 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ) d6 i, G2 R( B; D: f

9 @: i( a& j+ e0 j7 n9 m

2 Z* K: Z) [- _/ Z androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 : M# ?# f2 C0 G7 z) Y. L* }

3 q1 J3 R! U3 d+ S6 Z& u0 Y" g

8 M1 n' ?" K+ t/ r$ w; K y vshapes= / V7 @8 h9 A& e1 G

* C. Y/ K6 S! c) K9 v/ s$ w' H

9 O" `2 r" X# `! R3 t2 a. W5 C   : ^2 W7 G3 J6 ?. l# ^: h1 g

+ k6 s& j. { ]) @4 U+ q. D8 A

: O- ^" ?' l+ `% S3 a$ U! o: T1 } android签名的数字证书的一般都是采用 X.509的国际标准。 x' \9 H8 \% z

# y' v" G& Q! c

@+ P' H. H& N( W; [ X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ; R3 S: j& P7 g4 i

$ o/ h9 V% J. O6 v* p

7 x! \7 N2 K1 D0 v 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 ( n M {: \5 u) r) J2 h5 ~

/ p, i- Y6 ~. k7 J4 P

% @( V9 a( Z- c$ K7 C vshapes= 5 J$ W ^! e! D7 C$ O6 S+ C& S

% R$ a! g: `4 q3 v+ O' S

. j1 m! U$ Z8 }   4 p I* B3 W; w+ w- z e! o4 P

0 ]5 A( n O Y: Z

/ Z$ b' g, J' g 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 4 {& c0 E$ J8 D6 J/ F1 }7 }& f

9 S( Z6 t" w# C; E4 L) B9 `

7 o2 O) Y, ^: |! n5 @. r* O vshapes= - s3 h+ d" Q8 T. p1 H! v$ w

3 K! `2 K" t0 A6 A

0 g) a- u; v0 e! V3 ?! N1 u & B% K# W' e# V8 Z0 `* `: O

5 V4 H7 b. G: i# N1 ]

: X" Z3 v/ l& A2 J% h2 O2 X   + s: m* z% ], u9 H8 N4 m

9 h& a$ ?1 \! Z2 a- z% [

2 y* O* _* L; P7 E 权限信息 2 B G' c2 C. z' M

1 V8 |' x$ `4 z6 ?. ^$ n

2 w; m3 V9 x& X5 E 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) , O2 P* O# [" I" A' f9 A

( \0 x' [# \) i

- S$ v) R3 v8 H/ ^, g9 C: I' O android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ) ~6 ^$ w% j% k$ J. t' a6 E

- a: | Q) X, _6 Q

" r. P$ X, {& f7 @# J vshapes= ' L! o/ ]3 x: J- h6 q: q. T- {

4 N4 X ?6 O4 u) C

5 t" R7 d; v- N2 ?   2 c: `1 x6 |4 u5 |5 F7 ~

3 m1 j6 w; `3 C+ J. `9 j, V+ s

+ b4 h: V" }" L7 Q9 |1 K2 ` 下面对这个APP的所有权限进行详解下: , I, W1 }) v9 B- Y3 [; T2 |( M0 z

0 V9 n' W+ e% A' G* G

9 p+ P2 C. @; h! {' r& `8 G android.permission.INTERNET :访问网络连接可能产生GPRS流量 + h) [3 J/ D* R I

; y8 F8 {' }& _9 _* Y6 v

$ k5 o! T; X; }5 F C android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 , _# h8 y4 i+ Y) s5 l s

7 |" X0 x1 E+ {5 J5 I

, G8 P. G; y% G) n+ \; {2 l android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ! n9 E4 W4 x! ?& Y1 h+ j

6 m- ^8 ]9 C D" z6 ]

3 g0 u* ?! o7 S& B! A( N, O android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 6 M2 w- g3 q" {8 R! L z+ H

' t, T/ _- `7 |: E

) y4 @4 k6 D8 m E, f android.permission.WRITE_SMS:允许应用程序写短信内容 # k: h6 Y! r9 ?& `4 m9 @

4 L" J3 R) p) O2 w1 ]

/ \# P2 h# \" v& f- j android.permission.READ_SMS:允许应用程序读取短信内容 h+ R: V- Y: Q9 Z

, }/ ?. h3 E2 W- ^; e

( z0 w' `! m( z android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 8 Z3 c, y' E3 E- B+ Z6 O

+ e/ x, A1 A. H/ s- f* u# L$ A

( b) y9 r- f6 S android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 ' k8 U3 k4 [/ ~1 a& {( |

- E% l+ I! w# j2 x

: B: r6 L2 J( |0 @( ] android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 1 G' P# P3 r1 D: o' Q

' I3 P3 d* l! x- m d

# [3 u, w$ {. W$ ?3 m3 z3 G android.permission.VIBRATE:允许振动 ; Q- M, A& p! M8 _- i

d- A, f6 e' n, Z: ^

9 K9 n. i# F, z2 k& _ android.permission.READ_LOGS:允许程序读取系统底层日志 ! T, B+ {' ~% s5 S

8 J# T/ n' |) A) `: W6 N9 D

j- [+ {- B2 W# P android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  / F A* y% H o9 w+ y; {+ N

+ T" K: k I$ x3 `

" ^9 V2 Q o, F& C8 G   # ]5 E; H+ N7 d; a

2 j9 G, l8 |) S- O/ M

9 A# w$ T' \9 _. A 功能信息 - l0 I6 t$ [% C8 g( X: z

7 Z# G. E3 u( \

! ~) ~$ {4 b* N! _; `   8 l; a z, r U& {1 Q$ w7 o

, ~9 o3 \" w! `/ F

! w) k4 g$ F$ ?7 y: i 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 % q6 V3 E; i1 o: y2 w0 @

2 K% X- f2 m% E$ Q

! n0 b3 `& O* R7 U5 s5 x. h Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 + h8 ~ ^7 f; o! Z' L; F

' P; m& K! w: P

& s/ ]( g/ V8 Z' P& }0 j9 j 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 . O9 B0 b9 U' }! q% n

$ Y/ }! G3 o' P# E- ~ z" K) c. N

" M8 Q: N9 p* X: [& N3 R' y 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 ! }( W2 ~3 |1 T& W

3 b$ P" L) d/ r5 a; B$ x9 y7 F( k

/ A* U4 v; f: X- r0 D$ x7 g* N7 G vshapes= " I! f$ |5 o, h6 Y0 F2 Q

2 s& t" _8 Z2 y9 @7 D# C

- l, a; u& x7 P, s8 Z4 m3 |   * l- I5 z% _+ u# P& a; q% A# _

2 ]) O) Z8 i8 D0 m* ?/ W I# c

. q. P( |2 _! u H: w+ @" j; \ 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 $ e* p. P/ K2 Y2 H# [1 a: u

2 k" N$ V- e: C. w6 g G8 c" y

5 a4 ]" V# n6 {+ a vshapes= 8 Z+ ?+ S$ u3 e0 s9 p0 o

% `# v8 ~* C; l3 U" O

2 ^( P1 ]( k, m, x8 q, Z8 e   6 y& u& Y3 H. o! u; t: Q+ A6 w* P" p# }

5 I6 |/ Y( V. ?) E' o I

* u% F& ^" O% V7 v lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 : N! S; Z' N# n" [

0 d) Z. X6 |1 _) k- K

( R0 o0 @2 I/ ~% j' \2 ?% D0 t vshapes= 3 M: d& i: r7 z% r B* K2 W

7 C) n! N. C0 i% C

0 j9 o2 b9 d; F9 F" u% [ 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 0 z. L6 _% N; a7 D

) r# ~& F3 q3 q

# |% A" Z6 B% {3 L6 W* Q& g5 x vshapes= 1 v/ B( n b' Z

( c- j, \: p2 f2 K0 O8 S

% m$ o6 o3 H' k! v# R! k) w   ( L0 X0 s; M4 M& h1 o3 H

! [, x! w' Q$ E( c6 u0 P! P

- _5 A/ K) \5 h @' n) a 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 : p h2 z3 I( K* f v8 T$ `- e' T3 ^

) Z4 U5 k# E ]: K v

% t. X6 ?* ]: U! Y4 K LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 $ q2 d" X% ]4 P: J8 |0 c8 v

7 z+ v* ?: L) y0 G# N$ i

$ D5 n! B$ ^' k. M* @ 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 0 g8 j% ~' D8 G6 U l

|9 X$ J2 H ?, G

$ e5 s8 t! E1 W* ~- V 源的luasocket代码可以参考学习下 6 O+ |9 y$ |* C* G# U6 u

) u1 s7 b+ N) L! V# T$ }

3 ]3 _2 V' s) s' V https://github.com/lunarmodules/luasocket # ^% Q" l6 g! C4 V4 s

5 _( [* y @% ^0 o# h4 i% c

& r* o. J* V' R; @ https://github.com/fengye/luasocket + r( ^' H R& V, t5 }0 w7 j

$ O* u5 h5 l- y3 n) H6 `% n

3 Z5 ~5 E" T3 G2 P% z8 k# E+ U   % G2 r2 D2 W( V/ u

5 u' W; N8 q' Q' ?1 [' |5 w

" \5 b; e/ K0 O6 w) w; o( o vshapes= : p9 t0 I* H( r( e

n' x" ]( o' O! ^8 Y

1 b; k3 w% d+ q; S% h* e1 {5 c4 i   5 i8 h+ u$ W3 p/ x( |

* ^4 C& P% q" \) Y7 G9 y1 d& f

) P z9 H1 m7 T; D   1 V+ \; N8 q* o1 J% |/ r

" O7 L# N. M6 q: N

( ]/ \* _1 ?) c/ g# p6 Z 总结 9 c; {' x" q- G1 u5 c

4 R @% L. e; {( A; k" H

' J# w; z3 k' E- Y 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 1 m( z" Z7 Q1 O) I# k( E6 D; j! N# D, w

+ Y8 u5 P6 u' m2 w& W

. i) P+ c' c$ [ 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 5 g# M) R) `4 F3 X% L9 r) c

: J* ] [* ~* J6 q# ?+ j D$ |; U

; b! j0 B3 e( ]! a: ~2 H 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 5 E3 Z- s5 s* X# D

( ~6 U4 S! C+ S( @

# n4 d# i* j& K7 u( L. O 结束 + w* O4 Z4 y% q0 J

+ D$ l9 l; m, s) O$ \- E2 J" c

: }- A: ~' S; o% T! A  【推荐阅读】 / D) V6 z9 Z% m

' t% w# Q% [& F6 \4 R a

! ?2 o o0 |0 a, z9 K# k 对吃鸡APP的分析 3 [1 H, Z, r1 o2 r: T, C

& L$ P3 l0 P8 }+ y

$ ~, e5 _$ V1 v4 [ C 你需要了解的APP安全 8 O4 l/ I6 @2 r' |3 m

5 B) R' K2 S. f, V6 ~6 |/ j

, b) U* E9 d" Q1 O 你需要了解的APP安全 1 u: D. i) V, S& ^' @) b5 T. |

( T# e0 W% `, B

- @5 H3 i+ D+ a) N   3 u; C, u. v. u- k6 N% O

回复

使用道具 举报

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

本版积分规则

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