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

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

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

* }( y1 A, e0 Q. c# ? 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 : G( a! r0 U% T) g. J! z+ ?

1 U: h. b$ {; h8 Z5 l0 B: v

2 H1 ^. s, a( d vshapes= , B7 V7 k, |+ q% H

- k3 a" i# Q* z' f3 j

9 q6 |( {5 t/ Q/ y3 N5 x   9 U& H: C( R; [. O: ]8 E6 k

* s1 J* k2 ?) [! O

! u2 Q* V3 J# D7 N! x P 下面就以开发者角度进行解析下这个APP的功能的实现原理。 3 }* P. x" ]& a+ p- s9 {7 v+ M

# X) r! u& s+ J, f

6 N7 ?1 g; U' W* {   + l4 v$ t% O! c4 }+ X6 u9 @: u

; r7 F8 I, g- Z

. L3 ?$ ^0 q: s7 a 基础信息 . \0 f$ t& U2 f+ ]6 c5 k& z

: ?3 U! m2 V& ^9 @1 {# z5 i. E

* m- l# b" }( {4 F# \! I8 m 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 4 T, L# o5 _" S' {

# |' T/ R) b0 D/ w6 ~# R

$ X' v8 o. S! x& \" k; W vshapes= # ?' m H% l* m( y/ O& j8 e+ f( f

# x, s# v6 z7 h" A/ m' a Z, ~! a

( a* f7 o* W5 b, |" u5 ~. j   0 `( N8 D5 Q4 q: u- h

* K( T3 V. o1 T. E" l* S1 [; ^1 K

2 n. U( U, e- t' O1 E- q 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 0 L2 u% Y( f$ Q

, U, u# u" V& v4 ?1 e1 ^! c) F

* ]! h' z+ V/ z; R4 h" P7 s vshapes= 7 K& |6 x( v3 r5 S1 s7 d

; I! o9 q x% Z: i2 Z

' E/ ?% [/ q( `# ?   # W( S- R1 j! x1 f$ J8 S

1 n' ]! C6 q6 t. |+ q; M, ]

( c* V6 @; S* O- k* F! ]# J, Y4 G8 I 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 5 Y- z2 {% R% w" Y0 {

$ y' K& ^" S9 n9 q, @

, D" C9 Q' {6 O% B5 l6 B vshapes= , E1 M5 D* O3 h3 G: C H

" l, M2 @3 ?* g0 N6 w: k

9 T" n1 W- Q1 v   # l3 t( h$ F |; p( j) F

9 i, Q. O% _5 |2 o+ m* c: _# W# L

6 {( P1 k8 g0 x, ^ v+ u 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 , b3 p8 X3 W8 d3 J, a

" L/ `1 P* Y8 }& X/ _/ q

0 t$ H/ {/ o3 C/ |! x vshapes= ; v* P" d6 Z# _8 _# A$ m

! O! @0 a7 I; }9 l% [

& O5 R( ]) {5 W0 j   ) J' c7 ?: a8 Q H; Q h

9 z7 N+ l' l5 E/ q6 B

: C$ `$ L7 E2 J' F! q 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ( H; O+ ~ X+ ?0 H( X, U8 l

& U' G- s. n( J

/ v R( ^4 j# D7 K vshapes= k" Q" p$ _( w$ B) r6 h7 W

K" z$ h3 l: _+ Z* A

" m$ w$ c0 ?' m# g( Y* W   $ \! n* p4 ]; j- I0 e& S6 U8 [8 ^" }

. b: l3 u4 O/ ~1 X

" [: k4 ?% s& j: n$ E6 Z/ L   / g3 W# l6 x% O

, j7 Q8 L# H; g1 g% ^0 d: n" }

1 G: _$ b# B& l1 q/ t; E3 S 签名信息 # t* k B4 ]9 `

# ]+ D, F9 i$ T1 ^4 ?; x+ k

- F2 k6 M7 N9 ? 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 7 t% e+ S3 W- @" x

: A' i$ e m2 j! C% I2 _

9 A7 p! e4 i* s5 [5 E" A 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 / _6 U# J$ V0 w4 T- K

# b5 ^9 R) ~6 @

6 e# G: |+ g5 r$ |& Y6 ], R, A androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 + F9 ?* e5 V; r" s- R# `4 Z8 d

7 J* I0 f/ e) l$ p' T: w7 E

( o$ V+ D$ a# R0 a" ?, N vshapes= 6 y/ g# j/ }4 P/ V6 @! h. z

0 R0 G" H5 F' \7 I# e1 }1 E5 N

8 h1 Q7 W; x; y- H7 c   , a7 u% ?8 R$ [# i, }% _

1 j! p2 h* q1 ]; i/ n. N# k4 z

1 B% V2 g! G( [- s I android签名的数字证书的一般都是采用 X.509的国际标准。 * x0 ]0 z2 D% a( B, R

& v& D7 m- `8 v" c! {0 G. i

$ V. d# ^8 f7 G% x4 J) r X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 $ m# m* ~% M, Y

8 z2 T2 K- f$ e; b d) s7 w9 X

- t, j1 s- D L" G, F3 j 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 & |8 z5 ^* X: N

3 x7 y @. {. |- Z

1 b5 d! z- n. {( o, F8 V vshapes= , `5 O9 L3 V$ c1 W8 m- _

6 Q5 k1 s6 A$ J9 a4 A2 W, T7 z

, Y9 t% J! ^3 F: d" R0 ]   9 p1 m6 k0 I% U5 A- |

3 y; S% f' B) _' M; A

; T: q5 E+ r9 H* [ 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ( d1 w5 N$ q- e/ w$ o: K1 I" |' o

* } R4 e2 P2 L- ^

: A# S+ r" Y) O$ y vshapes= 4 l) Y' Q" i$ ~/ P7 q5 A

5 z) X- P2 s" x" n" ^ T

2 k/ K8 k+ _8 H0 i - g: P+ ~; h0 `

( G ]3 A7 e+ {! _. \

& G& ^# u' E* f" _   $ H3 n% ]+ I) S( V- e' @/ R

+ @0 W+ n, t$ y( e

! o6 J4 ~1 F! |4 x" A 权限信息 : Q& W4 B6 M: i

* {+ d* h! A% |/ H0 g. k: A

: C" x' D4 J) @, L! s: K0 C/ N 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) # k! z' `3 u" Y. t

8 I* ~$ Q9 e/ ^6 h% m. ?! }

4 w, v$ [/ }' e- P( L3 t android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 + U, E1 _6 y# o- ?) ?: O

! l' o6 o8 X# _& p+ |4 J# z3 G

+ W( D& G$ [+ b+ f vshapes= - N9 \3 j% O! E% e9 c

5 M0 N2 P) ~6 @

_! W) \ W m) W, G( Y   3 M j7 x* H+ `; E @

8 n R+ v) N9 ]% V& ]+ H

! g/ N3 _3 s4 C/ i: l 下面对这个APP的所有权限进行详解下: - A( p4 p& g9 z( L7 T+ \ s

4 t# C5 R- i0 }6 d3 Y5 P$ C4 H

* v3 T) Y: r k0 T& ^; E android.permission.INTERNET :访问网络连接可能产生GPRS流量 : J, V; N. b l& w+ g

. y. W9 A( m6 A; l' d9 a! A

5 v$ ^8 h, I8 m% `, X, \* J android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 $ l# p2 B* H/ z( M

- u9 d) o( i8 m" p7 n

, D9 q0 X: S' E) J2 ?5 W8 H' _2 z( ] android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 3 L: v( F9 K+ W9 e. F

6 h& Z; n) u2 \5 d' @

" a- @. c+ c6 F5 ?( @$ {, l: V android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ) e, z3 \- Z* t. |' N, K5 O @% U3 C

% K% e4 | p5 M' |% q

8 a$ Y2 N; p2 k2 R! H, _% D android.permission.WRITE_SMS:允许应用程序写短信内容 / {$ |8 J8 u% \9 z/ ^* ^* R, h

2 q6 A S8 n8 }% T

1 }# d& S8 e3 e" v, P. b android.permission.READ_SMS:允许应用程序读取短信内容 # o* V4 J& K$ J2 u$ I( J) A

+ C$ |% i3 Y4 s% o- ]

% K% s$ a. N7 l& p: Z" S android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ' m, A- ^3 o3 d/ Q: r ]( I

9 e4 [9 b8 J7 |/ f* Q# _/ p

6 S" K3 G3 Y. a5 z android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 + ~3 y+ t- H+ m6 C* ^% c. P

7 @/ [% q5 W( l3 s) @5 b+ t E& N

1 n0 w* g; x6 V5 h0 G1 y) u( v android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 6 T% E) ]- ]- d& t

]6 O( w5 c# c) q

% ?9 z- g. C w5 A1 b d android.permission.VIBRATE:允许振动 $ n$ J5 v& l: u; Y& c( H

$ Q3 ?; F* h0 k6 v9 ?1 V

8 P2 M$ B# R. E android.permission.READ_LOGS:允许程序读取系统底层日志 t4 h) {( J# s; x

, K( H- N( k4 Q4 F8 D7 z" L

- X1 t$ m6 ]' R; K! x% T' { android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  / c& f4 D/ g+ N" `8 y

9 q% Q1 A+ ~" w+ _, H' g0 I

* d7 b, h8 q9 ?, w   " W% ?: ~; l9 ?( P0 ^ d u

7 e) p9 ~ q5 P& y

6 u: `# p% k. e; M$ ^& N5 ] 功能信息 ; E* g& i' N2 h' w

& {) M+ [+ h* N9 D# Q& T

2 n# g1 f* Q* B2 k   $ H. _3 `" x0 } P8 |# `

) F j% t/ r- k6 k+ ^" H0 Y" z# {

" n6 Y" q _9 i/ | 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 . U q2 H1 O! S

. F% c; q# `# |

, W s3 V' p3 c+ B; q# @ Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 2 C" M! ~+ |0 A& u

+ {& ?# }: O% M; d

& J# G' y* S6 `+ x9 s 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 % n2 C5 ], o6 O( J

% _2 n2 }& I, i/ _& g

3 b/ n @+ C" X( g5 Q% N 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 # o! n F* S @4 E* b P9 \+ H3 Y

# J. d( G7 b6 k% Q+ P1 F: W+ m

1 v1 @- n. e$ a. V( [0 f vshapes= , p1 |2 z: j2 J- G" Z1 U

I3 l9 ^; N0 N- j2 c

) G& I5 }" S0 m+ \8 {; l' r   X# l! k4 D$ p0 E0 V/ G& R/ M

9 ^* U. O! ~5 q6 u- S. Q6 X- r q2 S

+ k: z3 d) L; I( N+ ^* h( Q9 h7 ~ 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 8 a, h4 a$ u! _! C7 \; j

& @. j5 V3 M3 z1 C3 ]8 x8 Y+ o! J

9 k& U o! ^7 |; V# B vshapes= ' u) S |7 h3 h$ e

3 }0 ^% f Y% K

4 Q& J4 `3 T5 X F, a2 [   " I) s9 S# R+ P6 H5 Y

9 G: T0 v1 v0 v3 X

# `9 \; G4 t& f# j lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ) T, b& r+ J }6 N- e. R

" o( S5 G6 F$ ^9 q6 K$ K& u' E

- E: o# T0 Z4 I% e: n vshapes= ! t) E( o* U) }! O# j, b

" l5 m! v5 K4 p8 N! b( k F+ u9 H: y5 H

1 z' w7 S/ j$ }6 g9 p X- I- R 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 ) L9 D7 ?+ P8 @+ O/ k9 L1 u

: m; K0 [0 `9 u; Z6 B, j8 _* r* H* ~

d; s6 B& v4 X {: u# [ vshapes= ! p! O4 ~5 o& }0 u4 g! r

/ C# f# j$ }6 j. [4 a, I" P

6 D7 U$ r* m. w# h4 t/ I& X   7 l6 w; d5 h! z1 C5 g( i

) v' c5 E9 ~" h' E. o

0 p# e+ O! J. \$ U 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 0 n) Z( T. O6 b

; k+ M9 n& J s9 Y3 o: s7 F$ f1 ^

2 a# u c( ^9 Z LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 / a; [: I" F" Q1 |9 y* O4 U% h7 P/ x, V o

: w7 @1 l8 h: R& c. ^9 T

3 w) e* E3 L/ {( J2 d 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 0 P7 P: @ u/ ~( T- ?: K1 g

5 D% }5 s7 L! T$ d6 l1 o

1 I# M( ^7 V4 e% r% T/ P/ T 源的luasocket代码可以参考学习下 ( l4 j; j- e q+ r& a& E

. I: \8 }7 ~8 m4 h( @

; J W: r& y: F3 R0 A9 T6 T https://github.com/lunarmodules/luasocket : _3 q1 X$ C! {0 M

8 _" Z7 d6 B: Q0 _" c L2 i

5 ]( P) g, t8 E/ [$ u* K* S* e https://github.com/fengye/luasocket & D3 e9 b; ]" K

3 V! }, p& o/ ~/ Z( u0 J

! Z+ j- k( h( i Y. |- k* z   $ b& I. q" H$ ]. C: C

7 g* n, y- |3 V

7 R8 z+ k: l! p" C# H vshapes= % ?" Z- N. O: \- G6 t

8 [# ]( ~% j) ~, P8 l+ G

% W9 Y9 [8 B3 `   / J" u$ g: Y6 P8 Z! R. P- a

X8 b6 H9 n$ f% x

9 U4 t/ ?+ u+ T   2 g( ?! W+ Z4 q0 \4 G- U5 A' @: W

8 W+ k5 v; ?7 p

. ^, _+ W3 Y$ | R 总结 6 m' v0 z4 f9 o% E& o: Y- h# m

! s* N5 v B+ g, w; a. V' t) V

/ }7 s% C+ h; g8 s- \8 ~! n. Q 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 + @9 c5 ]8 A8 o" l0 c' ^& x

5 g1 A6 H9 a* Y( H

6 P/ T# v i( u$ w8 ]: [- D 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 " K' K( X6 e3 B! U& r

8 t& n8 f: w6 g/ t

0 ]$ U; H6 K2 k 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 7 O6 {( B# ?* z# o6 i1 M

, L7 S) u& i# c O4 }8 A9 P0 d

8 }+ M- { w- v {( S2 \0 |/ A 结束 ) [+ J% {9 f: q8 s7 x8 R

4 R8 u o- g( E

, c. U# q: \8 t# k* }2 k: Y7 s  【推荐阅读】 / A$ E1 I! ]) X+ Z

# [% g; c. O& i7 u2 w' {$ M

/ v8 Q4 \) R7 L' p7 j 对吃鸡APP的分析 2 a3 Y9 }! [' K+ J0 O

9 N! n1 q4 t% D+ m, C8 T- Y9 m& q

4 y4 k$ i) c8 e 你需要了解的APP安全 " T( A A" W, L8 y5 T: `

& Q' w+ L( B9 f* d: B' M

1 b0 O: c& E, i# e 你需要了解的APP安全 : n- D4 e5 v3 `

( d# _/ `( f/ @" a5 X. b) ]

2 t( q& I) N& C2 I   ( a7 h9 U# i) k7 t! \8 z( x) W8 E: A

回复

使用道具 举报

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

本版积分规则

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