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

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

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

0 S3 q9 o0 L- H+ q4 ^# Y 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 . u) R8 ~3 z5 i; {5 B7 q

: T7 y* }. H' _9 M$ x, \( v* Y2 J

- V0 g3 ^9 e( [5 X. Z vshapes= # k" j, o" V4 e- o5 P

( `, [6 L. [: B7 S" o

* p# u [( _1 ^; z   & [7 e2 O3 R2 r

5 ~; f% l. Y6 f

. F( V' q0 ^: p5 o8 ` 下面就以开发者角度进行解析下这个APP的功能的实现原理。 0 }* k. Q$ h _: A* n

1 F& S; [1 K% }$ F

$ \, U h1 a8 F8 x' }+ L+ y6 Q3 q   & g2 c+ q# k5 G. X$ s% g8 v

$ P+ ~ ^0 b; {/ }

8 y* T) p5 M: |! Y3 ~ 基础信息 + T, a2 k4 u7 o: l* T

/ ~& z8 }, }4 O8 [

4 h8 f8 q* y2 S! l6 ^3 E4 V 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ?2 ~$ h0 v- L. {8 ?2 q

+ L j" O' G8 i0 H

, }& [9 D+ s1 S vshapes= - A! D. y+ F+ [0 D( W

6 v! _) ]8 g; K0 G! K

; p7 G) A4 `, L+ w+ _% ^) E# w   - u$ U# _% m4 J8 ~ q4 W+ o0 k

/ b2 t) C5 U: ?1 p# ]9 O

1 X7 P. ^2 p F! }2 v1 B& I! v 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 D9 M/ C5 x% v4 @1 X# V3 d. k

- | _6 k9 L9 c# n; t; H

1 r# n9 S9 H3 a. J3 h! O7 [) L vshapes= - L, ~9 A+ r2 {! l# q$ _! }+ b

% J6 {4 X+ [4 N/ [0 u

& B3 X. J' @" V: P! x* O   ; n* U( f. Y M

5 |% C0 L D, P, q! m: S

! a5 x2 U! ^4 V2 j' u 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ( J; q1 e% h) [4 p; T$ V. x

7 D# r1 L* W% M# w" I A/ o

0 C0 Y: S' t9 B* |6 ^6 q vshapes= / [( e, q$ U1 ]2 e

) u% W! k4 p- v! m

) t3 e5 i6 v. Z8 I7 w   C' K, l. Z6 J9 Z" D& i. m

* S. R7 M' T' d9 n

" ?; i9 L; a( c. F 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 % m: }* O. Y% T1 q4 k

/ S9 T8 w2 m9 E- F' u+ G9 ^' i

$ `; `5 }% d6 ?! m0 K+ Z' n$ I( b vshapes= ( b& I0 p3 \$ n

" e& W/ |- _1 B# P( g" c/ h$ ~

6 P: N% G! f6 U1 o. g7 e" T   - [1 K; t/ t9 u- a4 i9 G

) }9 C. F7 i% T- @, M! R

* g' j& }% v% Y% x 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 9 m& b' o* v, Y) w; H

8 k) S- L; P: E

: l) Z# {9 D( |) v2 b vshapes= 8 ^& y/ k% Z" h

1 H5 }$ M& C. S& {( N4 L

2 H( W/ X- l5 j2 z) B$ I   / R( i& N. t* K+ k

- J0 U& w. N l$ ~: c- a

. w! v3 r3 F, h1 P- j. |   , W8 i5 w! w9 k4 j- r

* D ^9 q8 r' `4 S8 A2 O/ s9 x" g* m- c+ d

- c" m' b* a" M5 C% y5 w! u2 X: | 签名信息 8 e/ F. M: @$ h" D! {4 a, S

. Y1 V3 w+ V2 T: i0 k( K

% w% @/ ^ F$ y0 } 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 & r* m( P4 v& E u& Q

0 K/ ]0 h" } S; \

8 T5 ~7 @9 i- ^. O) B/ i' x& M/ I 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 # R" L, q: z3 K0 P

! m7 X: h7 `6 s H

( W& v, n3 \5 ]9 o androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 6 ^4 x. D+ W% e+ z/ }9 w

" Y9 d; h4 n, v

9 B4 m1 s; s9 |/ b% B vshapes= ; p: l! w+ _, u9 D

0 V: j) U# X; w$ m' q

/ P# H- r: F" Z \: P   ' q; ?' M( [# \' z" S4 o2 C

# R; P$ _# C& j& ^

: ?; [* o; ]# k0 ~" o1 F8 b android签名的数字证书的一般都是采用 X.509的国际标准。 " f1 y% X$ k* s! e2 o3 [9 e# A6 v

$ v1 n- Q6 C+ O+ l, @

9 u! z2 [3 U% \' c* Z# C y r: x X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 , x4 j0 ?+ g+ q y

0 g9 b3 p z9 ?8 Q! s& s

7 I9 N6 N- i0 ^; Y& _) K9 h! R 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 & T* n, K# u* u: U- h! q5 f

/ g7 w! H& r% Z0 j+ ^

3 F/ S) [/ A4 L3 I5 P4 `. h vshapes= 5 i7 Z# t( c2 o# Y k% }: ?

7 Z) I3 ]/ A+ ]! e- r- V" T

6 M' w* V5 d3 N! S! Z   . }: V7 } w: B

0 j/ B5 Z& T' R1 P' N" y6 u

* }7 {* Q# L( q; C 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 2 K3 o2 a+ g0 }) V

( m# \$ [' ^# m

2 X: H5 N! A; ?3 G! z x5 i7 G. n vshapes= 5 P! {5 p" A& z* o5 [

( n, x! E% A f0 }! H# t* }

$ q( j, n9 m4 R5 ^4 _7 Q. j , r. a# @, [; L# q2 G3 F

- }0 {4 B* M$ w

# ?- a; Q( Z4 c& k   1 V \" G- \6 B+ d9 }5 t5 k

: y( r6 E2 }) |1 [6 [7 ~

6 h0 ~3 j6 |+ ~& ?; u$ J% t/ k 权限信息 ! H, p F6 F5 [ x" C! T6 m

8 p% H5 S# n3 T; j$ M" K4 s3 B

1 w& R. z8 k. u+ k& }6 B9 y 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) * n; h, f4 }+ q

9 R0 K$ [3 C+ I/ ]( W. E0 g5 j

: H% O% [# h# m' h% ?" k android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 7 X- {0 f5 K" X, E# J

8 l/ q4 N9 w2 b

' ?; l% o6 c8 U! W# }: R4 l% N+ U vshapes= " j7 f2 N0 T- f) G/ U" h9 P* W

2 {3 C1 ^/ X9 @9 x' m0 n5 B

- t, A0 @# U, c   7 t7 }5 ?% _0 a- w4 _6 R

0 p7 _6 n5 y3 A6 K9 t

9 C; V8 N, x+ _6 H9 a. l 下面对这个APP的所有权限进行详解下: - p) e$ H, o v5 F( _

) a/ q1 _5 i5 k7 [# T7 J) }4 S

$ K& l' v1 N$ i1 a3 v2 ^5 c android.permission.INTERNET :访问网络连接可能产生GPRS流量 2 x4 G6 D- H9 t, S A" T$ Y3 l4 X

# }. C M" Q8 q$ P

/ ~/ F/ P3 k: r$ m9 x1 Y! ` android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ( J: |' ]9 l% N6 `, |) L

9 ]" f3 @; w$ X" l* }& ^" M% f; T

- }! w3 f. p$ l( l android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 * q9 `/ v J5 t( ^$ p: }

R, }& G/ A- W% G+ |' m

5 c: J+ ~* Y! X% Y- E* P f6 \ android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ( S/ b; [* i+ W- H

: P! a/ | W& Q. @- \. m

8 s/ Q* b `/ c4 j. v, z/ y android.permission.WRITE_SMS:允许应用程序写短信内容 9 s% [/ K9 [( v0 T

$ S/ X; b) i# { M) K6 B, _# q

* i C4 S8 I3 \ android.permission.READ_SMS:允许应用程序读取短信内容 6 K$ `1 ?+ L+ |. {; h" a

4 i$ g0 c3 `2 E6 |7 l

9 S2 u5 _* C# p) [ @( I6 Y; |; `. E android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 7 f8 `' k2 Y& `) O2 |' V# \

% W7 f& x; j" o* R4 ?: e3 D

" W1 Q$ A$ S( R: F k }' a android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 0 h( [$ \* G4 x8 ~ ]. l

- \. P' R: [8 Y$ _! ` r- }

, R$ r* m/ @! c, b4 C android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 6 Y% g4 P& S+ [6 P

& `5 C) E+ w5 x! _0 A, ?- E

! M% A- C4 P( N, ^7 K# K android.permission.VIBRATE:允许振动 . R- _2 H) x4 `

7 d( D2 g( w% o9 [0 D6 B( p. V

4 m7 m' z) f) k4 E; j1 G1 _ android.permission.READ_LOGS:允许程序读取系统底层日志 P, x& j! M! u7 v1 I

& N8 e9 @, l% B9 `5 }" U& Q

' \: g& J$ ] t, P android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  3 F# n9 v p& w+ \. x* h' [* w

( s$ J& h/ A4 P3 V2 E9 f

+ \ {# {% r3 E* X0 [( q0 c% G* a   % ~* v9 a0 u; p; [3 B# q

+ o4 Q. L1 L6 Z! v" h: Z8 s

1 v" h' u n: i- j2 v: b5 X5 E0 x 功能信息 3 l3 Q2 l8 c. ?/ |2 C+ V

- V! s1 u# E7 A" s: e

5 k. Y+ Q" J& z, C. K   1 O5 ^4 p5 f! C `, F. k# j

5 r+ J: B: F( q5 v- }( Y

. C& d9 \ Z) f+ u: b3 v 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 % b+ G* _9 J0 g% W' O, C/ F% e

( @+ u9 v4 B; _! w

- v8 O9 ~# h! \5 @ Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 $ U; N5 `$ ~7 W" R; G

. g4 B3 x8 z/ c& `5 W( ?' Y# d

/ ]$ Q- c m. f 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 + k" Z% {0 [- }* X

' C! }1 p. q8 K! m

" ^4 z( Y- Z. t4 l 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 6 l' k! V' q: ^+ Q

' z% u; o' K7 {+ u+ Q ~* Q

* r- p' p: d1 M* Y, o% f9 ? _ vshapes= 1 b7 E" ?. ]6 T# H& e5 e0 m

" }! D$ |; a5 T. P# ?. e: [( E( o

4 ]- A5 E% s$ d! e! B   ' v; L/ [! E2 ~: Z7 B8 v2 ]

1 j* f" x: w7 @) L) G% J% L6 v7 j

/ j, V& k# m1 s7 F 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 # \' a# l6 l4 {' g2 \

. y! r* l& y* W+ B- F/ _

- d" j- {; b3 c vshapes= & e$ `5 b$ m0 Y6 G! }7 z

* G2 K7 ?6 w( _/ J5 L' s. y4 {

/ T% e/ E2 w% A& u1 }; T   + ]# ?2 x! ]) D. T

! a5 R: K: k! p, R) s0 H( f' q3 h/ E

$ i+ O4 j& c. h4 a0 ?# W! I% ^ lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 o8 a7 s+ b; I5 U: M! x) ]

5 Q! e5 Q$ @. C) }) {) `

% W2 [& Q2 o! l( B0 A vshapes= 8 J5 S2 q% Z X! ?; @

: N! I) J' U/ Z0 K

- _2 R# _+ p& J; l9 Y: W0 [6 |: ^ 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 # n1 L$ T; R$ x8 H

( r8 ], B" i$ b* Q

$ |5 h- {2 G( d4 t% ~* }$ m vshapes= ' I) L6 k' |$ B) o: R6 c; g O4 p

) ]. y2 l/ y5 v

2 ]" o1 `' n5 q& L: }/ ?   / n$ q/ i9 @2 P& q' v' P) W

3 |3 V3 P6 D8 T0 f

7 s. P. m8 F: P+ c 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 1 \) U6 c1 \" x

5 J- U! x6 I& Q/ B( ^& _

h9 R# N) f( k- W5 R& @4 T2 P LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 7 b2 O- o, j( w1 @6 d- x

. i% I0 S" ?$ F/ Z

% b0 a3 v, z& S0 Z' g v- V) r 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 " l% H* e6 Z. }8 j, k& m, l

3 h2 S8 [. B2 p h( Z9 v2 l* |; I

9 f3 t7 M, e" u: H1 N4 {9 X 源的luasocket代码可以参考学习下 ; [ b. Y T& \/ K6 g

; o* c. H2 w7 G- l% \

+ Y/ O" i8 G' _& W; ]; A: ` https://github.com/lunarmodules/luasocket 6 y) i* L/ R, p' i8 X7 Y/ r

$ K6 u; [+ R# A- V2 D2 w8 ]( `7 k

: F" d3 R! k, X ]# X4 Q9 h https://github.com/fengye/luasocket , n; [* c& g, ]% Y3 b' t. M

- q7 f/ k. W- z

' u. Q# r1 W) D6 {+ y3 M) T0 U   . l+ q, \0 ?$ t) G. {

% c7 _* O3 ~2 B; _6 w! G4 m) |

( D# h T% y4 L vshapes= ( g; A/ L& }. i4 |& B; |2 ~( J* N

' J( j. H( q9 g. g( R. X/ s

2 ~( h: _ C" j" a! _   g2 z. `4 e( Q8 O

l: h, m: t6 u7 n9 i& E* N

4 @3 N0 q$ c# H5 g2 T. B+ U8 x9 z   ' |6 Q. i# C6 M# a- \ C$ ]; E

]$ i( c6 P4 N: p

- b# ~0 S# g; J5 L5 e ]" F7 l 总结 " K- C W0 T; d8 S1 D& U) p

4 c% |5 t: M' {9 T

; M+ Q ^+ D2 w f 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 9 o# Q2 M1 |+ E; O" s

% d, t3 h- i2 f3 B) ^3 O

6 _. j. [5 z, A+ f5 M 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 5 M+ x H) M8 v5 P

" F. |/ D/ P. m1 K

3 g+ [0 H5 {* R! C4 n: } 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 " z/ z! [; |3 n

( l, n/ s) |( V' i4 c [

) m3 P( ^* t- O C 结束 + v k. b, W. c

/ G! Z" D/ F: ]& t$ G

3 u L' G5 H( h" ~+ r/ Z  【推荐阅读】 8 e' _) Y7 G# f- r6 W# a& `, y

4 w! S1 f4 I, T7 E9 @

J: K; h8 |7 b$ z: [4 p1 @ 对吃鸡APP的分析 , [& y# Z# b6 C& @

+ M3 R) G9 ?( h

8 z9 r: N+ H! `7 u5 o7 j 你需要了解的APP安全 1 A' T6 ]( Y: x% r7 I

$ @6 U( S# N8 P* H# ]

8 b8 x9 A# x/ |0 D: t b8 y) D 你需要了解的APP安全 8 H5 t' @' S' ~; L3 U7 v& W" H& O

* ?" Y- \# {: Y

; `; }. d( m. l: N; v# Z1 @' d1 P   3 p$ X) d; _8 f2 t4 t N

回复

使用道具 举报

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

本版积分规则

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