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

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

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

5 z% z: Q( C+ g8 R5 Y: a 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ! y$ R! t4 _9 ]% {& Q

! H. _; E0 w3 r2 f4 q% z* k

0 H: y" O5 k/ s! z8 b vshapes= - a: R. S1 G7 A$ F

, x- w. z7 ~" C+ i

3 H- r5 ]6 }- a+ e9 s p: D; |! b( ]   4 _: {" N6 t# n" [! v4 m% N

0 c- Q6 i+ l. @. N+ y

. a2 K; I5 D7 x! S 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ) m# S3 s3 z3 q, t- k0 R9 R

" `+ q+ w+ Q1 E3 _9 w2 L

& `2 w8 @% j/ f; N( j: X+ |0 N4 P   , N0 D- I: o# ^( j4 S1 ]

: I- Q2 Q G( P$ o/ b8 @

$ w% H" J& C9 e 基础信息 8 v1 p% ~+ t! E6 u( X4 g. H

- M$ ~; K7 G3 z( l7 U

v. r7 T" }. v- c 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 / T( i3 F6 t# G

. Q9 ^% q+ r& w/ c5 K& L

, _/ N- d) b8 Y% I- M/ H vshapes= 4 u( I$ l' Z: V& b) b' d

9 E! H/ C3 Q1 ?) b; b; t

$ J1 L. J1 D0 F/ y, I" R. c: ~   ! ^) G* z/ A+ @

0 `! T7 \" s: j9 [2 S; o" C/ u

# [" }0 Z3 A$ |9 W. ~3 t* H 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 # v6 ~- u6 H4 z* c+ a

2 ?+ f+ d# B9 b% _1 g

5 q+ C6 L* C2 j' O# _& H) {2 w0 F) J vshapes= ?. T$ f& F* r5 I& M% M

7 P! y# s I- h- r: e8 X" I

1 x& ]8 [* P0 S. N! Q0 }   ; f, N. T, F: w1 W$ T

5 T/ u& J1 ^. H, g6 ]

1 M6 L2 S1 Z' i4 B" U3 K1 v# V 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 / H i8 @) x }# I% P

6 R- i4 h+ w& V) l! j. ], k* i7 J

, [ q3 z. q% ?% y4 [* g vshapes= " d# D; \2 _. F1 k0 z% B0 Z5 {0 b

4 s; i5 u/ J* Q' ~9 Y7 Z/ o

! j- M4 j: w1 n/ n   1 d' g* X, b+ Q% u

0 f/ w$ I* l& M' p3 s3 H

3 Y, Q+ @; F' Z$ v# o 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 1 Z6 E5 }( o4 z! N

6 W2 X3 U4 z/ \' e) M$ m" A

* m8 ~1 h. i' {! P& X vshapes= 8 C& \6 a7 V, K7 Y; ^0 |

) [6 j4 t3 V/ R: f5 q9 \+ Z, k

9 [: g! G) a! L- }- Z   ^$ z/ e3 z' g& d7 `5 g% i

4 k) w. z# }' Z5 V& v1 b( l

7 G+ {* s$ m: t9 x7 Q& y! G( F 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 $ i" D0 K A9 `! x, D/ b

; e# X8 q/ k& c' [4 y- a6 a

7 d4 A: Q+ Q: d+ t. U vshapes= - O: A1 ]8 U3 O% P; e0 y6 m

, d; w p* _: n; D o5 ~

L. o2 H& w& b3 J+ r) ?+ P0 g   5 m. K) C, ]8 Y. u# q: y3 P

$ D0 F: c# H7 H) K9 |& t

, M" ~6 ?1 O* M+ H   % v" ]+ p. U9 t2 N p- X$ \% O' e, t

% B: _# Z+ ]4 M; v0 R' x( d) A% t

6 K% k- N+ f, N% A! E' p. w 签名信息 $ {/ [4 ?/ A( r

8 \- A7 x( Y9 U# w# i/ Z9 I

" _( B5 P$ @$ k( @ 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ! |& S6 @( @. p/ D

" ]/ {- j5 c6 \0 t$ ^& }

2 m5 ?9 W, J/ i7 Y 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ( h; R) Z& B3 j3 s: o% n% h

# {9 L1 ?) g. D

- R, p" m: {4 X& A" J androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ; L% X/ [6 t8 V4 k

J. E7 }: V2 j l! r) `! m1 ^6 N

6 R0 p9 N* Z0 A' J' h vshapes= / k, u. Z- T1 Y+ A

; w8 w4 H/ G0 l; b% C

6 C* ~- Z* L$ B `   " {4 l5 b0 ^4 ]! u

: w; n1 |5 D. @% j" L: D3 k! J

4 B% E# D" r0 u$ F android签名的数字证书的一般都是采用 X.509的国际标准。 ' C1 C" }4 D# D% k" i

A6 f7 b) a+ q/ S+ S

; r" q9 s8 S3 F* [5 L" R X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 z* E* J4 Q& a* K- S1 m! s P# w3 ^

1 F& d' C2 r6 P5 R N L

' {; k! b+ u, N% {6 P7 S: x 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 ' U! \8 k! k/ L$ r O6 V. n1 U2 \

- o. X: f- R1 x$ L- |2 D* ^! u

* _/ W* U; d4 D' l9 r vshapes= . w: a9 @+ {) W

" g5 j6 m3 A. c5 \) I) `

" g' t8 d! N7 U% v. F1 [& C: b   1 m( U) Y. L0 G( C* G. e

6 I( s. j' o# G% k

- g F) F7 h! L% D g$ t, Q" r+ H 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 7 S6 p* J8 a8 u2 D$ t6 z3 B

8 h" m. H1 n3 `+ v Z4 Q

' H( K. Z, W, E) m3 m' e$ }1 c Q$ [ vshapes= / c6 k$ x9 k" |3 M9 Z

. s0 T/ f# h$ e. p+ x, m7 C

" G: Y% Q6 [+ |) p" e7 x) f * O( z$ z4 t' E- k( D

$ C5 h! y1 z% f# X

7 |" T7 \# m# n/ i+ u) m5 v! D$ R   % Z) G5 {. y( J; Q* E4 V# W* N

4 \2 n# r* Z* S* r, \1 C1 P" p

4 R i) F q3 }' Y* U 权限信息 ' t, s3 e: u; J9 W# Z6 \

0 X2 X$ {! a7 U1 N5 I1 u; F5 q

: b& h/ z: a U% t7 n1 i, U5 b 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 0 _) @5 O' ~. l2 O

) v# o8 Y6 d6 N3 m: u

, T7 D& j% E( \ android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 8 f. z8 ~# q5 U) x2 q. ~8 D

0 n1 F9 m5 H | {

; W' K4 g5 w) C- E' k9 f# G6 ?# ] vshapes= ; n, M5 j8 r4 \- F

$ d1 u, X# n# ^

0 S/ j- U# q) w   " ^( ` q% T4 R& ]* m9 Q# d

0 Q& h9 }: H- T% n A3 n- h

9 e* L# S* {- K3 q 下面对这个APP的所有权限进行详解下: 9 m/ Y1 Q( u' l5 Z

% {: V, G! P5 @0 ~- Q7 e g) F7 c$ W6 A* _

; ]3 G3 T" Y8 q7 Z! ~. R android.permission.INTERNET :访问网络连接可能产生GPRS流量 2 _' N* P5 Z) g6 i

0 |& O- k) [% p: M1 x9 s" }( D

4 e& d% M: U7 e+ c. G. i& o android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 6 r4 G% v o3 X0 n: e/ @0 [

. j- H3 z. E/ b

& Z, d* j3 s% m android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 , r8 R, J3 |+ o, u7 }& f c2 |" b" H

; _3 i% J) b( W7 L

" u( _1 b! L8 h* P1 d android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 4 l5 C6 j$ [8 K9 \" C3 b. X8 Z

$ V0 c8 _' h3 W# v1 z% P9 |

/ O; _% c" Q! Q1 T _ android.permission.WRITE_SMS:允许应用程序写短信内容 k& M8 R! p& s. d

) z/ {( r+ _5 J$ R9 M

# ? v6 m+ i; d' t0 l% _$ b android.permission.READ_SMS:允许应用程序读取短信内容 ! [/ ]% d) T- @; @$ c

, `, \* P+ h; Q" {1 t

6 c. ?2 l: {6 B5 e' o' j android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 3 @% `# e; ^& ^8 N/ K& m7 J' t

& T1 {- t8 P! n s

0 N9 V5 p1 ^! `- H& f android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 5 d5 M2 [( W. q, H7 q7 g) I8 P

- a* n7 a# k5 @' X5 U

# o* [5 W5 f' A' u1 _! s4 W( Q android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 $ D. f8 Q* M$ N- @) j/ t

3 U) _3 u T7 J& z9 [

$ H& w4 P" @( X' H android.permission.VIBRATE:允许振动 * p- Z( L7 Y# [3 U8 q

% l# P2 i, c" E0 j3 z5 @

) i2 y( Y6 ]! o6 \: V2 Q6 o" Y android.permission.READ_LOGS:允许程序读取系统底层日志 ! [, E8 v" _1 f+ q

" P- h$ z5 i7 K7 {, z; b

- k( K6 K* w, \% f6 U C1 y/ |$ { android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ; h l% S0 i( x+ P9 s, u; h

( w6 Q. I& C- v; m- S y

( H4 c) z* f+ p' }3 r( C   2 K% x8 F) Y3 `" c9 J8 b

0 _2 a- I4 ~3 Y; G

$ ^2 @$ X& ], Y) g4 E) n' z 功能信息 1 T# \' T4 A9 ]% Z1 |; G b

" P8 r9 t7 m) I$ v L

6 j- b6 U1 c* }3 [; M0 g* ]8 Y# b* M" u   % O+ E7 [" g" J

% f- C# S* M; ?7 l, G# w

$ Z1 D1 ?- R# x+ M( ~ 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 - K6 l7 `5 g" m: t2 n$ \

6 t- o* j3 k( T' f

1 j; t) Z. T; E3 I- x, P! D p Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 0 ~. c. ~! ]/ i1 M7 y$ @

: ]# r/ G5 ~9 a0 w7 z0 @# N

: H% c. t0 E9 ~6 t1 N 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 ' E& V1 `. O7 G/ W. b( }

/ B+ e. m: P) n% P

1 X# M7 d6 a. P' l 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 2 @ r' H% [* G

; l: C# K* E I0 `- S2 W3 G

! A% e- ]4 ]7 x) p0 A% ~$ d vshapes= * ^$ c7 ]2 e- V, Y: r- f! W

1 I; {4 K# b( k( a4 V0 @

% g$ Y9 `% H/ V+ }   f; t$ V Q) ` l

1 W, |5 j( \, p& r# \2 r0 q

" n, X9 G# t! U8 ^8 Z3 Q5 z' l6 ?! W 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 9 @, k* b8 F9 x D c$ E) y$ K

6 S6 F$ r) H8 J) }' S

" c0 g" D2 L. y; r0 I& b7 w) j6 j vshapes= 0 R( K8 D+ S# k

2 Q' {% e9 n- D/ W

, O# z6 @" F/ H; ^/ E+ I7 c; D ^4 ^   - J+ d2 y/ d" Q' x3 Q2 w9 U

. @" w+ j1 `' r/ `# L* K/ W7 o

' I/ p( i1 i6 Q, b lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 & V+ I# b8 ^) X9 D3 V- U$ w1 \( U" X+ G

2 {7 @9 k1 {+ Y% I' \

" y' B& d+ P, z3 V' [3 y2 ]2 c vshapes= - m$ P8 m& [, J; p9 X" c. ~4 H; @

/ i. i1 H- v* l: ?$ [

5 F0 i1 o* Y3 u, n3 x 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 5 ]0 ~% i" G" s+ v

$ Q. B; q3 m3 x6 I; ?; S

7 m- |7 U( I' Z6 \. D vshapes= - M9 b t# q! x K. E

" x# t* P2 J4 e$ j! b5 _

p* }/ t* [# V( n   ! U$ _' H0 G" a

* n2 ^( R% f/ P" `

% h5 d. P4 m- G7 f 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 % s# o C/ D) f1 e7 K: h# s

$ `" c) A2 R7 T5 c- m( @

: ~& p, f( W6 ^$ J1 o7 x! C LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 . [9 D9 u0 ]. T

1 d( ]/ R# x* o; ?

) S& W. n- i: {1 X$ K 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 e+ G) S" m# |- t4 i( k% i

- o: L } v, Q( P, a

) }( e ?' G8 s9 [ 源的luasocket代码可以参考学习下 ! M N2 W" l$ c: a

% P9 K4 X2 g3 v. O$ d( m. y

- z. t/ r/ J+ v0 I8 H https://github.com/lunarmodules/luasocket 6 R% z# h; d1 Y; ]

3 l7 ?6 W L/ ^! ^: |

, v' q: Y1 n0 N# r0 }7 J) G/ _ https://github.com/fengye/luasocket , r z2 n( K0 X' l

5 d: ^% z3 E8 s R1 |

4 Z- h2 q- x4 [ E/ k" Q   " H, n0 z' C6 t9 @

4 J( i- ?: X+ S/ N# E. w6 |- H

2 R: b9 B/ h7 j; U% W8 H X vshapes= ; q: q# ]. t: v7 v v; e

1 f: H* @! \* c8 A P. o

" X( Q* V% E. a$ c3 u; o   2 `/ t" q8 J% {" V, e% e9 q+ [

* J0 f0 K p8 W3 ~% G/ [

* M8 I3 c! b/ m5 b7 R   * r: n/ F+ Z7 ]/ I0 Z5 i5 l- N

& n- u/ n' H4 Z/ R, {

" w* T0 b- A% R0 s0 i; S 总结 , s/ B/ T$ l' f4 X' s

1 u, R9 d7 s& A% u& H4 Y% z

; b" S& ~) ]" o2 `: b+ d1 A' h! v 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 8 t* T! p" J" v' v; U; D/ D

9 t7 p) h" p& l6 N+ R

! i$ R) q2 |( C. {. j+ s9 h 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 + O7 @; C7 D0 W3 u

) k" w& S2 w4 m7 M( N; l

4 l( ?% e- W1 I6 i E6 \+ \; U8 b# { 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 0 J9 p& P5 C& _) @; Y$ l

% M C5 k t7 A

: S3 [, b3 I! g4 `! [4 s' k 结束 ' N3 h8 j, R6 }

+ ^. [1 R. ^( f8 r9 m* ]/ R9 A

) }: w7 C q9 |; [, l, V  【推荐阅读】 0 ?5 i# b: \. P' k* f- i: w

" S" G! x5 p: g+ i

9 l# o1 o8 m* f2 G8 W! z6 c# [ 对吃鸡APP的分析 0 G3 o6 w# P- W) M

0 s6 s& B& @0 U: R4 M+ G4 |

" K! _9 n% L1 J M/ s% n' H 你需要了解的APP安全 ; }9 e8 w3 g$ g3 g9 L

3 p# z! q" a3 z6 Z) f( q

; n. Z7 _' Q2 @6 c4 _& j 你需要了解的APP安全 2 N$ z- A- R5 _

1 r# i, E* v7 k+ Y- u9 l P4 O

7 A h. {& u& H* ^6 W9 o   # ^; V1 R6 Y8 r8 A! B, a( [

回复

使用道具 举报

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

本版积分规则

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