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

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

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

$ Z, a; K7 o) f1 m; O: V 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ; v0 E; `# m9 U/ o5 ~8 R4 i9 M

5 n% O0 j# d6 c1 O

! E" J; w" I% i vshapes= ) p4 M# M& n5 b0 P7 n" q% I% o( y- F

; Q2 X& ~8 f3 D$ k' \9 h

' V7 e1 X" F' L/ P   6 ?6 t8 ]; w& ]3 A

3 p# b" G6 S4 o1 y0 j. g/ Q

( m) r2 Q. w, f* V1 K- ]- @ 下面就以开发者角度进行解析下这个APP的功能的实现原理。 7 V; e- e' g' y H8 k; l( t) w' A# e

& I J4 C+ ~! i3 z$ B

9 ]5 Q. r$ G8 E   l6 o7 L% E) @+ G3 A, \" R( N

( s3 b- y' z' p% X1 N R8 l

* @' v( }8 n1 {- I 基础信息 / P Q. s" t9 j/ w" z$ v* Q

( I6 t" d' r7 z3 {

4 x6 o/ S) _! W 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ) S1 I. _* s. ^: v/ C* \& K) Y6 n

4 p# ?2 ^/ d3 ~7 P: N, z2 q: h8 R

$ j: J! S# g& W( }, u# D vshapes= 4 \" s& V5 _% U) }' G

) y- b5 h3 F* d6 g9 b; _" {' W

3 N' X- P0 c5 p. ~3 o+ c+ o   " s! A$ K8 e- R& P p! F0 B0 Q

+ u6 Q: o% }2 ~( K

/ F, D9 M; F1 Q& S3 E; I& A 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 # Z- I* j" V! \; R& \! i3 Z

8 ^ T: O8 k5 s! V0 o

! |' I, h) G% S l/ u1 @ vshapes= 1 B5 H* @" H( @) @$ A% Z6 {& u

2 O: r4 F( K- J! I4 N8 f! y

$ l; ?) b* ]8 a9 r& E" P9 E g   0 e: v* C) y9 W4 Z& m

' b$ r/ v1 N( E. d7 o7 L; Q

# M5 [% r$ ~: n; [- G/ D 通过jadx工具查看,该APP的Java层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 0 K$ g3 p6 ~8 H

6 ]8 w; ?* Y% ?

0 q* ?3 b# a! v7 R1 @) c& i vshapes= ) L8 A0 Z1 q# ~

+ L( c1 D* D% b( E

6 I W, E; T) E7 R2 I   6 A" R& }+ z$ \; z: F

0 l' _! U* @' H9 ~4 T: k" p

* E/ K, X+ w+ X$ p 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1个EditText和3个Button控件组成的,也就是下面的截图信息。 4 c- B- o* j( d" _ `5 I

) K9 c0 G' g3 P+ T- s

! H3 V4 X( z% ] vshapes= # c* J) I! ` v+ n+ c- r/ h" N4 {

! w$ _* _8 ?3 i5 M

: e! C; N- a$ U. H( T   ( ]1 Z: K+ y- J) p; B

2 d' X; {# r( T! i! F3 _2 F p

' v p1 a% p2 J- ]) W6 N5 c& c 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 K# p5 g$ g1 j1 \

5 B- F$ f+ h: W# H

% P- J4 E- {$ N' ]+ ]: J vshapes= 8 g- z0 Y/ E: i8 O

8 @' U! y8 s. l( a6 i* N' Y- X

3 K- p6 i( ^; w" @: n$ s6 v   - R+ o8 v) v0 R/ F1 n

; v4 x# R& b7 o! h$ C8 B

; J1 _ H# o/ _/ {! D   ' n: f6 g( J7 ~" y

" y( n$ g( y$ u8 S

3 g8 B2 N, |6 f) p2 ] 签名信息 ) J! L6 x# J# h* m

; X% r0 z7 }: `5 U

8 j, F' U4 S2 Z# `1 I 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名。 / Y; C: L G+ I: r6 F

7 g4 P7 q1 x0 I, P( H4 Q# l

/ g, j2 D" X4 M& r 目前APP中大部分都是通过V1和V2签名相结合的。并且这个在签名过程中要保证按照V1到V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 7 C: c$ C; T7 k- k4 |

8 X7 [( K- d6 r& C

7 v. ^# ^4 }% U 在android的app开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 . _$ R& p! k1 u' [! g! W6 r

% ?4 s) I. ^) g F3 u

2 ^! B$ k' L b y# J vshapes= 1 Z; L2 v* ]; G' x3 B5 I/ c

( t( M) Z6 w1 e: C! i/ S3 ^# a

1 A" s( |1 v7 T# m5 e   4 z" [ p7 G9 W9 `4 r' R7 U* l

5 B' X. U0 U1 G9 [

- C) j! `) _! v$ q& R, E android签名的数字证书的一般都是采用 X.509的国际标准。 ; [, L4 B- z1 e1 T2 \

/ j4 C: b: i; H6 r. @0 W' A

3 Z3 U1 e; h: C/ _& z `1 F 因X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 $ R5 p* B" A. ^) o

( h! \" `; v5 e+ [* Y

5 M2 W# S. ?5 w2 R 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 # V) o- w3 u6 i9 `; k

6 N$ Q8 B4 C% _! J9 r) h4 U

8 a0 q7 b! V5 t! y7 j/ [ vshapes= 3 h" i- x7 y n9 m, N

& M2 u( h% w* N& ^) J: d2 u+ |

, [/ A9 g+ Y' ^# V: ?   ' s: w1 I/ f5 S* N

+ l3 i8 I, g' U( M& |

8 l' n h& U4 S6 q- |1 w! e) a 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 : c, W5 D& O4 n. O

7 n4 V% `; b1 S

, }9 m! K, `& I8 i- G vshapes= 3 S( H9 n) a# w. T8 E

( f0 |* m% ]# e, ]2 k

6 o, D$ e2 ^! g+ r/ M( a 、 9 ]0 A& d# {: Q: ?( [+ ~

9 Y8 U3 I( k3 r# J! I, u

" }5 Z9 R: Y6 S! ]+ s* ?( j   8 U( x' J: z/ F. i0 P5 T

; w2 C" k% V' v, S

# }2 h$ t" g3 B% N 权限信息 9 C' J" ]6 \6 q5 y4 p

9 w5 @0 O( C- k; `

. w; y9 b2 R! O3 G: v 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) $ i4 {4 N* l! D1 }7 F: a- k

+ h# h" D2 W& n' h& ^2 j

" }5 F' {) b( `8 l android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 , T) {! x5 ^1 M' H

! N G; M! g5 c6 _

5 B, _+ o, N3 ~5 E vshapes= ' p! u' x: ?5 \/ u

' s! T# \+ f" u/ w3 R/ Y) Z

$ ?$ m% u2 l! Q! F9 ]& ~   . y# w& r. j: }$ f, z1 p3 S% c

4 F& i E! n* ?* a; G: U

& w0 J; t' w. y7 d 下面对这个APP的所有权限进行详解下: 5 R7 Q, U1 f4 H" W0 z

. P& F; A7 k5 C' i7 K& I4 r* {

8 P* ~1 i* y0 k( t, K android.permission.INTERNET :访问网络连接可能产生GPRS流量 8 i- m' M3 B9 W+ V

2 }% v7 [9 W3 c3 T* E# R/ N

% |: Q6 N8 q& L' V9 b; A0 Y% L0 p2 n android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 6 U q7 e5 o ~; |

6 z; `4 M; \6 N+ j( O

) w% G/ Q! _, k% D/ t6 Q+ K) Z android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 4 |8 m. i v& h( m2 @3 t& n9 d; B: C

j0 |" p" ^9 {% _

' S3 u$ R( z" b android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 4 U# d: S5 [$ m1 |

& @8 h! H: L' @% z. g

. K3 U, P' h0 k& h/ _9 J android.permission.WRITE_SMS:允许应用程序写短信内容 # u- S8 q- f& D! M+ z

4 y0 V" B% |) O0 D9 I5 j9 H$ K T

2 p6 q# F; O) V( V android.permission.READ_SMS:允许应用程序读取短信内容 4 Z+ m! Y% D8 N/ Y$ t1 m h

4 n5 r% p/ j8 V9 z

% ]- k; y& n$ k0 h- @/ A- U# A& ] android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 + O n$ a! L; _/ Q ?& ?

. z& b6 F% K* O

* y3 u( S, R0 Y2 j android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 5 I+ ]- W# ~9 q

. L, x e# j8 L/ |6 V

7 }' l' Q3 Y3 R4 ]! S3 U$ s android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 4 X+ W ~1 Q/ ^6 H( O8 x- M

/ _) W4 V! C/ |2 h' z" L: s

6 x: v1 J$ R4 }: s% R6 Y android.permission.VIBRATE:允许振动 / c$ J9 s, v) Q# Q# z' s9 q; T2 a

4 P4 R! R% }5 u! @

5 Q7 c" v' n" o9 a android.permission.READ_LOGS:允许程序读取系统底层日志 3 P- @) r! Z; b" m

. e: r9 t: x2 f R4 w

7 m4 m/ A' h4 Q9 g android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  7 C; R6 E8 c5 }6 y

. u e. R/ p# f9 ?- o

5 e# m. r; V0 {5 T2 \& X L1 e   " b5 |' t; R9 m; M, I& W" s

) x% z% m' e/ T1 N; a2 e5 ]& u8 e

( O3 z) p+ B3 K! Q3 i4 D 功能信息 9 c9 m. z+ d* j. s! m* F

# g8 c/ h# R* F

1 V4 Y* h N3 Z% a0 x: c* U   ; L- c, r0 M# l& ^$ y/ |

6 o0 j' A O) }& A* Q; B

/ e3 Z: Y% E! M3 J 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 + C: y z. v1 k* S1 @% n! A4 ?

' ?' z. G' L1 |6 o

" O* B8 K, s( M, C7 k/ ]3 l Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 7 U9 T$ L& x) W0 k3 Z/ O- V

3 N O$ _3 }, c# N' C# Q

! o' P2 d. E/ L7 U! P 1、需要用JNI为Lua的C库进行封装,这样才可能在Java中使用。 $ G0 E# G/ ]. E

! k" g5 `# M. u' {& `

6 p9 v( O% |& z6 u 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 . n& _) c2 Z. c: u+ ^% b! Q

; p# T7 L" E/ h* y9 C: h1 }

4 p; R9 g( o% U" T5 g& \ d vshapes= ; o4 v/ _0 j" l9 l- l6 V8 P

$ s# J; o0 R, ?2 }

6 c" [6 w c- U3 m: o* l6 T) T   - s& u4 _/ I: c$ ?4 ~

; W! Q, V; k0 l! d' p' T

/ n% w0 [" u9 j' P 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 0 z |# s) t, u) ?0 F3 Y

6 H7 u3 p% w6 z8 x

# Q4 t8 D' I- d+ s, s1 A& v vshapes= ( D( ?( b& r1 ?* F7 C0 i+ S

( u& N& d: }- v3 r$ U5 l8 r1 w- { B

. E* A( a: O6 K7 v6 K   6 a5 b' P) c D2 J! B

) v% O6 ^+ G2 L

* z( H6 u; F: ? 在lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP。其实破解这个验证很简单,直接将文件的禁入信息清空即可。 5 |0 [, \1 H* O6 H# m3 ?, q

0 [3 z7 j( s( b, } }- }/ z

8 K# \: F/ }" H vshapes= $ v7 m4 o2 z3 U9 z% f7 n

; N# ^3 u3 G8 m/ H) ^ i

$ A1 r% [/ x% V) X" I7 O4 ~ 下图的这几个so是网络上lua和socket通用的so文件,并没有什么可研究价值。 - |6 x5 F0 ~; `% k2 Z: ?! p

' l; J. h$ h' L8 f, j2 [

" R: z2 p' ~) J) r. i- c- f4 F vshapes= . ]8 H c* _- X4 @" d

( [8 d. p% i: ^- `( P, P

' @2 f, W; r" t' j! Y! [* P; H   5 O3 s4 s7 [/ H7 D% x8 H$ e

, Q. }- l, z0 S1 G8 K; T

5 p) ]8 q/ G1 f: P+ f" D3 P 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 9 l' Z( ^% I) a1 y) S3 p

2 ^! V# y' S9 B: `% E0 ~. Z

, ]( Y* `4 {( A5 n' \3 O LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。 + J$ U* m# C' k8 I! L% R

) U4 O$ B/ Y: t9 q$ a

. B D$ |6 [/ p0 s0 @. \ 这个luasocke一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 ( [5 S5 q9 b* K& q

4 K5 l4 N' T0 _, _& {* b# ~

; R; R' M( _: b' C U5 I 开源的luasocket代码可以参考学习下 * x* N* z! g7 s; ?3 t/ v

: A: [3 f$ m+ \3 Y3 X$ u* Z

) M- L/ \6 u, L1 }! } https://github.com/lunarmodules/luasocket * w m5 \3 O& p. P% W

/ H. m4 Q/ e- b2 y0 N; l

6 e6 q7 x7 g2 R: u https://github.com/fengye/luasocket 4 b: u/ \1 f) Z8 \8 m: l& |

6 f& q( j' L, d: a# e

. F. Q4 M5 I$ ^4 L) _4 ~   ) Z" @. k3 ?6 B5 X. x; {

5 |& D8 B; d& W/ R: {

+ d; M/ m4 h" u6 ^3 K vshapes= % ?; c( H( E( ~- E' p2 Q$ t+ A/ q

: Y1 d: R/ m3 @4 k: `( D7 F6 a/ [

/ m6 ~# r3 P5 |1 N2 x2 R; K) o/ o0 _   % l2 r$ A( W z6 T

6 P7 M4 Q1 v) {$ q7 ^

- I6 K* u, t* x   ' v! @: s0 N3 T" N7 b( O

- t* B6 H' D8 g* c F

( |5 f- G9 d- C! b$ T& e2 y( g 总结 5 T+ y# N& K: d2 C8 p- z: j

" J3 y: W; `" a9 o( I

+ R! U, }7 O# t3 F9 H1 m8 R/ ?9 A 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadx、charles、ida、uiautomatorviewer)工具就可以将功能全部分析清楚。 * f; C. N7 E! W' `& {& n

& W% t& |; {$ |* a7 Z8 d# O9 l* u

% Y$ Y4 D5 z) y5 `1 f 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 0 e4 n" m- v$ Y" j# p3 K

9 b3 J+ g, X' c( e ~

/ a# n2 Y2 f) ~ 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 $ ?$ x$ f; u" k) O! p

, r t! s, n8 ^# P' ?

) C) u y% s) |: I1 V- U1 C 结束 2 f6 s! W: n0 z1 Y. L- {2 B( s8 P( H

" H! c8 u% Y1 K. B1 C6 K

. k, s! j0 U2 L8 ? e  【推荐阅读】 % m! l5 C8 n7 p# K2 a2 j9 h

, c# V! D7 m! ^9 b, Z B0 P6 h8 a

+ Z$ b7 W0 X0 ?! p4 b/ p3 e 对吃鸡APP的分析 ' K) P$ W# d( h

1 ^% D! V6 l; d5 i( B, [- u

1 I1 E: W) U+ \3 n8 @) ] 你需要了解的APP安全 . k, r6 D6 H1 Z, _! I f* D6 f/ e" S

7 y/ O. }' V" U

$ d$ h% Q. D! \& y& _ 你需要了解的APP安全 * Y m |) x/ X1 n; B5 [, U

/ b6 r( s' Q E6 J* \

; Z) u6 y. u" }; O   % S N* Z) k/ V

回复

使用道具 举报

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

本版积分规则

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