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

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

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

$ f5 k1 D( Q/ r7 o; K3 i 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 9 {4 D- z2 t: C

& Y D: E" X5 g; I7 s1 ]' T( v t

U6 Y; M' y# i8 ^8 ?/ z vshapes= / S- L% l! C5 F) n5 w% N

0 n: J' c: E3 d* I5 o

[# a1 A2 I, w6 R! s   ( g: I0 o: b. ^0 H: c" t T+ E1 d9 o

: o: H4 _7 }, N" @& g

0 e! V+ \0 V2 w5 c M 下面就以开发者角度进行解析下这个APP的功能的实现原理。 i4 T0 V! Q& j. |* n+ o) |

4 m G+ r5 N* W: y5 E3 B5 A

$ |- s0 z0 T& h5 A   ) p1 ~5 E% I9 Z& B& `" y1 z

5 G% M8 `8 i/ a1 S" S' y

' H! P) E5 ~ C ]8 Y 基础信息 * y/ k* p u' n% k5 r

# z2 L) |& c( v; u" e

^/ k7 f, D) q7 A* x 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 & B% a! [9 f+ p3 D0 J

5 c2 T, m8 {/ i

$ D7 H+ [) [& G; U vshapes= ! x$ Y$ v4 T) M# w, }$ P

+ z. [( O! H/ Y) t) N$ k

" O& W: Q7 @7 u# Q8 o L   1 t; f$ K* i+ T( a. k

# r" P) B/ Q2 Q. u: R/ ]& r; L( o, i' W

# t/ Z8 a5 O1 u0 w8 y. D 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ' P9 n0 ?8 w0 e7 C( n

" P% i+ ~- s/ a9 T) u

' [: C/ T4 h" l" o vshapes= ( t2 A/ g2 C0 D- G# o

" o5 E" x' W5 r0 V p

6 u, ]7 ^: J3 d0 p( G   8 H, W# V$ Y" Q [% X8 C# C

6 C0 Q8 a0 `/ C) a3 `$ r

: O3 W( X, S' f8 a7 r 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 % D& }7 `$ ^3 L3 k+ s. P

+ s( Z! m3 z4 E* K1 G

( s" V3 i$ Q9 B5 ^7 t vshapes= + k, l8 t: |$ T T/ H8 @# |" y

# t- q9 G h% t( L

, ^( N% F+ H4 v1 @' A& c   $ L' A% a9 V/ E8 C

& C$ l' g* F J- ]/ D" l6 v. y

b2 T) Z& Q1 ?/ Y 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 3 U. J" k- M6 k0 B' z5 F) @ p0 y4 P

: u! S$ K( T7 p/ S# R1 K

7 v# C( _/ M4 l b6 p4 v# e vshapes= - D3 v$ L$ P: X4 {3 D3 u

: K4 b \6 y$ k; h

4 L. ]% w) ~2 s/ K   3 g4 l6 [. l) l! T: I

1 ~* V) Q( e, P" u$ g# _

2 Z& P$ x9 j+ l8 v! J! D 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 , Q3 ~- s" I# h& W6 J

) w0 C7 ]9 k- O+ D

S/ k7 O6 I2 D; j' ?0 d9 D vshapes= ) L' ]0 f- x2 M3 I. k1 F0 c

+ R6 `7 A& U) S# T

9 u8 b( \: o: Z$ Q6 R9 I. o- J: d; V* b   # r; b( }5 K, h1 F& a

2 n$ Z g" u. n# w

1 k, _ K7 Q6 T" m   2 H8 q/ K9 ^9 s; i

; O+ c5 x# [$ S( S7 N0 e

, D) j( {8 W1 c. Y4 t# d( F 签名信息 & f# B5 Z% G6 I% j$ J. L4 a; f; S) P

5 u5 G4 A- d/ \6 I& J# ^

" _4 t) l( Y( L- J2 k" R4 G( P3 u; u 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ! b1 {% [8 r. s$ s# D, t# V: \! v- z

9 E/ i5 F# N0 R2 M. Q

+ R- T- q( b; k5 D" w 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 6 ^6 ~5 ?+ X: `& ]/ \

0 |0 {1 b3 p7 l$ Q/ }8 |2 W

: P. [% J9 A( q( D( o androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 8 e& M+ |% ` r& s$ }8 T

' x8 A ?! `( P8 {5 Z- B

2 h, B2 c. ?- u9 |$ Z+ ^8 {- D vshapes= $ P, k6 T6 |2 M8 M

1 D, t( j3 X" M( `$ A% N. D

' \; F5 e2 e4 T1 p# L   / L6 ^& B6 a( s) M+ G

- E6 {6 w0 m" J+ U! L

0 P. l5 L3 b5 ^9 @/ P _ android签名的数字证书的一般都是采用 X.509的国际标准。 9 B) X: ^9 F& K

2 ~8 N- \2 x$ ^; E( A) n/ @) [& v

$ _" L8 R4 K$ T2 H. B X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ) l2 A0 W' y# k- v; o/ _

9 |$ U$ C3 v, t& }; O

: H) |$ O: C- K6 p! D0 B" t" b 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 , Q {1 O& R9 T; m3 ~% L

8 r8 S {/ m$ J4 Y: c* o" X6 E

0 J- D) [/ n3 O/ C vshapes= $ T2 P% p2 t+ G# l' Q0 v

- g9 ?5 \( D# |* F$ _

" r, [8 q0 _$ z' N$ K( ?: ?   8 l% s% m, b( K

* c; O; X3 U' a- |( |

, L" A/ P9 J6 Y' K 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 4 i- E4 S5 J; j/ R6 e

9 L3 |5 i+ y! Y9 D/ F @4 F( V

% g- B/ @" F, u/ t" |5 v* @) i: `" \ vshapes= % O0 ?" M2 H9 g1 f

4 W9 c9 g4 @, z

) _7 M; K9 W9 h2 ]# ~2 Z : t- G' K9 C2 |+ P2 z& f

5 y+ N- ~5 W0 u, [- p4 }! L0 ~

7 m, H6 n0 G6 H0 ~; X   . B5 v' p$ g! j) D* L) Q, U

8 E: J b" R v \* K% ^

- h/ [' j9 x! {& n: e2 _ 权限信息 % ]/ M. L4 G5 m* p( k

) K% T6 Q* A& ^

- g( j; Y9 ?; u, @ 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ( c9 S4 D8 b# W& |( Q

" F- }& L5 F# E5 ^, y

T4 w& e2 g2 y& [$ q- @ android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 - H* T9 t M, i

* B' L* {# u6 H

% c7 i8 q9 z: \, n$ s2 t2 O* B vshapes= . W( [6 N- v2 j8 w) X( c) o

1 X1 M1 k+ M$ ~- f# d4 g

0 T" i. x0 b5 o8 e. ^7 L   b0 x! Q* S; u9 a

$ H3 [) ?) n Z* r. T

: z7 Q4 b4 V* T 下面对这个APP的所有权限进行详解下: 9 c) h& A. M8 ^ r1 @) o2 _5 r

+ z/ C1 I8 E1 C7 N4 A- h

+ b, g6 L% t: p- _6 i. |7 L- W! s1 U android.permission.INTERNET :访问网络连接可能产生GPRS流量 3 M1 @0 U; ]% l( A& q# T0 i

0 T% Q* [. i! V$ J; j C" d: }- c

' c+ P2 G/ t: v- R$ E9 {5 m2 W; d android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 5 z, P+ A9 ~3 R; b: ~1 M3 s7 g

6 l: F' _! b# k; s& _ F

1 |* ]. T- _# R android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ( V* f& @! K7 A5 r0 u

% ~: \ x- {2 e# Y7 U

# {* ? W% U0 J( ]( O- m android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 J# {6 J* X- q% H

% N0 c3 P0 @0 U3 u4 Q; d: o7 j

! M7 n( Q; v* E/ f1 m1 L A android.permission.WRITE_SMS:允许应用程序写短信内容 5 B) ` z" I( J- k% X; p" u

% M% N( D o# p( S' z

( S( G. N- M! D- ^1 |, k9 q/ B android.permission.READ_SMS:允许应用程序读取短信内容 3 i; g: ?: ?) h! f. W0 y

- T2 b1 G# ^0 s$ C

& W% u3 }; M w$ H6 k android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 - K% V* n4 a+ }

3 ]8 f; D$ u/ v# E& }" I0 V7 E$ v

3 _; e& F( w6 F) \6 { android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 6 l- j3 t1 y' Y* g U& j: U

. s7 D) f9 `) I( b" W

& c. d4 F5 C1 l# W$ L0 ]5 u2 w android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 / L' J4 A C; |: b+ a

: s. x( V2 R: t6 s( R" B

, `& D: N+ W5 e" s( L0 y+ C android.permission.VIBRATE:允许振动 5 V \0 L5 @3 L4 I; \ j

2 ^# `8 H* F S4 d4 O8 o5 {

S/ I( k$ v" G! r0 u# ? a4 @ android.permission.READ_LOGS:允许程序读取系统底层日志 7 L" [ Y# L: Z! P

1 Q1 b M8 s2 p8 @7 ?! }

% c9 Y, |( y* o! f android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  7 j) P j% W" q5 z U1 B( l

$ A5 K( @3 \& T& q

1 `$ c7 n5 d$ `1 L   & r/ y* P$ C9 v/ ^& s* \6 N

% b- a( j) k- y6 U6 b. G* `

$ Y! h0 k1 f1 M- m7 F, d2 c 功能信息 ! w9 U0 Y/ x- }3 `. O

' W- k. W6 t/ U. h' r

( [ |1 c6 R: K8 N$ C' H1 A   - | u* f$ j2 @" \6 ^4 t

- V0 o, m7 ~/ f: \" `" f8 X& n

" @0 v3 {( q8 J2 y" [$ W+ r; H# { 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 9 a* K( r5 I! d+ ^9 v

9 h+ n$ P0 T, G; ?2 |* Y

# ]% I" p$ B* M6 Y" L( x Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 2 f, c+ X* r0 c, x( L( X

+ j+ R; w( Z6 r, `

# |/ P# U& Z5 _8 [ 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 . E9 @! `" O' C, T* z0 U& D

3 C" d: |, O! T# f: W9 V

# R+ O2 s E$ E) i& j8 s 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 + }2 E) L: r; m: m& V% [

6 K- H6 A9 \5 j* {4 ]/ ?; I( G

9 `- C7 N. o$ o/ Q vshapes= 6 C3 _! q. _# c1 P" z2 Z r4 b! A4 }# y

5 C& U/ y3 b2 y

" @# i2 W9 x2 C0 F, Y4 ~' j   ; ]: \: w* x$ Q! ]

* e8 W2 G" L0 m' m$ y0 `

3 p+ S W% Z9 ]8 N 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ' E. P6 `. j# v' b

p# g; y$ @9 p# f1 v" T i

, z( z, W0 c" S' P& W+ | vshapes= ; C' e* P" E) H S

9 B' @( q7 Q/ g5 B

$ f5 N: q( [6 p2 b   9 q0 ?* Z# ~8 z) V5 J% K% C

6 P8 x: d2 j, s* }* k

2 ^. P0 _/ W& {$ z lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 % j9 F. ^! w: k, v

& x. P, U- h j: `* K3 } q

6 L$ Z3 v$ p+ P4 v, f vshapes= + ]1 q+ B" A9 m( e2 B

5 y O& W# a* K8 |: O, n& |

' M3 h5 R, g/ c* K9 i% } 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 6 Q% S4 I+ S% n' R! R

: u: ?: o* U' ~/ J5 X% {

: ^6 S4 g' d; m vshapes= 6 }4 ~! B6 y6 H- z0 l- b6 L9 O

$ g! S# l- }& ]0 X, @& ?3 Y# {; E3 g

" Q7 M0 }* K$ c5 ]& Z   ' F9 h! ~8 C; ^, s0 l# J. _2 p

) P- a$ Q4 t. b' e. a, @) R+ N

1 I$ n" D5 v2 p( [* r& V% r" d 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 . F$ \# ~2 |- E, T" @

, Y* t& A$ p, t. t. n. c

2 X4 e8 y- F" _$ \9 w LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 + R' a0 U8 O( v1 R% }+ C

$ a; n3 R: k; n+ c4 Q) s$ f$ x0 G$ g

( Q6 x3 w; \) j# K 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 , J2 f& e. s$ y* N3 J! }, q' K

& N9 z3 i# Q3 m

& H3 S& ?" m9 a7 c* m 源的luasocket代码可以参考学习下 . i) B ~) j! M6 J

9 x" c! X2 w( E7 n* c

% L5 q9 b& B& q( u( g1 X https://github.com/lunarmodules/luasocket ( r5 `7 G& O/ k! j9 z% e

0 C" E1 I5 ~; i- f+ i3 _% B

! j; r, G( \# D https://github.com/fengye/luasocket 7 l6 w7 i3 P5 U9 T( V% t8 [) O. u

8 E4 \) `' \. h$ R" x3 H' C

( M# }# r3 ^6 M K3 G: |$ M. A   0 g& c4 o' v$ { H) q4 t N/ G' P- y

4 d9 ~2 D- v4 k

( [/ j. u3 h n3 c1 Z. q# j vshapes= # J; N. I$ ^4 o z( C4 ^

+ l6 A! I- ^* i

' n2 d% f8 E- O   ! c( b4 C5 Y1 ?- R5 b/ h* S

* u4 ]) y1 |, ]

2 J2 a9 u# L* V2 h/ s. x   8 C* w. L& j" E" f8 l. h. I

& O+ ]+ w9 c: R) l% b+ `* m

- o/ x$ t) m. c 总结 6 _! A7 j, D" A9 z, ~

: d! B) s6 a8 a( d) e* J4 \; x( B

8 x# K1 o& h2 Q, p6 l 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 + u! j8 O6 j- t+ v& B

4 X$ a+ N) P9 Q& a! u7 C& z

S/ d( o: @4 Y, }* s5 E$ k6 | 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ) ? z/ f8 }" ^- V' }

/ `. C0 t! m3 q; c# O j3 e

5 e( g7 Y. F/ M, q 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 6 W1 o& ^6 {4 {" p1 q

% Q/ @) l4 X7 S# z, U, x6 ?

! I. R) E/ n# R4 U( h8 ` 结束 ; S3 E' o4 y" N+ b% `

+ l0 v. B+ T" D7 w) J6 n2 |# P2 U

: V3 z) I# `. g8 t8 Q2 }* B% O  【推荐阅读】 , O" g; @' [- Y* v

$ Y+ c; w1 ]- D- P2 l; B

$ H+ {3 K! f/ Z3 ?4 I V& E 对吃鸡APP的分析 : H: p) _, }+ V6 j1 \3 ^1 F" X

+ d' N; z. y& K5 [

0 ~7 Z/ [6 [* ^6 a8 b2 F 你需要了解的APP安全 4 S. d/ h" S) K' ^- J: u# n

+ o6 @+ n4 _0 Z+ l& t

* D, v" t7 N: @& r( I( h 你需要了解的APP安全 9 s/ x" ]8 I/ `( `+ O

/ ]/ U: V/ \! w' n9 w

9 ~ y H7 K. C2 d# B   " [8 `* y# R9 a/ [0 H& p0 s

回复

使用道具 举报

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

本版积分规则

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