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

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

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

0 a) Q+ E$ Q. y) C6 m! W 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 - H5 P( d" [/ c( V w F' ?

) D1 n- a( |2 v. V+ C# x S

* J) U7 a+ |& }; k5 A vshapes= 1 d. x' m( P$ ~9 r" V

+ K! @# {6 F8 t. P3 a+ K

_% t5 y- M% y# n/ b+ n   ; K% P6 M% f3 w( E

3 q V' Q4 R7 {* y

( J8 T, Y! I; T p: Z: F3 H9 K& W 下面就以开发者角度进行解析下这个APP的功能的实现原理。 - y* J* u8 ?; V) Q& ^7 P1 K. f

. D5 t( N! }0 g* _3 Y/ B# k

# Q: H* {" K* R5 i: }   D" x- i7 k3 o0 L# k* M' o% P

! E0 \3 w6 M- B9 r7 D! ~

+ s& s+ A( g6 v- R; i 基础信息 ) z9 ^! K( M# I: e

; C' j( h F( U6 Q7 `' f' }* M

. {! }7 Z' T: l9 j 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 3 M9 e! Y8 v* {( W

* c1 a! ^ }4 `) b k

* x5 c, m, l6 A" ]' t% C& H vshapes= 7 }7 p) ]' X g' I) G! n4 S! g4 W

6 f* A6 x9 A- W- n* T% p/ i

+ A3 L7 `% |2 [+ p   3 v, ^8 D* N& K* v- L) g

- H' X6 k( P# r; j4 D* n$ _

9 N. R' G9 E. j) B k+ f4 M: B 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 0 \4 } q8 C% R- k7 X

" K, {" h( m2 Q

5 S6 `$ A0 }+ S9 T vshapes= * C6 B, G8 j& O8 l2 Q+ G6 Y

8 B; B9 m5 b) q9 ]- k

8 t4 E, C0 _% {   , ]: Y8 G. w* T9 C+ X

' A, |# I' _* l1 U

) }! ?2 k3 q {: J& u 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 " e4 x u5 Z1 g- u

! a. v, F# p5 s

6 W; u9 R$ u9 {! e0 M. M vshapes= 1 Z5 w+ R- c# }; |2 c; H

& n2 n0 J% Y/ D8 u. k0 K

; L; z8 ]3 O/ [3 o/ _9 E+ {/ F Y   3 A( W* k, c9 P: R' ^

7 `2 x- _4 {9 U" K! R m3 l7 J( `5 a

a5 B% ^0 b# u, F8 I! t 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 8 D0 X* }4 w7 i: Q

. }) W" W4 e5 g/ X

0 G3 \$ n8 N8 Y' B% R3 r" e3 M vshapes= % Y B: a _! a; m. G1 h3 i

5 i! _+ d! e, n3 m+ c

; ?! M8 s e3 W! N) c, J   8 z5 p4 b) q; |. }$ M

* Y( c, p: J' \# R' B6 n

& `7 b4 W$ w0 [2 U 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 & |$ j3 P' f+ D

+ u" `7 F }! B% V3 W' V2 R$ u: {3 |

% p w* m; n5 f5 y/ T4 k vshapes= ) I) s# D, z9 ~$ P

/ g$ g/ M- V" @. m1 c

8 d$ S5 D# d$ e% X   . q9 f1 e* |; o! S( ~6 j* ^

: p5 S9 ]. c+ W x; d

, z& g0 w6 B1 L! F$ e) S; i   ; X* a5 F- U5 z, N7 l

+ y" g8 l/ s3 Y0 @" X# d

" g! K% U! m" Y 签名信息 3 r3 O- Z S) x( W8 E

! M2 J# X9 {3 L' M5 u

5 U* ]% u0 f" S* v 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 4 U" z: s( n& Q8 t. m. R2 ?# ]) d

& E! _# m* q4 L5 u) e7 u

, x( s4 k# [8 B4 ~# a9 }3 q 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ' _: p7 X- Q0 S

# q4 t0 P4 d4 u B

; R3 r6 s% `' l androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 f8 k" r$ L! N* b, M. v8 l

7 d4 S1 f2 |, e6 o/ t

0 H: |& y& g8 a/ ^ vshapes= 7 b) V& z& x; E

0 m0 x4 ~/ n8 Z! y" W9 }

1 I' w5 }) P0 m6 Q5 Y1 \; K   % u8 ~6 p i9 ~9 j! _( I

: W: t% j1 {# V0 f

/ ~8 M1 w# G9 A% ^5 b! P; g android签名的数字证书的一般都是采用 X.509的国际标准。 7 o* V% Y5 y$ R* R& ^4 p# y

: B. r: o/ w( q

. N* }0 R* N/ _0 T! }( p X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 y8 c- j$ b' h

" B& v8 _/ o# }

6 ~* b, p; p( T6 C7 y; g 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 , v2 F' T: J6 o$ u

. k9 V6 Y; j# N1 i; d

4 ]" ~$ O5 Z* \ vshapes= ( i+ R- i& X/ l; Q" k' O4 Y

9 }8 Z7 w! c- y7 m8 z% B

9 g9 J& K& s) d) \% x   7 ?' u- Q/ _3 [" Y$ ^2 o+ w$ U! [, [# L

7 ]) O# a* W3 U7 r8 f- v

' M! B L; a7 p# u. L# Z 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ( G" |5 [: v+ \5 K& o' J

, A8 h8 }, c4 b

0 j) {" Q# }6 _) i5 U1 V vshapes= + h1 g" k R6 e1 ^. ]) t: I0 d4 h

6 ?) j" J" h& h4 I

% i5 s5 A7 B7 e/ l2 y W, D) O 2 Y* N x/ H& \3 {+ B/ `( D

7 J6 X0 `* m: P' y: g7 i

( h) ?8 Z4 D8 ^2 M6 }; o7 p8 R9 V   2 c: _1 X2 w. H$ t& R

) h* V" q, r% w* h8 N) h0 C

x& d& O: Q6 s 权限信息 % l6 B4 [1 ` r0 G

V8 Y3 `5 V. C Y, [5 w7 Q2 q

% i. m. t# G! d9 @ 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 2 Q! d E$ W! _( s k2 Q9 n2 g

, S" b, F) X2 H3 u# O3 U# P

) r: d9 e* @4 ^6 s* \) l% q android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 * k+ Q1 w) r5 y9 |! f7 j6 w

% y* d$ n/ V6 e3 J8 D

5 W/ g8 ~2 r# \' G, y3 M L vshapes= & V4 Y0 J. c6 r. l$ M& o2 r

# A4 ~- j+ q( n& X

6 t5 D- @& L, J6 z* H B   2 D- [9 C4 y. r+ r0 b7 m; I

4 }; m6 ?9 s" K% z: x& T6 T" p

* n% i# f* w6 E4 F 下面对这个APP的所有权限进行详解下: 0 t" {+ S7 e' F

/ t! k9 {' @7 s

1 v H% E- w. M! R- W android.permission.INTERNET :访问网络连接可能产生GPRS流量 + v. Q4 c5 J0 y0 S

2 j: W, h: c8 L- P! h

7 I5 A5 T8 K* H7 f android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ) l _. Q; {9 l3 u% u9 F! S

' f1 Z8 O2 S Q9 [

$ Z6 I2 E# j* ?- \4 v' n android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 + ]" Q6 F. B: k X

/ K$ ]( x/ _- k* \+ ~

. l! j+ c7 H. L android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 5 P- z+ ^: f+ x: c/ a: L

/ g8 ?& S4 W) q% C

3 A3 F% _2 ]' z" E# L% G0 g) t android.permission.WRITE_SMS:允许应用程序写短信内容 ( R2 `7 b1 T) a/ j& K! L

1 e. \# m" U; i% H; j

- g. y5 G7 c& E android.permission.READ_SMS:允许应用程序读取短信内容 ; E- R0 h' J- s' y

$ ]# h3 h+ i) |# [ X6 M( G% v5 _

" C4 d6 p+ ]: U; s- I. x android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ! K8 U. [9 D# }/ d; q/ `- N4 N

* |; X5 B0 n' C( R6 ^

8 w0 a! Y$ R( h/ ` android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 7 V7 k- q" l+ E& p' Z+ K

- H8 f/ j# A& G0 P5 V

( ?2 S- t! z l5 ^9 C android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 9 O9 o3 k0 T8 A$ s& N

4 ?0 n- d) l0 @0 m1 @

: h; e- w; x7 p: L' M) e0 c android.permission.VIBRATE:允许振动 5 f+ h7 z7 s: r# J4 e5 ^3 M W2 [

! }7 }0 d" \2 i. K$ ?& r+ @; P+ T% |

: H" u* Z P6 L% |& s" u7 y1 E android.permission.READ_LOGS:允许程序读取系统底层日志 W9 @* N- l; m% b

1 {; A3 G8 _$ j+ {

& m+ n1 _/ [: u) C- E/ { android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ; b7 C0 ^) b+ A4 ?6 m' `) T

g/ R6 _6 F0 A; C# F

/ k6 Y3 }3 J# F# s" ?; Y9 s   7 ?1 ?9 S4 P/ L. Q! _% B5 e" g

7 Z3 w& p- x# @4 M/ K

' q# M' z; Z# K) Q C" u6 ?% q 功能信息 9 d7 D Y8 U+ N! `, q* P

/ ] k) Z$ w( H Q

3 a3 j7 c/ y1 P; x$ ^% \   : I# x' w5 c" w- X3 m+ l

8 c/ S" ^+ W$ s7 I. x( F7 B/ U7 s

5 G! q/ L/ U, C1 ^& \# z( [ 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 5 L' w# G) h, ?7 r# o* E/ e( q' r

$ G6 ^, F( L; \' P4 J6 G

, t- t X9 C: s0 M. `& u9 F! Q Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 - J8 S! K$ M# q$ ], @

" q- u) p7 t( V/ [! G

) q8 l: W+ @9 K8 A8 _ 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 # ^8 T M0 I4 A5 W

" ^/ P" |8 Z& t

; V, B$ T; z z# u H3 z. K 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 " w1 g! x6 E- ?& A5 s

: d. _! v3 P+ E5 L/ }

* Y8 c+ k/ I+ ?. z$ k vshapes= 0 {" F5 F/ x$ i& P7 c5 ?

$ Y S. X0 F1 c# c% O

5 e. F1 R8 W$ V' Q9 }) l   # ?" K# C4 L6 S; S6 O" @7 n \$ E# b

4 w$ P; I$ F2 c

# b+ A% E1 y* U7 u2 ^0 \; I 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 + h; _8 b' y2 K b$ V( q

6 e4 W5 f! M. `4 `0 Y) j

- M) `7 v% e1 a/ P vshapes= 4 b0 @* @, O0 ^. B$ V) s: A( p. J

7 T6 Y% Z% f9 t3 c9 I2 X; d9 [- g

# I4 }$ o' e. ]& {9 w   2 G6 y+ d3 E5 e) @' _ D# M( o$ u

3 R, J! p, M1 \' r I: d* K6 b9 ~

, O& d& G' E' N( y, @, i2 \3 X, c3 @) e* n lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ) [0 I5 ~# J" q% m

9 J C. l2 s5 H2 g2 B0 Z% O

' h/ o [$ R( X& B* ]/ Y( P: m vshapes= ; ~" g0 U3 W) V& M) D

7 t9 V" O* v! X" M

: v j8 s+ g4 O" X0 O! q8 u/ Q4 | 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 2 f. v9 T+ {# r1 I; U! {- c

. S8 g6 M! \; O' @

# \7 [* x: f, X5 Q9 I vshapes= ; C- J4 x9 e$ a* H. h, h8 {

" a3 k: y% T8 @2 ?$ H% G

7 Z/ M" \5 K# _5 e( l   " l0 @$ t! ]+ K0 f/ ]' {& W( F. J

9 h* _& M; X* W, n, B6 y) d/ }

2 B6 Y. C8 X% O% G: B 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ( i3 h+ ?5 a/ a0 }) i

0 W# z. i7 x* d2 c5 G

a, [) n E" ?0 [ [4 H# i LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 ( [, {! e2 B3 }8 ?3 r; h

6 c0 L, i7 [+ M( m) c, Q

( {4 S2 Z- i S3 [ 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 2 H: p* X" w2 _3 v9 v

' c) }8 Q2 p+ t. ~! y# y

4 T( {! Z, w* j8 M 源的luasocket代码可以参考学习下 7 o8 y9 Y, y; w2 a# k

) G, @# S; F2 a. U* c. {' }

4 ?0 o; j" V3 o& M; H8 T7 c https://github.com/lunarmodules/luasocket ! y7 c5 A2 r* }

( Q& [- y( ^+ k8 h

' F4 ]: o8 X& g. o https://github.com/fengye/luasocket ( ~7 N2 L6 x6 E' S& V' S! E

$ C) S( K7 o( M* v$ m

! u/ ^& F7 f4 c% ^- G   $ A& E1 C) I! g" ~

' z: b G# A! q8 K7 C4 o( E9 `

I { T( }' k( s9 z vshapes= # ^# u6 P. |/ A& e

" V; ^! ?2 P% v' n+ n) i

6 T7 B8 j# \6 |0 P   1 V! Y; N. @: z3 P3 ^( K" [

# p H: F' Q7 O

C& Q: K+ [1 ?   c0 J1 x) x5 e B& t& ?% L& k

0 g' q/ P& A) a8 G) |9 H# d8 h

T. l- K4 B, N8 u 总结 0 b/ W+ L) i8 q

$ Q( `% G! ^/ B! a* k1 e' J4 a3 i

\3 n! k1 ^, o3 w& d 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 1 V/ ]5 p' e! G/ N5 S- Z) \

+ D: F2 O( _- V# m; _

8 N, l2 G2 ?6 R 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 $ ?* l0 a+ F' N$ u

% t( u0 |7 m. B, X6 X) M

0 k2 c: M! {* u) ] 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 6 o1 z, y$ v Q3 D2 L

5 D* [+ i1 E* Z2 t3 |

4 f! H; |- N+ `' }( B( b' B2 | 结束 ! i3 H/ q1 m# @* u" k

8 g: { I9 S& f* J8 A% X' c. ?" b

5 W- Q z c- l6 ^1 |( Q$ s( `! M  【推荐阅读】 i- e: v4 m* {! L2 j

5 `# K! v$ o# U7 k) f" h+ e' G

! T2 K# _" d+ S9 E; \ 对吃鸡APP的分析 - N% q P* _4 V, Q# `

; X* L) k3 @2 l2 S7 q

7 c: ^- N$ p. c/ O5 x& H8 p 你需要了解的APP安全 - U. Z$ j% J- k8 z" Y" p3 y& G `+ D

" t4 f7 }$ K# J. m' l( w8 s

# w2 `) M2 ~( ^+ {6 o) T, `" P# I) D7 |& U 你需要了解的APP安全 1 o' p" W/ h$ X5 u4 v2 ^( z: q

9 `. ^0 }" a3 ?, u' n

& u$ r- j+ L5 g/ v8 e   # c3 D V; x% o

回复

使用道具 举报

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

本版积分规则

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