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

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

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

# t8 P$ y0 u! B6 j 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 , h8 `& ]9 i, X

4 K4 d* F5 i! w& |

% M$ X2 ] W- q F! ` vshapes= 1 i- s! a: f9 g; S. r3 |' O, a6 Z# m

' r5 h& {0 {' X+ `- Y) a

$ r7 J0 A' K& z7 k: t2 J. v) _' m. h   5 y) |' B- p( ] _" q

" r) {+ R8 W! M! k

8 h' r: H- m8 G3 [% q( g 下面就以开发者角度进行解析下这个APP的功能的实现原理。 & a& s8 Q: s5 b" u) A: \3 C- ^

5 k5 R! k! ]. E4 Z$ u

X0 A+ t) o$ x) _ `. B7 Y8 }   9 L- ]' p* {3 |6 P- y5 o

0 @7 H$ |0 i. I5 h6 [- \! s9 c

: O: a4 j6 u2 n1 P0 p) p) {% O 基础信息 . _# i3 D r4 Y! d! a$ s% _

! ]. S; Q1 b! |" I

, `+ l0 K* b+ W& @ 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 . V3 L2 E7 ~. p- n+ _" O

# G* `0 R. P/ K

+ ?7 Y4 \& a4 ?) Z8 [" l. I5 J5 m vshapes= 8 ^ L$ x* c: h6 n2 w! D5 y

/ H" }2 d$ ~8 c

' I, a g& L; r. y   # D- l/ ^: t6 v. n9 s% A

* d3 g2 {5 C/ F* [% ]

" W8 O5 U! X4 u2 c- F$ k4 [ 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ' ^0 z+ [/ H3 e# R" u

" x5 D7 w/ @; Z1 j. ]

1 ], d( s0 t4 [# _' G* f7 ^/ \ vshapes= 1 ~; O+ }+ }. G* | Z, [6 E

7 o& E1 X8 U, T& B

1 K% h+ c% u8 }' F   4 G0 x" g) C/ Z1 X: N; f. ]! B

% h8 s9 d5 |) L2 R/ O$ m4 W2 O

2 Z* J. z0 E5 i5 @( e+ r1 z: T; n 通过jadx工具查看,该APP的Java层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 : Z- J6 v7 @2 z0 o

/ {; W* c; { {9 y4 k3 G

. _7 W; k) m# ]3 W7 T' t, l& x vshapes= ( O+ `7 O, q" n* ]( }

M, e/ D c* f9 P' {! t3 W

& e5 L4 K" T a' ^& G, n) ^   + v$ ]: d( l5 o

3 P/ |- h2 ?4 r" N9 F" N, o

: U4 I w& q" E7 h 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1个EditText和3个Button控件组成的,也就是下面的截图信息。 ! K. r& t: {8 k. Y/ k# j5 `4 s5 |

& M; s+ ^! ]" I3 A! @8 |( P

. J G3 `: L& F( N& @* y) J% w% h5 C: S4 r vshapes= ( k9 H- ]6 [4 K

! ~' Y8 I% c% |7 l7 J" H

( x) j( c2 l+ E; j0 H   3 z5 d6 f: P: ?7 {4 \+ [+ w

: c2 a# A# H: x4 k1 U5 [" j7 V/ b

6 E) M/ ?; B. r$ |# j* k. Z1 y 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ! Y7 J$ y2 g( G7 M

! e. I- S$ K* G9 f0 P7 o- I& r

7 P9 D+ H, v5 j0 b4 a* \; O vshapes= $ \! P' \ D0 X% t& n

( K: Q( m7 g5 ]: t) q

2 A& t7 C9 n1 k& X   , J7 U9 a" m6 V# Y

7 M2 o1 ?7 c" Y* p' j

4 w- x4 ~2 S2 F" ] @2 |   J, g- {4 w) e5 ?

/ D/ R4 b; } b: p: y7 W

6 K% l& k' U9 _5 P 签名信息 q) D* J. W" m" o4 G

+ \% _$ ]4 q% j! }% G. x

+ u" @( U) m8 T6 X 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名。 : I% ^7 X* c. I9 r; S3 @2 g' p( ]

, F8 T0 ?; F; x; P! |

# a2 V$ M' S/ S3 x8 J 目前APP中大部分都是通过V1和V2签名相结合的。并且这个在签名过程中要保证按照V1到V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 6 [0 T3 G. x5 {; G0 X |

" S; w2 ]% E- @6 U2 J( ?0 w

- v7 U# n: X( ?, `0 } 在android的app开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 0 @$ {# `9 A B% I9 l

: q0 q9 Y7 Q9 K* ?

" a o! L( z; c5 B w$ E7 F0 J vshapes= 1 e# ^& Z2 g9 S+ d7 `- \

+ `+ H3 W: D3 ]. }! {5 z: d

5 Q3 }5 R: \1 R4 S, j) ~, Q& G   Y: H* B8 f7 n2 G* n

/ o7 ]7 o3 t, ~$ k) D4 Y+ e/ G! V

+ C# j: [+ k( r" X$ B6 d android签名的数字证书的一般都是采用 X.509的国际标准。 ! v# _. N. U2 W# o- ~& c

; Z$ r' m) Y2 C* V U# w. w

) M- W8 P! v/ k) T) X% ?& l 因X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 + J7 S" H/ e1 d5 I) @

2 A# t' M/ q# P# b5 {8 d

. l# H9 _4 x; s6 m* J 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 ' |+ ?/ [6 V1 c# s% j

9 w4 Z" g! {( c! u

) {! L9 k" L8 c- y6 o7 w' H+ Y vshapes= " g" J1 y% i4 V2 Y* i) r4 ~

, L2 b7 C4 B: Y$ ?. j

8 a' j. q, w* z; V- U I. Z) r   0 n# Y1 C6 A9 j* m6 O

' R$ Q: n/ B: b: k7 s- O# x! I4 ^

: q& r* `. B/ G' y! j+ _ 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 0 I3 d* M6 P7 ^" x

; q5 H7 W$ u& h6 e6 U- `4 j& m4 D

0 K- I5 r7 g" ?- o) m! q vshapes= 4 ?# P; ~8 J- i8 ^$ M

7 d" S8 ]+ N, \& D# g* P+ E

% t* g4 W' ^. u 、 , k. W7 n" I) M D, M5 N

: x% f6 k! I0 o' P$ i

9 x# P) t- g; @' [   ' u C: r' D; e% H, Y5 g+ R

) P a% |4 C+ |5 g1 J5 A

# ]' \" B6 G+ f; _/ e 权限信息 1 X8 [2 T( j( C3 e) S) l0 l

$ f+ o( I2 [. T Q+ ~0 h. p

0 c: Q1 `4 h4 w3 x& }& _ 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 6 j: i/ q3 B) |0 ]' E

1 b" H/ ]7 S2 b6 R2 c, m1 L! C

0 r, p/ e8 v7 B5 E' x( x5 m2 Y android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 $ L8 |* V+ e) r

" G/ C; G7 e; ^& k0 m! ?

$ ^* w% A! g0 x vshapes= J- Y: V2 k) ~% i) v; [% W

# ?- Q/ q" J, q: G0 ?3 N. j

. p% O% M Y2 P   " ]/ u7 V5 W# A9 ~: R5 z

7 c- @- }6 z, [% g* X8 ?& [& @

# ^/ J$ q1 R0 g8 {4 \0 T! G5 s 下面对这个APP的所有权限进行详解下: : l' i: w* P% j

g, r! G$ E, H: u9 T* @

. Z2 N3 a! P4 b android.permission.INTERNET :访问网络连接可能产生GPRS流量 ' s! T$ \5 R0 o/ `5 w

' O) g2 k( z; S& ]# e

# }" w1 T; G; a" U! L0 M android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ' w4 x n v- z. }1 X

* l* S1 c, p8 e$ T- L, u

) P7 y- y' Z$ V& h; m android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 2 a7 V* T0 w, T) Z! b$ L

. g. u! Y6 p* f! C4 o

- U" p: F& k. `- O android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 % y) Z/ X# `) n+ n

3 ^+ o z! z7 z

( I$ \7 e$ b1 |7 W5 H2 Q3 C android.permission.WRITE_SMS:允许应用程序写短信内容 / S, e% w6 m7 g( G. h. L1 T

( C2 C4 Y) L2 V. Q& m) O

7 v! c4 v7 m, t1 { android.permission.READ_SMS:允许应用程序读取短信内容 ; Z& k1 q- w7 G" Y6 L

) f* g" k" ~6 K( w, c! ^$ X

( V' C4 n* I0 O2 l; s1 y7 M android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 l4 H; p% _( m7 D7 T, z2 {

2 x2 z, h3 m% q8 g8 G( f/ T: I

' ]4 Y$ R- B8 i/ h1 J" r android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 / N# ?- I' w$ b' W3 ?9 e

# W- G1 p C* h" i7 M( ~0 c) ?* o0 G5 @

% k# J$ }0 X3 Z4 t9 U* P android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 * Q- L( c* ^6 v) j$ v# |. ]4 a; F! Q

6 }) N6 S8 Q, j2 ]! ~

# H2 c$ m. E# j' G. I" @! b- J android.permission.VIBRATE:允许振动 9 p1 g7 ^% b* `3 H5 U1 \' B

9 p8 k: o2 i! `/ n" f

2 e* X. u1 F% |" R' ^& B% f android.permission.READ_LOGS:允许程序读取系统底层日志 1 B7 c, ^$ p+ |% f, j

. \& A7 u7 U% I0 \ ]

% s; z& v1 |& s7 V5 A android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ( W- Y$ t- B, X+ z6 F

& B5 s* [. T# n" P4 R5 @- _; C

4 L0 P6 D+ T7 T/ f   6 _+ Y% P2 g& V' p) m3 z* P) D6 }

2 A: P4 F4 s0 {* ^: w

' C" b' b2 z# a" A3 ` 功能信息 " s6 z/ { c$ K( x; ?

' O! E; k( m! t' A

& x& K6 M4 N: e: E. x8 x   - D" \( e e) I; y2 u

! P% ~: M1 j5 p; h/ @: l& o

+ v( V0 G* r: }" ]4 P( S 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 0 Q) W) {+ n V1 x

4 t& c( b( l9 e

9 M$ w' z/ E9 q7 l5 D Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ) r1 \' q" ]: Z8 m# y3 V( P% K

# L# H' q1 z8 t- L( ^

' P" c) [) }, B: d& i; a% w 1、需要用JNI为Lua的C库进行封装,这样才可能在Java中使用。 + g0 }5 R1 |' r% ?& {% K; t% r1 u

7 ^5 H! w5 @( V% Y- i, ?3 V

( v* @# F! u2 i 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 , A. O: X' m/ g

, @$ a. J) @! W/ O3 v1 e

- i. ]5 Z3 W0 P; O vshapes= $ u& P0 Z% W) T5 G. z( e

' w8 m# [6 ~$ x' t# _% I

8 m+ Y* j) ^: H% p" o5 E# v   : V# x9 S# ^) ?; s) o6 i# R# F+ W

; x4 }6 O% Q% q: v$ M1 ?' V6 F

2 M' Z3 W! z ~, H 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 8 ]( W8 L" S( c1 g/ @

$ y6 W# Y' [" ], A! M% z) K

6 ^/ I# G4 ]8 D1 \4 m vshapes= & F5 M, F6 w M5 U% g+ p

& F* K6 U; U3 ^. ~1 p

2 ? l7 [ u1 o   5 Q, h& E( p- p [! F

5 k, P$ H2 ~/ r. M! i

! K9 `5 K+ k/ Z0 r" J) l- D1 O 在lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP。其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ; c3 ` m @( j# t7 Z8 N: n* B

, z, ^8 w0 j4 u$ W$ f! z" |# l

- [7 T2 F6 D- m) {- k vshapes= " b/ N0 m( l( u5 e4 Y

1 v$ B# b# R' D2 P* F4 b2 I/ b

( ~2 P M" ~9 v* o3 a6 P/ Q 下图的这几个so是网络上lua和socket通用的so文件,并没有什么可研究价值。 . d6 ?* {" \) Z# W$ I+ K2 S% e) W" n

3 c! T: T# i1 r$ m6 ^3 ?7 b

* |9 P5 O G9 Y7 F vshapes= " J6 E! a" b0 w5 E6 y1 L! k% ~

; e; K8 w- S4 I5 i0 g

H% D/ L5 D* Q. a2 D* P" Y   / Y& }5 I7 Y4 z* |" }$ a& W

3 K2 y! t8 h9 Q8 o! b

$ L- w; U, Q- t7 G 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 4 a( `' i1 X3 Z9 A5 C9 S6 i4 h" C

. c6 p. @" t( w

4 b2 ]0 H9 T0 K3 K; @3 r+ s LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。 3 M+ a2 E2 s; I& m4 | s8 H, i

9 @" o! P2 L: [% ^- d( g8 P

9 v$ R) b* j+ j/ V 这个luasocke一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 6 z! \& U9 {# j( \+ b# `, v8 I

# y7 n* e8 ?$ |

: \$ `# N K4 c6 a& o- F1 R) G 开源的luasocket代码可以参考学习下 0 X' s4 j' b9 l) \9 D% F

( |, [3 a) U( }* m' s! @

4 ~& h4 @% q2 o$ Z" `0 L https://github.com/lunarmodules/luasocket 3 K! B1 s' p3 q6 f2 D8 i, }! j+ X U* U

. y, g& a! ~0 ^# v' E5 W. o' O6 w$ z) B

! C: Q$ X+ a: Q5 e3 H https://github.com/fengye/luasocket % C5 [8 q* B8 _

2 t) ~, z4 u& w9 p5 x; y- S P

; j% Q- [, t4 C+ Q2 s( a. o   ! @8 g; }6 O. N8 O

}: d6 c: g9 Y& B

/ S7 {* x2 C; D7 c0 d R" o vshapes= 5 L! ?. p- ?: r$ q

# H/ K3 ~7 ~ P

0 I9 q$ d) n* j* Y1 S" v   2 P; |% T9 W& E1 H

B% Y* ^" g+ Z$ T/ L' e

' A! u. e) ^+ I* ~5 g' I   3 x2 {1 [7 |6 Y$ Z

1 s, j* S! i! j1 g' o8 w% o2 R

* E8 z; C7 g& J5 h# K A 总结 3 X" a! a- p; L5 h s

3 _( b/ G0 z" h4 A$ t b6 S Z

. I. G+ E0 Y. }/ u9 F' z0 d 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadx、charles、ida、uiautomatorviewer)工具就可以将功能全部分析清楚。 6 Y1 _2 @! ^( q+ J* i/ l

d6 L1 W2 G( {2 W) Q

5 ?2 [- m2 p* [& }- N* S* ^ 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 / ^1 }5 {3 ~/ ^/ ]4 t

( v: \$ r/ }8 [0 _2 n6 M

! Q& L* }( J* }, h 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ; z9 ^9 T# m2 ~1 ], p. a/ w& K) {8 y

i0 I' m% ~2 C' b( R" G

' Q5 x* D2 v/ k( j' {8 @ 结束 0 p6 |" R" h' J; Y

3 R: K) @( Q0 U( `. \

5 @3 U( _; ]- g' e. [/ }  【推荐阅读】 6 T! K" Q* }9 [5 X3 N9 r

! e4 k0 g& Y" X# ]

0 r$ B3 m6 ~ g# j0 Z/ P C 对吃鸡APP的分析 0 ?% H5 p1 W K1 o9 d; H5 r

) ~& Z1 u: e" r5 Y

- J$ A" i9 x1 ?( M q; i 你需要了解的APP安全 ) ^* B6 r1 B @# r. G* O

/ A. n1 R( A8 u4 R' u C

4 P) |2 D- W4 ]$ ^* M 你需要了解的APP安全 1 ]+ g# v) j+ [$ @4 F; B

1 i# q: t, O/ K; M2 s( l3 ^

" B6 P" k! g5 a4 p" v V8 {   8 R8 f* k* j- w' Y

回复

使用道具 举报

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

本版积分规则

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