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

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

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

0 | ?* @( Z! p2 W6 P" y 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 5 f! O! H8 }4 c

6 g. `/ O% N) K: y. G- i2 P

+ S' h5 G. z1 K) K# l vshapes= & P4 ^% |& v9 k

& H+ q. v5 A/ e$ m

! b1 X/ y' n0 R. V; [9 W. l   N, S. T; ?5 z, _

4 I/ ^) l3 R9 h4 H; p+ {

% M/ z/ X, V$ ~, u7 h 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ( v% n: H4 Q4 y' S8 l/ p: X, Y+ E% |5 g

1 {7 ^" B" i6 Q5 t

& d" e0 M. u8 ]6 q$ \   + i# U3 C- s+ z

9 Z4 d+ K6 T) m* |1 [

- ]. }9 B! O: c' {( i& Z7 L: b 基础信息 4 q+ a: N9 Z3 J) T* |1 U' k

! u) B9 |. r7 F: ~

! N; f& Y e# L; R8 P2 H) X 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ! W( ?1 q6 K& ~7 m6 y b

7 }8 D7 k: _5 l2 A7 e6 i# q) [

9 x i$ b. V, H \# d& T vshapes= : d; x. e, x) l

. k" o. s5 N! E3 J x- X* P

- z; f" t+ S# Z   3 s8 j7 T6 v' U7 ]

) V* L% l4 L) W/ D# F

3 k4 |0 z! N0 W4 ^ 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 - L# ^# @8 ^) P

* d. W3 f: g! l1 h: r2 Y% u! \

* ?, d4 w0 U1 x- Z vshapes= $ p( q, f n n) Y/ b, l' U" d

6 x8 q, h1 S* F

; c N- `/ p0 |; H   4 T! B H# }( ~

0 a3 r' T" u8 N7 m2 @

+ F" U, G2 }6 U; A 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 9 v: A6 m( `& P& s. U2 i' h

* F! x7 H4 l. z" i `1 X2 v# u

9 y0 A! `. ~$ y vshapes= 4 _) V; l# f$ X) K) x4 ^) y5 B

( Y! f" `' Q/ O6 t! j0 \

& u4 [% R! m; w" r- n: _   ( ^& w- u, R' d6 _0 y+ {

0 }5 P' Q% [ m5 z* ^; n [, c

) X; z( `- J2 k+ ? 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 $ m! @3 k/ e5 w: P

, H) a% Q3 n; X

- w. h$ v( Z0 K vshapes= O3 @5 l; z+ c* e5 ?

3 {6 j* d. l3 Z3 }2 L# t9 K

: B$ V! p: `% d j( V   3 b; F# ?1 E% K

/ E/ d) J, U- T5 ~ a7 y2 ?' Z

' u; |' O- `$ H2 {1 X" H 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 2 _ y5 B& h9 h( h

, J: L" _) p% q6 r& z" D0 S

& b7 D, v7 g' ?( J9 g) O$ N vshapes= 1 Y% _1 y1 w7 s5 m K: U. D* r6 T

* c, X6 @0 H# B* @6 b) G

4 T2 A. m: Z: `; N9 Z& x# }   7 i8 Z0 W) j$ o i

6 R% @2 t$ H6 z

; |, W) z1 L1 Q0 v, E& p0 t6 V& e   ' G% Y/ ^1 q& V

/ P# o* v- I0 w% u# J* S T; _# k

! U, Z, J! C7 X/ e 签名信息 $ p" F3 L8 `3 c# o6 H

# ]( U8 ?$ s6 O( M! [9 ~

* f3 f. v( ~& `6 q" m( l: j2 [% U& R, M 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 6 H, r. _/ N% J4 E5 d; O

4 A+ @' m U) s" ^$ t6 X, p

4 f- N o8 M$ \: r) d 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 4 a1 n, x2 O$ y) s: D8 n2 |

9 q3 W/ F3 v7 A" c+ J" Y! [! e! l

* m- r* g2 Q. P8 h. V( b androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 0 s2 Y1 z0 ~# j/ Y+ K1 _

" v5 s8 p q' G5 r4 C. `" R

9 h( [2 Y$ d: S* X+ Y vshapes= - l6 x0 C, d8 ~, G' I- S* U

: m! x. h4 {; m3 H

; U% o. G) w' a$ n. ^5 d5 C9 f# x   3 N& s; W3 i! O6 A

1 t6 H# m1 H- \* R/ k' D6 g

: H: t. D; F$ d android签名的数字证书的一般都是采用 X.509的国际标准。 + k, r0 S" U6 }' O5 I$ v

" e4 f' X0 w4 p0 m- i

9 c3 h4 B/ Q: g4 d X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 1 m2 p. q: }+ |5 y

7 d: Y+ G+ P. T1 D! @

4 g% f" z* N8 ^ 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 & o/ a1 L; X. I% a* r6 d

5 o" x( i# k# [. W4 t K: F

9 n5 T+ r# w1 J vshapes= ) y4 I& \: [2 `* I1 v

& y+ A x) a7 `5 R Q2 e

" A4 F* _+ X' p+ ?   _! x P* e2 j$ _ a$ D

' C2 p3 r( ^( V

3 g2 o8 }: o% j' c 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 + E, p7 K% `$ d) j* C) `

0 j1 o) |( X9 R. P+ c# G, c$ d

6 h# W" b: ^+ T8 l vshapes= . d" [- ]& Y7 c+ u+ v

6 V" i6 A5 h$ R* n$ c

' r" F6 Q3 C0 D4 {& y; K# x7 U 7 _, [2 n! T O

; ]& e9 d8 B0 e

* c1 V' E% Q- Q* f( c% v   8 x, {( i0 c/ t# L

3 x+ T: s% @! u% `: e* @

( O+ K2 O: a: }! r 权限信息 # z7 y( O( m- B/ f, {

% {& G: U4 @3 i1 `/ W: W

* j, P( U' M! I 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 9 A8 [1 T7 F& |

7 w; o. g! w5 [: J2 ?! @

( U* u- I- P2 g6 Z/ O7 k android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 + B) q* Y; u F. P2 g

I9 K5 a) c5 G6 R

1 ?5 K: L6 L7 s/ d/ k: E$ Q V vshapes= 1 d9 l: D) G* u/ G8 ^ ?

% C% x/ |+ H) V, ^) \' a1 o' s0 G. W

5 Q2 }+ s) ~0 l! t( Y) o% G   4 b$ W) v8 }/ }

0 {4 `! P6 h. j# s8 p6 |

+ |2 w6 P- W4 `2 [; W9 D 下面对这个APP的所有权限进行详解下: " {4 m3 A$ I3 d! P! e" F# N

a" \& e O- r# O; y: {8 Y- }9 U

. C u5 q9 C- r4 L, O0 _! [8 T% q( { android.permission.INTERNET :访问网络连接可能产生GPRS流量 4 x3 G R6 a; _: X _: K

2 r" a# Z* G( T8 a; s

' b# d+ S* b2 Q' g+ f$ }- T android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 7 d, }( {# D; @8 b8 r

: ^& G- j4 W n$ A9 ~4 j

8 }# I" N. i6 r1 y android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 @$ l) I- W2 Z3 ~5 E1 ?

# v" n( K- K3 R$ i; Y; T

; ~7 x# p2 A: _5 r, i F android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 K: k3 {/ L* V, g* |" ]

. R0 U V- U6 P# S3 V" X1 C

; m* w0 y9 A$ M6 N) z& c: ^5 F: t android.permission.WRITE_SMS:允许应用程序写短信内容 6 @' s! \5 ~! v8 g7 y$ P

% X$ f c- b1 S7 E/ ^

7 m# t5 n0 K& P9 N# _! ]) f' V2 h android.permission.READ_SMS:允许应用程序读取短信内容 1 _" P( _; d: U ]/ ^- J+ D X/ ], L

; Z \+ N. F/ g/ W5 t

8 k- P" ^1 z8 F- ?; I* L( i android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 t8 A0 |2 v& T/ X, U# N1 ~; k1 |

5 t' R# ?3 A6 v8 ~

) }/ i+ n% U* p6 J android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 ) S# R. R$ |% |/ a

2 N, I, c o/ `# h% X; z6 s

- Y u+ N' F& j; a% v; M android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 7 X# _5 ], [4 m( ]

/ O" } f+ K3 H4 H0 @8 W- y

; x7 B; d v+ r android.permission.VIBRATE:允许振动 7 C' X0 t7 _* L$ T$ ~( Y7 p

. F( `& H0 v6 v

1 G& X x% a8 o3 n6 B android.permission.READ_LOGS:允许程序读取系统底层日志 1 }% H0 \" o) ]8 J9 a8 V! v

4 ?, Q8 J2 d7 g% v" G0 z4 u

" z J' t4 |9 @; `/ x android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  & L) [7 n( w2 P8 s

6 W' c1 `0 E" \9 e% J0 h( f7 R6 t

# w, H) b, ?8 y4 L5 f9 k( S V& Q   % A. s8 a: u3 }2 c, Z, `

% \. p3 g1 Y6 ~. } x5 \2 t p8 @

5 C5 L5 E* j( L+ h# U2 X6 i 功能信息 , w D! ~; ^1 H- v& h& x7 r9 M

5 j" U+ f" ]1 I$ z) [3 f5 d

2 `# ~6 c V3 I- j. S( g   4 n( p. D( ^! g. u) f

- d9 q: Q$ Q8 ~0 T V |' L4 l4 E

" g( s5 W1 b3 a& j( a- h! ~ 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 ! W* R7 [3 U# ?+ u

# [) L" J' l. q+ a, ?# X# W

( y' G" [6 p% X1 m; a Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 8 u: |5 i2 f p3 \, d- ]

& z% f" H& x0 }; J+ ~1 ` }

3 ?. `8 g+ G% y! T F) T 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 2 A, _4 u7 z5 W: X

# ~9 N7 C9 c0 A' s

8 I/ {9 _$ F5 U) t1 C8 \ 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 - n6 H. ]7 n( T& t; |8 Q9 q

3 A# X$ |! ~8 ?5 |' {, d# ^; H& E/ Z- a

) |5 i, u" l0 {! ]7 f7 Y- c' w vshapes= 1 ^2 V3 x9 n4 N# n# O9 Q

O5 e( w; P9 m+ m

2 _. l2 L2 `1 J) `/ z   1 R2 u. P3 A5 k+ t2 H- @

; H: d2 K1 U$ r9 \

P$ V: G8 g& Y 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ! G. P; m) f' u y

& Y7 t d8 p; [: f" D

" |& ]" m' v- C7 `. R7 | vshapes= ; P1 m: q( F: i5 e$ k; Z" b% q

0 f: V ?! S# ?& q6 y

% j3 v' `" w# S# T/ S M4 R   3 f3 _# X9 B. T( V' i

+ h) W7 F3 Z9 Y" o6 c3 f

' G! v" x8 ]) k lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 & d% o$ H! O' X- y. a* n% e

, \! ]( v5 z3 P% u, u

9 N" n- W6 o* [' i# l* K vshapes= , M# @- r2 V0 V4 s' |+ g- P/ {5 T

A5 ]+ g& H0 K( L1 P

) a$ f* I# _& _! q% v" Q y 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 * d7 S' n; I* p3 q

" f) b! Z9 m. u6 [5 U$ _9 Q

2 P8 b5 P% v ] vshapes= . u+ e" [( s, |4 _ n: f

. X q8 z. P- R- G! d

9 @$ D: y/ j- p& m+ e4 `9 s! {1 p( V   6 j, Y( A- F; }* k$ s# K* w- `* ?

/ _+ }- @9 |& n i) `

, w7 e3 H7 }2 g 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 2 m8 K* `5 |# x, R% D7 J* R9 B/ b

. C: d! M/ ~4 J8 t! o

6 x/ C" @$ m5 c4 O LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 * @9 D2 x$ z0 R7 H6 W* V* }

9 p4 Y6 N$ d3 c& J6 e+ W

* ? j8 e# B- h5 l/ Q8 d 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 , V3 a" c2 a3 W

; l7 o! w, ?" E3 P2 D

2 ?5 C' ~9 L' x7 q" L 源的luasocket代码可以参考学习下 - x0 Y! l- C. X/ G) I2 g

; \6 ~( V5 S& B, {2 q

* B" Q# `. q" l, L https://github.com/lunarmodules/luasocket : |1 y* Q' e% P0 ]5 H

' K$ ~2 a. G: V" d

% e3 m" t/ U7 ?) p* V https://github.com/fengye/luasocket + o! W, G* y0 `0 y% c" a9 M

& V$ L# l) y5 i& G* h9 R |+ \5 e

& A. H$ ]( @ A: T   9 y9 G N4 Q: A) @" p* d+ J! t& K

- x- Y: K' F( @6 y

* Y2 S' j' H% `+ s4 i vshapes= / h8 Q+ ] l ~& k r2 z8 b+ c8 |0 O

4 A" t: p3 c* h9 p

9 w1 W9 P! M. N6 c2 Q- g- r% H0 ]   7 ]. F" f3 V; l9 a; ?$ r- Z

& I/ i8 W! G. m9 @- k

7 s. O. z' e6 }( P   ) }: O' ^" P5 z3 k% P

8 B- a8 w4 @- h9 v& q0 t

* c1 `; q3 U; w/ Z3 A+ L 总结 - s$ r0 o$ G3 P1 L

, \/ Y2 L* n' O; O7 D/ a E

0 x) n2 k6 X: p) a( K7 m 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 # [5 W5 z( h9 p7 p: c" ]$ |' Z: e% ?

; i3 i8 `" \; I( U s' ? X

" C$ x/ s: z, l( F7 A. g 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 2 h; |( q. i( Q: i U9 S

2 y" Z- a9 [) h; `

3 j- Y5 z2 I9 N4 `- G% E 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 + ?' N$ |, Y& S) w

' m# W# o& V: E, s

# ^. s+ j I$ }. Q, _ l 结束 ' ~" w! E# N& F3 q1 U

( c# y) C1 f4 G7 l/ l4 q

* k" a$ X! T5 A' H9 Z! I6 K  【推荐阅读】 4 L% H' N E; l

; F; H# c$ ?: [5 r

8 m# \. k; n4 F' G) e1 o P 对吃鸡APP的分析 S2 E! D, t, R( i

6 |+ n& N* U- f% N+ C" u

3 ]) L5 v8 K; W4 E6 C# L7 |$ q. E# M 你需要了解的APP安全 2 u6 ~5 Y! J$ n n& r7 K

# P9 `9 a/ v3 k

2 ]- v' d& Q! @# [: L- C2 L8 ` 你需要了解的APP安全 + y# k. D; z, [ k4 z

0 N4 `# `% l d/ B; g' a- X: Y( i

' c( ~! k E# h3 j, g   ! R0 e& u8 q" L* s: ~

回复

使用道具 举报

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

本版积分规则

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