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

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

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

! i4 U/ `9 n$ i( X. I5 m 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 2 K0 U$ w+ P$ ?% T2 a! r4 }0 {

8 k2 f2 y0 u2 ^7 [4 T4 Y$ ]0 f3 U

, i5 x) \5 @$ }% e9 E7 S vshapes= . m# n- V. \& X) o

& U$ {2 X. Y) Q9 k8 Z/ K

# Y3 a5 u8 t$ a/ S, r7 _7 o, Q   8 Y+ F9 V' e( T# F7 z1 i

0 w9 D; q7 ]/ \) G4 L! ~0 Z

: q( J5 y" q& m( F 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ) `" q2 z; K* B' u

( L$ S. n- i7 h& _

) D4 j/ D1 w4 S6 Q$ q. \   8 x' n2 K' t( A6 X) A

) n. ~+ U9 y l) A" k" |# h/ v# {/ {

' C4 O6 {: i! b$ H 基础信息 * ~5 R# z* X3 y0 F9 b

# z7 L: H6 s+ w2 a, t9 ~

0 c2 w7 q8 V' H$ q% v0 y 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 & S# @% M4 W6 V I9 M$ }& u+ J

2 F. U! x) Q' s8 W! p

; i' w; `; K9 D9 ~; ]9 q vshapes= 0 I$ I/ V* s( p2 M. j% k* v

2 A `" `* {: P

0 r1 Y; f7 ~6 v) h' B. m1 u$ N% |   0 H, u% v) E8 x* ~

9 q0 x$ {! `" L3 I W

$ [& a8 ~1 q1 b6 w, S# } 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 . K- Q' e- A4 F( U. p

2 D. `1 p7 }3 S% n0 H B

1 _5 E: x1 q7 K2 y) n vshapes= ; D9 k- D% }+ F

# J+ s8 q6 Z4 t# p3 e5 ?9 k% I

6 c! n9 B4 X, y& W5 B   ) B' S9 d% r. A9 M0 u

% g1 n8 k( I0 Q* m) o2 w z

7 K7 ?4 J W2 D/ w 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ) c+ @3 t) {/ ^" `* ~) a- ?

* J& Z8 F( u, g7 b" H2 a

0 u% u# E0 Q9 q8 H8 ^ vshapes= ; [% s/ x/ Z+ f" P8 O

- J3 H. E6 k% f* ?' g3 _+ Z

6 g& e0 I" h$ ^   2 K2 y; I, z9 w$ X. k6 Y3 D! N

! v. Z! ~# G- P/ M6 v& b2 m

8 d( ~1 g0 [4 S5 M+ t 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 7 j3 L7 K# ^* P0 f$ Q' X

6 I! R1 ^% a% J3 m

# I# B# r4 n6 M( o6 _1 g5 b1 t1 W$ ] vshapes= 1 ~ u" Q/ m) [# c( {$ K4 u5 ~' _

2 q" S6 j/ E$ L# @' h; o

9 T+ Q z3 Q# C2 M4 E   . y2 h* {; p/ v: z. [. A& j

) r- ] K, t2 U0 c

q/ a/ Q. u( D8 A3 L% | 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ) L+ x) [4 |( N1 @$ H! n

/ M* r8 q; G) x# q$ M8 b. p5 h

, r* @) Q6 t7 r4 \. I# Q/ } vshapes= 5 E% J* k, X9 l) M/ r

0 [! f: b# H0 o" D2 }8 `

- R* J3 O: N; @) [8 n {' d   4 k" K: |, S+ m1 j

3 y- x6 @3 ^4 n

* \3 o2 _! }3 L7 X2 U5 k; \& Y0 x4 Z5 M   ! v4 C0 c8 {9 y6 L

! K0 _4 D7 D- M

9 N3 k" m2 N1 y* | 签名信息 ( z! W$ p. k5 G

! X. S9 l! W/ r0 V) j" f

! `8 i" L& ~: z D 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 3 r: C5 l0 n3 y' E) H: A2 K

1 N, [- a& v$ y& r7 q4 ]7 _

5 r+ }5 i5 J, d6 ^3 P; ]/ ~& w 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 . c$ B9 D5 _1 Q1 n5 b& a/ H

& H- g" t" p( N3 R. W

5 z) u Z* `% ^" Q androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 7 u' {) `2 a% d& w% I ^

' ?2 J' {: ]7 q

7 l6 |; U% P" V' P vshapes= " m0 J6 c8 P7 @) |( u

9 E' ?, N+ p8 V: E* H% t ?

8 w; R( a9 x/ Q0 ?! g7 X   . X) h2 ?0 B% G9 J5 o7 l& z

# C% E+ K1 `' c$ t3 c2 n

* k& d4 q5 o( Y) [) ` android签名的数字证书的一般都是采用 X.509的国际标准。 ( O1 J% r, F, e }/ }# t

5 s1 i$ q# X$ m+ W0 f

# Q: m* }. d: x3 H X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ) H# u+ u2 y, n2 O

# r( V7 X( v& l8 e1 c/ |$ J" f

t5 T/ o! t, Q2 U3 v5 @ 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 6 b6 N+ o. }' ]

4 F( t0 E: n8 `1 X" [7 W; C

3 d9 Z: H0 M p: H; X' A& u5 u vshapes= ; a3 e: b- e+ q7 \' j; D) {6 P4 k

2 Y. U6 T; d# i

4 [9 r1 A2 T* Z2 z   # p, G: G) b, D+ A$ o' g! l& c

6 C& g8 h) v. a+ G7 d$ u$ q' X

2 |+ P6 ~7 r- X 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 : ?! i$ X7 s6 p" s

7 C; [. z2 G* S$ G$ N

/ v% ?5 b ?- s/ m vshapes= 6 ^# o# y- C$ l2 q9 n

4 b6 U3 _% v U5 W( F: `( L% v

! n$ v4 B4 L2 U+ S ( ]: Z. b$ u# S6 n* ]2 \

% e- i% r* E0 Q' w9 g) Q/ S

9 `; ~2 W& K$ ?   " T m! _5 m, [- r

' `9 ^9 W1 _) z- P3 Z) j8 C4 S0 l; |

8 n6 ^1 ?* o+ \6 X# W+ \ 权限信息 % J! n: Y3 K. {% X! x- S

4 }, J' s* ?( f/ m

! p# _6 T5 b$ \7 N7 j! D5 |( w0 w2 X! [ 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 6 m2 u7 A N" o, y+ C0 L( v

8 `9 z8 M( C% E9 V- s$ o

% U9 R5 ?4 V# \9 ` d6 w4 c android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ' F3 w7 B Z# U5 {5 K

7 I p1 R7 @' n

, q8 D G& v4 H" J. b3 L) ^ vshapes= 2 }! p( n! @) v |8 D% U

; `. z3 }. R. l9 m+ R+ a! C

4 x' n; h3 d3 M3 p   $ \% m7 r2 x# M: x

: j+ B3 ~2 n, r* b

8 l6 E9 m- i" y) |1 h 下面对这个APP的所有权限进行详解下: 4 b0 S1 L- O4 D, B

0 n9 ^3 ^0 O$ M( t

3 B$ B- b& h9 J* W' z5 B( i3 O android.permission.INTERNET :访问网络连接可能产生GPRS流量 " {" H& F3 O/ q

: A4 |, w4 H; k* ?4 L8 w l) m( ] o

2 U8 C$ ^' j. U# U3 r android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ) S; m# G W4 ~( i5 L

% b% P2 o$ T$ C, B8 [/ ]3 m) q

6 @+ W" j' i5 B; K5 w4 A3 d android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 F( r% T9 _2 p7 q" `9 |4 D

5 x$ }6 l, {5 }6 K- }3 W/ F( ~

: t9 L/ d& f! O7 p; Y android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 6 L9 l' ? t6 v" c+ A8 V5 r

6 c+ j1 q' A; N

9 U& g7 F& Z% c9 E0 J android.permission.WRITE_SMS:允许应用程序写短信内容 S" s/ h! r3 E+ |

" I* I) B8 I# C6 A, Q$ L5 v

( ~+ i3 F' w' y. [! Z android.permission.READ_SMS:允许应用程序读取短信内容 * S. u/ z6 I9 |( j. ^- w" n

% T4 @: t( Y% s0 _6 M& Q8 G- N

) z4 S) Y0 {# h1 m, n android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 & P! x, F# _- J; b8 s- f

8 I2 ^2 N1 P3 u

6 ?8 \/ V4 [9 l, V* ~ android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 0 m& A P$ R. S/ F+ R+ l

$ L5 z' U( Y [+ ~5 f7 e

) U& e# o" @9 ~6 {& D3 E I7 ? android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ! E) g5 G3 Y& O J

4 a3 d* e2 C+ L9 o% d" Q

1 P9 Z0 w3 |7 F* l& _$ z9 Z android.permission.VIBRATE:允许振动 + j M+ f& q& A7 f$ B

3 ?: Q( g# R" h8 j" w

9 g3 I9 E# p) C; ?3 H android.permission.READ_LOGS:允许程序读取系统底层日志 }" @ Z& ?# w! g; z

3 L4 Y6 P5 Y0 l( w

* y9 h; @! O2 G, B android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ' h$ J5 i1 j7 c8 b7 o! `5 r L

* b' q9 C7 Y: J( j H" f4 V6 {8 _6 G

; o; X/ [ g& v! \9 }# Y$ C/ k+ K   + h- `# b+ u) o' y

/ [9 S; p" u8 [: D, ? k m9 g( z

5 U/ S& p8 i* a& w4 @, [ 功能信息 + e; @! W& z6 X- k. g8 z* B

# o! z ?4 i" p2 ~

9 K8 Y. [% j* ^$ a' C& D   1 v+ V% x& h/ D3 T) m: ] c" e

4 i4 H+ i8 V9 E& Y8 [0 ^( p7 `

3 q# A- K0 R! w6 C% B. \ 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 ; ~/ w: Z! w/ E! Y! s

8 E; [2 G/ P7 C

7 E5 T) I( {0 ? Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ( Q! R; o$ g/ S9 G" T6 T1 u

1 E7 U; q+ ]* E V% \

6 J( i. x4 X" w; X, H 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 ! p# k$ j% I# ~2 t

9 G+ \9 {' N2 [0 x( ^1 u( I/ p/ P

% l+ W( y* k" S2 D2 a1 Q 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 6 [/ }5 t8 a5 e' m

2 j/ A! Y+ N) G) ?; P, G; v/ c$ m

4 r% u0 a2 [; x1 W. F: v vshapes= + w9 }5 a5 h+ K6 W

* Y4 K% P, Z# j5 [

) r% z& K: e7 \; v P0 J0 b   1 _! O* x3 L& E" o( f8 ?

# ^2 c1 ^3 B& J( L6 }# @

" i ? N- A _4 r 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 / Z6 V% u* ?7 ~$ h+ k3 W3 l

; G1 ]% a% |* u

& G7 J8 C3 [6 D# F1 g! C0 t vshapes= . A, d) V; S u1 B x; f

6 E* y" g n8 X' y

0 T2 M1 n u6 K0 n- X7 C, P   - A+ O: Z ?, A% W) q/ j

, n& Q, y' v! ?0 n3 {9 j6 ^

5 B1 m: E9 U$ l+ } lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 5 R9 @& i ~; N1 N# f

3 w: W# M/ Q3 h

5 \$ p" p; f6 o+ l3 @2 ]8 g vshapes= ' K: c Y0 a! \3 S* t: c

6 L n' |4 T. }8 _

4 M$ c) U, k s1 a9 t; V" i 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 : \2 d# Z8 Q1 B% a% X/ g3 L6 ~6 _

* p& s, `2 N2 T1 I

7 e4 ?. T5 E; ]4 n/ |/ u! }' z% y vshapes= 2 }. [, M" |( O* v1 z0 E3 n. j

B1 V: C, K2 S z

. C7 Z1 P7 M( W   7 `; s& ]: A9 H' J/ N! p

6 A9 G1 g* a5 q

( U) @- r0 G6 M; B/ ? 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 6 _; V* p; M- l+ P+ Z) r5 I/ r

$ l1 S9 j1 n& N

) a8 C- j" V/ D' U LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 # i3 [8 ?# m+ B8 b7 w" V% v# o

% w1 F0 X( a4 E

- \: k$ I& _( c+ T5 ? 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 / m O. k! {4 o; p- F$ A

8 f" R, K6 |: v

: m9 |( B- C% i6 O 源的luasocket代码可以参考学习下 ) d5 y7 u- R/ H8 ~' e, D8 E# x

8 {9 w' l- y7 O

3 H3 J* f' _. x+ `, x9 G https://github.com/lunarmodules/luasocket % [1 M& O% n% C; F

* a f5 O; P' @7 D( m/ Z

" v! U+ a9 j# v0 D' A( e* { https://github.com/fengye/luasocket 3 v7 g* u5 ~% q; n% s H7 U

! G1 n4 ] P) M2 R

2 s% o! s9 i/ E3 s' O   3 ^: z1 \4 n# u( R6 ]# {; V

: a% B8 N+ ?5 R( y/ |/ ?# O

/ _1 y* }: Z: {" i vshapes= % u: H! e1 m A+ Z, e( I

- z$ ~7 T; M* ]! t) J" J. J

9 W+ r% ?7 s# _) f   - i6 ~+ [' c% ]* G

( p6 c' u5 T$ A5 S$ R3 v3 R' Z

/ W5 ~ H; R( T% s. J   $ A; t6 M6 a9 C b4 o

1 g% e! L9 u0 u X% a5 ~# X

6 F' m* T7 {/ w 总结 5 W4 Z; v- w. Z- I6 \% \% ~

0 W' s( A* Q) g7 d! `! |

+ F1 B8 S8 O1 X9 O& M9 Y 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 * u _3 z# G' s, C2 ?

& w. R9 o5 N# d, l# w$ O" O. x

( N2 Z& J; m$ E' |! _* J' o8 k8 j! A$ V 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 : ^0 D$ j( b. H; U0 T

( G7 I- R3 s# j; J

5 E2 u. \! f5 l7 x+ i# W/ J 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 # G% {7 q; S2 e

) n: m% \6 v( G+ P

* s8 L" q( h% f5 R }1 l3 y 结束 $ H0 `' ^3 r _! i5 J

6 F& M) C9 n2 c3 D$ o8 e+ h+ P3 {

. z0 ], I' l& A7 d5 f x  【推荐阅读】 ' R/ x7 Q2 F9 ?4 Z( [4 K

( x$ S9 Y9 X4 d! [7 \8 }

, @% q9 A f3 g& [! t, L 对吃鸡APP的分析 . E) j0 Y% \* u* y

7 }9 ^$ t# s7 r+ O- D" H

) N, m( G- M4 k7 L* V3 v 你需要了解的APP安全 ) e" L) O: ~( C( s0 h" y% B

5 i; e3 s! C0 L9 x

r4 }8 Q5 s3 X$ R6 @% t1 R 你需要了解的APP安全 / w; d# b( A9 c3 M9 m

) J0 a4 A- |1 o& D. M. p1 {, v

/ J# \9 ?9 z! p; x+ W7 K( z. G   3 m/ f9 j& R" ~ g5 n

回复

使用道具 举报

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

本版积分规则

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