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

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

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

|4 K1 @; J3 ]: Z 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 " u" C4 @2 K% m

2 p$ T5 }. y; p! C

! m" Y* w: ?1 Q& R8 Z( m& z vshapes= $ v& d6 _$ m0 n

+ h& c, T. D& i1 m1 x

* r6 d7 o; d. ?* o! i5 g+ }3 N   ! N5 @, T) i3 R: R; [6 J* k

* W! Y% O( \/ q$ \

/ N, [' y$ l: a& O 下面就以开发者角度进行解析下这个APP的功能的实现原理。 * K, L" P* R1 p* u

) J) W0 @( p6 g( C

0 X0 O( L4 Z" @$ N n   0 g' \- Z3 F: C- u) D4 Q0 d/ J

7 o$ O, m" ]5 Q4 ~, `8 }- n

5 N* d1 e5 |' ?* @ 基础信息 ( Y: z# j) O; P6 D; ?

( }" s7 S6 x" K

0 k, O* P, o" H1 y1 H: X( ~3 o/ m 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 8 g& Q' Q2 D+ v$ I) h

. g& s7 D; \; x1 ~# a1 ^1 o- U

% X& X4 O9 k4 [/ `8 d( b7 F vshapes= 3 E& m2 e& m& v, G

9 b7 T9 ]2 }; H# |# x1 f: I) H$ w

7 R6 w5 `7 F7 `! b( l( w- d   1 Q6 e8 @% T8 Q0 z- ~) P$ Q

& l! j& P$ p. d' Y. C9 b6 j

7 [% R U% } P 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 : w$ K! C3 P# X% z- D3 C0 N

3 g8 o* c5 K$ b j' Q9 }

8 S/ I+ k; k2 _5 v% e vshapes= + ^7 b6 \2 v1 N' D# B

+ w6 H% L) H& H) S

( ^% ?. V) x, i# ^   & h# f* f0 K& T0 F1 i# V% Y9 K

/ @$ a) a5 {1 b0 c' W Y% B/ e

' t# ~+ O9 k/ w$ ~ 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 . [; k3 f5 w. |7 x

0 q9 Y$ A3 b+ r

4 Q8 L k% L$ o; ^% i) t$ h# { vshapes= # w; B" K) i) T9 D6 j6 y n* H# l2 z

7 V" ?" u6 w6 G4 C. n

. B2 d. g0 t( u; D   & ?! L4 `1 T4 k0 D" M* t1 M

% c% n& \- `; F' d4 N* m) P8 g( z

" T! B* ]3 ]* i* [. s/ z 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 , L. O4 r. u- C6 _; |

' w3 @- d% N; n+ c e* d

6 E8 ]* D5 p* S' i" i vshapes= ; f7 h# m5 B$ x

9 b4 W0 w! q, e, T E

" T) ^4 m, ]. b   ! p( I1 O7 p3 W! w' l

* Y' X. S- L' a1 `

! i! |8 X# [% M: T 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ; y7 N0 U5 A8 k& g! u

, q( a7 `+ F; t; v) a' {+ B

* L3 h0 `4 e) m vshapes= 4 F( ?( J$ _ n- T

) ?) [* V; E1 R5 c( O0 |

: O4 Q9 h! Z1 Y5 w   ; j5 A' k; R Z, V# ^( t* J6 B

: |& ]5 b9 M3 C8 T" b

4 _$ v* H& h! h$ r. J1 j0 y; b   - m3 F( x8 v" V0 B R4 L! _

8 A! P9 \1 ~' o: R* o

( T" f" c- m, _2 R% t- n 签名信息 ( W! w- b0 O$ Y) i: K0 ?

5 |+ q% q0 ~* |& s) t; H" v& q) w

- ?5 O" i( G' A0 X% ~+ K, k 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 7 Y8 z2 s; A/ X0 }4 C! c" D

% D* C' S* V0 \1 O7 s3 B

7 l, u' D$ {$ `4 C( M- V- _7 O 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 * M$ \# w* L+ h+ h( t# i8 P

~* j$ P: |9 Q/ r3 ~5 q1 b" G

+ n; I# t: c6 U1 U androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 * j' K8 E3 X6 {: f! ~

& y8 U$ v) W8 |( j

4 x3 M9 K- L7 ?# z4 m. n vshapes= . t* ?( R/ h( Z. \

; O o5 h! J4 ?$ V$ [) @

8 W/ l& r- ^0 \, X   4 q% f" L! ?: T6 r/ p, e5 [

9 z& }# `& k) }6 ~* h

8 \! D$ |# }$ t, T android签名的数字证书的一般都是采用 X.509的国际标准。 & L e9 b% g( U: a7 L0 R4 _

4 Y" k, ]* h+ C$ Z3 w- p1 h

+ _8 S4 t0 a& e/ K# D2 o X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ; }7 {: @1 L0 Q f3 v. |& e

2 C2 Y/ @3 N9 Z

6 H) W% } Y6 f) n& x 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 # y I# l; A" h) \9 S

! ~5 v! A& ~6 Z& d

0 p9 s. I: j* d vshapes= + l2 W* [" [, j2 ^& f

+ t+ u. k6 `3 q o, t9 h2 k

. V3 i7 l) f4 ^( ]. \   % E& L6 g' M, F' q

2 I7 [+ \$ e6 y) E% H

# r! ~, ^! G6 o D5 ~: b5 b& X$ E/ h4 I 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 $ @8 ] E; @' ~. n3 U6 {) H9 l

; p8 O& u# J4 [3 a) f$ \

2 y. J0 g$ u3 A; X' ^, `% D0 U vshapes= 3 J( y' U6 ]. b& v H

) o, }8 c: T& C& j

( m& O, M+ F% I8 s 6 P( h- p$ ? J4 ]7 N3 o

4 n6 ~( e5 o" M3 c& W, ~2 c

7 E: E; k: p" L" o) ~" G' ]6 O% M   % @2 F' h7 d; A% u' V7 O! g7 H

. @6 p$ K, n" H

% r9 Q1 }1 y6 ?; {9 N8 O+ B 权限信息 ( s6 h% A6 U" P& U q- _1 b Z+ m# J* N

7 w$ {9 Q( i. H( H z

9 R3 h3 y3 I, ?% U; C8 p- @ 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 1 E/ u+ q; S; l* X4 s7 u7 `" W

3 O4 y# m- L- P5 l3 R

; S# Z- ]% S# c android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 1 P5 e! o- W; p. |/ R- F4 `

7 V f8 ~# h$ H2 E+ H) V

) B5 G) I4 |- @) X vshapes= ( n' S9 O8 s4 b( R

r/ c r7 Y( a5 j

( n) L4 Z7 ?8 p9 N$ t1 P   8 b+ u' J! ]/ D9 w( U

* S# J, S# K& O6 ?5 _4 S1 e

! A. u$ e% p& ?( l- X& J) O 下面对这个APP的所有权限进行详解下: # }$ p5 e: l' c; k8 c& n5 z

0 O, I: X$ n. i

" ]+ g5 d5 J0 O android.permission.INTERNET :访问网络连接可能产生GPRS流量 . ]7 P! L0 a+ ^5 j P

0 b* l9 Z* Z# t$ }

) _" T, w- {5 L2 k9 @ android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 + \2 i G+ B' E! S# x

& j7 t% S9 Q+ x6 A% t8 I

+ S' e, @" L4 S- ?) l android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 " D/ N" S* B T+ v

! _; i; e7 o U' M

+ L1 }0 t: A/ R6 s6 f4 [6 ] android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ) v5 \1 h; ^$ e4 e" v; V

- ~3 n- j6 x8 I) M* k

! x9 h+ {! h3 `! ^ android.permission.WRITE_SMS:允许应用程序写短信内容 ) Y. D# z5 C9 |; ~# b+ B

: w/ o7 j" y7 p U

6 l1 T2 {& A* E3 Z, ]3 f android.permission.READ_SMS:允许应用程序读取短信内容 9 E2 [4 |- Z+ b; n' b7 G

' k) j d& z+ @; r* z

$ |1 x( b% w* l$ N android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ; w, A, Z9 M4 l% K

* f9 m8 N3 u& g b

2 b: S7 C ?. Q* ?+ @) c# }5 Y android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 4 m5 O* M/ R5 C

9 z6 Y O" C) y0 v

# ?- L( e. h v6 v1 g) Z( Q android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 7 `' ]4 W3 G0 G h- `

; e5 p0 {+ H' J" K

$ m* y+ S7 g+ f android.permission.VIBRATE:允许振动 $ r% H1 K( X w

4 g% v5 E" M. ~' a3 _* I

2 u# ?" O! \3 x; D; W- T3 p2 s android.permission.READ_LOGS:允许程序读取系统底层日志 ( s5 Y h- P( G' t: m1 v

+ G0 c' d/ B: f) P' a

9 h2 o/ }) {/ d' | android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  3 T$ v( |7 x! Q1 @+ H

, r" _' [* u5 f4 b' r( u+ L

) @- i) l3 P. D- ~0 Q: Y   4 u* q$ } h1 L4 T, T- o2 v

, [6 a/ H8 ?9 H3 Q2 [' _4 `

; B0 }9 B3 y" @* s 功能信息 7 h! h; L/ W4 W4 w8 o5 T# j

4 M0 W: \, }7 o4 B& p

, w# H$ ?, d% ?( ^: j( W4 Y3 i   4 `! Z, C: [ [# P' k6 ?1 V& [

! p* |# q# E% W/ ^

' A% f* U$ ]" Y+ O2 S 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 1 V/ `) I- _2 f1 }/ Y( o) o4 J

# N1 o! A, X* _5 X& [) k1 ^

& L# A2 p/ y2 {0 |2 p* {! r Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 3 |' ^+ N5 o: ~+ T; H7 v

8 Y# v6 a2 ]9 i) u* n/ Y

: J0 g$ e0 V2 r4 b$ S 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 # v; B1 d: q9 l8 J, R2 p

; K- k: H; M1 [" g0 M4 n1 L

( P8 f8 A2 W$ g1 C3 E4 X 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 / e* o0 V/ g% r) j

3 T7 a0 t: B7 [6 L+ a/ `6 q

9 z9 X: U! ?# A, P8 x vshapes= $ {+ l, F9 S/ z& c9 H

4 g: t3 i. q+ m. ~

8 `' S5 ^1 J/ I, d% r0 A+ _' M   " Y$ J3 a8 A; e! C- d

. O* D! `. D- t' B: R) i

+ K1 d$ Y6 B$ K4 L+ t0 F 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 4 d% ~' F+ v' }+ E$ v: l% E

9 i; G! }8 O; u

4 B4 T+ }% o1 g: G8 M1 u! C vshapes= ; P3 O! Z* `+ f: m j' f" d# ]

& w( K( g7 N5 S# Z8 D+ y

^4 L3 S" R! e# e, K   4 Q% E+ Z. L- d! y7 t/ o( r

$ @* C* l' ]/ j% y1 [3 j9 u! U" \

4 y, F' j* q9 H1 j4 p. y lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 3 ^- j# T7 w4 r. P* N# U

; ^; B2 v! {* i5 P9 D' d1 G

- f" i& G0 t( K/ P vshapes= J0 }6 A/ c$ g. j% H# f

* h2 f; M! k' t+ S$ O% x0 l

8 x* J. r/ c8 C/ b 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 ; l7 n" j+ I) O% @: f

& S M: c9 z2 n/ \

0 t" z6 [5 h" ^ vshapes= ' \6 H0 N' L/ b7 ?

$ }4 e: @$ @3 g

# t% C6 H% P- V   ' ^ ] H) p! E% E5 P

5 \* W: W( L7 ?& c( F# R

+ F" h4 r2 g5 c- V/ r' m; b 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 $ ]/ J% V3 ]! d1 c5 P c6 t* X

4 j% u* ^2 j; A- P1 A$ S

, c- J5 D; l1 C/ M7 Q; k LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 : @; G8 D4 a9 o" [6 g

+ _* i1 e& S z: r D$ d6 _

, D# U" P* E& B: Q' E" O4 _ 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 : a! y" R! X M9 B a- v8 {

! f' }3 {% f( `/ i1 u

: i% p/ M0 x; P% Z/ I 源的luasocket代码可以参考学习下 6 B& v& W p. a- d' S

9 b+ ^4 `; y- T% X ]2 S" Y& D) \

+ T" O! g' S& k' W6 |( P& G https://github.com/lunarmodules/luasocket & _0 W9 q: W/ i, o; |

" ` g) c1 B1 Y2 Y" J. m9 n8 l' a8 C

: m, ?0 t8 o: i k/ @3 o/ I https://github.com/fengye/luasocket 2 `& {5 s' U$ G5 q) q5 V

1 {+ p' \% r$ |7 p) i) W t7 V( G

+ h/ b+ i; N1 J7 {3 Y' U/ O2 q   0 s _1 K! P D4 f- L4 a$ f! |

- `8 _2 W* v) l/ q

$ Y# v2 r' V/ a+ T vshapes= |/ }; @9 J2 r9 R0 a7 a/ H' d1 o

* @- k5 B+ b# Z N" n6 _7 P5 N

# E" r, ]! P. I8 _: h' ?   . u; S7 v# b* s0 \8 F! o; ]7 V

; {) R& c9 d2 \; L" V0 J) @7 P

' V6 T/ u) @% B2 q1 U- a; o+ A   ; L3 Q. {- ]6 E' P, o1 E' N6 ^

- { U4 h" z* X/ c& e4 P

0 M' H/ Y) }/ |( F 总结 $ ~$ ^; s3 h0 p- `2 t$ T

; C; d0 @ d W' Y

3 E, n7 }; N: F, M. s 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 " u) y; G5 b# {- j9 T

- W0 c* p! N: C- j" s. n

7 b8 \% _0 G: B9 z1 D 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 4 {% \4 g V* P, D+ a8 s

9 Y" k/ D; O' m( l8 C7 U+ m

w4 y* \2 M* i+ y6 K% w2 S4 w9 y9 b 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 % |- F" R. a7 U5 \( F2 K

' U/ [1 L* l7 H+ i

# j5 g+ Y2 g9 _7 X% K& m% F( S 结束 ) o1 {9 R& C8 g5 Z7 m

4 X5 d7 P- J' f

3 B* H( m: ]( ^. }% L" i  【推荐阅读】 ) E$ Z0 Z! F C3 U; y

; Y$ S$ f, p) x9 T* H8 [

& h* I) S( u) T4 @& h 对吃鸡APP的分析 9 V J6 R4 d* E0 A

- f: a1 Q+ I! y0 X7 ]- T

1 n7 J6 x6 L8 N; ?7 t2 n 你需要了解的APP安全 * [" V7 ?( A; V' |$ U* x5 Y

& N: I" @$ R9 L5 a! Y& G, r

* v- t: A5 o4 n: _# x. b4 J 你需要了解的APP安全 5 I, _' ^- e0 q# r9 s

5 W: E% N% e) O/ Q( F2 S" X8 u

/ \! `8 i+ q. m   5 y# P- {) P, ~/ |( f! u

回复

使用道具 举报

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

本版积分规则

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