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

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

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

' U, d; j% e I5 V* w) P 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 % z- ]- G5 W \ b3 \

4 U% l {, z; l" h, N" ^1 l' e

& k- ?1 t: x6 X! }9 P6 ]8 a vshapes= ; I6 h! B5 I1 _& n6 E1 U( c; }

6 u% Z' M1 }- X7 k$ J6 t4 K [5 @

l8 }% p9 B5 P$ D( x2 Q' O   3 O7 |3 j. S' V3 Z

/ c8 g/ f4 u& [+ o( p: `

: ? {/ {: S/ c8 L$ l 下面就以开发者角度进行解析下这个APP的功能的实现原理。 5 u! P- w; g* ~2 Y4 i' w

0 X' z$ m+ Q3 [( d' ]7 ?- d

o' B# S! L. B9 f+ h   0 E/ ]% a6 u0 m, u2 O* I$ q: D

% n3 m' Y# H; ?; g9 A

) }! Z; ?; Y9 |) u9 s3 v! { 基础信息 ) I8 Q2 l6 ?; B

* q: y5 H* H" K7 Y- v' U2 J

! a* @/ W: ^ k4 z7 Z2 W) T9 V& O$ Y 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 . D' r" u. Z1 y9 ~

0 P7 g0 e8 }4 F8 c

" P. @9 T5 P* C) a; x! M0 Q vshapes= 9 H1 L q1 B8 r! h8 I

& Q7 H1 U% m b8 h" l

; n" z3 Y3 z: F; f. f   + e5 _7 Q r) j6 T. v

! i/ g# F* K" }' u+ Y- E5 L3 G

$ w$ t% e" `! `3 k6 Z3 m 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 * v& Y7 a; i5 D% a8 j) H5 w$ w! u

9 m$ H" Z3 {9 \% d A# J* ~& s

0 r q, ?* l1 i6 v vshapes= 2 J$ F$ T; y0 k3 ^5 b) k

! |9 z* M \9 R/ l9 L

7 S* v& [' }$ k: W& D0 c   3 `3 j A5 C8 T& {- E) m' o# |

* c6 s5 c' I: J7 v; ?- w2 h

$ f0 j2 E& g7 t/ S3 N# |" N 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 , q0 B/ c; ?/ U" ?5 h

% e7 j# x: b* J

5 T3 i9 P- z' ]- p! I4 ^ vshapes= ( h/ o3 x: b6 @) w

! M2 |: T+ a4 g D. w

y% l' K3 d6 R   ' B# \& z" `8 d! b: L$ h

8 v+ P- K0 M. E( g, L+ m" Q$ D/ o

+ v; p$ u+ B! P% k 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 & |! [; E) N) d% Z

8 g, [4 ~6 g( D" x

4 l! s0 P) t% i$ ]% l; D/ U& V vshapes= 6 S, e) v& S+ p0 {$ f5 k

3 ?, \! q+ X+ \. w6 r

0 Z4 i: G7 C( `4 G   4 {0 b' \- D% m# Y& z" X( g& ^ B

! n; \% f. m" m

! w7 S/ A: [# Y, W0 X; N; g; m$ z 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 5 G. w# o: m/ ?

8 w0 `9 I5 l* q: U

5 U, T! }% M" g$ e3 _& ^5 r2 G8 h vshapes= , U6 P6 W3 g/ v2 y

q1 f7 F" b; y) t: y; F

! P0 i* W9 J) k9 o5 V   , _- u# m3 i4 ~& R: K

2 i$ s2 y/ J9 @$ m$ L( J

2 j9 p' L5 q( L: X2 O' O0 Q   / R0 \+ ?0 b7 c3 |

* ]; _( ~4 U W& g

, v7 u+ X+ P8 P3 N 签名信息 1 }! S, a" {1 x

5 y( J- q. `% y

+ O: R7 U& U* ~4 ^8 M' _4 }5 v 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 1 H; c' e4 J* N% i4 Z& k5 Z

9 I+ z9 z0 q1 ?( Q5 ?4 F

" ^2 a0 Z2 r# L. |) ~ 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 & |0 u1 c9 ^1 l h* m

0 u2 G4 G. O2 o( A0 X: d

2 f$ u$ \( a$ V+ z- Y) g" W androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 , g' O7 J1 Q! R. p3 W# v

2 _. ]; ^/ W/ o! n

/ Z# l+ y1 j6 A. @6 H& L) A8 Q3 I# V! o vshapes= , j- }3 L: G0 V2 e5 ^* Y

$ E, U' p# Y E

, v; n* _ ]! C- \. u   3 V: d7 l" ?# |2 R, ~& G9 O

" Z; I1 w' V7 m2 h7 z. r$ l8 X& }

+ K; a+ s2 e: t# E( x* w android签名的数字证书的一般都是采用 X.509的国际标准。 9 N9 J# B2 B& n% G- r

7 B- D6 m" Z0 l

7 }! i" L5 J2 p+ Y X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 6 h4 T8 Y( ~" `# Z

2 C5 N' L# c! z0 H1 H. r, f/ [3 L

: V% k; [4 B/ r w5 [ 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 5 ?2 N D. a. M) K2 R) S. ?1 S7 |

0 w2 X6 s& s2 s, `

) B6 r! }" H4 w) @/ g" _ vshapes= - [8 ^- i, c1 @: N

& B" ]" p/ B* {* f2 M6 ]

3 |7 N4 \0 L& T8 Q0 j9 p) ~   & [% w, O5 O; Z- u

1 Y7 e8 G% x: u5 U( i

\, V0 i7 d% `5 t3 Q 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 4 S' k4 f! l* y- v( N+ i

1 T9 a4 I5 O6 H9 A

6 o8 o# n [' |8 ]9 o vshapes= + j# ^# ]' p; F& l$ X4 c" x3 G$ ?

) ^+ i Q* ? B8 `+ G9 a

; f I5 S0 c1 o$ M& ^( e: T 6 s; f; R/ H0 Q8 R! w' N6 P1 y

: W& c. h* t0 W9 |; V `* M

2 _+ U q' i% i; _   & _ j* o, v2 v6 u

6 L; [3 @7 _( N( x

) B' ^+ G0 s* T 权限信息 ( m7 \3 c) e# G5 {2 ]. N2 |6 L

5 a4 q6 ?' Z4 n# L z1 X

: e$ H( S v( J5 b7 I 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 0 v6 B" {6 D$ D

0 H6 s7 r U; G1 s- D6 D

* A$ p, q- L1 ^3 l) R; ? android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 8 s6 _% I4 d4 t/ x% n- U

5 I0 X9 b1 D, i+ U0 @

: ]& [# z. ^% ?% q, m2 ] vshapes= ) k* l& ?9 ^8 ?! r& H+ J) x4 j$ o

' b7 q7 V1 \" @, L# \4 k

! Q* R. @* t1 v9 C) Z+ Y. p   8 s ]" `9 {6 [- Z/ v

5 a/ y# p* f m9 b( O

$ j& t2 p3 T. O+ E5 U; [4 a 下面对这个APP的所有权限进行详解下: : |2 E* P8 f* ~9 X' k! F' W: m

) Y1 b( p" C& p- u9 Z3 f

3 u" G/ C7 e6 p# \& v android.permission.INTERNET :访问网络连接可能产生GPRS流量 / c" n+ _( C! y# V9 h' ~

. g; G& v9 h, O, n H

. Y) U5 L, r1 R; |4 C5 t android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 5 Y+ m( p5 W2 T4 J, l

% \, w( W9 b, S& N" w; a5 e o% Z

- }- y( w/ v$ y. V( U android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 8 @! M9 b. Y; G6 }1 c' W# a6 F

( S Y$ f" p2 Y" b

3 @, H1 o( s T7 t; N+ K6 F android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 5 @7 o/ a8 I/ A% h# \6 s$ S

7 ]# b+ z: L8 p+ A8 A+ R

) y7 q; V% W; u1 i$ d android.permission.WRITE_SMS:允许应用程序写短信内容 0 h0 D3 e' w5 r7 w+ m% H

4 ^3 N/ T% X6 V8 p+ Z0 Z

5 G" v/ B7 ^% E android.permission.READ_SMS:允许应用程序读取短信内容 : ?2 u/ O7 V. j! v

9 L! x: [0 v$ l3 t

3 Q$ {6 j: I- E! A4 B' J( t* s5 p android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 . b9 f% T0 H1 P2 ?8 F% j8 b. z

5 D$ ]' t0 B8 g3 P8 Z7 i

. Q: _' c% c7 o android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 . ]) D- F1 m) x, Z% Q8 y1 K& i

! r4 ~$ C0 X$ Z

! q% x0 L# D2 G( E! Z android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 : k- W, I8 c1 C

) s/ F9 F# c. Z* Y* p

' _: h0 O1 v4 J- F* c# w android.permission.VIBRATE:允许振动 ' |' a6 A \$ K' W6 B# [

9 w& h) v! o! J' M/ {+ d/ b

) l; T8 |; @1 {: o; R' \ android.permission.READ_LOGS:允许程序读取系统底层日志 $ s) J+ F) Z, G: \

4 O0 l2 Y2 L l" \; e

# T m1 m& H+ o- o android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  6 ~1 Q8 ?, v. w0 n" s" t

# S6 a2 o6 E1 K4 ^3 p2 \

: g- C2 ?6 i; r: p/ Y   " u, ?* f4 g) ]4 \9 k( t6 w- H

) E# U7 o3 a$ k2 @

$ B% A2 K% d% W7 h6 a 功能信息 0 H! t' t. Y2 X. }

b# H9 v* j+ D+ ~ ]" K8 W

; |3 q# s# F& @' _3 h   * t$ O/ b2 j. W8 c! E

7 @% T! J( D* @

/ D0 M! M9 G; G5 ~, H! I( N9 S: j( c 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 1 q3 I* w0 e8 T. Q) Z

0 `: ]& a' c" ]: {

0 ~* E0 a! Z' p! | Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 7 ]8 l6 {2 `% M0 m. f

& ], i0 O" T0 X, w. @

+ n* J4 \. _/ K 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 : I, E6 X$ w* a8 U+ p; |

- H, _9 N; B0 v; d9 Q, y5 g9 E

* N4 K. @; Z. T+ ~. y! H/ m9 ^ 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 4 H8 t+ {$ P- I) D' l0 d, B& s

/ r3 k7 |8 R: i1 e7 t

2 c; s6 B: \5 { c vshapes= 8 i5 |2 H/ U m% ^

0 l2 A% [" m0 b

* W+ A; o3 I! _9 v( v   / G% N' V# h: K& r

, G' B9 g( l/ W, e% m+ t0 Y

- C# z+ _. L& H4 V. H; q9 H 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 3 ]( x: _6 @6 V2 l( o

) G# R7 _* |3 d( ]8 u

/ S3 H9 F' l3 O- m6 b- i* f vshapes= " _* T% j4 E# w

+ f+ t0 A/ s# [0 n4 U) }- A

3 d8 b1 k1 ?3 i   O7 f! b2 F+ E# ~

( [+ q3 T N0 p3 I- M: _

% V* V. F0 M4 f6 V3 v lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 5 J$ P3 L* F' y1 s8 b0 ]

" l9 n5 |& q2 m$ s

2 ]& I; q! o- C! { vshapes= x# W* h I, u' _8 {* g3 P; K

: M, ^# _- A1 b4 K7 D) U* {

& s4 l/ ?' l1 g# Q: y1 n1 w 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 , X0 C& b' i; }& k* ?' y

% F* z' h" ?) ?) S, n

5 y& Z$ W: X7 |: L vshapes= 2 ?9 q3 t- B3 f# f; v' \5 F

0 d2 k* Z" D: l M4 T m1 A

* T: S0 a8 o& V- E9 R+ q   Z$ ?* t& C( W3 q" s' ?

8 `3 F1 q: ?: ~; a. n

" V; e) X' t8 z! e; n; | 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 % F( z0 ]; x0 y4 G; M5 {

* {( _) v' {0 X- O8 y

3 v. L" w, J9 L9 V* N4 R9 L LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 : |/ b# X2 l' `2 y4 C6 Q3 Y) w3 q$ O$ o

* R$ Y8 o$ k4 v* o' w5 M

& l$ F9 ?( W; H$ N8 h K 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 " l1 H5 S- w: b( ^4 s3 y# {" ~! a: K

1 ]' b! G- K4 r

& U: O+ e$ G6 [% {/ q& k: Y 源的luasocket代码可以参考学习下 : h% y* Q6 ^: v' G% r0 h( S. |& b8 E

0 D" z! D+ c+ \4 V/ Q

1 F" g* I7 v( i$ f2 y- [, t# b https://github.com/lunarmodules/luasocket ( H+ y3 [ `% B/ z8 q1 u

2 c+ H; H# h7 e/ H# w1 w% O

- i |% H/ m- P1 R6 w- q4 @ https://github.com/fengye/luasocket # U+ h/ v% l; j$ w2 D% y2 j9 A

4 ?$ `- K" B/ e

9 b6 h7 S5 o2 J/ N, h4 h   $ o0 S) L2 |9 N, x0 R: n9 P+ c

- |( l' \9 d8 n* y

& F5 W$ Z4 n s7 R9 ?+ S5 q) z- j vshapes= 2 z2 h* i1 g8 e; u, D% t4 q

" O) T+ L4 `. \" c

) v% k8 s9 L- S& Z   . c. D( `# ^" L: Q) C5 N9 u

' A8 B, A, U- |

8 h- a( F7 y7 a9 y2 x% M" ~   4 z# Y1 h/ o5 ]

3 [: F4 X8 s6 B3 Z

: M: [4 j1 g6 a. W4 g 总结 8 a" \8 ?& Z+ k8 K! L% X8 K

, G% D) r" } U; C8 b. q% K% f3 a

; T+ N5 R. Q* J$ a9 r8 Z0 ] 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 ) q8 o- E6 v' }3 f. l9 q& t

5 c% Q& h" W. [3 S2 ^5 J6 [4 G

u& F! M0 {! W; L8 k, i7 Q# a 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 + u/ o' s8 [- \

, b/ Y* m* u! K- Q8 U0 c- s8 C; j

6 {$ X. R" E) `1 `2 I' D+ d 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 P ^( n5 @% n1 \6 E

5 Y+ s7 L5 \% A$ r

/ m7 i8 l6 N' y, }2 |- M- S9 | 结束 : G3 c& t( ~' {& q

$ ^8 F" x0 n/ b# s, x: T

6 l* f" c# s/ S7 e( F3 _1 X4 }0 P( U  【推荐阅读】 - ]0 t. y6 W, f [+ b: P

, l. }/ H ?& M1 I7 ?9 S2 N4 u' @

& j' C3 d' O! [5 B 对吃鸡APP的分析 ! h5 k+ q" _; h5 s- e8 g

$ e4 J }: B! Z- X( h& ^" C

. d4 r2 Z# l- c8 X$ z1 K" ^% S5 ? 你需要了解的APP安全 . O3 u) ^2 O( [- _" _

6 E$ L- y+ _: P; I

" |1 F* Q0 N3 Q# A- s0 B" b 你需要了解的APP安全 6 [, o6 J; p$ {' ]2 Z

8 J/ P" L# m. c' l7 W* K7 L) p, Q

1 e% j7 S) M' T; e0 |7 x   , U( H$ j: n, [2 E# z& J

回复

使用道具 举报

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

本版积分规则

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