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

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

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

3 C; ^$ i: t2 b* T( y6 y 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 2 o) E2 y1 @' r5 I& S: A' C

3 a1 _5 z5 w, A( V: {$ H

" ]$ c* A/ B) n7 [) S vshapes= 7 h+ U% X" c/ p( a" e

* a6 p" q M( T7 v' `

/ j& `2 R1 t% k* z) f. k   ! X+ M1 G/ m2 c

4 D4 [1 N1 e1 ^! |( S& U! [

1 N4 B( U& {+ Y* e/ v" Y. N 下面就以开发者角度进行解析下这个APP的功能的实现原理。 / J$ M/ x" ?1 G, Q* E& H

* N+ P3 n8 Z1 X @

% k) f$ l) L* S: ~1 O/ S   $ j' J' b5 s7 s- r6 F/ u

% J0 h9 U: v D+ P1 g

- I2 q$ Z. W1 Y, Y# |( ^% o 基础信息 * b+ A% B; r8 {0 P U

7 }7 L! } c) k! i: R. u5 Y4 j

0 n) L" E# ^& T* C% ^ 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 # o# g) J: {* m. _# N9 T- `- n7 B5 s4 n

- m) a7 L p7 s; h' O2 W3 _

2 d9 V. ?( k' a& u, b* t" G vshapes= 2 d- t6 O8 T5 K. u

7 O: B; \& X' u) ?3 E

, |2 \+ j( B, D' F. U& y l   - m+ d# G1 u6 B* y# D% C; g( E

8 O( X) m+ [( ?

; \; E- T* I7 ?2 A, y! X 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 * C! h; H; D$ |

2 E* e& I, w6 q' j+ o% f6 Z

% h# n1 `0 F/ [ vshapes= % O6 U; D8 q4 Y

' r; o, _0 V4 q1 H1 B7 E* U

, c8 ~! D1 H5 ?- }3 o( A) w   , ~! a: v( {5 v+ ]& S

: O1 h* o! c7 k3 Q

! N8 z( u" Y5 B 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 " G2 O: A2 c6 k: {3 m6 _' v6 H6 [' f

7 T. |: p, U. t

) w8 S9 C/ k# k* V+ |" r9 w vshapes= 3 M6 E# _: J% n! z8 t" r

3 d6 C/ L0 t, Y, H& @! O

- ^1 A! j# d# w& X   5 i% U/ c m+ s( B* M

M8 w0 x% \: L' ~. i, S% }& R2 x! z

) z" Y: q: v8 b0 Q9 _0 N" P E- j3 N. y 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 : O, i4 J+ x" B- u$ n, u

7 m: Z/ B& e8 J3 Z

% N% Q; L! r2 k" ? vshapes= 0 \. R$ e" g# Q. b/ O7 k

. T- i. p$ `( |

7 P: ], W8 K0 u* T. Q   : o% s2 u% n( o

3 H. g) j8 t, C+ a" T s# q, r

) {& p9 J: q# \. x9 _ 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 - Q0 P1 u; T$ {- M" R+ V3 n% T

2 G2 S, V- p+ }4 p

4 u% Q8 W2 l& ] vshapes= 8 M( k0 l2 F& t! V7 a: _

1 q5 P; g; W, k s, D j' V3 q

4 B# {2 |; f4 k. s/ F) T   % Z* K3 f, `, p* w9 A9 k

- @# Z {& h- Z+ r" b% m

, n6 [7 P( F9 e8 d/ `% H   ?/ L6 \) s1 u3 @

3 f9 c) E- j* B" p. l$ W

( z+ E- L! J3 ^8 G @ 签名信息 $ @" {$ ]/ s0 z6 P, ^9 W/ D* n

6 T5 U3 G Z. F0 K

& Q2 \" r. x0 l1 G 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ' E& }; @" O9 I( }7 t+ u- O+ [+ H p

) C, i0 R+ q& T; X0 f

) O$ w$ b: J. ~7 O: m: g* y 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ( @6 z" @ Z$ e; Z

7 A! `; ?/ ^; F) V7 D( ^* k

/ p- P Y7 F3 P+ ~' P androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 & h2 x$ ~$ k& `7 V: o0 |' E+ ^' D2 D

C0 q) A5 V3 ^7 O5 v% Z% f

. a! M2 s/ [; i8 X/ u vshapes= $ O, l ]* d* G" U3 l h1 ^- ^4 u

# H& J' L/ T' ^( Z5 Q; T

" z, W9 l! `% y5 V0 k: b% q: a' h   ( @7 @4 o2 `# t* S

4 ~+ X& `' [0 M) \- B! P, c8 J- {1 L

+ Y# Y/ X6 P" `7 K8 d. ? android签名的数字证书的一般都是采用 X.509的国际标准。 . [+ A( [, k0 ^* {0 K5 X

) K% R$ @6 L, q6 T5 q

% M |# }! I$ s/ [0 u) _0 c0 e1 P X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 + _) K+ p0 i8 B5 Z8 O

* Y/ _# r; S$ b8 ^/ G8 f

; ]4 W& M8 L" X6 v9 W' I) T0 r1 I 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 # d, e) R1 s( x' M3 B

+ v; O8 J+ }! r, t

5 X' t" \9 d2 {0 F vshapes= 2 _8 g* B- R5 Y& \+ ?

2 T) ?) }$ m. g1 r" @1 ^

& j |3 h2 @" }2 b9 x f' r   2 H9 ~. J* R3 Q: _' R- o

8 l3 E" ?" I9 p: d

% L& G3 }, W4 {) i0 a8 Q 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ; Q/ i, x0 w$ G7 H$ ^0 D6 k3 D$ ^

- D% U$ m- R9 o6 @2 \! c2 F& j

4 p( a9 u# S; ` Z o$ l& d vshapes= ) {# K, A0 v! |1 I. z; D; O

4 ~7 D% z8 F# t6 j( q( a

1 P1 J+ h4 C, L4 ]' s D0 k& b. h ! q$ ~( a3 q2 G( |8 _

0 ]( |7 x: F* }. S. N' K0 r# ~

7 o+ ?* a, p! R5 h ^% l" _   , n" O0 u5 R2 t0 x# I( F6 r

. r8 L5 I2 F: q# S/ {

) J$ e1 H/ ^" g) x( U1 P 权限信息 ! @1 g& D& ?% O0 P1 V% W; E. R

4 e6 \( g; ~( t4 o: l- R! _# L1 y

5 |# E6 ?6 g0 L& y0 _8 X+ `3 g0 F& m- P 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ; {0 b( a& @+ }! G4 l

0 N9 Q4 x: }) D( q5 g- ~

! A- ^$ ^- k f. V4 U# } android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 0 m& d* r# J! q5 r S

; p+ B6 [6 n1 T" h: A5 ]0 I& S

) m6 }" G4 I6 N5 R3 i% W3 e" q vshapes= , `: e8 B7 t& M1 g6 ?

2 M" L0 Q- B6 U0 ~ Z

; \" T# t' b! Q& f0 N2 Z- s3 V   n$ X { M# x Z

$ @" I2 ?5 `1 d. }

* G& C7 [) w1 P# u d 下面对这个APP的所有权限进行详解下: ! O9 x4 U9 {9 T. \: T5 y5 M/ Y

3 z: x& t% m" S# I

7 U% v6 }( H+ p/ H android.permission.INTERNET :访问网络连接可能产生GPRS流量 3 W- P7 g5 f8 N8 n9 g

4 G+ Z/ G3 _& H, I! i# l) _1 r

) ?6 w3 o5 H' X$ w+ y. g android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 + S. z# z; @' j I; T; H4 ~

3 B* ]' u o. P

, c7 [5 u2 g! O, d- H% M( k5 u: n$ E android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 : ^: Y6 e! p5 g/ m( a

( t+ C* ^: V8 N, p8 S

% C! K! |- ^. `1 O5 N0 b1 t android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 8 J1 k. C; P. q0 x! ^4 S( V9 M# {

* s% k z& {& A2 o. m

g; z3 g2 J/ G) a2 p/ y android.permission.WRITE_SMS:允许应用程序写短信内容 3 `# E8 @5 C% `

% A7 ~% ` E- ?# j6 d

3 o2 Q. D( `: `# r: l android.permission.READ_SMS:允许应用程序读取短信内容 $ K. h V; L8 `5 I

1 f# I. W! O. S7 L7 [

6 z1 m& X# X1 W0 @" H# j android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 " |$ E; P' B. y9 V$ g$ Q

" X$ ^& z" i6 T5 h, n$ R

r$ n6 X" m! P0 P. e( l android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 8 _$ R. d2 g5 b% y

, u3 N {' }3 j: a. F5 _* [; S

! H1 d7 l6 C* Y" | android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 , a7 M" z8 x) s8 B

% |+ N" p9 N" r% @0 m2 j

; \7 t/ y, j4 g, K- f7 ~. P1 B android.permission.VIBRATE:允许振动 ; b2 C7 Y+ V* E' A3 q3 `' k) C

: k4 I" h; Q9 C1 {) Z) J

4 G$ }* Q! P& k android.permission.READ_LOGS:允许程序读取系统底层日志 ! R9 [* Z7 Z, g0 T

- `6 k- ?, M2 S( r. G) M

6 H6 E% k; J1 r* L" e0 o android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  : f" e! v* @5 I5 @! h0 y7 b

$ t. s1 C& [/ C7 ?

9 H: z" O) i* O9 [- R9 ~% _   + p N1 K! ]' F' w

: [+ E( S; [3 a

4 _. V2 d7 {6 S; X 功能信息 4 P: T- u" M4 P, A

( @7 }0 v7 e$ U5 S

; q/ e$ q4 a% k( R$ K% K5 Y   9 f( r2 A9 O: G) Z: ?2 ~# P

5 M0 i( e4 ?, E

6 S+ `: U7 z3 [: x9 V: a 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 2 i0 B! C" j1 @ M6 N7 e

8 n0 t$ n$ Z+ w3 k# o" O

0 B1 s3 I% M- `! s6 i E! k) n. o4 o Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 5 T7 v2 z- t- B' r

# h m8 C& B; x6 Q R( Z6 X

. ^3 i% z3 |# P7 H4 q# q- C( Q 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 " h6 {0 w' m# B6 V3 t

~; [1 `- j3 f/ n m' s' A$ Y

, B9 c* M# N; c+ z4 `- e 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 1 }# Y. E. r; W) c

5 Y4 ]0 Q. t0 l8 c9 p' b# ~

+ m! w" x; e9 H vshapes= ( ?7 k2 l: I, y9 F9 A; d

: e- W2 K9 t+ r) a2 q/ g1 N( v" q% y

' ?! U' y) l' {, z+ x, H4 ?   3 h5 J0 T e$ j! u; a% _5 I9 v5 U% S

- Q+ Y4 K# _8 n; O( i& b

, Y: G" F: r* v) F) L- B9 u 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 4 c( i3 D: U2 [$ l7 I+ g

" j. k, q& q L7 T

6 a4 M3 d8 H( x. T vshapes= ' U& N, l3 Q+ a C" [ `) b

" j& N3 W1 M1 ]6 \6 u4 u5 s/ D

, l) j' E% t* t5 a" y   ' [+ Z m. k! d3 ]4 i

/ @ |) v" E) ]- A# f

$ ?5 ]1 J$ p0 d% N! U& ^; b lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 * z$ v3 y5 `5 P4 h) r2 c

, d8 w, c( X8 a) n7 D% A7 Q* r

' L, A( J$ E+ \ E9 x$ E vshapes= 6 \6 o6 h+ r6 R4 s/ i! s( i( k$ J

" E( r# l! O" g- h& ]( Q4 k2 d( o

. w/ @" M, ~" d7 v 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 , w8 v8 E% {; p* y' T0 X5 ]

) b" \2 |' [) H* z$ Z

" w# M6 V6 Q. p& j! Y8 s9 f; I2 Q vshapes= c1 w; Z. ]6 c" `1 Z

- [( A4 @& Q0 \; c/ D7 @% [

6 L8 L& U6 D$ ^5 W% _* @) z- \   * B. m3 i# | l; f* m

$ k3 c: W8 {8 W- G

, J% t2 h$ ^3 M I/ M 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 4 ~! P( T+ X4 d3 [# \) ~

% v+ I* Y! C/ v- \- h; e9 q5 s

5 Z5 D# B' Z2 A8 \/ O f) e LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 4 I2 r; i* y( ]3 r J8 ^

3 o2 ?# q9 a; a) `9 v4 c$ }- O

( G/ F0 I$ D0 c" L 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 ! p2 T! v. V( h7 C

+ K3 y1 z3 o- i! P

9 g; m; v3 z; U 源的luasocket代码可以参考学习下 n/ v" t5 ^! i1 N; g+ N6 D

' Y4 ], F6 I) ?8 n, Q8 V9 T# b

/ h8 `* V- P) K/ F0 L( ? https://github.com/lunarmodules/luasocket 7 g- W8 x6 j: `3 m1 A( H9 V1 x( \

; L7 i$ l$ w3 A6 n! G5 q8 {7 n

7 N% O/ a( J3 _+ o3 G# R https://github.com/fengye/luasocket " _/ \9 C7 q7 L8 B+ n M3 N8 {

' f6 _5 x. h0 F2 i& L

* T6 q& k( h5 w6 z7 ?   : K5 L: T2 G6 c1 O5 G

/ Q1 F: [' M$ y" b; ~9 p3 r8 y

7 _' {1 E2 |3 l! K1 B. B& ] vshapes= 7 `$ \+ C: w/ |4 S2 Z

$ v ~, w' @4 [: q

& k* ]2 E! X6 k, s   / n5 R- X+ K% [; Q

& f# R0 B) Q# _

! j. ^3 k, I- v. M: c! t, Y9 ]" [1 M   * |$ g: `& l2 N( S# R0 B

8 v: x. T$ l) e- A

+ w& I+ c! M" R8 c# v7 `4 T' | 总结 4 }7 ?( ~; Q7 B& \0 ?3 Z7 w

& J, m. l d: i, `

' d" T# A3 Y3 S. b7 Z 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 # Q0 j% R0 U8 r+ u

" d/ `% j' J* [9 I

: X2 u. H |2 O: q 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 $ o y m1 Z i) O) B

- {1 a& a- L" z7 J, K7 p! m

7 g% \6 w ^1 v 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ' r1 e# e& Q5 H' q5 l' k

2 j; L6 R9 n& o, }7 `6 i s

4 F+ h! I. a0 w0 v 结束 1 [6 r& t4 v! m4 l) Q9 C

3 J+ P4 I- ^6 z- j& u& t! i

; `, o8 E: P o4 Z) D  【推荐阅读】 # j- f0 [7 g V/ F2 j

! b4 ^) N, k4 \5 {7 J

( W) s ~% ]8 D( ?6 r9 x) z) K 对吃鸡APP的分析 7 _" I) @' G# q' ^! X( f# f6 f/ _- Q

- {8 V3 t: m( P

# L4 c" h1 h9 |- T8 {: s/ w 你需要了解的APP安全 * [$ C3 N1 k: G, X4 H

8 h1 b. Q9 F: d& F$ Q

. B' _8 x4 `# o! o 你需要了解的APP安全 " ^* S3 L$ W; u6 a" Q2 S3 a) B

- I7 @% u) H0 V/ f7 x+ j# J7 s' J2 v

& u3 W4 e$ _8 [/ P+ b% h/ m   8 z' @/ P0 C. t7 P9 T+ E" }0 L5 R$ ?5 m

回复

使用道具 举报

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

本版积分规则

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