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

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

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

! K+ e( m0 n! F+ f. e 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 z( @ y" V) P }1 }7 H' h/ c

0 t) F0 S: o6 t# m& T

0 x, N$ f2 F2 o- }" F6 v5 I2 L u vshapes= % S/ V9 ]/ B2 R- K0 E, `

5 n+ f, t, I* n0 R0 R% Q2 M% v- K

: J4 C' R' Q1 s4 D' b   c1 w5 L) }2 s7 _

J4 y6 _3 _# i; F

8 B& T5 T! N$ X) q; _- s 下面就以开发者角度进行解析下这个APP的功能的实现原理。 & w N5 {8 h$ D# ?: I5 p

7 T( Q q; U& B6 r! e

P: H) z& @! O5 y# y   I2 T: q9 w2 H8 P

9 i1 n/ }1 o/ v# g

3 }3 y" y5 Y5 J% s! T/ T1 s 基础信息 / Q0 s9 \7 {: I$ C

) [. e/ v- a( [$ v1 T

/ }0 z/ K: {$ R 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ' ]3 A; k9 ]. n { ~- ^, @

& I& g& v( b# o- m

o8 K, z9 u6 k# ~8 f vshapes= ; C% F# m4 B1 x4 Z$ Y" k1 |

" r$ v. s! n* }! F* C

! y+ I" J. S. R" n   8 d8 d# s ]; j5 B9 F

' Z* H: y. @: F7 l" Y6 I

- a2 _, @! z' r 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 " \7 G/ z9 x: d

# `$ p( `+ C, W4 t

5 p+ v F0 v9 v vshapes= 5 `/ i! Q4 V/ K; x

+ A' f: q: l5 `( R

# {" V2 i; \9 ^+ n4 y2 s# ~' V   ; `4 b. i8 m1 K r

" H6 o' l; v& U3 R

+ K* ]/ X+ ^" C, Z 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 0 g+ c, a3 P8 `+ e! W; E5 h( O' e+ I

+ Y% ?9 L# N/ {1 W

# d& ]3 u) l o% }* E E vshapes= & z) A8 N; a' F9 q5 T% j" |6 F* \' ?

7 G9 p( e7 `+ X9 ]1 w' s E! N" n

' O# s, W9 L- Q* Z: |8 W   , g: r8 |6 K. G) w [3 T

" h `8 a2 L$ o

4 J; }' {5 W3 V7 [! l2 b 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 * m# b6 y, J; v4 V' H* [1 ^3 R& U

3 [% E" _$ v: y7 `* I2 m/ q

8 {# N1 \, Z/ X, I9 b$ A vshapes= ' }+ {& Q; n2 \( l9 e5 e

& W* V u1 i3 F9 `+ W- [, I

" H4 b' x) H; a! S( P+ a   9 s, j- e" E7 ^: m

$ E; e; J* ?* f7 k* ^( S, U9 p& t Y

9 V7 y9 Z: s/ q2 |7 e 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 & \$ n/ d# g& b( @

/ _- P2 D; m8 B

# i$ \6 x8 R- |0 a; p& Q1 S) C/ E vshapes= ! `: y# k/ X' n8 p- l" P" ~) ]: w

- R) d- d: m: b" P: |

8 V7 @2 O! `( z$ s: ~8 Z   ' r8 w7 n' G4 S8 r( ?

4 S9 a+ i& e6 b1 t: H' G

# f. c7 x9 P& d   2 E! r7 p0 q/ z8 L

/ r2 Y* T# a' u3 G" C+ D8 b0 |

6 x& T7 w& H$ J! J8 z4 ]7 z 签名信息 " \- K$ m2 y8 L. m

# a3 w/ | _7 |. y$ D

1 t2 l( W2 @, D( G8 e* X6 `, a 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ; b, a7 T& d# G+ ~) @

, s; N$ U9 i3 J) C4 [( Y

0 X1 _/ y6 y; n1 r: g8 ` 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 - d3 @' O/ r$ Y# I

2 f. L! ]1 I$ l. d- G0 J

( l. W( c+ `5 K+ I5 h7 P) K7 C androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 & O( Z4 \: ^4 K& `0 a8 J

/ v5 N& ^$ p! i+ p* Y1 T4 ~

. [+ \! e( Z3 p8 X vshapes= * O6 k" U: p3 t' s& {9 X

0 z C+ N3 [' R: v. _3 e/ p( \

' u4 B+ l3 q: V" N   " d' l7 @- Z: N% x4 U4 m

, |; J$ C9 j4 w& N0 v8 B. k$ C6 j

3 L. ]0 {; W5 E! Y' S8 o/ o1 x& }+ [ android签名的数字证书的一般都是采用 X.509的国际标准。 ( Z5 ~6 Y! J% Z; K

7 [6 L6 A; T; |8 e, K( @

9 x: b3 u7 Q0 Q X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 7 c, Q+ g- e6 ^% v( W

" J Q. k- j9 T* }

" O' V* \! k; m4 h# { 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 # V0 k/ I' b$ a# K- X

' C, a2 D# f2 v# ?

* _& \( F$ ~; r4 r( }' f vshapes= : Y1 Q+ i# O q1 \- u5 ^" }

, K8 N6 ^/ r9 o7 W

% A( @5 ^: V7 U7 ?6 n   # A( }# S. A* [( D# W

3 q _7 y; f7 P( `, A

' K/ }" ?# L& [. e 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 % S$ w3 l, X' o

1 G1 I% F2 X: d; U& {% l

. x. ^* \, f' O! r vshapes= / ^% b0 G* R% c. T# h7 [

* r v C( S7 ^5 i6 e& C. @( A

9 Z9 {9 R, r5 w- g ( M' Q" y. I7 a! m+ K4 n

9 c6 R' ]: |1 A2 l: j- p. J

) }4 z, x: S3 T% J) M1 y; w! [   - N* W5 m3 S; e: H0 G9 U0 p

6 {! c8 j1 c A+ j0 v/ v

9 ~* s0 Z$ B# A 权限信息 ! _! u0 D2 g+ z% s. h3 D

( v7 a# i7 ]; q v- S W' @

1 e3 |) @/ D* Z8 d ]" n 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) : l' Q9 V/ ?- I* l" ]+ V; K, q

D N+ l% P! q6 x* I

( X( h# [6 Z) D. V) `( ~ android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ! H6 G/ v2 r( I# c

) O8 r0 x" q7 X7 w7 U, [0 q$ B

* O; a. q1 \$ ]( A& H" r4 X! E vshapes= . a# b Y' s; {' K# d3 M6 Y0 s

7 @2 C6 o/ L4 l6 i: |& F" x

2 B2 M" D" c7 z   / z$ ^" k3 m9 d1 D- W) N* x

$ G2 v1 q& v7 i" F; ^+ D' U/ Q

, h1 ^8 b7 a4 h 下面对这个APP的所有权限进行详解下: & U" P( o8 X$ _/ ~- A" ^$ A2 c

0 O# O$ q; j' z3 Y# @5 g1 O( f

, P$ P- ?6 S. D android.permission.INTERNET :访问网络连接可能产生GPRS流量 ) _0 N2 q. c+ f* r# e3 x

' y3 O, J& A3 P) X( w

) W: F8 a% r8 m9 f android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ) [0 g% H" h; |" ]* D- u

# H C2 g1 J H e# S, a

3 f, n' X$ @# B& ]; @+ x9 }4 a% z android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ; C- Q2 g8 d) l; M

8 K1 j/ S, z( x* ~' z( `

- U* D) h; u- l; b' f% U android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 0 w7 E$ N& a2 d3 q1 d$ x: _2 e

/ a8 c" l4 v8 p. ~1 g: [) O7 B

, B) K4 @- J. L android.permission.WRITE_SMS:允许应用程序写短信内容 ! f8 R. e* ]% u+ C: T+ V

# W0 R+ P9 n" T- |

: h5 C6 s9 W/ h4 }# B android.permission.READ_SMS:允许应用程序读取短信内容 + @- I% T ^/ L- y1 M+ d1 k

$ C; k% S; r: O+ \; k, \7 E* {8 P

2 { O8 t; g! z android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 . e8 S+ V' E+ {

: {( G! n9 w6 T$ z! [4 V3 K! V

3 k6 S; X' d r: ] android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 ) b. L$ B$ q9 _3 F

& D& ~6 v7 g" M7 C. U; I

4 V7 ?8 k/ B# _/ a android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 9 T& e0 b4 f, T2 }; n1 h

$ e. k$ P% J( J' a! b

# O- }+ n4 ^1 m android.permission.VIBRATE:允许振动 " \* X. b: ?0 f" j$ y

. B# x6 `& s+ Q3 v- K3 i& {

1 V3 V. e; f9 b/ L) s) t, c# i' M android.permission.READ_LOGS:允许程序读取系统底层日志 * g& T* K: t; j' i

' v4 A$ K! n [, W/ @+ V

% o, o7 r0 d+ v8 n android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  0 Z# n h# }% c; X+ ^( @

( o W( |% p' M# M, g3 [

3 U4 s0 P/ m6 d+ u   1 N1 w1 D e# J

9 W' J5 ^6 \% A; M% g

- O+ q, @1 ~# ]( i% X 功能信息 / `; m' H9 q/ k: U4 P

" G& o" d9 K" A l" k9 e3 t

% g6 W2 n$ R! \3 `1 {* R! R. z   3 I6 Y, U9 W4 ?

- ]2 w# n. V2 L

- `* M4 g4 H; D$ @; { 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 0 J. Z& Q( Z0 [' T5 ^

+ `4 b0 R z. s% B

9 K* \9 p: D( N; m- N* ?/ ^ Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 % Y3 a; h; V) O& ?3 h

3 X# z, g: q6 o- b" D, ^$ }

* M+ F2 n9 {/ l; O. J 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 ; Q3 R5 d- L# K# P7 Y

q5 C$ o9 u3 b( d* Q6 _$ H

2 y0 L7 r! }" k; T 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 9 e7 h; g D: h! {2 U' \

$ ~8 m2 W9 {( k7 {, A- W

3 g% k$ L* x K& |/ d. j: R vshapes= 1 _: ]( |5 I! `. p( Y. w

( x) v8 M. \+ b

' ~+ H! K- E/ F, A B. Y4 [& T   _2 a& i f% V7 c; i ^

( {2 Q. B3 a/ f( P. _. D4 p

3 X' P0 I# R$ [ 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 7 B; Z6 Q! Z8 M5 Z

1 Z7 C) T$ j; x4 W9 m( C

* P) o6 ?9 Y$ `) m2 V3 k vshapes= ) |" F' Q3 Y! Y% z& v1 e6 V J

4 u- j& ?6 ?6 m' |6 T, `7 h

1 b: Z6 l, Z# e+ z4 @   # m; s3 _; Y- }- }- O$ }7 H

3 ~+ d/ B+ x& p

9 a5 g6 O' g1 j% U. a9 T- s lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ; h& K! h% |1 B9 F, J/ o: {

5 f- _' d4 ?! a/ S. F

/ v5 o' s5 P/ }6 _7 W7 W vshapes= 3 `- ?$ X) P4 k' k

$ `" i$ C$ C8 d0 a

: z+ e) k }" V0 x4 a# b 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 7 W! D# T* s) q3 ~# {: J

+ C/ |4 M$ F/ \% e0 r

4 @2 i" k8 o8 O4 D. A$ N( E" y vshapes= : O9 K9 v6 ~2 p' u0 A+ r3 _+ k

- s# c5 t- K. U% W

% x) b r1 A' O, `! R( y   * v3 X# h* D' |4 F$ n. V) m

. J" L: [. S; e6 h0 a0 N: r

. w5 D2 n2 }2 x( g; j 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 " ~# @( _" Q u% L/ u. w

, T8 M G- e7 m

; [* y+ B% b2 {' O7 |: Z LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 6 X. e ~; _8 E8 w( R

1 l9 T9 B9 _4 |2 \( ^) L/ |

8 p* Q% @" |9 ~, ] 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 X1 ^2 l7 k0 f# E: \- ~5 b0 {

& I% B I, L" {; Z% p _$ t! d% O

& X4 z8 c9 I: ?5 S 源的luasocket代码可以参考学习下 8 f, c3 R7 O4 A7 n/ t

8 T1 C! n0 t5 h- J5 S

$ u& G0 @$ x I% t. z: f5 Z https://github.com/lunarmodules/luasocket . g a x6 B# Q. A3 `

& P! D# P6 m9 b+ _7 C

4 h( `, K$ M! k1 E1 X https://github.com/fengye/luasocket V7 h0 o+ V) z2 |9 d' V

% v% p' v/ K5 F- P3 H

; A5 ?0 @$ Z+ ?$ @   5 L: { B4 @9 k$ b- `, y; m. l

5 `: U8 }& ~, ]6 ~6 j s# }7 Z$ Q

7 D- B* \' _# u U$ Z) u vshapes= 7 _; S1 |7 t1 } f( M. b

7 q; u6 l1 S1 y1 h# i: G

, u/ W7 d- H$ J# o! p7 ^   ) p) l* p- N! b6 U

9 r0 d3 [- c! l$ z6 ~( L8 _

0 L5 h, S# Y* r4 k   7 Z! J5 D8 ^( ~% U3 K- Q0 u

" i8 I+ E, j& M6 B$ o8 N$ b: V

5 s% u+ w7 a# e! |: D [! W6 [ D 总结 6 S3 V* d8 x& _ [

3 @( v% Z R) g

/ T! y8 @) S5 `0 _% I" e& G 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 2 I* ?; f! S& K1 ^& S

9 }8 G0 m- \, Y5 C

: W7 @4 R2 |6 o- x" T' r# F T 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 8 M* m1 `+ c! ^1 M

# x' `4 [( H* \2 R/ k, C

# {+ K; b+ x( l4 s9 w 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 7 R4 x( u) F: [) j! H4 @9 N

1 p, ^* m8 c" F; T% o. y& w

1 n$ P' q: u" C0 p1 o+ l 结束 1 |* ] s: G& E$ c* ]* T; Q! {3 ?

/ L X ~7 E9 b1 L9 O2 I) T

; W, j3 b' w6 A3 [# B% k% C  【推荐阅读】 8 G! Y& H' n& M" C$ l3 G1 y. g B+ D

5 r9 T- ?1 W* O4 |

- `5 I- y* |- Z: k" T3 n 对吃鸡APP的分析 0 p- T% ^1 D6 P; c6 X2 \3 [- K

( @, a4 r' {1 U1 B! C* n0 X. {3 M

2 b4 P. p5 O2 C2 z6 }* h 你需要了解的APP安全 / k) K* m! h' m8 p. h

: B3 X% D2 `6 [$ D) r4 a q& }

2 F5 ~ P1 U) ] 你需要了解的APP安全 , K; O. ?" u7 u" r( c1 e9 S

4 P; W9 V/ R- Z0 q5 \' {

. D! m& p9 z, X# o   ; L6 `! k2 j& F$ K

回复

使用道具 举报

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

本版积分规则

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