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

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

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

9 F' F8 [9 [* z5 I. Y2 a3 A% X 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 : U# E" n2 z1 a0 o3 ]. r# Z

: t5 E/ e& p( `

9 i1 j, E# S1 w2 e' q! X& r# E vshapes= . i: }" w# l7 w X3 ?* S: {% g

; m& f8 L3 F, r) p

& r" f7 U5 \ A0 e: @+ y8 j# o2 p/ Z   1 |' F% C6 v2 V# c4 f& c) K0 a

( L, q% ?% I* I5 a# ^

: w% p) `7 N& I- P 下面就以开发者角度进行解析下这个APP的功能的实现原理。 1 N, b H7 J7 ~4 x

1 W2 U9 E# L+ N7 i2 R6 |. S

+ _3 p! I( Q7 H" P, p   ! }# X2 z [1 _

% h N/ M& U; Y J

7 p- _% k; D# t9 R. k1 C 基础信息 8 Y* n5 K8 b/ m7 D1 X

0 E5 j) ?- Q5 o- {, {9 p4 t

! L* H! f; N3 M 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 1 _9 y, d" d; o9 f7 D! J- m

8 E% _ s% t7 `% e$ |

+ ~. b6 R+ D, X: m7 u& B$ J# D/ q vshapes= 6 z; ~& p: \/ V, H

) ?$ B% H1 o! V6 f1 B

% h2 { t3 E% `2 W; q   + p/ [' ]2 v; ]7 T4 Z5 q+ F( L

( E- h! A2 S2 ] z' t( |( o& G5 ~

1 [. G4 I3 d1 Q* H 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 4 @0 |* m. W/ {& v

8 H4 F. ~/ t6 @9 y# v

! _) B2 M& J- b4 p% e4 T6 U4 A6 N% ] vshapes= 8 A2 ]; g$ o1 _! _% M7 _

% r: X( E0 ?$ {' w3 X% H# }% L

. a$ a1 F4 @6 j( w/ R& F   6 w" ?: S5 j3 V2 e; M% h' F

( I w6 b+ Z8 l7 v: V; z/ W m2 i8 w% @

, n# u. }# z& T 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 4 Z, r! O/ M( B J

* ]8 o% b, ~: i( j4 Y: c. C7 n4 }

; i ]4 D9 ^' u5 P vshapes= 3 h* P* K: W( `, R

4 w: c: |2 b* m% v- E% G; E N' ]

$ P2 i. \4 P* U* B% z   : x: u! ?/ ?7 f, |& n/ Z5 o$ I1 q

! i4 C. a0 j3 @& `

# s# r N' u m3 X 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ( i8 w$ P6 S9 o5 p# w& j

+ h8 l; i+ q/ @7 e$ c

0 s' ?* r* {* \4 ?! Q* O vshapes= - _) i/ M( ]( ]# j! {

) E8 r# o- t6 ~; ?

5 K/ U2 S: P+ O. h: x   4 y5 s/ N/ S* n C( s8 f2 p* d

' Y9 p# n7 r) z [

l6 _) I4 g* y 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ! G" O% s( Q( E* b" s/ U" l

2 _3 N( D1 R0 T8 ~8 `: v

2 E& ~$ z* G5 Q vshapes= 1 Z2 ^ \+ c: l+ j

$ q) J9 _6 U5 t4 \3 S6 G- }

9 P! }: ~. k8 t$ I1 o   ) C+ P8 J2 k, ?* A" e& z) }9 [

, \- s( z. W' Q) `, @( n

; Q0 v. D" e% V# h, U, Z   - D3 K& A, O A. z( n1 N4 { Q

& _+ T8 h: `$ ?5 F

) R2 O+ b% Y1 Y: t* z 签名信息 9 @$ l' n1 I4 j% l

/ t f! n1 m U% h. C8 ]7 {

0 g* u$ i# @) ^6 I) R$ ~ 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 : j0 b3 ^4 M) f" D1 A

8 p& M- x' d3 ~: c: m* a4 A

0 \' o6 I$ a# J" D+ i 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 " T" c4 j; M! l$ V8 d" u2 J9 j% H) P

1 L l( k# |+ y6 D% j/ ^8 ]0 _

2 g( R) H- o. h0 e androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 . P j1 b9 X1 b. `4 V1 u

7 c* a1 d1 L0 K4 x9 q7 X

, F& r1 W5 C+ \0 ~8 X& {# u vshapes= 9 u, q2 {) S5 `' p$ [' R

: ]) a, k+ j4 @6 h/ `! I# Y

; I( ^; t( M+ k- Y; G   0 A5 G/ |. E7 r$ L% k, l! T

. p0 t& q- S' h6 K2 }) B

, W7 D& _% z1 s4 j* G android签名的数字证书的一般都是采用 X.509的国际标准。 # ~4 j0 K+ ]6 @7 A. B. |- n& U

. V$ S- O0 o( I! x3 @

u8 S' M7 g, R0 L9 e4 J0 P X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 6 i- s# s i6 C/ s+ r3 P

/ M; a8 n% _8 V u

+ p& q' }+ C$ A( v 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 2 n b. r; ~! @+ o- X

1 W2 e% H; @8 U6 W X" R' n( S2 s

+ ]8 H v- l: u: g {& S; F vshapes= 5 q# U+ h/ a( d) u6 b0 ]6 C

2 q) |9 k8 _& x6 N- z2 \% h5 G$ o

) Q- y3 U5 D6 N   % l8 r" G/ W9 ?# j. g$ k F

9 ]$ U: i+ j8 v, p. B/ x

' ^' n2 x, u; j0 ?# G; d5 b6 F: j' c 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 4 Y; C' Z! O$ J) ^2 u r! i4 O

/ ]" _# b& Z1 y) o1 q3 I

5 A6 p! B* K/ n0 ?- k# B. m# m vshapes= + o/ t. `# X& ]3 e; h

- q6 X' S+ k7 H

B% H9 e6 n; i " r- H5 g. s. [, u' c

9 f# j6 m7 d3 E3 s

$ d* X' q* e) n# j5 x6 i   6 p7 {, U" i) N" J# [, Z

* T" r8 V0 |0 [$ i+ g; T+ C6 N- C

# R, V: P l7 a( r0 J$ O 权限信息 x/ h. E, ]$ i; a6 r

, Z; r1 J7 p) J, k( `/ g Z

0 j6 y+ M* m' w3 c 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) " Y9 \4 Q( `# v- u/ v1 l) w$ I

( V: w- s* q: F# ?- X6 ~! J% o

4 J# V7 Z: X; t7 O) U, `8 z android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 8 @ H: m6 E, A

: W3 x$ |. y: V# h4 e

" T6 t; E3 ?$ ] vshapes= + a1 x, J1 e; @$ o9 A% h( b

3 y( M) H: |3 l9 e' _. v8 i: q" l

0 J; z8 q) N6 q. l3 c   9 _ {. G) u: H4 z1 s

% g' s4 l0 B* }$ i2 z+ a" z# `

3 ]3 u, Q- s4 b0 ? 下面对这个APP的所有权限进行详解下: 0 k7 @, m3 K8 x, s h" B

9 {) H6 U0 A" K+ E7 x* R& U7 z

3 L: j5 H, `0 n+ i* Q9 w2 a4 Q9 f android.permission.INTERNET :访问网络连接可能产生GPRS流量 ' M! o* J: t$ k2 u& a

' d( n8 ^2 t- K# p* M; W; S

7 [% c3 G8 N3 Y" G: X# G4 C( K android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 / F- A+ K, ]3 ^ G. g0 W

7 r; H& M( a. z5 @3 V- ^

0 T$ K, W2 ]2 `1 I android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 8 y5 I; z. a; J$ v3 ?

7 l7 g/ Y+ F- h+ t) M o2 u

& m$ F+ \/ Y- X7 N6 d0 E) E android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 $ A+ G. {/ }: b: ~

J e( a5 G$ @, q- `

6 G. H1 \" p$ r) L% o g android.permission.WRITE_SMS:允许应用程序写短信内容 5 x- I% s) P8 `* A

5 X1 M0 d, s0 S# o! R

1 [/ f0 A2 \& ]0 e7 x7 ~7 u android.permission.READ_SMS:允许应用程序读取短信内容 ( @6 Z. X- f7 {9 }

* a# S" b+ \9 ]/ F* `

0 }5 L0 ^" K* \" \1 n* M C android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ) D8 k* n' B' L1 z: Z

Z8 X, p1 d/ \' O5 E

6 W. V: Y4 L. w/ d0 |6 r8 d: M android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 - ^5 T) T8 h6 N: V$ p2 d

& ?- M3 Y n! @. o

: p' k& c+ s7 k4 J/ c' L/ l android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 3 [( \) ], P, R: f6 M |' |

/ O- k2 s8 Y1 \: L1 i

: F) s: Y1 h/ m: Z android.permission.VIBRATE:允许振动 7 w7 l% ^" L" N

5 P: p* D# J K5 w3 q

) C# \/ h/ g; G6 p1 F" \ android.permission.READ_LOGS:允许程序读取系统底层日志 * F7 a% R2 o% J% A( `, t6 f

( ~% u! Z9 [9 l, e

& l* N9 P1 k5 p8 L android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  l. e1 J3 G' Z# V# ^+ d# q

" i) x. T8 M9 z# q/ K

! q% y6 ^, _8 R( d" b( A" x( a   ) C4 k7 H8 V! r# w2 @) q+ ~* S9 }

! E% Q2 O7 W& T+ N& h

& H. C& Q J8 n, v- {- A# L& l 功能信息 ' W+ [. r3 J" i3 c" L; r! \9 N

7 h0 J) O" g3 l$ Q7 {& I/ |- w: B) w

2 f6 }" F- e7 z v( S- v# j   5 g9 B% \; s3 D2 v% ~7 ?

/ j) Y2 j; R q5 c8 I2 B2 I

; s' \9 A3 H2 _, G- A* {5 M 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 & e: w. J1 g4 s; G P- z# b' C5 g

3 H) ]6 u1 T$ A8 U: b4 c6 a) a! F% f

/ l A2 B" u) p' _4 g) \1 k Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 2 k1 o. D3 Y# G$ Q: {. R/ \ ~

- a+ e7 G" Q7 S8 G" x

# e* |* f& E+ j6 q: h0 { 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 ; b3 l' k+ c2 E: ?" K

& W4 b1 O3 s# L* r3 w

' W* H2 H( W, }' P" i6 j 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 ; S. |% a5 K; U s* F& h/ M

# T3 J/ |) ]+ `0 F6 |+ e2 h1 f

. y4 r" U! q- ?2 f+ J& @ t( V5 \ vshapes= ' U ^# e% k7 y

) m6 J4 H* M2 T1 o

5 N3 O6 N5 h, p% B1 _4 I# x   z! D' m9 q% ~+ Q* m

2 }2 ?# I. d1 y" {4 X

: x5 }2 V2 s p' {4 z7 w3 D 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ~; e0 x' @7 D* p1 E+ i

) M. c5 N/ a( O+ W

: z F g3 z0 K% I vshapes= - K' o$ h: ?+ F, Q, k

+ `- N! g7 k G+ P4 k

1 @- C6 y& t" U$ Z+ F5 [; A: x   1 Q) a' F# ^3 g) t

: V' }" Z! N) G: O! t

1 Z' Z. A* a8 N) J/ l2 N+ ], A lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 7 ]! k. X6 K5 c |: Y( t

! f5 R2 c( l4 @3 w

! K J6 q. h" q3 e# { vshapes= - q4 j8 d q5 Y- ]3 Y1 `% A/ g/ ?

5 N6 ~ V% E' Y$ r- W! O8 D

8 T0 X9 X8 ?# `" r# `, a Y6 v 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 * y9 L- [9 E" k2 l+ U

4 f1 Q( A8 I5 Y L* H

# M9 H; d! B% ]# F, `7 h8 e+ C vshapes= 7 A: s8 a1 d0 h4 a

) I1 t+ Y$ Y) k, t1 `

& F4 _# k; m+ A ]. ^4 @   # U2 B/ \3 c- F$ Y9 ^

% J! g& J' B" x$ B9 V9 q4 I

& M' R# [5 ]1 i; T 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 8 _" t6 p0 [% G

0 J; F* i7 I0 a

( T) A$ M. P* P h9 t {& @" l# W LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 / ]; h2 k: K, U

3 N1 G9 C& a$ Z O1 q T' M

, g0 T! A- z0 w& G 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 g: W- e7 m) m. Q* Z

, O7 q; _1 ~5 w# d2 ~% h, x

3 F8 X3 @" i. s7 C9 v ^ W 源的luasocket代码可以参考学习下 1 c# I( P& m0 {& u5 Z' V& ]

6 r& b. c6 Z$ N

0 z; B& t) r" n C8 C# h* G https://github.com/lunarmodules/luasocket , M5 K5 x% `$ k/ |. \7 z$ [

; U4 M3 B9 H5 J; R$ c% W

9 ^6 H' y' J F1 E2 r7 C https://github.com/fengye/luasocket . e. P! y' n" `3 ]

) H, p- C! @+ j& q3 O0 [$ O+ r

9 W a* I0 J6 p8 R8 x; o   6 ]( r" v7 K1 R S

! a: }: [1 y% J, m' i. p2 ~( X B8 B

$ h. Q2 q, s) A" X x% [; y4 e: U4 J vshapes= & j0 C0 r1 J% |6 [. f& C

) L2 ^# @: q9 S. h n

' y& f8 }( d% ]' G   ! Q( D; l' b7 Y$ R' i. c8 i x9 a

9 n/ n) [: m; B# L' v, b$ H

/ C/ |. x6 p# E# n- d; R0 Q; _! o, C   % f0 L8 ? h3 s

8 i0 e5 B" q$ F) n% S

# r7 v) `3 x9 U/ Q9 z* o 总结 : a, b5 e7 B4 W* J4 U

/ F$ i# k9 U0 F ]0 l$ k

& k2 U/ W! X S 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 ( i) }% n J& b5 t: ~5 F- F

" l, [: X, O9 n. R

# z# I' h! B8 d5 p6 n$ _: g 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 2 s/ ~! t0 ?1 t" J

1 q; x' U) n _: c t, `

8 @/ R) W9 b) r4 D6 R# |" Y 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 1 q9 Q, i( g. _5 |

H4 L0 T: f2 p" p# t

3 t; a, c1 C) t# ] W- R/ b 结束 + D; \& H8 c5 l4 i: W" I* ?+ V

& E) h& y- ~+ @

A) ^, m$ b$ g! P6 J# D, K  【推荐阅读】 ' n% q' X3 s; q

7 n! b- k) v1 {' k

' T, A3 }3 A+ D# T ^& n" j 对吃鸡APP的分析 , c1 f, U2 u# \ R- E

2 j# b( t5 b' v% \4 N8 E

7 Y9 U% I( W5 h; j2 o 你需要了解的APP安全 - A% v G8 Z1 B2 `

7 j" i$ z/ R4 b' X2 [2 C

' [3 u# u2 V( q r* n! q r 你需要了解的APP安全 0 f. h- L4 D- y$ @# A

! `4 o$ U# S Z4 @! _' d c" [

6 C, t- \! k8 I2 B5 n   . K6 J/ B! O G' q3 e

回复

使用道具 举报

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

本版积分规则

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