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

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

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

Z8 l1 [4 ?, Q9 u 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 & C" W; a8 b i6 a7 ~4 E

0 E7 t2 e B8 H2 ], P

* V# d/ c0 b5 z0 D1 h: @& C vshapes= # ^% _* C0 Q" f' b1 H& u9 g

# E* a# g. I, g. {& K

! X9 Q K+ n( e" V1 ^# h   8 Y9 _0 B; [; u) |4 {% [

5 W( t, z1 d- I9 V# R

' }* R' ]- q9 w' K# g6 T5 ~ 下面就以开发者角度进行解析下这个APP的功能的实现原理。 " u: L0 [! {6 j+ Q( Z

0 S- f2 m# w5 \; n# Z

, E5 \. h e- L   + E( Z9 O! o' l) k) |# f

2 N7 ~( w+ G7 X' ] S4 R' A$ a

9 z9 |0 K$ c. [ 基础信息 ) l! {' k6 ?( b. g! t, L: Z1 ?& b

. h) A1 f" J! M) c9 e9 w

! h& @" T, C) O1 G0 y3 G7 K8 W* n 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 $ g8 L) k1 x5 Q* E2 F- C" ]

, P5 x+ {1 l( I% g, P2 ^

' f* H" S6 V `: [ vshapes= 4 l# F/ H2 L- N

; \; O# k" ]* u% K+ x! L$ I) |

6 }5 F) l2 _/ F1 t* X" ?   6 T+ g8 G' j$ @! r

/ }$ w1 y9 T p% S* f2 P7 G7 f/ ?

2 B' x# g3 `8 }7 V 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 . j* A# P6 G4 ~2 y( i

8 i- z6 H8 |& u

9 q) l. _+ ^/ v" V; z vshapes= : A- }+ D" n5 v# j ?5 d5 V

9 D Z7 \4 a/ P* p

0 }/ l y( H& S. B' k1 m( l" W; ~* j0 g   ' ]* x' }. e+ C3 m

4 e1 h0 t3 [1 n0 }( Z

( e9 t% H" A( z$ x8 S2 p 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ' |, L( E2 {+ }; h( C

x/ d( l# X3 G* n/ _

4 X+ p; `. Y. s! I7 a vshapes= e4 n, t+ D7 M' T

" {6 _& @: X- [- j% k) l

! y$ R2 G) X9 C   - {5 G# C2 j7 I' X$ p; S

) ]( u1 F0 K5 c, e. x; a

* s3 n* T7 u% d7 f* }& B3 ]* Q 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ; Z9 P9 ^5 {3 V9 [8 l( w

5 K! H7 l3 Q9 Z7 m1 ?7 h/ B

. @3 _- D+ \9 p* Q' _; U vshapes= ) ]4 U1 w n6 ]0 [& c T f

% M) D, Z9 r$ ~7 V. S; y

* Q( {* @$ x2 w5 U   8 N( L, h/ t* w+ o

7 A8 }8 U) h& b2 c1 W8 x# o. f

& W( B$ A9 n9 l0 B7 |" x/ D* g 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 , M# M* v6 Q1 p1 l" ?

3 ^; J. L. l4 Q+ v

& i8 I9 s! @* D: B/ O vshapes= ( V9 `& s9 G) o8 n3 B, R) Q

3 ~6 k, ~" k5 o; W

+ G" A! K1 N4 g5 E9 @) S# w- y9 @$ A   / g: {/ |& G1 |$ H6 ]% O% L

1 `5 ]$ E# P- n! L+ m4 `+ y

z! b% Z" a4 Y4 e$ O   % ^" t) _! L8 ~6 J! X

3 T6 m" E& C7 u- y9 k3 }

2 H/ J5 @% T+ F1 ? 签名信息 E2 @( ?6 H K) l

3 @/ T! t! r6 f9 R! I3 K- ^9 D

0 |4 R# _0 k V/ e( `3 [ 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 0 H' ]3 E, r7 H

. y, s; m' F' I; F

' z5 m' J. T$ m2 _; o" T& X& l) z 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 5 c6 _% k3 x: Q8 h8 t

* N# G* z. m6 V

# U8 u+ W% W, \ androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 , d! D/ X2 l4 Y/ ?; B, k

o# v7 K$ f P1 M

2 ?/ o( U. c% w" L( ] vshapes= 3 [' m9 Y2 L S5 S

3 U* @0 g, s4 M

" _$ K+ i. s0 R. C6 e" w2 p2 o' o   % S' T+ e, H+ K% V% `3 f$ M

2 J2 v1 G; ]1 G8 A+ i- S( G

0 n) @; r- v$ ~. G8 {+ X6 R5 K android签名的数字证书的一般都是采用 X.509的国际标准。 % v n$ m, ?( q7 s& E- Z2 y/ {6 p

/ I `9 P9 _3 ^) E% a

( r) B, f, {5 w( V. w$ Q X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 2 R$ H' J6 ?1 @$ w: u( L( m

9 q3 c/ {2 y9 L8 ~0 L; h6 X

8 x7 E& E% u; x) S$ q( N' o 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 - i# A/ @5 @# {8 W) Z

+ j5 t5 g' `" @* R* q

+ o# t; H: ]: Z' f. U! u# T* B# r vshapes= . k7 R7 k6 R9 t; x G* ]! c

: M- w" ?# Z8 K/ }% H& q9 r8 M! ?

) R' `( A+ T$ s+ f2 n   F- ?9 p1 B, O; k: o) h

2 F, v3 s0 l6 x S8 e4 [1 D" X

3 M) f3 x- [# {" V# b, d 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ; E8 ]# v9 B- e7 N

7 N2 S0 ?* e& P! }* M8 A

$ T, d! U' S" f1 J. C) }/ x vshapes= - q3 C" j2 k0 Z

. m; _2 k0 {" f: g) W4 W9 w u

1 @: q" i* X. f8 y% R 7 Q3 I2 H! ^3 w6 z& ?+ ~3 T

1 f/ K1 A1 {" D/ M7 X- m

T* O! o8 O; H1 `, n   6 K) C, R7 Q K$ d; n

0 j ~( o. j! k1 n% A8 b

/ S; R6 E5 V( e; C" D 权限信息 0 J4 d9 G# H& q2 v( X$ ]

/ F0 C9 w$ m6 ]6 g/ k

9 \2 P; W( i" k7 F& B1 R 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 5 P7 }( Z7 s" B+ s* R x1 K/ a& O

3 n: s' N1 b; F$ v* m1 s

: }! r9 A4 ]) f5 I0 r7 _ android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ! I0 }& x8 C6 T" t' i" ~/ e

5 L, X+ S/ Y6 S

/ @' F; H- G2 l; ]; o vshapes= ( K8 t7 c1 l* N9 H! g4 a3 k" Y

, i& Y- i }1 I0 E1 v! s

" s" C/ m9 W }3 _+ \5 H   " c5 y* W. ]' A% f

6 ]7 K4 }- k4 y! n

4 i1 L/ {# J6 C9 L. ~* r$ z 下面对这个APP的所有权限进行详解下: " ~9 a' y) f% X/ k! V0 \

. \; G" {% s2 @7 t

Q, n; T- {5 O7 z" |& S( Z android.permission.INTERNET :访问网络连接可能产生GPRS流量 ; a7 N3 h, E, T

5 R+ n$ |1 _, v' y! O- s" h: R

2 Y# N0 X( |5 a: k, Z8 H2 q9 w5 f android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 9 v, m" X/ K8 x4 W0 _4 F. O

2 C( [3 N- ~6 q

8 _3 c- s# p4 B" U android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 " M7 P' R+ i& Q$ Q P

6 A" b! I) s$ Q/ u, K

! C4 G9 N9 c# c b2 @/ G3 v; J android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 9 D6 `6 D* c5 F' B

9 \' X5 v# m/ w8 W

( `9 z9 k1 a9 Z' `$ \, ~/ |7 j android.permission.WRITE_SMS:允许应用程序写短信内容 % j4 ]2 @2 ]3 Z9 O5 [

- Y7 [* N, k7 x2 e% u% M: x. u% i+ k

# {4 E1 B O( R$ x; z i: k android.permission.READ_SMS:允许应用程序读取短信内容 $ _) D* Z. S/ d; y' c$ O

9 \0 `; A2 O/ Z% ^

6 U( z7 I( h) \8 D0 f }# ?# @ android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 % N3 D. E, i- n s: X

) Z. d0 B6 o: `+ |! G

7 b4 @: G# f) N3 }* O/ D, Z android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 * }, f; b! H1 F6 r' \$ K

' W1 N! c' ~3 w. Y

7 d; ^7 b% [! R, ~ android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 5 o6 t3 W- m/ t% g$ V- X1 p

4 W+ Q: @* Q' M2 t* b( N

. P/ c2 a1 k* M android.permission.VIBRATE:允许振动 n5 W, d; A$ t2 w; L5 B! E

* i5 c, H+ L6 W; \5 ~5 I

4 g0 h8 x0 n& \* M android.permission.READ_LOGS:允许程序读取系统底层日志 * i+ l) W( _1 c

+ G" G9 _) V% w" J7 D: C+ k

# P& F) }3 e K, u android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  3 | }/ ^2 P! Y O

/ `- e( V# U: R& }$ K+ B; @

* i& C/ W4 T+ Y! g% t   ) V9 ]! e1 @, a2 \2 @$ i7 v5 ~" F

6 ^' \' `! E; z& W1 e

; }' c; r/ g" [- s2 c' j 功能信息 # H' Y4 y7 u& j* Z+ I

, Y! \' X; f, n$ n, g

# T+ O* \( C' }5 l   `8 F( q- O' d4 Q

$ K- Z; R' B: [

6 r# y- H6 L x7 V" r- o& c+ _+ c 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 ! b0 k) u/ n, F

& B7 N" d1 Y p* U$ q

0 p3 ?' i. c) y% `! B0 G Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 1 L( F6 ]$ O$ Z5 u

" L+ ~% ]8 T/ l8 |7 \* ^

$ p3 e' B/ s" V4 g& t/ ^7 C+ C 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 - V9 R# b+ H! O1 X ]$ D; h

% t7 s- b/ i( m( J1 V

4 {0 | D* o3 H9 Q7 }, X2 p 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 . M. n& }8 z& d3 f; J# v3 U# E

+ C4 A: T/ x4 a# x$ U

1 O$ c+ M8 P5 P% M vshapes= 8 D. A/ x- O4 A0 m

* M' ?" J; F2 R- U

, c( j( n8 b) s. B9 m; s# ^   2 |5 d0 r4 D7 B! M

, O1 y! C' N% S0 a2 E

" c+ D; O, a: Y 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 3 @, N2 b L+ a4 ^9 _

$ ?" V# ^1 k' [4 d9 t, y

* |! G% v+ d. ?8 a% d vshapes= ) J: z% q% _+ H- y' \) j' l/ |) A& d

; t% @! J3 R2 T* P* x

$ x( ~/ ?+ ]5 \2 S% A- c( {* {6 ]   ' E, ~6 _( s Z( \/ H( J! K

* K1 p. R9 j8 u0 T3 B: `9 j

" z% ?2 I0 z; y* I5 H lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 * P5 y/ D/ N9 Z& e% M

5 r4 K# ]( ^! Q. ~

/ ?& z- m1 H- a2 x4 g7 K vshapes= 5 x/ ^: N4 C) `; a7 `1 L

, e1 u+ h! U. A2 y4 f1 p8 u

- J, l# ]1 c" W e R 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 % l9 Z. A" |8 s/ q

* U& F! o, p7 W0 Y9 j' s, `

: J q9 s9 E4 [/ b% s vshapes= 8 X9 S5 u3 p0 R2 h- Q) Z" x" l

. A4 q! q4 r v7 m: F) s6 d$ `

8 T& j2 ?# E( L1 G   ! O# E4 ]# x" f4 ~6 Q

! g1 w: D r/ L8 B! T+ N

! x9 [2 K$ R8 K2 V2 y 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 6 ^+ D5 q& M& q* }& m) D1 c

! M1 H5 D3 J5 M( n; L+ B- G6 H0 |

3 R. e2 H5 ?5 r! Q( G LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 1 J( I9 I, @2 D" i% Y! A

3 l4 B. K. M/ u+ s2 N! u% r1 X

1 R; C# P) b: E: z5 [ 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 1 b6 Y% l' |8 D; y- g

- B6 F0 f* u0 P3 R! N. ^5 T

( j$ S2 V1 _7 H+ k4 e! I 源的luasocket代码可以参考学习下 % y/ T4 \# e5 v a/ L* f& M8 a

. w/ B: d |/ A

8 u7 r7 a0 R6 V5 L7 _7 s, w https://github.com/lunarmodules/luasocket 1 Y4 C9 I0 _; `9 F; S3 G. I' M' C

- P, \5 U( L( W+ w

# G2 }& R! ]; {9 g8 \; A https://github.com/fengye/luasocket & |3 G, l: Q" k

! K V' E4 l, w0 a( @

' M! ~1 [5 S0 ~% u   - q! m l Q* v q) T

& n. I4 m1 @& `# f3 ?0 ?5 t) l/ @

5 M5 j6 B" |! Y) x, Y5 O) f5 L vshapes= 9 f2 q5 i' n/ a: X |9 O( P

8 s( o6 z. t% d

) ^) |3 M8 g" E3 b& |# O9 a   ; h5 @- Q8 l+ a1 `0 S

/ L# ]+ H& d, ~' I

8 Q4 C* C# H1 W3 o   + V0 c& ^" F# _9 w

: o" k/ ^* q' X0 G( Y- ?& n

0 ?) p/ p# m) {6 } 总结 * X9 K* \' ^) K; h$ E

p3 k& a( e4 e3 q1 Z

/ U F& E9 A, J! t/ N' F. O9 X 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 / y& Z7 Q/ d0 \" |! {

5 [4 G6 p: J& r; X# \5 W; _/ l. y

% h: @3 A5 y* z 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 3 U1 h) l4 g0 D3 e, o7 Y

# q" z$ @- P. F6 L

5 |" i# K2 R/ z) z% a 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 7 f5 N$ D/ D4 F

2 C/ v! l5 G7 k7 l% C$ I4 G( t

8 q* A" D7 z L! o* d 结束 ! y m, _5 @) C: ^$ l. n+ X

( G' y$ {- ?6 N3 t' M1 k8 c

9 {2 w/ h. E: D# Z: E' l  【推荐阅读】 r6 k9 q: M. P9 R

8 f! C. i& Y* V, O* x0 U

" F% T, M; N5 w& q/ f/ l 对吃鸡APP的分析 0 f9 X$ X' U7 n

& p9 u- W: z( @2 Y6 V5 Q% s

* M1 y% M& h e7 ^/ h0 @ 你需要了解的APP安全 [ ^4 y- L7 _% z6 j8 q

0 j5 J3 w9 ~' H4 d1 @

6 [' D" x: ~5 J4 l" G$ Q 你需要了解的APP安全 9 J% q6 Q- ^9 M$ g

0 b) s& ]9 l% a: B/ P& k

$ j- T* ]+ j Q6 d% k3 h7 ~. i   1 [, B3 x& E3 ^6 x: z. K r. D! M2 y

回复

使用道具 举报

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

本版积分规则

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