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

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

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

* o2 u) |; _8 n3 I 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ( e5 {3 v* ?6 K1 a6 W

3 D( O i! y6 M/ Y2 m5 t0 X1 j

8 h% ]: h* j# }( ?$ n; G9 K vshapes= ' p, e! z4 `9 P2 L

* ]1 O& c B& O" F8 I1 ]4 |

" d& s! U: T d8 g0 t$ L! a8 S   3 u# e4 k ]0 Y. d# W

" E- V- Z' k6 e% V

- j1 C5 D4 U+ e; l. l1 e( ^/ G 下面就以开发者角度进行解析下这个APP的功能的实现原理。 $ ?: ]2 u _7 p* ?' j

; y7 |, Y/ |$ k! m

) t' ~1 y" z; L+ Q; w; b   ) N8 X; M! `5 ]( i

. d, H4 c! w& m

: R1 s; `* N6 [8 @! U& @( i. i 基础信息 # Q+ K' b' d7 _. y' [% B$ ^

0 l ^: t3 o) Y

$ s+ f- V9 \! Y! ^ 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ! C/ e- z5 ~! e- J+ B) G E+ Z" R1 e

% ^) P9 Q: V# ]+ h* B, d) f$ L

$ K1 q: }: C% }# T' ]$ G vshapes= # C& \* y$ T) }! o+ c

% w8 `3 B @ z! E

( x: m1 I4 K# C7 e# R; g   [ o; q4 @; W0 z2 E$ ?. V+ J

, ?% `4 K" G; a1 v

& C* H# t& g' S* ` 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 1 z: v( \: e, Z; `! u' f

0 K P6 N' D6 L, }- n% Z. ]7 Y! U

2 v. t. t3 n4 V% ? vshapes= $ L- [! V C. u7 `7 H" Q* H0 F

% \2 N* a; M' o# U

; `+ q( w; L/ O1 E   2 J( N4 J9 u3 T6 @* Y7 C) R

- [6 s, o, f8 `" G/ e% L

+ S! i/ y* I* c. ~/ L2 l 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 # J g1 O% ^: A$ z% x4 S

( S; h, O/ C/ X$ f& w

7 S; I0 q c+ r/ r1 e vshapes= : a9 v+ M" W2 c

# _; v" v$ p2 Q

3 S3 n# D6 ]% y; C# A4 ?- D5 h   : q9 m9 I: w, c+ u

- W$ `5 G5 K# u" U! }3 y

! h* S7 N' M4 z- m5 \ 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 : }) \' d6 D# a/ I6 V2 C

# x* j T$ D+ Q1 ~! G* @1 T

: d/ p0 P. W' d* Y vshapes= 8 A4 M P9 G% _" l. z) _( w7 [

1 ]$ R; h, E' ^6 d# @

" I9 K8 S* H Y! _0 ~) R) |   9 S% e/ i- V1 l

3 d4 Q$ ~) d: ^( ~) `) p' s: N

- \4 Y8 _" J1 m+ ? 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ' e7 @$ B: z7 \ ]' y; `) U7 ~

: R4 M% q& K6 F5 m

3 A: x3 W0 r& [ vshapes= 0 I; \% Q X' S" T; H; I

+ A: H( u2 l* P. B

/ }6 ^9 T; Q; [+ `   . N: g2 C) t0 M% A" @2 B

, T0 y) R1 C8 K( X% y; Y5 [7 ~( h

& q0 Q7 ]1 O x6 P7 F$ Y   ; U3 U% l, b+ F# v

, ~6 X( S% N6 \3 m6 m0 }) j) Q

5 l$ [, f3 B4 ?- i$ {& C& R 签名信息 2 g: `5 `, f) t! k s- i; q% L# z

! v: f3 s: k# x$ T) T* Q* v

2 a U/ `; n+ t- P/ R, Y 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ; u: ~" ~; e, p' W# }" d

+ u8 p+ k8 c$ z6 j

1 p9 n; m. e! f! S0 x( G 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 5 `, W( K. v7 c$ J, l3 q4 q

9 e# ^8 {0 u" Y' |4 p- \* ^1 l, [

8 M- }: C8 P+ W" P androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ; [' E/ ?8 F+ s3 P

/ \8 f9 i8 O' }6 A9 Z

& H& X9 ~9 U( u5 H4 i7 M" n vshapes= - i1 U* ~( h4 N& c$ f9 O- j, `

. @% B! I: B1 i1 T0 V

& A% u1 a4 u1 T u* L   " ^; o' v0 C( U6 L$ _ T- l

* l) [ g- U' ~" f6 G/ U# `

$ Q& h% a" ~+ J4 V% ~ g android签名的数字证书的一般都是采用 X.509的国际标准。 ! g' o) O# Y- h/ G" a( e2 e

# h- ~9 E- k( Z0 |% E

. s% c% ~# n7 i$ z' F1 z* J X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ; w6 n: F5 Q6 D" c" A. o

3 X. c% D2 |" W" m& Z: v

9 j$ T0 J% C% ?6 q! g% J 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 * G t/ M& A) Q' I0 Z8 S" F

) v7 H$ Y5 |3 K4 q8 S

! J$ ^7 A2 J9 B5 b2 ] vshapes= ( \, [) Q4 {' O

2 ?; N# L8 W" R: v/ L1 \

& Z7 W2 |2 w' J0 U' b3 c9 w1 R9 v   , ]3 e% W! K! {6 [9 L: q2 b

0 t! p1 _' s. r, B* E J

/ r9 u' k5 {* `9 C3 H$ N 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 + _* t0 I* J" Q* E1 v+ I; Y

/ m; u7 L1 f6 m' X8 c" U

. V4 I+ A- K+ [/ V# f vshapes= ) M$ J" G8 k! c9 M& Q

, h6 D# O1 g! ]0 |( `

V* \" s+ {4 U; y: t# [ 7 x: M/ b. ~5 A9 P

1 Z* T9 Q& \' a6 J0 C2 d

$ g9 {: x/ R3 L# {7 D' \/ X   & I. w/ ?( x) Y- Z1 u

3 D x8 [2 T! j$ |& e

* M% X# F6 k( u* o 权限信息 $ Q9 V4 Q/ u: Q7 d' |9 K# @

! d$ T$ {3 F6 w

- P( {" M" I- A 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ) @9 i' K8 w7 Z7 {( k$ S( K

; b$ {& s: k" V6 p' t

. l, d$ q) x7 i C2 { android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 , ], J+ k, K/ R7 Y8 t" n

; G" e6 @4 x( V: O9 a a; u

: c4 [. X' T( o vshapes= 6 ~; A" ]2 ~3 c" w

8 f3 n s7 W, b, H# L8 F

- i1 @7 q7 E$ Q. Q7 _" I0 D7 g& Q   2 q1 q+ a/ B U, O

4 g. O5 T6 ~3 y: S) r+ T; o9 ]

& {- A0 n, A/ I! ? 下面对这个APP的所有权限进行详解下: 1 _6 A2 g6 S- W Z8 I0 a" v

) |- Y2 ~# y6 s1 ?- B

6 m `' w8 k2 b5 e" f3 a android.permission.INTERNET :访问网络连接可能产生GPRS流量 5 t4 L9 E& r/ S, n5 m1 H

4 Z6 H* Q9 t' x

" C- I- w' t8 b, }+ a android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 , f$ T% S& J! U5 d9 N( j' | P

7 c1 r7 U3 w% k: z9 ]. S

" @/ e+ s" x: z' Z android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 1 F$ q, f L: B5 E- L2 H) x0 v

/ Q4 [, g) b% P, c: K- O p% }

4 v" m6 F0 k2 J" I) ?1 R android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 3 e$ x) k% R/ _& N

# t! v/ x& k+ K, w' [) d

5 E# ]; s1 Z2 S7 {8 b* l android.permission.WRITE_SMS:允许应用程序写短信内容 $ i! x- K& b% C7 L* |" a9 [4 v

0 a q2 Q5 y3 Z( X$ B

$ [; O4 j( r- e% t& p' _- q android.permission.READ_SMS:允许应用程序读取短信内容 , B3 s& V! V6 i' e& |5 c

! E+ |+ F2 h: B: }, E# J, U

- N0 }- A) T d8 q' }! a, e+ o3 Y4 T android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 # M7 k/ z g" A3 ^

3 z6 v! G+ E0 M" L7 ?

, t f7 X s9 J" m, A' T( a& D/ a android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 * u7 C- l0 D8 ^' R+ V+ _! G

% N" R9 e2 x4 w. S5 l4 ]7 A* @1 w

! w3 X2 N5 j: {' ]* E% z2 a android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 # Z" G3 v4 ^9 {" U1 k

3 o. E9 K5 E8 M1 x

2 \. O+ X3 H' A/ H, J* H0 k android.permission.VIBRATE:允许振动 d& } O8 S, f6 s% i# s" d

, \& m: z; C! ?; H! Q+ t; Y

: d; x) C9 S& S& h8 m7 l& h android.permission.READ_LOGS:允许程序读取系统底层日志 7 W8 l# ^1 u" E* ~. ^6 m

1 Y- W9 U0 }! H {

* j6 h5 T( T8 y1 G android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ' c8 H1 Y; Q) q, P* ]* X

1 @3 S: `' G# T. V9 x D

& R$ d- u$ r* Y0 @. d7 k   - V0 z |$ m8 p( L1 A* ~( S

( t/ d( @8 i c' a- y. ~+ Z

8 {8 u- ]8 P: `, D& P5 i 功能信息 % ]4 _7 r3 l/ Y: o- s8 R4 f6 Y. g$ p

0 O# Q0 _4 n" W- q: v* Q- }4 X

' w5 {7 b; b0 y/ A) ]! [- W y   # ~' o1 ?7 O# x! w

9 ?% S) f& e* f' K4 b

% w( P$ U& V* K- a 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 ! h) y/ C' {: k( a

2 L9 q" J& S1 v- P T

5 A2 t+ f4 c& D2 G Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 % s4 O3 _. W, `. ^7 j) |

x6 p+ H6 J* \% P6 C- i: p$ h

% U5 P- S5 {* H: }: v( Q, `8 i8 } 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 2 O2 |+ H7 S" T) l, d& L# q

. p, V0 q- p5 t6 U- _ D2 N

" F& G. |7 D2 X$ {# F( Z8 @4 p/ o0 w 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 6 w6 s$ K/ m! W: N$ I

7 O. X: m D. l: Z$ x+ S/ [

2 K% s9 ~# b% s# G5 }! O vshapes= # i l- x6 h$ E% d: t

3 k1 Y! V4 _1 _/ _& C" l

9 X5 T' W( C" d5 P) o! [   # O- Q9 K- }) n) o0 [; }8 T; v

! @: o& {0 _3 c# Q0 |

2 E$ [6 y4 g! C# R3 J( n- n 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ) Z: c0 A& I9 }0 ?+ D6 [. V

?3 ]0 {8 [8 ?" v5 e( T1 `

: J5 `' I( o; s* k/ ? vshapes= + e' o: Y4 L4 D% D3 m

/ B2 D; ^+ s/ a) a- P; Z# D: A

* P( ]. o- ]4 p+ x   * U) y- X( }+ {1 K

( T7 p2 R% q6 Q( w- M

, S5 X1 q! D4 R2 E; x4 g lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ' E0 b7 i% E9 g

7 _! i/ v- A5 j

8 O* B: `3 Z0 s$ n a! u( T vshapes= 3 J: L, ]+ O4 p2 e& F6 {

/ v f, p& M- t, }3 c! t! g

5 o- A: M1 f4 v" m+ d 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 ( i1 u" Q+ I4 R r, o- a

; |. }* D n( }( @# P

2 T7 q+ o* M' g* L# w* q4 {- R vshapes= $ U6 V" h- ^& w& t, ?

& Q; J. d- _/ v5 F7 e

6 r# l8 ]7 Z" C' x3 a   ' E$ G( D3 S, H- X+ u

( B+ i7 Y9 s' A" q% j

- [6 F9 m! s+ C. { 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 8 w" c/ B- R2 \

2 F0 ^: c0 r7 G; o: \/ n

# h1 K# I% I5 W" ?( v: K LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 : Z% x$ ]8 i# h3 _& n! ?! n g' m; |

2 [$ \/ v& R/ S: F" y

. |1 \6 b! E2 j% X: t& D6 g6 L 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 % h: F1 N8 g; y" x# e9 C

4 `; u# d7 R. Z2 I `/ `% {

8 ]# ]. a7 V1 u6 ?; f" a/ i 源的luasocket代码可以参考学习下 l5 n+ y+ m2 O/ J2 M( l h

/ F, D) u- q* ?" {2 | O

; \" g3 }3 ]* _6 q https://github.com/lunarmodules/luasocket ) j) g# A& L6 V- Z/ H8 T

( D: @8 w4 k" k7 U

( U$ x7 Q8 t( v- [& r; G8 r https://github.com/fengye/luasocket 8 H" k% {% `0 y" H% i

2 f* _$ S h+ c3 J, d- F1 |) o4 I3 Y

7 t) X% L8 i( T/ R2 s   " m! V% f: H6 e) P6 S! o! p

; R; i; l) {2 R5 N) j( B: ~, |1 }' s

: x+ N: f* `5 _. R( O2 ^ vshapes= * n: T, j* o& X* m

, b* }) c# x) L1 o9 u3 d4 t7 G/ e

( G0 h+ {% D+ F' |( p4 _; q$ [$ c   3 S, ?: [( {! y& c9 B2 G

& T$ G% i k+ q& g$ K6 V, ]1 G

# c& U( O5 V8 L$ P: s+ w' I5 I   6 @8 \3 I" u+ M4 q

+ J7 }0 M' J [2 o) n0 t

4 m8 E0 X6 P; [- E 总结 ) S5 k% h, y. H* Y! M: V( c, O

1 Z- F- o( E7 P+ w: I7 H

! g X R$ y+ O- y 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 + Z( W* Z+ A- s

+ d) N$ A! C4 g

# F* j; J, Z7 }& X 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 , d& Y6 b- Q7 n1 ]

2 B6 O' v/ q- ?4 G n4 D* ]

: O8 U8 b) [# v' f( w 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ; b) X8 ^6 O% @

% _, z0 q; g) _4 U( g6 n

' v! D' a! r' n d" s! I 结束 l G" E; z; R4 e0 X5 P! X3 [

" i+ F* ]: \6 g8 l \ Z

+ a; `/ B: X4 u! S; T; U% Q% v  【推荐阅读】 , P$ ^4 z* K3 w2 q7 U

. O# P- _* z! o0 j/ x/ F; C

" w0 t7 M: A4 F) p. H/ J+ h 对吃鸡APP的分析 : I' ]/ `$ ]' e

' Y: L$ \4 r6 ?6 D- ~6 F) l

# l) t7 v C; q1 Z# n9 f 你需要了解的APP安全 . N9 Y/ O: h( U3 ?+ {

" [! \) }" @, R# z2 `/ |/ T

$ ~! S% z Y# |; ^ 你需要了解的APP安全 - A1 ~ m& A, y- d9 s9 v

# L2 h! R) l7 p

3 S3 V2 z/ `* @) k0 E/ }; t; Z* R8 \   7 `3 r& I0 h4 ~2 Y# b \

回复

使用道具 举报

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

本版积分规则

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