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

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

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

: `+ j) h! H3 p" ~- o 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 " {, B5 n: n; ~* G; G

" M ?0 ~5 Y: z A

9 Y/ r" D8 r2 x& f2 Z; y vshapes= ) t/ @2 s" |; E

0 D) P! b" g% N5 _8 {

9 n# O1 W+ i3 q* L" o   % u! q( l) S8 J- q* l; x

/ a" s' X* _ C

6 C* }3 N" W, n2 m. v: P* B. h 下面就以开发者角度进行解析下这个APP的功能的实现原理。 - K! a- A) h: q. @. M& T$ n

6 b& G3 T8 b7 _6 V2 {7 ~

* k! E# Q( g, l* |+ O   8 h' S' v9 I6 e; v! m

4 W4 J' e$ l" B8 r4 W5 h. f

2 Y0 v$ p" F7 L 基础信息 % ~/ g+ s \) s0 \6 O

/ O8 s; ~5 P' D2 k" i2 W1 A U

0 e$ F5 Q7 }5 a# C: V% Y 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 % T( t! e" o d Q& M

# H9 f: D- B0 T2 a* r& d. A

. A4 }- Y1 ^; |' C% L. q8 H vshapes= ! i/ G: |2 J' F% Y' x) P

( j; {( ?- s) c; G

. O3 ]9 e4 A3 d) @8 b   + e' Y% Q7 Q* o6 ^, |% h

2 d- l0 m# w! C8 @

( i K! ^* }( W& p# i4 d* ~$ D 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 " W4 H5 x, l& C$ p

8 }( y7 a+ D' [

# ?; Z8 j9 n6 ~/ p2 g vshapes= % h& K3 @+ @' d

. i+ h! C) H) d8 j

, k5 |: e4 k5 [9 A; G+ n, K   * J/ X( w7 D0 b K: |+ i' ] `

5 t% K. c d% F5 G, y# o

7 g, X5 M; ~" Z6 h) V. D 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 0 f, j, F. J+ _8 ?

. j/ Y, B2 B8 e7 G

8 t, T( t8 a. u vshapes= ( Z8 P9 i' s. |; E+ p

( A v% I9 \# L; i0 Z9 h, A

2 s: t) F3 a8 M8 g7 X3 p) S   % }: X+ G+ M0 }3 o+ g: s- M J

& D( o1 a( D8 a& ^

2 {" ^# o0 G1 x5 ?, ]% V# r 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 $ I; M) j% Z3 G! P' C0 B, x* _

; X. _; x( H9 b; H) {1 P

2 T/ {& p6 _, u! L( n vshapes= 0 d5 ~( Z& J7 d z. V _) D

" o% J# P ]+ \

, j n+ N+ O ^9 I   / _) e7 y8 \: m5 w; A T

, F) d, w; o0 l& N# `

5 `8 f+ }! {" x& b ^( i5 V0 A* w 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 % l. N) r) A) J; e" N" k8 P

% u1 ~5 }) L0 Z5 o5 S* D9 P

0 M# W) R# H( {! p' I2 H' ? vshapes= $ ?$ u2 v( c' ?9 {* p( j1 d

) v3 `7 D3 |+ M& E# M$ J" l

0 @, Z0 ~" n V5 n   # F( g5 e% Q$ @% T% c& d

- P2 y1 f; x, |4 H- ^1 T

! z* i& v% \0 w6 P   3 ], o0 u3 i2 A! W* L6 d+ L

7 u/ J4 ~* k5 C# Z& w" b/ u& |

( W4 S7 I* m0 ^2 T 签名信息 ' U; U/ {9 M$ I1 L" O$ q

- Q7 q4 L0 r3 \, n1 Q7 |! A

2 a2 ^% i8 I' u. K 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 5 U7 q7 p7 D* _' W, F! R2 v& Z

' C0 {9 J2 i6 q: n+ r

# q5 q" L9 h9 n) d* u 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 7 ~* X. F% x* l7 P& Z# k* }

1 J, Q7 V" p% P, X5 P9 w0 q1 _4 @

e* y5 H$ o) x5 g- O androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 - d) G" c" h4 G! p4 J6 S

. q& e9 U; l& {! A4 Q) W

4 P8 f# I/ P) T8 a' g" Y$ f vshapes= , J6 f% t4 R1 N" G" K5 _

8 C0 [, d7 P6 [+ h" S9 T. K

) P( u) l# L: u4 W, p1 U   H5 W2 t( a# c R2 x! d0 T v! H

# w5 j9 `, k# q) X

1 d, {5 ~. F+ m android签名的数字证书的一般都是采用 X.509的国际标准。 + ~; S- ~# J) K1 e2 F) i

5 ]9 x6 U4 @& g- l! C

) h( \& W" B/ ~2 T X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 8 v1 b2 D0 a* M3 g

, ]( { e: d, e' a& O7 w

; Z6 @4 h* V; Z% y! T1 V3 O 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 7 R" w9 u' b4 ?1 g$ ?

[1 e1 q( {- f( o1 {1 z' N8 ]

a8 p6 l! _8 A+ m8 e- q+ { vshapes= M+ W7 G/ u2 S% r1 M

3 Y+ r1 o1 V w3 u& [. E- r4 [

4 O' H% o! X0 J5 p) U   ( o! P$ L% x' {* g# P# I2 B

3 a: F8 {1 p j: M* S7 k

$ X; U1 g% @' O P 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 " d- m, Y) }3 ~+ d

! {& r0 n* [4 P$ F

7 q) O1 [ ]2 g( X2 ? vshapes= 7 X8 l' x/ S9 T! ^# w$ J. V

5 E5 ?: ?; M+ a6 q2 W2 f4 `! d

0 M: j' b6 s, m! O" f2 {6 O& r $ Y& e2 R! H# z% z' S# A

, W( T. j4 q' N, X

/ u1 B0 z# T/ b! _$ P: |7 u% j1 f   % p& c7 _, B, y/ L. w' E

, r2 x( m6 ^, h5 w6 Q2 R7 w

9 U2 A( `, s1 ` 权限信息 2 @, q0 h) P1 p* o& D# e% ~

4 N y5 @9 v+ @2 E) N% g

7 b$ p$ S: t3 M5 d# x2 T 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) $ o" Q% a! K5 G+ @8 I/ Y' p j; \

1 S7 ?, D, ?8 ]2 p! P5 l

8 f6 c, y) ?0 }2 t8 w' h. M android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 + }1 D* c. f$ S

& l6 W. l) |1 I8 T n' o

: Y$ }: D* H. a0 i3 u: w1 Q vshapes= $ |" h1 V7 b* ?% E1 G5 \

" q* \! U' g/ F

1 `! Q2 j7 p2 m2 P( e   ; S5 Z6 T7 F7 J/ l% V# H6 S

" a+ K9 e+ f$ K1 A/ w# C* d2 B

& j0 J/ P/ p+ j: @ 下面对这个APP的所有权限进行详解下: 6 w8 e/ i7 n% I; u5 o+ J

4 d( q4 m3 P# |3 ^

0 Y" l* |& w, s, D: a) @3 {! } android.permission.INTERNET :访问网络连接可能产生GPRS流量 ) q$ f9 b, a" c0 H

( \4 C5 a1 \! t1 D9 R

/ k; ~: F; ~4 X. V* t- d5 }0 _ android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 , C1 d( ~; N: i, I

1 c) T: y" l/ s/ V) Y2 H0 h

0 K0 F' g, B5 r! `9 f android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ' s. N- e( K8 _2 G' ~

K: ~! a; E" E# S% H5 k7 I

' G7 ~6 f" D z, s7 Z) |. f; y android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 " I& a g" C) g. X

3 u4 m( C( }# u2 T- a2 x' S

: d2 p) R6 q, U- s( U; a' V android.permission.WRITE_SMS:允许应用程序写短信内容 ; B( v- t3 l; t+ v% [% ^% k- E1 m

! g w: P1 }" F0 ?

# c; K4 ~1 s5 E& D, Y7 X. _5 [" R android.permission.READ_SMS:允许应用程序读取短信内容 . n9 |% O8 B1 B E/ W6 l

* ^! | f5 i, {1 F: H

" N8 S* V% s2 E& k- {: O1 ]* U9 [8 o android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 5 w/ d. H" P5 K$ g! n0 k# t

% I2 W2 q! p" o E; b0 k

0 K# U8 q9 J v+ | android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 6 E$ n( j) g& o: o% c+ {1 {" }0 s

6 a; s7 p5 w, G4 l

5 P' Y9 h, t0 Y5 T6 B. v android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 : o' |% G6 D9 w. U

: F- q+ `7 }& i0 r4 ^. D% R$ _

0 v" Y: F( \8 E- I android.permission.VIBRATE:允许振动 4 u, U8 s# c9 w9 k

# z/ q+ x, q9 L9 Q

& n9 c/ |! l. E. h4 D. p android.permission.READ_LOGS:允许程序读取系统底层日志 " {# n, H+ v X* u

$ q8 M% W% t! `

5 x, o: R$ X4 z1 }8 P6 T) w+ d android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  3 u6 p. R n6 m: S4 V

2 E m0 @& _9 W& t3 |

8 o2 p' G! {4 ^% _7 a/ a- e   8 f2 P l$ D& t- w9 t

$ T% ]3 d$ i8 Z7 O1 k

0 w$ K2 A V0 f/ |9 E8 X 功能信息 7 @7 z; F, Z6 J9 t- X

+ _ Z' I& r5 M5 J$ J# V

( P! X w" A% b2 F5 a/ C   + C% n5 b# {/ y* r4 ]

( z- e; X# @0 Y: y% i! p& `

6 u3 u2 m9 H1 l, m& R, q 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 ! r. k4 ~+ ^9 O" ~$ R0 v# u5 Z% r

0 i7 D! }! @# a% o

% n& d; s# s; [* K( N6 \ Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 3 \& ~, T: c8 _) M

9 f. d, n8 N1 \

$ P5 R A1 A% l: ]8 x$ T7 z 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 0 l% @& [" f( _' a% I

9 t6 \- i/ L% C- \5 u6 W* G% a

: z) ]! c# y G* k) p6 A/ \+ \ 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 8 p L* M' W M

Y2 I6 d K# _/ b

9 \4 M) j, {* K+ b! D vshapes= 3 U/ S: U0 b$ |& r( }6 A+ k Z7 ^

2 ?6 J: }: X# a0 R. v( { P4 q

) y2 k! T; n7 i; V. g   , E! A6 J u& G7 r4 F

O5 F- y+ V7 v4 g

. F+ O3 a1 x) h ?) A- ^: e { 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ( H. _) r; L" ?

6 [8 |6 s2 a7 R0 d: J! z- S9 S

- i3 o2 f; Z( I% v) u3 [ vshapes= ; n- \9 S/ A8 f- i% n$ h

+ a! W7 b2 B% E7 s& C

" J) {$ U7 ?4 n9 \, E1 q% Q   ) E6 k6 x5 H- {9 q

& k; r8 |4 A) u3 H; B- t

( }$ C3 c* X* u; S4 L& N R lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 0 v7 s d: L% y% o

% A; y& G% b$ @

# f5 }8 t3 y5 e- E: D vshapes= * E B* s0 F2 Q

7 l. z* A4 n, w+ C% V' R+ g

' F8 P5 C6 b, {( f* R 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 " f6 M( [& F r7 U5 x

. A j0 U6 L: a. R

5 y- e% h, Q [" I4 f5 f vshapes= : ]& s2 q ?* \# \

( J% U6 X! i2 U* h* N; l( n, A

3 E4 C! B1 }& `2 }6 `% B6 o   0 r" l9 N( b2 @0 o9 B$ y

& {. C6 f7 n$ s6 v' Y' r3 b

6 {# G. X* I# Y9 h$ e8 p& p, B 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 3 ^' k5 c$ O0 h% u) e) Z

, E$ k+ u( M. l

$ w$ B* j$ n& d6 J5 D* X" _- i LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 # p) j8 S/ ]4 ^1 ?, V

6 r! r2 l5 e0 Y y0 D. b/ q

* K' J4 [- t' H. \* p7 I# Y2 x1 ^; s 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 $ {4 `# P; w8 H

0 y4 n6 c2 O. B9 a! N9 \% H

' p k" P- h: k7 _ 源的luasocket代码可以参考学习下 $ a! |% s9 ?, s: A% D3 s

* R7 n8 W, l1 z# ^2 c

# y) K9 B* e5 S( c b5 m7 V https://github.com/lunarmodules/luasocket 8 G6 }/ S; L( W) K

% ^+ H: R5 g7 r+ ?# ^# k) z

! W* k4 {6 {: o" \7 e. ]( `7 c- o# Q1 | https://github.com/fengye/luasocket 6 u F' E" W/ o7 b" o- Q

+ z! Z( ]3 M9 o

: [: B# c4 D5 w; z) p   c9 Z' ?8 [& N5 G# d5 K, T

5 S. P5 s( x9 R4 q

, [2 G0 ?6 Q9 Q9 O! _. Y- @ vshapes= & v5 s& M3 x A) l5 p# B" U; O

+ o) \ P3 J9 K; n1 X8 l* k

/ p3 p. g( H N" P1 p% @   / d ?$ i7 f- H/ m! a) E

( F2 \: _0 \! l. ?" ?

. v! P; G4 j) x) U* Q   . Y% v% x* s8 U

9 d8 j. ]" \- F6 ?( p

0 \9 z- s' d( i. V: R+ ?/ i 总结 % |& X5 q% ]# }4 [* A& B# w# \

l" y' D9 y1 g1 N! p

; b8 s& _& F& ]5 _% Z 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 # z3 E, O' E+ g# U

, o# z2 M* D- A' l$ C* ]8 d

& K3 }; U& }0 p: U4 q7 T) c [ 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ) G2 l$ i6 a# M( Q) C

% T7 `* J" w2 D2 I

" q0 H4 A, \% E, D" n 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 % Q% w4 J V) N* v5 i- K8 c% c

. o: |5 F9 H5 `) U9 c

0 t& |3 M: S1 W) x! r% S. b 结束 + p& V% W1 W5 f" k; m

( j6 y8 y5 ~1 q @6 B7 K. h; E

& ?3 G/ C# f6 Q6 G6 G  【推荐阅读】 ; i( F, m+ x+ v1 w

7 l: O/ n. p4 s2 x

# y! m* y: Q6 V0 N, O. d, L+ W 对吃鸡APP的分析 + E: A7 }/ ~: t+ d- a. w

0 }& x' [; |4 e T3 a) K6 B

5 k% ]. t) b. s* ~$ j- O2 V9 s 你需要了解的APP安全 ) t' [- R: P+ {. W

& g' b7 m5 T+ |! N8 b! V* p. d

) s/ d" @6 C0 o* v* N, W @9 C5 ?( p4 ? 你需要了解的APP安全 ( ?( m8 g3 {- [4 d: p

9 ~. u3 F* x& N U! X1 i

$ Y/ J i2 s' W+ Y5 o$ H+ V   3 n4 w$ |& x1 |5 v; [5 F @

回复

使用道具 举报

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

本版积分规则

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