找回密码
 立即注册
查看: 5258|回复: 0
打印 上一主题 下一主题

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

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

% ^5 c1 a+ J- B( c/ } 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 7 _8 F: ?( S9 c

) v- C7 z4 q/ n9 o8 u3 X

0 C+ n, n' U4 q vshapes= 0 ?* e) ^0 u3 I: I3 Q7 \

9 ?' X+ N: B! ]+ O2 K

6 R( n1 W0 p5 q. k( t% u   / L8 K# G% f7 |6 u- A+ i* S

+ u8 ]4 O# x6 v/ X3 Y

% U' G ~3 X) g/ O; A 下面就以开发者角度进行解析下这个APP的功能的实现原理。 6 T) x7 K) p: e& J# Q

7 G$ A9 K7 m2 z. a

( q B, x% r/ _& w2 Y   , [0 p/ T! n B/ j

* h2 H2 c5 P" d1 Y: O

/ Z; ]" M- |6 e8 I2 A 基础信息 4 {5 c, \: w! U

/ W8 J! n1 }4 x7 P" s- ^9 D

- A5 G7 C9 g4 m 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 9 x4 z: d7 a X6 T4 D0 a& r1 u: [

& a* K8 X# @3 q! O. \/ f

+ \+ g& o3 ?9 L4 ~# O vshapes= 0 n2 g B: a4 r. B) w' H0 Q

# J& K$ J+ B7 G& e

" V' c& W9 y! Y9 w2 D* y   - g* A2 [2 ?# |; K

0 n" O# V1 V/ ^% L, t, d$ w0 r2 `

5 J3 E# q( l1 z; U* o u8 C 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ! ?5 O8 A; b" K* L5 f/ q- f

: J9 `7 t/ b; T+ F' e; N0 l( e

: f: b% a2 q" L) n6 O vshapes= 6 b8 R3 S2 U U1 ]2 f

! Q R8 W* [. ^8 M6 J7 c

" L+ l+ I& I8 I3 i   ; V7 y8 @+ z5 s, i% K

' `2 B z/ ]$ d; B3 N: F+ I( E

% J$ X8 d$ Z1 a1 \ 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 7 @* S! C( N0 |% ], j

; ^0 l1 v7 ~+ w3 L5 Q

0 b: B! K: a) F5 ?& } vshapes= 9 N! w s' y o2 S$ ]

* B6 R8 ^4 P- a# ]" h

3 k7 u% v8 ~9 W0 L   2 s( l; v6 t9 A3 j

6 R. d5 Q; X \% B$ v

# {5 H8 {1 [% c5 R5 w/ V# L 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 1 d- O3 z; @9 i

- _. L: L! g! M5 f. O# I% |7 B

3 |8 h2 |5 [% O' H vshapes= 5 L# ^; m1 ~' ^6 N

% \+ d' K+ a3 ]- z8 m4 z

# k0 `# l! @2 Z! {; A8 [+ X+ `( Q8 I6 i! M   - K7 Z, g# q6 U! |0 r) ^3 |5 {

) i0 c/ L, O7 l, z

. A0 }: P% L6 N2 F( q. g" O: N 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 8 }0 \0 [$ r/ ]2 N

; u! l! ~! K5 Q1 ]& ?% S) H) |

- ?' w! t! p7 ]0 ~9 f vshapes= 5 K+ f { i \' C

" v% E* m) M0 }. }0 d) {

- Y- @/ t" v* N. E3 f$ k   % D6 q8 @5 P& E: k

! T O/ s4 q/ q! s; p7 h

! n# o4 [ V2 V M   8 N) g2 w* J6 l1 p; x. P! t

) s8 h0 n2 \8 J$ A3 H0 [5 ]5 ?

6 @4 o& w1 m! r& p 签名信息 - b4 J; e) [ Y9 X& ?/ q

8 R j6 |% u/ F& v( t

9 G: l" s* ]* O5 R2 K7 w 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 # X$ G$ F+ z( ^! [

; @7 r. M" L' V p; I

2 ^% Z r' w4 G' d [& l- c 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ) T) y9 s1 E. V1 P5 h7 o7 x6 f2 W

( w$ ?% h7 _6 \4 p+ U" m

0 T8 x* ?; g) l; S3 W0 e androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ; o$ q' F) X+ o5 v) Z9 J& _

+ b, D7 s1 r0 F2 z- y

, W: o! t; m/ B+ n3 u vshapes= ) ]9 b' h! G% D$ I$ @4 ?

% h/ N8 \; G1 K3 g6 l

$ }& W+ ]0 S4 e% _   - N. L% x/ Y" \0 [

, Y1 s5 p/ u8 R: ?1 D& q

5 z& @. K3 G6 r android签名的数字证书的一般都是采用 X.509的国际标准。 + F& `8 H6 A0 I7 \' Q

, C9 r: r' o* F( x! e i, u4 a0 _5 o! |

0 G) s; d+ U& ^8 u1 y. B; G6 b X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 - A! c' e: d3 O2 }( F" ^

# K# p# h/ X7 p( D( U! U$ s

, l' }$ a0 y! i" N& W0 E. L; a 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 , n5 S4 e# e! Q. R

+ e; a) Q4 j1 t. X

6 M- l; P/ m- u" m% {0 Y5 E2 ? vshapes= % i1 S2 O$ O$ R+ u- n, e

5 e" @5 e! e7 R8 j7 b

. N' ^! U& n( R$ Z+ T! V   3 ]8 s& O; v" V9 S$ o

/ m' v1 D \, f

. Y, O4 N: t0 d 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 7 n7 l. e1 a. M$ Z. V( w

6 X: G6 l5 e1 [1 A. O/ V* Y! F1 Q. J3 k

; H5 L5 x/ l; I& ?( d vshapes= / z. N3 b! d$ |5 X* q1 C5 Z

: u/ B' H, M( q/ L7 c- o

0 k k4 k4 [; h1 k+ N! X 6 G* y# w. ^$ G6 A

' H' [" q1 W) Q z, [

* \: g8 [& c; L) ]* \6 J   $ o: T' Y& r- Z

3 g {9 d' t3 S$ D$ F$ j+ Z

4 Z/ c; |* Y9 G" f3 S C 权限信息 ' G! T$ o/ b) q0 L" e# f

4 G- v; h5 T: p) I* a% S& h

4 D ?8 b7 `" x 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 9 j4 q$ o! ?' p8 @6 J# U' l$ `, C" [

% @' X y8 d g0 E8 N$ }7 _

7 l# H3 q! H. y0 a2 g android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 5 |. M& Y- i1 D' n

- _3 {' G& T" }# G. ?8 N

9 P. h4 Q0 p* N; u0 D# T8 [ vshapes= & Z8 n! z: I; b) ^' p! l7 D/ Z

; O/ |- n0 [ H+ ^

. R* o! N) R' M$ m1 j   6 k. v+ ~9 x9 U$ i

A8 r) y7 u4 |: q

6 n3 k& W9 ~ Q# X& I9 ~ 下面对这个APP的所有权限进行详解下: 8 C% b$ N% G/ A, l' i. D3 t

! ~" D" [; F4 D( Y* j R# Z- G

5 T! [# v4 G, k+ X android.permission.INTERNET :访问网络连接可能产生GPRS流量 3 z' i, B8 m1 S5 A

$ X: u2 h* D6 G) ?, K" q, p f

3 q8 h/ h) G) [, x; k) V android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 4 u6 f# p( g7 Y8 a: E

0 ~* L, L% N- h7 M+ W

. Q$ Q; i. u+ R/ Z3 L- |" Y" y! Y0 V android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 - X, Z+ A5 e7 Y' R6 g4 e% ?$ k, J

7 D; k( Q$ L1 R0 C7 w8 x) a

8 F$ D: S2 x& o, V5 d android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ! y2 w4 t2 L& P% E3 r3 X0 }

7 M5 }. T7 B; {) e9 y8 y& z

3 D! {! L% P) F! B& h android.permission.WRITE_SMS:允许应用程序写短信内容 2 j$ x/ z0 {8 e2 p( |7 R* Z4 i6 g

" m' P2 @# D7 B

. ^& I9 a S. y+ j android.permission.READ_SMS:允许应用程序读取短信内容 $ W+ _) l9 o: E7 S, V# s

' w3 |- u3 K4 ]0 w& u

6 L! `4 v1 ?0 S android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 6 ^: f, i1 l O7 k* c, ~' O5 k8 q

" X: p0 [& s* D$ d9 k

2 i1 o, J8 F' x g) y) y android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 ! X$ U; L- c/ U- w2 o$ \

7 C. i# [1 N, [

' C+ G* V5 j/ B android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 1 c @7 u' U. z$ u7 O

' C7 _1 U# H! x9 n

+ t; @# O- T( U) x6 _& M+ u! ^ android.permission.VIBRATE:允许振动 0 O" W: S- A8 r+ ~$ |; i+ h

1 t+ ], u6 I, F( Z

7 C/ @# f, E( f h6 `* ` android.permission.READ_LOGS:允许程序读取系统底层日志 0 H' m6 J' T- F

5 _ [7 D. p$ T3 Z5 s

, q) d; k6 p# U1 G% s6 S android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  3 `% C- {8 Y; k" m: N, w

3 R! V7 \5 t4 u( L' v* Q

3 Q3 u( p6 R! d   : |' h- X5 s( m( ~4 v

, j( T* t$ I2 F' Y6 h W

# G9 s* I/ a. Q* G- L3 \2 q 功能信息 4 ]' C* S6 c; v x! d

' y5 h. Q" z& V+ h3 c# w

6 Z% N6 v: ~" Q) X- S, v) Y+ t   % G' |$ [: @% M( E. ]

0 E* B; m% r* R, S) n+ B1 l

9 Q- k6 |0 e V, x1 H: n 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 8 r% y: ]6 M0 \1 j0 r' q/ {2 q

" [$ s; O0 m/ Z4 j9 |! p6 @0 e4 L

5 g! O; X K& O Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 $ B/ p2 X- W/ A8 t$ J* h5 F

! i4 a/ [' n- ^1 K3 E5 n/ ~

# G0 }7 Y/ z) _ 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 1 X9 F- }* N G) w; ~

1 s# {$ ^7 g1 r

# ?7 r) t* w* s' G! o 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 ' w2 P# x! T$ n% L: N

* t/ z$ |8 _+ Y" l2 P* y& J

. |7 {9 \! g/ v, r vshapes= 1 M+ F% N* K* ~. }4 k

7 w/ I2 V: L! `6 m! H6 l$ y6 u' m

" H$ ]7 O% F5 I. o5 ^& H   - h) F* @- Y9 u6 d% y9 z

) h7 H+ ?3 f3 t' m* R

- P7 _- {4 `; B5 @) V 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 " e: i. i$ I2 _ a, I5 L/ w

' t* g, t& d+ ~" S. d; V% R/ e

8 e; v* U4 M5 t: Y7 C6 N" Y8 t; P1 S vshapes= # V* p$ s R* ~% e) o$ H

( S/ p' Q% B9 g* S

/ O( i' n3 I7 ?8 k, ?, i1 ]8 _# U5 Y   0 | l( ^( ? O2 K0 L$ K# D

" \% l- N) z; l1 K

- B% \) _$ }) T5 `% { lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 7 P0 u0 d) Q0 O: ^

. T- D" g Z. k3 E5 K+ Y+ ` l

: U8 |3 E6 C% }& i9 I vshapes= 4 t* Q; p/ k3 A/ b& m* k$ D. i

: ~- o- i3 `) W G% `8 O

; i# g( O, Q2 Q$ p 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 2 a; D) i. F6 r7 e

5 j: p4 X- p/ X. C* ^! U a

q/ p/ I/ F% X0 F+ L V" F vshapes= + @7 U4 U$ b. D, {. b/ s4 n# w$ t

2 o9 l; w5 k* q4 z4 n. l3 Q: I

, p, n7 l5 L6 v y, X, O   ' j* ~! Q( C' X: V2 f) }. R y3 e% e

6 @! g: w0 i+ @

5 g; m9 N! |( ?. z 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 - l- ]7 F- q9 @! b- c$ L9 s- B

: c$ K5 K4 U' I4 _+ _

2 h0 C8 _2 A5 ^- V/ J8 i9 P/ D2 l6 b; M LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 $ _, Q) F0 \! \, f, ]6 F9 l7 r

* I8 H R* b9 g7 h! H

a. R A* S' u0 g& o 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 " L c* `, P& }( C' L( {

* [/ q# X$ E7 h6 ]

! ?* R# f9 Z% h7 q5 [* f5 L; D" ]- Z 源的luasocket代码可以参考学习下 ' N8 v4 z3 k1 b2 m; F$ U! D5 F

: F0 T B. K( ~. y: D

' M/ S7 h: I* f5 K& C7 n4 g( R https://github.com/lunarmodules/luasocket n/ g0 Z1 q3 H

# {- q& n! c) v6 M

" t/ c7 d. E, h( z: m0 S https://github.com/fengye/luasocket ( {- d5 D4 B1 ~" x0 a0 Z" b

% C& R. Q; p: ?+ n; s" f$ D! ~0 u

/ ]; ~+ m) m" e9 z7 e. K   - i0 a" Q' d E) w. G7 n

8 S6 [+ B" X9 A% k( r3 Z

4 j3 L/ T0 a& n. z; t6 J' K+ z r t vshapes= " X2 }: o: q/ }) C6 H

/ i) Z# ~1 E1 ]) N7 `

# H4 k, s# O( m) \: \& _" U! h   ( s7 M8 }' o+ c: {' Z) e- O0 _

6 Z# D& p# \1 Q7 Q6 I+ K3 Q. N

. X8 x1 Y! D! z5 D& D1 O1 J( X   7 j) j* C- Y5 S- U' p' }( N

& b- T: ?6 T# p7 e3 p7 ~2 r

" A5 k ~2 q8 }+ v3 Z+ o+ _5 g 总结 7 D+ `$ p+ w, F! v

2 Z- P- |* I" V

- T0 k+ U8 |1 o5 D& R3 A 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 / y+ r5 |1 c* t5 W* S' A+ o- z

. ?' X7 Y- t; c, i% V" ~; T" x, r

: l& f9 u i2 X d 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 # m6 N! T8 D4 J6 k* w2 Z$ b. w' z

2 Z4 N8 X0 \1 k2 ]# [

( `6 G4 H+ c9 q% ?8 }& T 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 " {% n+ w( {' }

) I5 A6 Z' G" c3 h. ]- ]

) y" w$ e/ g' L& y 结束 9 U5 `, A3 Z; `( T# m* j6 @

! \, C4 p& ^- q8 f& z

# J0 A2 |! T* w2 O( b: p9 |; X0 M$ p  【推荐阅读】 / x& H$ t) \! \3 r

6 L* n4 r! A* m) T

) _2 x/ I3 k3 }0 b 对吃鸡APP的分析 2 i/ I7 f/ _ K2 _: @) V+ e& C3 v

- @0 V/ Z, b, t' S. e

; e3 l9 G; o+ T5 N* r, l: d; @6 R 你需要了解的APP安全 N2 Z1 W( F9 K9 f/ a

" O; @3 k4 |/ e6 [" `0 e: E

6 m6 I; _# l! }( U' o 你需要了解的APP安全 % s, \: W) V, K: \: q

4 y0 r8 U; S# p

( F% a& o( z7 ?' U: Z   5 n; ]% _$ G3 j/ f. X. G5 P

回复

使用道具 举报

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

本版积分规则

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