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

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

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

" S( i# a+ ]) y( a- y 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 L2 g/ s5 w& W8 D

( H* b2 f" e! n6 e; _

% e8 M' m6 D% r! E$ K9 i6 ^. e3 b vshapes= * v" n# |3 X0 K+ x

0 }4 M; r5 w z( p' S

5 T" x9 C- }1 u) `4 e; c   ' U# w; z; L4 w7 C

$ l% h& f; _( O

: }, ?3 ?. P3 A1 [5 a/ W 下面就以开发者角度进行解析下这个APP的功能的实现原理。 - B% {' Z7 H4 a9 x5 |9 [

% i7 f9 n0 B9 o8 B# B) M& X

! \. H: }' n) b2 v m   5 d1 _; t: X/ F! J' E

4 S% x" [+ l6 T' F, S

g9 `9 m B+ p% h. r 基础信息 1 i2 \3 _3 ]- i, u

. ~3 ^- f9 ?" u4 ?

z+ W, i6 k d0 ]4 X" H% x 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 $ O0 Q8 u1 e2 O% P

; f* Y: E( m5 t7 K7 d. ]

, X. `0 w- f7 I* t$ m5 s% [8 ? vshapes= + P3 c3 F4 M/ }: A

+ j& E- O. i& |9 I

5 u$ n& @( S; p M: K   % d. X# l. t: ?2 v, s2 Y# f& d

1 ~( ], T; a- S8 ]. T; z: C

4 O _( B O, P T8 D6 E 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 8 t* S9 \2 C0 }9 _8 \" H- W

) Q9 h* z4 X3 v. L0 |/ K

7 r, E9 U( u2 ?4 L+ s, I" J vshapes= 4 h$ n9 W+ p/ z9 V

( i! ~" i' U* k6 y- u

% K5 }) O, {/ \5 d2 V6 f   % j2 N( m/ Y! S r/ @" A

! x: Y) U7 _/ O

) x0 N. x# e8 R/ [0 |. v 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 % g, F a; V. B* S

; x; I( P1 P6 H( O9 P) H& u: U" G: K

0 q% i5 X& V' T. R vshapes= 5 h; g) U+ A# |. ?

, b8 O v' [% {* P- d

) S( T: X x5 h2 v: _) W   ]9 M5 \& x8 e8 |

% i8 b- o- @) `

) h* R4 _4 t3 ~3 [& I4 p6 J 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ' m& {! E9 e8 F3 j1 K

! m" G- z6 d( H4 c$ k

1 n* F' O, ] ^2 r1 C vshapes= * M8 S0 C" w) R( _) y q* B

3 R. N- _4 H( w4 b, F1 t) R

+ k: k! L" z& ~   ?8 p/ J8 I- I- c! H

. i( v. ~/ R2 F! w. s+ n2 @& I0 \

! F; r9 {5 h' k0 P7 y! t8 D 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 8 f* y. M8 z, e: X+ J! ~- O

6 r% J5 y) |' ]9 R9 \

) W6 @0 O( @9 o. I. R2 S6 s# B vshapes= : Z2 t' K" C p! y

2 |% A% |6 I5 j6 u1 [

$ X! }9 c0 P ` K, f6 f2 I3 W5 f   , Y* _0 j& e7 R p

! y8 K- q4 t" J% [7 R

$ \. _5 z6 p( m5 o   ; v- w# f) s1 P

* v. d( ?$ {6 `2 n) O# p

( u `5 p, W" Y7 K 签名信息 4 D' W( ~# }! B6 G

8 O: z8 W/ \# ]* j: ?" C, |! U' ~

) ~- E5 }( C9 u7 B4 s 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 5 ?4 J! ^2 R0 Q$ A

2 d0 N P' v! z$ q( C0 [

3 H# t3 `% j4 y: s. d2 b 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 S! I+ J0 G, ~2 o- r

) R7 \( \( p7 j* a6 H1 W

5 ?: z, G1 G2 O) o& y$ b androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 6 k% n% F1 P/ M9 n; s

! l) j% E) X5 B) u

- w9 _' Q" e3 X0 ^/ V vshapes= % \$ s8 p; e- ~7 l8 G% C

6 g- W) _- A! \* g

4 _+ g# [+ ?4 a `1 p   # A3 Q2 B; j7 z5 u8 S

2 A9 |& G! X# `9 t7 n% f! V4 S

, Y2 P, f" @! T v6 P android签名的数字证书的一般都是采用 X.509的国际标准。 8 Y) T% m2 \& r2 b- `2 w

Y3 _5 u+ D+ o$ I3 N( @) p) R/ _

' Z. `$ [$ t3 h* J X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ( u2 y% ^% ~1 D

$ z3 Y4 A$ _* |6 }7 n; o4 f4 t/ j2 h

" o, q& D2 G. F/ k" l) c. Z$ \ 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 7 J/ g' ? i1 Z3 L& d% T% ~" ]

1 ^5 W3 q: m( b$ y2 y' F" r

: j v) `8 _0 n, A7 o4 j- a1 O vshapes= , H+ N: ^! {3 J, p7 S+ \

/ B( a( R0 r" J4 J1 l# v

# j+ u$ |' H8 o/ l5 n; e6 v   2 ]5 ?1 f* M5 I% y+ f9 l, i0 P- Y

5 k7 a4 n" c+ U) c. j9 n; g3 e; q o

. I) Z& f) j% Y( a# n: _ 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ( [" t, K# X; C ~3 b. V6 q

/ }. t* E L* a6 d

: j! E3 ~. n+ B vshapes= 5 h- Y9 |9 Q! O6 z y

+ w3 \8 G9 @, `. x: B$ s6 x G

" V. A8 [9 R# ~- {- X3 x$ @ 1 k) V' _1 Z& t

7 V) R/ W3 Y+ |$ B/ U' U- ^2 o3 e1 z

0 J$ T1 E6 R% O3 G- U$ k   6 X' C' e$ E/ S+ S

/ D* a4 a' A0 f- u" B0 X3 G& }1 M

! e$ d5 d/ P. K% D" N1 n( v 权限信息 : |) ^! s! W3 m- s/ N6 b

6 t3 T+ a2 R3 {: t. Z

+ @! @6 D4 _5 U2 F$ T 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) : g& `% v4 |( G2 L

# e5 i& J7 j, n2 f) u7 ^- N- P' j

4 P; p' @% r0 N& d ^% ]7 U, ` android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 " R7 Z5 j3 M/ e& K3 t5 Q; F& K

0 e: K/ ~/ J- R: A

; f, h: p4 P p7 m) c1 j vshapes= ) f! A- i6 m: ^* ]

: J- W- e! ]4 b e" Q I, V

7 w, j6 _" {! ? k- Z- d/ V   6 w6 i# M" Y- A! G- f- J3 ?

. G8 e. Y" y5 y. U3 b

+ L# p" {2 R3 n9 a2 p 下面对这个APP的所有权限进行详解下: 2 s, b9 }) n0 @+ a/ f, }

7 a) N6 X5 ?: c

' P5 m2 ]) ^0 `( u android.permission.INTERNET :访问网络连接可能产生GPRS流量 / s. I( \; s" T8 F% a* ]

* q; d U) K a/ N4 A2 x4 Q; T

% H: ~& Y( y- D& c6 v7 C android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ; m _, e; u- z4 c& w2 o1 p$ W# x

5 b2 M! \. [- [+ d

& s7 f7 P' M: j android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 1 I# F6 [" b& U

8 v+ w D3 b! }

; q, E/ N! d% \ android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 3 n, W9 G4 r: A1 r4 h

4 M$ C/ |' D* W0 v. z* r' T

* H A" Y( E" g) Z8 Q0 Z. ` android.permission.WRITE_SMS:允许应用程序写短信内容 % t6 p; M! r* G3 V3 f2 N7 g

& C0 K/ `+ O. t# q" p6 F3 [

* `% O; L" x3 N+ v9 l android.permission.READ_SMS:允许应用程序读取短信内容 4 f5 @5 |. J. J% b$ u- O" x7 N1 I

$ B: J' M7 o; }; }& p

4 H8 x: a% \4 M* L0 S4 Y: _ android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 4 c$ B* Z; U8 Y

# v D% _7 l7 G/ D" H

7 j$ E/ ^" C E; s1 G4 @- J2 W android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 . ]* n4 v5 M+ Y4 w: Q: j9 @

8 q" x9 Z' {7 R; P' Y

& c* D1 P1 [& U. {3 o2 m1 w, { android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 * l0 s0 T, i! @- W S: k: D

! B' a/ D1 \& y# k( `

( `# X+ ]) @ S1 k, B2 a. U' @ android.permission.VIBRATE:允许振动 " |0 I# V# `- W" \* ]

* O3 m& u. s0 A9 S( j/ }

. N( g& e8 J) H android.permission.READ_LOGS:允许程序读取系统底层日志 ) [! t4 I+ w& R* P' I7 c

. n9 }! b0 i6 `3 N0 j& P

! o7 B' [$ R7 i7 X android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  & N. i# K2 p6 S, `& q2 _# s: [( O

0 R+ E2 [- _& i

5 c# q9 F: h* H/ _6 ]- N   7 r2 y* C! y: q& l$ l" s+ H; K

+ S' \+ e3 }9 z: }5 A# R, n

% w0 [+ ?- C$ E5 b: J8 ] 功能信息 , X3 O. [5 u3 t+ ]) q7 a s

& R' Q1 \$ p4 c' `

, Z! h* X6 A# A) V6 W) X6 B   2 U* p9 }- f, O$ K6 v( k& f

$ S; N' v5 ]( b( ~! g

/ Q: P3 V8 `1 B& @# t9 E8 W 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 ) t. }' Y- Q# w* J# E6 P G' s

, c! @! b& f2 Q. O) P( x

8 _4 t, r8 y, W% s6 E Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ! z. o- O, o* k2 S# i

% m6 u3 `$ c' j

( b& S5 w& p* ?6 g5 V 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 2 f& K' p3 O% p8 ?, r

" m; j4 O- }5 s: r4 c& S6 ^

( G- e" Q3 D5 F4 o3 c8 h 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 2 V2 ?* x' b- w- d9 Y: @/ w+ }

9 `6 l6 {) n0 G# f- r. k

$ m8 _) c }; H0 T/ @/ _! l vshapes= . ]. @* r& E, c

9 s3 O- J2 P* t$ L0 @- T

6 ] a4 z) _, j4 d   0 [. D& E' b. x5 q

- m% G# L7 C- P" ]

" Z2 N0 J1 ^2 V6 m 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 * {5 j- A0 j6 }* o

% Y9 H) ~. u3 v

. I r7 y6 {* u' |: B' }* m vshapes= - N; P1 U9 Z4 S4 t$ s; o5 X/ Q

: }2 c3 d/ O# [+ f3 E8 S- ?0 `

0 u6 G% i2 K* P7 P2 q$ ^, }   0 l' q* }+ z2 k

) z8 }3 s) v. B' v# P

; R1 h/ m! V' Z# ^( K3 s* N# z8 a7 b. C. H lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 4 ^+ [# p! T7 U. ]

1 ^( Z" s; A6 T8 F$ C/ `

+ T- d. ^) V- n% @ vshapes= - `+ ^- h% D$ N( w

) u+ q" K( q, X0 O9 M8 x

3 x' X, ]: N+ H 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 % m4 i4 D. I/ M0 Q% }0 {1 ^( {

: g% I9 Z8 W2 k+ k

% k# W4 R T2 S9 L& d4 V vshapes= 3 m, F- B! k% }# f

! d% W! |3 g8 R/ a# m0 b

/ Q2 [' A: P! K; k$ ]8 a; b   ( [$ Q ]) w7 }+ q9 r0 T

) Z. j( }; r* d6 H% Z

, v: L0 g7 h0 L 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 6 Y- z- P, J# u

; |# o: d& P: h

+ Y2 i& Q- \- p1 I9 i LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 6 p; g- X4 A4 G$ ~1 U& X2 N) L5 U

) G7 @; X' `* J( s" |

, l8 H' }3 [. z, Y( w' ` 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 % A* l) D3 i5 E6 t

0 g6 f3 j, c$ m I+ }' e% b9 k$ E+ Y

) v- N; O% H8 L) @ 源的luasocket代码可以参考学习下 ; q. \5 T8 t' g- x# t+ s

, ^* F# _" c& ^; p' c& ~

# j8 O+ N! d. s# i; d https://github.com/lunarmodules/luasocket 6 x8 q" a, k3 g9 t: j1 ^

7 d( X0 H7 l9 I# i5 g7 D

# F% C ~0 z5 j9 T https://github.com/fengye/luasocket / K7 Q \5 x2 [

, Y' A" H5 }, V* e z1 `- H

! Z9 X/ \" }# O+ G8 L' g- b   2 H* f4 c6 u' G" h& K

d* v% a3 I9 G2 U" E

+ [' \) Z7 z! {% c vshapes= , k- p; w) g4 t( D" Q* F9 }: y. K

- U- T# ^7 u1 {; j6 i" _) k; B

- @) w3 M6 n5 ]. ]- ~+ c& ~) F   ; Z( }9 O5 G/ z* T2 E0 N

# Y5 }2 k: l; B+ [& Y2 ]- [* c

0 f$ o. _9 F4 ?   * C/ q& `+ e1 [

1 d2 G) r* E: ^8 b4 a

+ L* e+ l, _9 F8 z' W 总结 7 G" ~ Z K& w7 S @( Z# a

& X4 D* ?" J p; e6 S

$ v y0 s/ `7 h5 F 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 + D; f& y3 X) h- v

4 {& g& R- V: j* O

) Y! |! Q7 J% U7 m9 a2 l, O! n9 l 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 / x0 w) Z" Q6 E! N: G: v& ~6 Q

+ r! G ~9 ~2 [5 L$ N* i

8 r( { g1 T! K4 r& B# l0 R, W 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 7 F* m |/ Q# P T4 {' E

/ D9 `" m# T: c% l9 \4 }

7 W6 N; G. d; w, G 结束 + a; \7 S" j: R9 J

: ^$ h4 y* c( [6 n" y7 h

$ W) `& M6 A7 v) T# r, Z  【推荐阅读】 7 r) y9 {1 [. h, M) W: I

% `0 d8 x7 ~! j& Q( ~ S" x

+ ~- n) \5 l. z 对吃鸡APP的分析 0 \; e& B5 J- {' c( W. _

: Y2 d% N' E6 X/ y4 e7 [7 ^/ z/ O

2 W$ m5 \; C8 n2 [& L1 s 你需要了解的APP安全 : ^: M+ s2 s4 [8 \+ b

/ |# i, q O, b9 [6 {+ P

+ T. ~ J2 @; y! H! w 你需要了解的APP安全 * d( A* V6 a; j6 T1 t) N ^

7 h: M/ b. j1 H" M& z( ?# N

$ L+ G' U0 `: Z9 m# c1 S4 Q+ E   $ r& H8 S2 |) T2 d* C- ~& O3 S9 ~

回复

使用道具 举报

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

本版积分规则

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