找回密码
 立即注册
查看: 5649|回复: 0
打印 上一主题 下一主题

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

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

2 }" t0 }0 m( ~' { 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 # f: u9 G2 s/ E- L9 W. s

2 `5 ~8 C: D$ M- F: \

: K; r. x4 N z( Q" k- N- K vshapes= - [4 v5 w. k. ^. x3 l

( Y& o2 ]" I( C x; G

: x2 V+ v1 R3 l" ]8 ^* R' _" G# ?   9 ?$ W" S1 ?3 s- J7 h1 x2 e

+ D' p) D3 B a* g

( t2 d) E+ V1 U/ {8 k 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ( B' f6 G/ v' k i( J+ O

/ ~: N4 U8 S/ F

' X" c& L" }, v: I* }   % ^4 ]# y k. u) k

- D; K% m* A* _9 Q& t

6 r/ h' j) S3 o, ?+ r5 h 基础信息 / l$ ~% |& C- E) o4 [

$ z3 T+ |, ]$ m7 S

3 H( t' J- R! w+ l; d+ ]0 h 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 % H! N" V5 Q3 i' ]# C

3 u; C& p' H) W/ b9 C8 h% `

9 s# R- U; S! d1 r( [4 l vshapes= " Z* P# y: q" G2 V# U O& W

1 U3 g: t& j5 W& k# Y1 g4 E

4 t+ b! I- e2 M! X2 N5 ~. q) L   2 H' o: `: n" ]$ q3 E

( q0 o$ a, v% }% M0 X9 o

# X5 |* d9 \6 ?# b% _ 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 % I$ h% ^" Q& v

. E9 u0 J$ k- x4 f8 K: K

& \1 }% f; D8 O" A2 \" d- h6 m2 c vshapes= - O, B2 A0 E @6 A) J5 b

; F% ~/ e; ~0 v; A& _- j

) y" d' L8 }( F2 A& W( ?   3 j+ O% @' v! n2 c

6 I3 w! m0 n, N8 `

+ z( J* W( O( W8 A 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 1 x/ x7 t4 Y: }$ o+ N8 u

' E: t! D1 B- A- U; l+ W

8 d8 c$ A$ w" {: | vshapes= 0 n% O) _( _+ U9 j# j; T

9 z$ h. N- B7 G# y, Y9 H5 H( Z

( q6 Y6 x: v7 Q4 G# p9 Q   8 k+ c7 U: {+ k) K3 G% p, v8 Y! ^

/ c2 O2 W: K* r9 H6 S! q

; V% }7 ?3 B, @2 h! o s 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ' n$ _3 i `- h; G5 b

/ F! ?5 _, Y' }

/ u6 C9 q9 \' y2 X vshapes= $ R, b% V$ K" Y" B

! k* q1 B# y, n; }7 m

6 e( G9 U( C' M) a+ s   5 x1 @9 a* h+ W% W0 k( p u

& y3 ?9 v' N" ]/ ^* R2 Y$ [! R- k

+ v5 L2 R( ]1 H2 v p 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 " P4 |: V$ W* |. D

2 b. }7 N2 s; k. ^; Q- ^& t, @; ?

7 q3 {! r+ L# G* I: P( l: w# N6 n vshapes= 4 D. A( E' O- Y* v) V! q

. L$ U3 j2 b# t5 k* V' t

7 |% f, k! s5 o. |; |9 z   6 P) A, e. R# k7 L) Y( A) `

- h7 A( f: ^& ~2 J

! _0 f, L; S$ x% O, G   # @& F1 V A! _* Z: y

/ B0 v L; a! ^. |

) [# N/ r9 o! n5 P1 ^% ~! ~! V 签名信息 # u7 U [1 m8 }' p- v7 X

7 t0 [; T" c) E* E: Z

9 p; h. a1 O/ {+ J5 G/ V 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ! l+ o# p _6 C' F

1 x6 U$ x( v9 o O

( o2 l2 e5 {' c 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 + ]& t; b5 {. `# L

^: S8 }* P4 j8 i2 j( }( L

! Y3 j, Q- ^- ]/ w# ] androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 0 b' W) |7 _/ ^; X' O% Z" Q

2 x; |3 ~/ t- e9 Z6 q0 S/ a

$ K+ W3 c7 ~7 f& D vshapes= # E& w. K. E- _/ G

8 h% }( C0 }2 c% Y, r7 b

/ b7 S* T2 Y; o- P9 I   ; h- r; y, b* o" F% p" D% \. p

+ u) l2 X1 _( q" x" p

$ S! |) _6 k) N9 ^- p! a android签名的数字证书的一般都是采用 X.509的国际标准。 3 b- D j! \5 ]

7 O* t1 h0 p9 m) S

1 N/ k8 e8 k2 V( J4 L& a X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 , y8 F- B$ N0 |0 d$ i" e

5 l0 G. k1 Z) q; N( G

2 ]) U1 T W4 G& f 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 & `2 G9 W; t4 L2 {

* t0 ]& U0 q7 E6 b- }5 x7 F

2 R9 U$ Z$ @ |5 w% P vshapes= : x" j% `$ y$ m+ d4 t- {: g

8 l* a% {: C( ~

, V6 n5 P* P* z2 J$ ]1 ^   9 d. x: {3 n6 k) ` Q

* H- `% _: Q6 ?6 B" T2 h6 l: {: o ?

3 V9 P) x8 V8 v$ l* D1 s, Y+ b 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 0 u/ ^( N0 b5 J

' O: S7 K' x' i `5 v: K7 q% x

2 ]# S4 M& R. F% C( b, i vshapes= 5 q) v4 l( M0 K7 J

* T9 `# f1 m, j/ ]8 {% r6 h D8 [

6 h @* z1 S4 Z / W" T' z9 P3 x* Z+ I* u

T, r* K9 i% D: A5 I( P; D- M) v N

% a. G0 w6 w o2 ?. s' G   3 Z! m6 y' K! W* E. N' q( j

; D! P$ m0 W2 P4 I. v4 b

+ F( u6 ]0 O) E+ } 权限信息 4 ^. }8 B. U# W2 u

( S1 P9 H) Q# r/ I0 x

3 K; U6 _; f" A* X, D9 { 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) / F/ X2 ]& G0 x4 @7 _

: m' }7 L$ S: z% Z# W) M, a7 y

/ l1 z$ U5 @3 @( s: ?* x android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 8 ^4 v6 h; Z3 E. e

+ N) D+ P' f, e2 l

2 W. L+ ]+ K Y6 O vshapes= $ V+ ?. i7 b% c& _# \9 F

" W3 Z5 K( `6 N/ [. {* X# u

) K6 U3 @ V( E5 ^- M   / t- [. S1 w+ r; l

y& P) ~8 K% V y& x/ a" U

- c- ]- r" }9 N7 ]! d 下面对这个APP的所有权限进行详解下: ; U1 w5 ~7 O- v

4 v- e& v. n& v' ?3 L

* }8 H) W; u! f3 Y: X android.permission.INTERNET :访问网络连接可能产生GPRS流量 4 e- r. L$ q; ]% X% \( C( m

% J5 _. _7 a. D6 x

# W- g4 K3 p: T1 T android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 6 V9 w" {4 \1 l8 t0 _

. K( O, k0 Z: @

5 g! Y! O4 D0 b# z1 n; ]5 I android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 8 \/ a8 U$ F0 H# i) B' W* T% }, R

+ F& {4 f+ C8 f1 I7 }: |8 {

% u0 e6 n0 r3 M* O+ D+ f7 u' \ android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 7 R- r; H4 T, r% Q+ z

* n0 H! z0 I) l8 v9 y9 L( E4 z

& j0 u2 x: ?5 M: k6 V; ]8 ~ android.permission.WRITE_SMS:允许应用程序写短信内容 : r+ R# P& `8 E

( F$ c9 ?) N$ ~& T2 U- {) Z# l

& e3 n7 ~: c% i4 C2 W android.permission.READ_SMS:允许应用程序读取短信内容 2 H3 C+ Q& l f) Y* n7 g

! y4 j( n9 h, q$ t4 ]

k5 z2 [9 r2 S; W android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 6 {6 O6 _* f( t. O# r2 `

+ L B4 w6 W0 z n o

6 Z/ _! I) d7 I$ C. @1 E android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 * v) N+ Z5 n' T0 }1 u

/ o- K) e# K/ [9 ]3 U7 l" f

6 D' r. m4 I1 e* D9 I4 S) e* ] android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ' R; x% Y' F3 P3 l2 x% E

5 q' X0 M: Y5 n; l$ {/ @

& s* W2 i0 n( D" Y) t& F android.permission.VIBRATE:允许振动 x, {" V/ P( h$ d

$ t# {& A# }# [

1 j& ^& V9 r; L* j5 X android.permission.READ_LOGS:允许程序读取系统底层日志 6 Y- R0 T3 D' ?

+ W2 Q7 S; M* z* U

) y0 b7 x+ r' W3 Y android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  * h& d& _( E6 d6 f6 z: |4 V4 F

5 i9 u: ~* A: _

. \. O# s1 J) [   1 j% b0 U2 M# }8 X* D

) j- }# A+ d U* n( I& e. ?

* H6 f; ?2 |* k' d( O+ G$ r 功能信息 / d8 ?2 W! b% l" K; E7 D5 T0 o

% i) Q+ G. V' J/ z

( S, R3 _2 r, q8 \8 x5 J) |   + u* I$ d; S- _$ \" [) i

9 j: V# m `. A `0 S5 B; d6 T* i+ ]

& a) R: ^2 b2 g: N8 p5 m 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 + v/ Y% ~! W/ q9 W0 e; U

4 ]6 [0 j0 W! k) e2 Y

8 c+ c, d/ |! I0 X2 l9 ]' Z Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 8 ]5 X+ P+ U3 E

5 S( y& t7 u$ G D7 }+ q' |- h

7 U6 f6 |! I! r$ o 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 % o0 C3 ?9 F8 _+ R' R$ u2 P4 A

+ D8 |( q, \: `( S# }) [

' u8 w' H, l6 K1 a9 H# B 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 2 e0 @7 b& W/ C, p% Q6 n, N: ?6 w

2 {5 U& B* J* j2 u5 {% `: F6 E

4 M3 q8 _7 s& X( y1 H! }! A9 C vshapes= ' F% q: F; s6 ]+ ^

: w4 U0 v+ K- }% J% m

$ _5 m* @: `# [5 U   & A8 [4 d. g; r% U5 w$ Q6 f* w6 [

5 h( j7 b: V1 v, [6 }1 G5 \

+ U8 F" ]( _, [8 \ A 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 / _5 ?! C5 f7 w4 L! H' ^

" T( g# @8 E& {0 G& T

& K+ S+ x+ ?. j* \. u vshapes= " O5 i( D* a! s' [: N2 r

8 Y) D# O+ a. C& q4 _* T" N- Q

8 G3 R l+ N% \4 @8 x' X2 B   6 |: u" W0 W9 s6 _; ^

3 L/ k2 N2 P ^# T* ~+ y

( [% B% `3 u( M1 D3 E* e! e" E6 I lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ' d# e4 T% ?, |5 M# C

0 |, Z; g$ P, h7 O

7 J$ o& g1 C9 B$ t vshapes= 3 R a* \5 A, U( a1 e

E' B: J$ V6 I8 N. z0 A! v" H( g

4 F X; g3 u% T5 ~ 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 7 N: m* Z3 E" d0 e

3 x$ i7 E: k0 E- d0 d

" @, _1 \- n& @ vshapes= 9 b; \! H7 v8 d' g V* Q

2 Q7 y- T Q3 K3 T. G

6 W p9 x9 b& I4 L* ~   3 v ^2 n1 o; k; r& B8 a+ T0 L

# x7 ~8 O7 T. B1 b0 H

6 o9 c% M0 s$ b( u( y& I D- ~: W( A) | 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 + k4 q) y! @8 R: y

7 {1 @% ?5 V* E2 N: p

9 y2 Y% |, C9 ?0 z( O1 O LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 5 X. q+ ], z7 N/ @- W

9 G9 g4 g2 F( O4 F h! P

' L- X! e2 S# d6 H) `& \ 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 , R3 }) x& {) x/ i+ Z& p/ T) W) k! d

) {9 i1 z. F, o' W# i

- E9 T+ G$ d+ E) R, @ y 源的luasocket代码可以参考学习下 9 e/ I9 c z1 A" z8 j' L, c1 O

" s/ c3 R- s6 W5 Q

' V+ V2 s/ S1 L: V/ r u7 r https://github.com/lunarmodules/luasocket " e# _( C! G; a" B5 h$ K6 N

( l& x3 K+ e$ v# [% H- f

% X4 E9 h. Q r0 B, X' H" z https://github.com/fengye/luasocket z( w+ w' U! Y" j8 I& b

7 H6 N4 m& V$ J9 R" b

) |3 L$ @: U' }" W; Y   : r1 a: y2 o6 C# @& f* D% X

! ~" w5 K0 u0 Q, p2 b

+ V% k+ t+ ~& A# [. N, r vshapes= 3 u" S: h% h* c# l6 b) F; w3 u" V

B# I" ]9 `5 P3 P- q

5 Z% l# x( P7 Y9 r) E& z6 Q3 d1 V   ; U2 }" t. M/ i O/ {5 N, P1 ] ^

- j' H: N# R7 D' ]8 C

5 L. U1 e& s7 y- w6 w: z   3 L& {# Q; N) k

W/ U8 h5 e+ |5 i

4 x4 J T2 \9 B! _4 W9 @ 总结 4 Q+ ^# t: t0 [8 D

$ R3 p; K; o& r% b) d7 L0 \

8 o1 A8 U, D4 ~; H- C% r 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 6 Z T& v* v* a2 z U9 k# L

! r5 {. Q" n4 k

7 q# ]- F I, U9 y0 [# a+ c$ z 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 4 `0 r, J8 G6 m, \0 e- w1 F' ~

# c) Z1 O$ l9 L1 l

3 t1 n h6 N& F% l. f) U- S 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 " @9 C3 @( g& v- T9 ]+ X

g$ j; S% M: M+ ^* I, l

- C! s' R7 ?3 f* j 结束 - f ]6 P( @* q' Y) @7 H% p

) S0 C+ x, R& b- E, {7 O

8 N, M V. u* o! k6 h  【推荐阅读】 $ U& [: W# r# V1 a/ v8 N

# H: F6 C0 T$ A" X! J5 x3 j

O2 R3 S2 c2 _ m0 N9 S 对吃鸡APP的分析 6 K% n6 e* }- t1 @8 e- X

* M5 Z3 P7 ?9 a& E6 w2 y

8 X$ ?7 j: b+ I$ X 你需要了解的APP安全 ! p9 c( R8 p: g% _! O. n" Z3 ~$ T

0 C, \8 P! ?. M

6 y! Q$ i8 Y# a 你需要了解的APP安全 " a# E% U8 c# u; K) {# [: U9 ~

& D6 f% L) m, `/ ?. S/ O

; v! a- Z: Z2 Z+ v5 I2 J   6 t5 P9 \6 F; N1 Q8 E- | _! ^

回复

使用道具 举报

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

本版积分规则

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