中国网络渗透测试联盟

标题: 转载对小绵羊的轰炸APP逆向分析 [打印本页]

作者: admin    时间: 2022-7-8 21:25
标题: 转载对小绵羊的轰炸APP逆向分析

- Z! D# n; h9 L4 z0 k7 @6 R 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 E7 t2 W" o) W8 s1 Q

; q+ [ _- ]/ Y4 O

, m% g( V* D% G( t9 `5 i- N' b vshapes= 9 [3 g) a' f+ C. t. i8 Q# n; u

' o# V, F6 f3 P' L

7 l2 r4 V0 M7 ]3 y   9 A5 G5 Z" d( G. x# z

7 a' U$ g: n+ X, \" o" `

; A$ [, t$ ] |+ B/ N( G 下面就以开发者角度进行解析下这个APP的功能的实现原理。 6 N3 a% T2 }3 y. {2 s4 R$ [

|/ V( }! D" z0 ^( |, \' h

* s6 F F2 a0 x9 b- E8 Q   0 G( O4 U8 n3 o& `

6 O% ?% x- @# J* i+ Q

% A' @3 e" ?4 G; p- W% s7 a 基础信息 2 O% Y+ C0 Y R# {6 D. ~" |

% O# h9 t+ F4 L& u% F: r* _8 R

0 A- F3 [* i1 N2 D, O) D4 y% o 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 9 ~5 g; W o C2 U0 c- ^; K, Y* M: I

, Y) E; s1 r0 W' x- Y- n

c7 [3 k5 A3 T) z" Y vshapes= 7 E4 m6 G7 Y( j

( ~3 c1 @6 [0 N/ u! L

b* W& j2 C% C, U   * Y; D) o. j% U+ K% d' r4 i4 h4 A

1 l; P$ E' N9 _7 K: y

9 T6 \3 q: b% W3 k. Y+ G 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ! Q0 ~: ]: L+ C" b8 a

0 [) A, P3 `5 g

' V' B8 s( l" J& l# F: k vshapes= " a ^1 U( j, u" {) u% J( y2 k- g4 H6 R

. d0 e# Y3 l7 q) ? l: ?7 h

4 @! v& h# ]9 a6 v) ^7 ~   + g( p" @+ `* t i Y

$ F7 f( p4 H2 X! v6 A

1 t) i* ?* S; A; h O 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 3 g" a6 F1 n8 h8 B& f4 ^

; u+ b, t! @) W" I9 M7 i1 |

: a2 b9 J% V0 H: p k vshapes= " _1 H# A2 v& O. ^# H

& d* o9 h1 a: }: i

% q* Q: z: m8 f* U   1 k4 [8 j3 e" D( ?6 s, \! Z

; |2 R2 Q, e6 \5 q4 M

1 C: D0 Y# u3 J7 V! r5 Q j 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 7 S9 w2 [& u$ u8 Z9 }

, K, v& ]. o0 l

, z1 I2 F- T1 G. g/ y vshapes= 2 E' a/ ~' ^7 Y$ u

+ ^( n6 R W- ^9 M9 h, ^5 E

Q" ~; K- I- b) c. y- K   0 Q, o+ U8 u3 q+ I$ m

1 b2 }* n/ Z! T# S2 j6 U

R- N; _* ]/ x; M8 I7 E 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 9 K2 j' `5 R* s3 N$ g

# k y9 C* P9 F* w! W6 D" M

, H4 O) }. c5 _0 g0 u. u vshapes= 9 @. J0 G( p& ]2 u8 C& }

- c1 M) Y3 g9 z+ B6 v

: w# I& y. E s) l+ Y% ]/ n   . \2 i( y6 R, T2 T$ P& h& U. j

% m; g* {8 o7 m" d, b2 V

/ p3 `& y8 M3 Z1 H) ~% z   ' D9 b; k1 q. s2 X! I: P! n

+ F* x4 m5 Q- c+ ?: A

- D& X+ O; l6 {3 X 签名信息 9 Q: h( j9 ]$ N; e* n

3 I2 j7 g% d4 O3 {. _- u8 I- Z

1 f- B! W- M8 E1 p 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 + M, h9 O8 ?6 Z1 `* y

+ n, [2 `) r1 j6 L

v6 d2 w3 t% D7 B# D$ J B 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 & a4 u4 N; }2 G( ~( V1 j

9 D( A& R7 W* k1 {/ {2 K

5 w/ V5 w* _' T F$ { androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 8 w U: r# z# s7 e* ~2 a

9 k6 x* \9 x. e, D7 O' K- s6 \

; r" {9 q7 H5 Y. E2 o. l vshapes= 6 B* D7 M7 S- `$ r6 ^- Q; u

4 z" \4 x: |) A. N) T' W

' C: `, `" M U' U/ Q- m   ; T) q6 W+ }- `* }9 _

% [( U% n1 g P, n

' @- a! f( [% k) j4 W. L& f. \# p2 f android签名的数字证书的一般都是采用 X.509的国际标准。 ) }+ Z1 p2 Y o" f @+ w

5 d$ Q* ?; A7 @, x

* E# F) `5 p& d6 G) ? X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 * }( a, L" S1 }4 }& B# D3 K" b

8 ]$ B# w& F" F" i& d' z

9 c4 v V3 b) V- C9 e 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 1 s& W. n+ `7 o/ l U- g

1 p+ o2 U3 ?; J0 R: z7 n

! o1 a" G' Y; Y. f vshapes= 8 f& u3 G2 Z% s* A% M, s

8 [* i7 j( o& Z5 f& P) E

( g$ k7 e1 P% R9 U   ( n# V3 w! M% Y# K' j

. P2 }2 w! v4 \* O3 u* n& o! l! g

* x, W/ [, a. f, D# H- ^4 N4 X/ P 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 - u, d: S* r: l6 u; i: G. [% m* o

: R; c: I ]- c0 ?- `+ x. j9 G

* r+ `5 T% P2 C1 U* h/ q vshapes= ! [$ k5 |* r- _: \3 m. e/ J( b* B1 b

+ U! K* x4 |& R2 B

q0 I9 M- g5 D6 e 3 P* K% ?* X) g) q$ m3 o. V% M6 Y9 ^

3 ^3 Y; y$ U' \- W. C% F

, K0 U* n0 w$ f' d/ Z" D   9 f! @1 D, i) t5 l9 o+ l

H6 t' j7 D) b. }8 {; b5 l. I8 b

! }" M* w: V3 b9 O5 r! c 权限信息 - z$ D8 R0 p6 b/ U/ [) |5 b

$ K0 L/ m# L+ O& Y3 y6 _- g

8 m$ Q2 i$ y# u& ~ 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ! M! t+ n3 |; z' X* S

y4 u" U/ ]7 K. q* y

8 n# |& {3 H a3 u- S4 O, v* r5 T android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 " u3 P/ a2 ~1 |/ G5 F6 i7 I

' `/ B1 |* K' x$ k0 e y* b n+ I& _

9 P8 Q' n9 P* Z8 n4 Z) {3 T& G vshapes= 8 B( V0 w( o v0 B3 u W1 R- a! {

1 V, z" ?4 S- \8 j

( x1 V5 k9 u, J9 P: ~% o; R   " U* R1 i7 O' ~" I; m$ I7 c9 N

' r: C2 l& j2 l% Y% i9 s

; z" H0 T( R$ R, s( N u$ P+ t: z 下面对这个APP的所有权限进行详解下: . ?# ^ G' P+ a }7 N2 K8 O0 K

9 V N( q5 X) a6 i `

5 ?; I7 o1 d- Q- A6 b* H android.permission.INTERNET :访问网络连接可能产生GPRS流量 $ Q5 d, E; x2 }# Q8 d5 ]3 d3 d( \

. }, [ U/ O* _( j

: A- m. [3 k% @- j android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 : J0 Q$ U/ z- I, w

8 Z y7 Y+ U n9 X! `. R1 s

2 D9 p. H. p: B' Q android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 , e' {. W: v9 Q

7 z: y7 u" q: J; K3 |

2 U6 t# R$ S. Q" x0 j android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 0 c* ?+ X8 [# V

9 d7 \6 o1 `3 r2 }

% {2 L' w% @$ b android.permission.WRITE_SMS:允许应用程序写短信内容 " p5 P9 c F, G% p

e7 j0 h( F3 Z

9 R* n! }! u- [) Q8 c! s android.permission.READ_SMS:允许应用程序读取短信内容 3 N: g% ?9 b; t5 `

N( }; p% Y# a Z4 N

' b# v0 I, C% K- T1 O9 B android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 8 b8 x% f8 E, e G. v9 q; y. C

, Q- w) V Z1 m, C! J$ p, P# B

$ M% F8 ^+ H% F2 k0 M0 r8 s android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 2 G+ B4 z1 p! d: y- K7 A

* h1 K- Q2 W6 }

! i, p& {+ P( m ~ android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 3 p/ P: t5 T# y+ g) c

' U) k9 ?- U/ {1 f

0 u0 d6 Z+ J ~, X8 u F android.permission.VIBRATE:允许振动 8 n3 }! M# R3 K" u+ r8 G

# V* W8 ] H4 [! }5 k0 P- i

) u2 d- G9 o/ H' V android.permission.READ_LOGS:允许程序读取系统底层日志 ^ r6 U( ]) i& p, Q" ]

9 O" T. s( ]+ a9 [9 @: @7 N

, b- d4 R" t9 E7 R1 V) w android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  4 A' _5 m% r9 j, K1 g8 t# {

# ~2 |% ?+ F6 [: }" X

; D( T7 B( O9 h9 ?+ B" W5 j2 n1 Z   6 ~4 X9 c& }: ]5 g

& @* i: O0 b* k

* J0 @5 z$ B5 G, T 功能信息 & X6 s! G+ j# S' m% \5 V" S; C. ]

) a! w+ @) @& M& B

" O" ~) U# A1 c1 ^% T   y9 F( L) r' I, [

- B# B1 q' b- w6 i6 x F4 [

' J) C& s% Q- o3 ]# c 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 ( A$ H% q0 f$ I9 }, I

x, C) B& _* F2 k9 j+ f# \

; d3 O" u* z s- R: W- ~ Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 2 _8 B+ h4 B v

$ d l) h3 N/ _0 m. h8 e

% t: z- a; I: ?; S' {7 r# t 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 7 ^' P/ F: z8 {" \; F" _

1 @2 b, i/ L& A

" a) P" U. A" x3 K( N# j' o+ c 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 : K( v% e" m6 \

! r) ^# _9 w/ ]+ p! h2 P

. }0 e$ r2 @( L3 f' J vshapes= ! k2 u) n. k: O

7 L6 @" Q7 J9 Y& Z

( Y3 a# y; v0 {8 ?3 |   ; J6 G2 C1 {8 t* I# \2 }0 n8 x$ X

& x- u3 f% j8 e* O% t

% m" h$ B* X. h 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 1 g. J$ ^: {, C2 h9 m- t3 w

7 l" l% W w: A4 R; }! s: U1 v4 @

) u8 p; p. x' e9 s- L) _6 a vshapes= / ^( b2 \! i% _; e' q

9 l! {" U' M, }0 @) w

) w4 K3 P. S# t" K [" w( W( {   & m* F1 K$ c6 r: i( G

/ T4 ]& F; @9 S9 p- @; h* I0 c. |

. D* _* i1 _' F" m6 M c lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 / m% \# y$ U3 _) `4 P

0 a4 {4 P) b3 P

9 a: Q( m. k* L5 l- r) I vshapes= 5 a2 k' g7 \& j$ G! @9 N, o0 p

% f1 z' N' ?0 q; u9 V

# q+ X( @; t! `0 c( K. N 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 , A8 S3 I* h( T7 W M. W

W$ S( Z; _' y9 O4 Z

. C) K, R6 f8 | vshapes= & n" F' o, m$ F* W3 S5 Z3 l% E' W6 J

; ~, L# Z( v9 G3 G. [" [$ V

# k- C" }; B% e2 T/ I+ D* O) C: Q   9 f( s/ b ]3 t3 y) H& ]

& |8 r" F; B4 n/ b! E. X+ F

; c% ^, v% n; C$ r5 V- b: Q 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ) A ~" H; s' [% O% P

* b3 U* q0 o1 \/ K

- w. Q# r2 m- V" l6 X3 M( `) T LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 * p$ e: y! J0 i1 I/ x. t

! Y6 h# g& W0 ^& ~! y' ~3 x

5 e; w) a2 B6 S 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 $ o2 ~6 c3 z, M4 P: W) c

9 j. z6 |; C% [5 o4 x9 _1 }! i8 P

; D3 j4 P2 ?; M( s. H4 y! Y2 e 源的luasocket代码可以参考学习下 1 s( O) m1 J9 E" T5 A/ s

; N- z3 \, [. o: d: Z

/ k) B) g( `# A) h! _+ P8 g6 f https://github.com/lunarmodules/luasocket / K# A( M5 t8 }7 O/ Z6 X

+ I# Q3 Z$ u: C( R

) l, J' ]# _5 l- W https://github.com/fengye/luasocket 6 d* F0 O( \7 [' p2 S

7 x3 h$ R3 @2 W' E0 h' {3 Q; @- {

# M6 d! d; E! U3 ~" B   * @% b9 |! u/ ^' c+ ~

0 J' g; O: `5 r

9 n% a8 Y5 h4 G+ y: ^1 T& J0 L' z1 s vshapes= : h$ q. W; C" B1 N6 L2 T

" K. i# [# G7 O/ c* f, C

. ?8 V4 d. M6 L4 o, I% C9 h   * n R! f- ]/ I6 f2 G: E

- C1 ~; Q# n0 p& O4 i5 F8 r/ F& |

; u" ]; q* X+ {! Q% e   3 I, J7 q* f, e8 _

( g" W' `1 E3 ^$ Y

" ]& ~+ d) \& F* ], N 总结 # C& V# v( k2 F

. L+ A* m3 z$ y+ x" ^

E8 a. e5 J5 L 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 ! S- A& ^7 K1 }: N' a

6 y$ z) J( i0 M/ q/ F( I. ~! K! e

. a9 E! h5 m# k1 t2 a: e; ]6 D 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 9 A( v% n- s) _" f# l0 t2 n

- r; \. I. L# @ ?: R- y1 t

5 _4 X/ H- x% W! a) V5 u 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 $ j4 f3 C5 ~ h u+ a0 B

3 U* z$ y }% d4 n, Y( D; ]3 l5 M

$ c( @; L9 ]; \1 t8 \ 结束 ' O2 r% |3 \) y! {

" q) E/ D0 v* M+ V

' S/ H, F; H7 x2 [( v8 H% n0 A; U% l- p  【推荐阅读】 : c2 v+ W: s$ Z! K" E0 H

% T' w/ L1 r o1 g1 d

; j2 J/ e: D) w 对吃鸡APP的分析 7 i5 u# d! D2 i$ n7 g1 N

# e/ G" l* }5 e; z8 Z! z

" @3 x1 Z6 w- i' r" t. m- @ 你需要了解的APP安全 0 n$ ]' P4 U! V% [# S% P9 I' `$ W2 \

- D" M( z8 K0 y2 a6 T

* x! Z: {! F! m+ \ 你需要了解的APP安全 8 y4 _2 F9 A& ~

5 T1 I0 a' ]& p! s- Y5 ^

" R7 v0 u7 {- E" ]) ?7 d$ N; i   3 |2 P; O' ~* w, J: V






欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/) Powered by Discuz! X3.2