找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

`8 w5 g& _2 b6 e% H0 z. d 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 0 i7 z' ?3 d: H' K, r0 V

- e. k$ N( H l7 B+ E, @! B6 f9 `; n

5 N* u# N' m2 x; M vshapes= , V q' `7 }" w! L. d

% c5 U) `! U& p: a2 L6 d# W! z

" M3 L0 g) j. ?3 w. c# V   " D7 S1 I) F( f) t$ N# Z

) q9 q+ [% N' @- y; B

8 }: S' b. N9 m 下面就以开发者角度进行解析下这个APP的功能的实现原理。 4 w* `/ n7 x3 |% a. G- L% f9 e1 ~9 H

2 M' v8 f+ B3 x& O2 s

" o+ Z' [8 e* A) h   * @6 @, L! d% N0 @( @" {

- f4 T8 k, ?" S% y

) H% L: d+ m( h0 f. P 基础信息 1 @0 Z5 o# y; _0 }% z9 R+ ?5 X

% P- B. M7 {9 @: R

4 O% c4 c3 H( {- Z4 ]' O! W 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ( ]6 Z' j1 U; ]5 a! w

; {! y) O8 ^9 P

8 f1 ^- F1 E h vshapes= j0 b$ Z, V4 }) O3 S7 ?! B

& I- C& P" A- M2 R

& @" H# i* B8 ~3 Q   & K/ A8 H/ M( L

- D& ~# k* F( g1 }

- ^. M+ f6 Q2 S4 H4 i 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 3 L0 b6 |5 R4 w, F

. v& \: e' j" q( G+ l" g0 z

, f) Y* z6 E1 j, z vshapes= ; B& O) P. U9 ]2 b! E( w* Y/ `2 `$ A, Y

& E% c9 g7 N+ m/ v* }+ k% u

/ L8 V$ O" ?% g6 n5 p# [& L   5 k6 R6 W) T$ _! ? j+ w

& r% p# Q$ P1 m1 k' d6 z

* v9 L' s6 \7 ^. W J( N5 l 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 6 @- W. w9 D8 u

& ?5 D0 I* _ z: ?9 n7 t( b

! n$ i/ b' V/ [& F vshapes= 1 a' G3 X+ {. B1 c! Q+ n" V' t

+ a& X! i5 K) k( o; @# R y

7 D" y; B3 a: z! x   * i+ E" e7 M9 P/ [9 O; {

0 A* k8 l9 b4 k

0 i, p0 {$ L/ w& |9 I5 q& L* G 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 . S' M( o0 B5 w# ?+ Q2 P

0 \8 Y/ [$ r9 c% q, T, F; Y2 G

# K- b9 _2 I7 [. f0 a! v/ y* J) ^ vshapes= - x$ J# U( v- d. ~+ X, l; a

2 L/ W; `+ B' D0 |$ V9 {6 y

5 B( ?% |7 f Y- y7 j) ^9 C   ( p; P& }* T( I U

# P0 e8 l( ^7 M# a0 P9 c

; f Y4 y; U! W4 e) b& ~ 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 , d* U: K* G/ s4 q7 Z8 S% S

3 B8 o' H- L, {$ T

7 z( `: A- j: N vshapes= ( q* W3 E2 d1 V

& h$ s2 z, y" T% e z$ F# l; J+ R+ ~

9 k2 {' b8 g+ r   8 R+ l! }8 F+ y; l3 L; {! n

9 S3 l! P% C- t6 ^

$ @6 T Q+ [* j   0 ^& Y% o" a$ K5 v1 a& T: {, n

: ~6 y$ X* K8 j* E

1 h8 V" {, L0 S3 K, _1 i 签名信息 & @# E* y4 J1 D! c% S9 [- _. H

9 }( n# [! g) `

% B5 r5 }5 |% y9 c* ] 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 5 U+ m# u4 K1 G, g: s l: x- B

+ ]. B0 x+ F+ i; [( l

& d% x' ^& }8 w3 K- l 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 5 t9 W3 Q" C: z B- }, t/ |

$ a( D! d: m9 H7 O5 u

, {! I) t4 G4 p% _5 X }, L# O androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ; {/ [! z( }, ~; W7 R& |6 x& n0 W$ F

" Z) S* Y6 l/ J" D I

/ R1 x2 }7 o3 p7 _9 v vshapes= 4 w9 u5 @$ K+ \0 \

7 f: g4 H" f. B

% N) u. W1 Y0 n, M6 }0 O2 s% G   , E) t; p% V1 R' H5 m

' h( v( V/ E! i- B0 w

* `& L0 K G0 b3 s/ L( ^5 w- B android签名的数字证书的一般都是采用 X.509的国际标准。 / E; S- R! h# C+ r+ R, y+ u+ F* m( Z

( y% L7 Z* Q) O, v2 ]

! X/ y7 c* G0 o- I X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ( \5 Z/ q# G* }" n' T# ~0 @8 W

$ y2 ?0 y4 ^" i0 N

4 t( H) V3 O! f* a9 ^$ H8 P 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 : F: h" |. x7 x$ |

6 x9 e8 R, g; }$ q- v1 x7 r

0 _) q( w! Y) C, N vshapes= " j; B; \/ q3 d) i$ s$ X" Z

! c( k* v( r% z6 r

) _# i+ Z4 L' v# B2 j6 Y   % E4 ~. ~. v7 C( `) g$ n8 X

4 K3 l# ~) g/ B5 a% K

' E* O: K% g% W7 `* W 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 8 G0 @% V2 H3 R6 h8 f3 z. H$ r/ {

0 V6 ^: t3 ~; e; r5 P' k& D' v

+ j# q) z$ i9 d4 P0 P vshapes= % n, q. H) U4 s4 C% Y; [7 u

- f5 w$ J1 G) S; |9 w4 t' H

+ s: W" M f3 R* ]0 e1 T* |1 u * m' g& n$ ~( x7 r1 L' G

6 D7 d& I1 M0 Z6 t, D

0 I X: d2 B! p& M/ D/ n4 T   # U0 D g9 y7 Q

1 B/ r- u9 l( W0 Y% \/ F4 ?

, @1 d" P. g6 b3 V 权限信息 $ Q5 m4 z4 h9 S9 X

9 v4 P s/ ?7 j% @3 U, D! `

: I7 T; m5 R" Z 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) $ x& a* X3 t p

6 ?: p# I6 `' \, Y2 E/ W

+ h3 b Z5 A) a& Z$ j- ` android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 2 Z5 F$ U) `, a

. g/ a" e( W1 P/ M

% I9 H' ~, @3 t+ E6 Z vshapes= 1 X& S, ~7 K. v% m

2 Y( j. C) S) t$ p- H: }

% c" K) ^; S% ?   4 Z* p8 ]/ k& E( n

0 Q3 @: ^6 Y3 w9 l0 H

4 X; B* t" d* V1 ~ 下面对这个APP的所有权限进行详解下: ; x2 q" s% p+ s( x, B7 @, R

! B V0 w3 }9 w+ {- Y

$ g* h" o3 K; _( z android.permission.INTERNET :访问网络连接可能产生GPRS流量 ; H) Y6 O3 }" r

{0 y7 \2 H- A( C; b* C

5 H7 v3 o* T6 p; ^& d# K" z8 Y android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 * l. U" {- B1 Y/ [1 Y: a

3 v( L/ ^- j, {( j

3 j# r, c) v2 j android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 8 A5 F, W" J, K& u" ^9 w4 G

+ |7 x3 C! K2 A- h# v

4 L* a# T f- P+ m" S2 o# _ android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 5 @) h$ [8 ?" H3 @7 O

& j$ \6 v. q; s3 @- x5 q" r

- Q e6 `/ e# Z4 z9 E5 g; c6 x+ { android.permission.WRITE_SMS:允许应用程序写短信内容 ) b% `; z3 d( ?* V; k% C

5 J# K7 T4 q( g( ~+ [8 f# [

* Y2 D) w3 ^) D android.permission.READ_SMS:允许应用程序读取短信内容 . D. Z5 H7 ?/ q& A

4 \1 [2 L8 J' d3 f

) H& d9 ?7 N L! j. ~+ z8 W3 @; F android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ( w$ K) C) q8 x3 r# l" ]0 Q( o8 E, I

M, g8 S! X7 s( @1 q) A1 R" J

2 `, S" ?$ B6 p# M |* O5 h android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 4 [) ]0 U0 N. f- M# A

X+ }& I' z6 E' e( V

; R5 [1 R+ o8 \" G" t9 W android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 1 ~% Z5 ^8 U; i9 V* r# N' a

# r( p. b0 j- l! y2 P" b0 G

( g4 Y% {7 O$ o; v android.permission.VIBRATE:允许振动 ) t7 ^$ E% L# f, I. p. t9 u

4 D! q2 v/ `; z/ e5 ], k5 _8 ^

+ ~; P/ G) l+ N1 c android.permission.READ_LOGS:允许程序读取系统底层日志 1 K6 c) Q) b1 G9 Q

& ~+ {6 \6 \, x+ b

6 n0 o4 S/ H% A2 x2 G3 i& T android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ( V! Q% T5 y1 `- S6 n7 z2 n

8 F# ?2 |7 K, q) B3 k2 I% F; p

+ E x# f, K2 ?7 j6 f6 L   6 r. d: M( J0 E& }

* x* r& y0 d. {9 l7 Z+ e5 Y

9 C! T6 _. M8 V Y) Q0 p% ? 功能信息 & _, [* K- G+ D

9 v9 g7 m5 e4 S ?( V3 a9 n1 a

! b. n1 @, F! j+ A   ' L6 B( r+ I2 c6 w* X1 [

4 ?5 J5 i8 o1 ?# D$ L4 k

) s3 p1 g! {# G5 [- z# x 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 $ e M2 e* C" F

7 C$ F! c- ~! g) y9 B

9 ~4 K/ u: A W* s1 A- W Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 # P4 X$ _/ [7 d7 ?4 v8 C

, Z' g O. C; n0 r- a

% s/ @7 u$ J* M6 u; b; @ 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 7 Z% v; l6 |0 Q! w M' L( X

! }8 ^& `' o7 z5 p

, A7 ~$ N. C5 t1 b2 C" k 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 3 N* }8 G$ `7 }, ~2 W& ^' u

+ c. o& \) N4 p1 D) e9 m) E

: t/ M. Z& H- y' j/ p vshapes= 7 H, d3 R+ h, Q. Q

" L- ^, M5 a; P

' m6 }! h( q$ _: D9 p8 h6 k   8 q8 R# B" u j

, c. X8 J% C6 w* x

) x2 c9 t7 D. h 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ( @) o+ \0 N6 N$ h' Z D8 Z

, ]4 {+ Y0 I2 ^4 t. B9 a

Z# f2 ^# _' ~; q: w \ U: p vshapes= 0 c1 H1 v3 o7 o/ n

0 O7 s0 M9 B/ a7 X; f- b0 D

) X. j0 E3 M) [6 ^7 \6 j$ q   p& o H) ~* T* f

: S" x! c; I! @4 V' Y( U

6 _; x( n/ e& u$ m lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 8 n1 T8 {& a) C

6 E5 J' ~: v( k! y, B1 v

; [# v3 R" K& \ vshapes= * C2 ?% \2 D! a T. j

6 h7 ` m9 e- z3 j* Y) Z+ n

v* E/ e0 }& D. p0 L& j' V! M/ x 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 6 P O7 x4 I5 |; `% p7 \4 Y

, M- d! N) T% O5 [3 e4 e! s

) d5 U; h- u" u- D" I8 I& X- I vshapes= ! a! Q! ~2 s3 E6 h

! n/ d4 ~& `7 e! o; K

8 C. i8 B# c, j) C% C# k   ; M& p7 q3 {+ ^( V5 R

/ l( W o; s3 m

0 u- A& f# E) j' I' j 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 v' a9 _; b4 \8 n

1 T7 A3 y" r! \- V# n4 m

/ I% z/ U- {' z1 e, ?+ N LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 ) A1 v! n# R; h$ V% L' x- ~

# X! M3 T0 e! F; H2 Z U( G- T1 p

" u- W+ H( A9 r2 j( N2 y7 E6 M( ] 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 : R* ?0 F- @1 M* ]5 f% N9 s2 T$ g

5 L: I/ s. q* b+ ^& q

5 f% m/ O4 ?* M' `0 a 源的luasocket代码可以参考学习下 # `8 ?; g# ?0 O& l' _- d

$ K3 W2 c% J; M0 ~+ N5 D, y

( \2 ^8 K: I7 U6 j4 w https://github.com/lunarmodules/luasocket $ K' M4 g( P6 Q4 ?% V2 U% J, N7 ?% n

5 U' A3 c5 x5 i8 \5 y

4 d1 P% M }+ o( b3 B. B https://github.com/fengye/luasocket # }! h9 I) I& h' x$ ]

( V6 e6 z5 I4 Q9 k

* u, W; c L, |, t, b   % l8 s& S j6 z' t

- E1 _1 e6 }5 U; H' i( W

8 D2 t- R' L( e4 B4 H8 D vshapes= , l8 Z' @' T! [4 X

2 w- O0 u3 A9 X% t, H- r

4 q' K% T* }0 R: k+ j: z, m x   6 b, s8 q9 i' D+ p" G/ w' C$ s" }( @8 `% h

$ c1 [7 M% J9 `3 a* I

/ P& L% I" ?. X: b& n ^   7 N2 I* K |) ?) x+ n- P

+ A0 `( X& w: }% s* X% V2 S

' t% w% h& }3 D0 c6 w 总结 # e, ~7 H5 @& c! Q6 i7 Z

7 W4 f% Y8 O2 q3 a5 ]& @/ D

+ F, V/ Y2 j3 s 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 9 W" f, k: ]% h9 d& K9 z- j

. G* ^' f9 `8 Q$ l

! l: l' c- X' f1 o5 @! W 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ! g* s- B6 S L; o4 s

$ z. {4 ~9 C7 y8 F" O& G7 |. U

9 k5 }% c0 S- c+ ?# Y) p 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 + V/ h, a9 o4 M

6 V$ s" V7 z& a! E: m6 z

) x+ L d2 I2 \ 结束 # f4 ~$ W6 G9 H0 Q0 S6 |: {" q( H( V

; O' l. `, \) ?" {1 V4 A9 r

4 O. \9 l: j# q! V! h7 \  【推荐阅读】 7 R/ @/ v9 ~9 h( Y9 h9 O

/ R, o- Q$ l4 Z h3 d: |

3 G& J7 X1 X" ?' _* G6 G/ W 对吃鸡APP的分析 5 @3 r: D [/ D- H& I

: d+ b0 X% v9 y- h$ z# l! H* ~

9 B5 C) `9 K) i2 [ 你需要了解的APP安全 ( i, P9 n! z8 A

& y& T2 m6 [1 w% [ }

: ?1 D! L& @. |% j/ B/ M$ j9 U 你需要了解的APP安全 & a4 [# t" L9 l! d

* A. q2 _: [ O7 ` p: G# M

/ g% @; ^: h; z# m9 h   , l9 R: }. ~' r9 ~

回复

使用道具 举报

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

本版积分规则

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