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

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

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

) ]. g5 A5 [* j9 M. h! H$ z 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 2 ?7 y2 z1 o7 J( `# R* z: g

) R- Y0 y- v/ \/ l6 ?, f" v i# T

" Y3 s0 ^5 c% m/ n vshapes= 3 c; A+ d+ W% v' U% \4 h! S" h/ }

1 b. K9 U% T. }: d* n- z6 Y0 t% R- s

: v7 A9 X8 V4 L% f- ?$ D   9 B0 A* R( X Q5 F

# ^# L2 p0 ~! [) v+ P, r: T

6 Q% A5 D# J D7 Q D2 `' r( `4 w 下面就以开发者角度进行解析下这个APP的功能的实现原理。 8 I, e' f. z( A

) c: A7 V, f$ X

& a8 S: a" f5 p: X/ y3 {/ Z   ! B$ e ]( Q4 z9 x7 S6 i/ Z# I

# B1 C* B6 j9 P7 O4 O7 x9 t+ u& p+ M

* b2 k! ] U6 y: i 基础信息 : P, l/ u; c* ]; K) p

# e0 \( f& _3 S& B$ Z. t0 {

3 `0 L; T2 v( o- x8 v1 v 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 / f6 Z* Q1 Z3 l

' E! Z$ b, [2 { c+ ^

6 _5 H8 S: z% q {* n# u4 O% R+ ? vshapes= / i% `# o) N' ^% X

) n9 E X8 O. L4 y _

! u0 A8 ?3 d8 L( }: V) h2 }3 S   3 g4 \- { |3 M" Q0 K

+ m, A4 K9 O6 q: G4 ~8 _

5 A4 ]3 f& _& i# u& c4 U- A 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 # j' E3 F1 {+ z

: _7 a) \& ]3 U$ P+ U) A+ _

8 [* t4 p( s1 A. W* V vshapes= " z! A, {( p0 ^- h0 l5 \

4 X+ v }7 X7 C6 E6 @0 I

3 v& m1 `+ n, r) ~/ P. Z   , X8 J$ v8 I- C* F

- P2 y2 v. k- C4 K3 f" O9 T) ]

h; c& u1 g% M g3 b 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 6 @/ n; D, T5 S# d# o0 p! {/ X' ^+ Y

8 q7 b* D3 X b, \3 G: G

9 n8 P$ X7 U- ?8 P: F vshapes= 8 S/ F6 \+ C4 [. I: y6 x0 i

/ n9 A0 x1 w3 M1 W" U

/ \5 p! s+ ?/ \ N   ~5 I6 P% ^' y8 F6 D* u

G _/ T. Q1 \) }" q$ r2 q, W

$ M4 V; G$ Y3 N4 n 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 * k0 k4 F8 _8 V8 u

$ q- Y2 c2 l/ d, @& d- p: M

) F6 w( u3 j, [4 o% R vshapes= 4 E3 [- \0 V# P) m) Y: ^) w

* ~, c& M1 w9 f7 e" D# }

. P' a- I6 t: w( P1 \   ]% Y7 c1 F `4 L% V1 W

, T1 s, _4 D4 E, a* w0 R

- h9 G+ m4 H l' Q6 ? 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 . i( E4 p* Z5 C8 D

3 n3 w/ I( R- b: d p! @+ r8 c9 I- d

9 x9 `! Y; r) F% N2 v vshapes= 2 _+ Q+ c$ @0 |

& L4 Q0 L b6 h

0 R2 ~4 x/ q+ c# M6 R; K   # g4 l; R/ K* ~# t. |7 Q" R

# B) q, a1 A6 ]6 e3 ]$ |

' O& s6 ?/ E4 H* N: }- G9 K: x$ F   $ G6 }! b1 N$ z8 d( ?

. I' C3 ~- w- X' T8 G

' @; ?% K6 }( r7 c4 W 签名信息 ! P4 o4 ?3 u6 a1 I @

1 r, Z" ?( [5 r& ]) c1 r( k/ x

; V- p' z: R: k1 a( w 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ) s1 ~5 f: D5 ^! K" e

& e; F% j; l/ B$ w

) k' A. l5 _ Y 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 / K. A$ q+ m1 X# V, k( S, a

- J, R2 P; B) t5 @2 w, H+ N2 C" Y; j& s

. y; i7 X0 r0 G; x androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 : R6 H8 t. V) w

0 l0 m7 _& u: }& f E4 S* w

8 a% y* W6 O& \5 {' |0 v" C1 d vshapes= . L& u$ R# {$ K% Y: a7 `5 `- J

, f, b' Q) C2 d2 b3 ~* v& j' q3 U

6 J6 k' `% Y- V6 ~3 k1 R$ z+ u   ! r2 Q8 [" m+ a. X0 K; X

|9 q4 p. |% T0 Y) Q5 }

5 a; w" k5 o) U2 d android签名的数字证书的一般都是采用 X.509的国际标准。 # K& m2 p8 N$ b

$ a; l5 I, N. S3 R4 J' B

3 B" i% a' n2 ~, q) D X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 7 t2 y D8 V. c& K2 I: ~

- |/ Z, L. t T: A

/ x% q. R) b+ S 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 + q& z4 k/ ^4 m( I$ x

- z4 b% Z' n. j! b, [3 @4 l6 q& U

+ _9 n' H. W' j: `# h vshapes= + F4 Q" m8 w1 ?, y z

j3 Z0 `( t) ` L( ]. Y3 A0 V

8 e4 q9 O0 U7 F   $ T$ L D+ S/ D2 `2 h3 B$ k( \

$ c8 o6 q b! M

- d" L7 @' {, M" ~8 w, W 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ! b2 h: t1 S/ Q

# e4 r$ \ a! s$ F3 b1 J; p) e

/ \/ _, c; } R6 `7 C6 p' r/ O$ Z4 _ vshapes= : @% r! a3 h1 [* A5 l

0 B [/ \# ]1 M

5 }( p) Y1 p6 ^, h. ]) J 3 B: D) d% K+ `) F) X+ w3 t: B

2 m% \" u, q i" {# l

5 I% _/ a/ v5 c   # ~- q G |7 H4 R: x/ B* O

4 R: Q2 t0 W* i( w6 \- r

9 d2 h7 R h6 ?- [" L1 k 权限信息 2 `3 ~& n; M" v7 b/ s% M

I, l; U% V$ s. ]! y2 B2 q

6 M! x2 o7 F2 K 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ' L3 Q5 I; d( [( b; H1 W! ^

6 @; A& \. G$ c

2 ]3 z" k7 @% Y W* q0 w% q android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 7 e+ m. T# d0 Y, a( h/ n" Z

8 y# C' D4 `0 S! Q5 L# W

9 p3 a* v, u) l- D vshapes= 4 Q4 @$ Z6 s! g+ B

: E8 I# {6 y9 n' u7 a: L" {0 V1 R9 ]

8 W6 u4 K& g X$ j$ v* k! M) V   $ }, l5 Z5 M4 ?( l" f

8 x7 I7 S# e+ f: U

2 z$ p5 c7 n2 ~8 n% q 下面对这个APP的所有权限进行详解下: , a0 |7 E# A$ \! O

/ z: A4 e, g# O( o- Q0 X- c

: ^- G! H$ x. ?$ q+ A, y android.permission.INTERNET :访问网络连接可能产生GPRS流量 7 T( h6 Y n8 ^9 G0 s- V

1 N$ S1 c4 i# e0 F& E

: O% Q% T' L7 M, w4 L" H android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 " ? c* a% M( m, E2 ~

6 g1 F6 ], S5 w. n) _3 m/ R L

8 P- ]% K; n2 _7 i4 H, g android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 * o* z, C. E: x' k8 I+ q

1 Q# y! `* }: W# e( N

( D$ P# Q: k3 }/ L: J% m7 k1 | android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 4 z$ o- o) ?5 b# g2 N

. F* |; g( l. g# a. D( v( }

- Z) H8 \4 W* H1 Q5 F( k5 Q0 @+ h android.permission.WRITE_SMS:允许应用程序写短信内容 & R9 M9 A/ D& l+ ]# X. c3 H1 v. u

4 e: e4 t8 b; M

1 U0 o9 Q) W9 M8 w# z% j android.permission.READ_SMS:允许应用程序读取短信内容 : R9 O" e$ J. b% b0 @0 C+ `

: g" ^" X3 E# |* Z6 w$ R

( S1 U, j h9 O5 o3 E* ?7 U. r# ^ android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ; I+ y1 e& q+ v/ V9 F

/ y0 ?$ I0 c0 q, h1 m

2 w; |; @2 J, j; `2 C2 ]* } android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 2 F, S/ D8 n4 v- `6 }

) l3 o2 a# ?% k

3 p& ~3 N z: p+ T2 C8 \ android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 0 F8 ^, N5 z; _' N( {6 E

8 f3 M* y( C7 `* B! O2 d7 Q- Y8 w( l3 Q

1 ]! R3 U# y9 ]$ R6 t, c android.permission.VIBRATE:允许振动 ' B/ G$ B) g6 R4 r$ H/ L

4 P6 G; k8 f, T) l( u

( o3 I5 z% [7 e! o- f0 z android.permission.READ_LOGS:允许程序读取系统底层日志 2 r$ Y5 s t/ s( L. K

/ `+ C7 ?' I- `

% ~, s& ], \. s' w android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  4 B+ Q4 n/ ?+ U- p ]

: r0 |1 n; b* c4 {/ F

5 ] S( |7 t1 m. `. T l1 [   ( L( o! X# c; u, F, a' @; t

# P4 a! w: X7 L" q+ m. I

( x6 {" C1 I2 b2 L7 r; [' u h 功能信息 1 B W; C2 W# F

H* [, N A! H3 [ ?$ Q

# I# \* R- x/ c5 R   9 w1 _, c1 Q8 I6 D* X

* S' n# c" L# c. y' v" @

1 ^' k: K7 K; ?. F7 C 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 + a. _8 A; `# [8 r: U& c0 ?

; X2 x' u+ d0 s. i* r" i1 }

4 S! c2 Z5 X& b7 F/ ] Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 4 h- d) {! i% R5 N, ^& r7 `

- K$ G; h8 ~8 D3 V" @$ `7 P

: L% n" H; c2 i: q& b 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 3 F! b. d* M7 O) S/ @$ b

; [& D. x) r8 i0 m

9 {8 X/ Y& R3 w7 m 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 8 t( {/ Y+ K4 O0 ]2 y+ |9 X- }

% O4 C2 x, M7 q

8 F2 \, P* l9 O vshapes= ' n, y0 g2 ^% g0 R3 u% q4 |

~ _* P! ~( U! n

/ B' Z. Y: J( R! F" A+ R( x   % n4 q5 Q' D- l0 ]2 c

- ?: e( |# W& b2 R. J7 S6 n1 t% Z

3 a) o2 ?. n7 `) r# S& L 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 p6 g6 p! L- Y" @4 P/ I* g5 v

( g" W- [, p! b0 H1 g3 v+ z0 V2 l

6 c- {5 q$ H/ K4 s" A# E vshapes= 2 k; L: h% V+ ?/ j# c

6 K+ Z" y/ |5 S2 s+ v: f* x

0 d. K; u& T& K. {4 ]   3 p0 p* b6 ]2 O& |4 J9 |$ ^

( R/ Y( a* V- W+ M% O0 z

) a7 ?( C, }: i lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ! o6 H' S' u7 H) T( w

* P: R1 L( ?6 H1 m2 E

* `9 _8 |0 C- G. O- Z7 B7 F" {6 P vshapes= 5 ?# e+ Q# e2 j/ w+ H2 |

5 s3 D$ @4 A4 @3 x& K1 j) l

! i5 v. R Z( L* d 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 1 T) ^, h2 O7 W3 h

5 L+ C$ i5 F9 D2 L0 y V9 J# R( I$ ^

, N/ M. Q& ^6 [; Y vshapes= ) ?9 b$ B2 e9 V; \: g& h

7 g9 K4 f2 {+ r! M& v6 ?

7 F9 l0 ~- ^! q' H/ c" \; h   ) G x9 J2 f* d- ]/ n

4 d$ J( M G/ M6 N' b$ [

* K$ j* w. O# z. X 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 + Y7 K- o# O4 @+ B8 r9 d3 N: G

+ `% k( n+ O6 R: d- Q

4 l; c+ n% H! O7 V( G1 \ LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 ; m# x' B# l$ ]* E5 M, V: |

" M0 d/ D1 e/ P

& \+ o! Q* W3 k5 H3 W6 i 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 : n: d' a7 }, Z5 ^7 v* V& j0 E2 v

" s$ g4 z6 s8 ~& C7 ^

3 W5 S2 E# _' H" @0 k 源的luasocket代码可以参考学习下 3 v n9 H g& R- ` p4 Z4 p/ [+ _

0 C. d3 T$ [& X. m5 R) I. L

e/ |+ b1 Q9 r! D https://github.com/lunarmodules/luasocket # H8 d5 X8 I$ S g

9 i& N. B+ a+ D+ C! n

. w# V q( E9 E) J& c https://github.com/fengye/luasocket / z% Q3 z3 W6 z) }

7 x* w1 i/ j9 o% u2 k

6 @8 u# @3 N4 _$ D! {; ~   ' _6 @9 v! M* U* c

: F: o8 U. u' ]+ |$ J3 e

3 Z3 [) ]4 O, u$ R' H; ?* h vshapes= 8 R; e: j8 P" G4 |# n2 W% v- Q

7 _* r' v4 K% `+ o$ Y/ r* N

$ E1 G1 h7 K, X: C0 e+ Q   ) U$ x% p* @9 m6 J: S

0 T5 t, A. \$ o

8 _/ N6 u2 i5 E" P   ! _6 l4 s; k$ w3 k; E2 Q: ]

" Z# ^5 {0 Q& P, ?

' a1 D% O, G7 d4 L 总结 - x0 D. T' d. A; y

: ?4 _4 h% D. @; F4 }" ~1 @. E

' @; z* Q* h1 } 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 7 v, g9 A2 T, z$ G& G) u

3 l( \: \* c" }1 d- p3 T; Z0 `

: ?& G3 K. F9 l6 P0 N4 { 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ; t/ a: I6 a) z3 J

9 R$ u% g" B( O

2 t8 s! s- k6 {$ b# Q 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 0 }5 _: `$ B0 l* T6 r4 X) F% a

! W0 r4 M9 z& n$ H) T

# x. U& t0 z6 y+ s" S e 结束 ) I. Z6 V4 \' r4 j3 S

9 ]" ^- w) t4 Y, R( ~+ {

$ P* d& z Q, ?9 j8 g  【推荐阅读】 : }, G+ T8 @8 u

/ P* p( n7 q1 b/ R* L7 }& u6 z

! R5 o. @8 N" m/ o/ Z 对吃鸡APP的分析 - m6 n5 u" M/ T+ \9 y# ^# B% L; G& X

" B% m# ^8 m* G/ ^( i9 [ g

4 M3 w) s8 C& G' T 你需要了解的APP安全 6 F F% G3 \2 ?/ U, p2 N. H% y

3 a6 S8 V& H* H7 }1 q

2 x! j& \5 _1 B* {- g6 m; M7 U 你需要了解的APP安全 & ~8 s' J3 \6 J3 h' r0 C e- C: e

/ a; M+ ]# q( ~- O! o8 n: C

) z- [: K; B, ~6 n" [1 G' f   ! o: Z* ^6 I3 @# C6 _" C& E, ~

回复

使用道具 举报

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

本版积分规则

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