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

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

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

9 Y9 o6 ]7 p3 [) ?) ` 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 , p% m$ T# O# L9 Z, R9 o I- b

7 J7 y# W" B7 T2 w- L. P( @% Z/ a$ A

6 o0 `+ L+ M& }7 c5 C+ \ vshapes= , ]6 S& j9 Q6 e1 e% M( N0 Q8 n

0 C: G- b# @) I. C

7 W* y5 N0 }# t- v" t. Y   9 s# L# S$ @/ L e4 y8 I1 Z) s

; p3 H# D& q- Z7 n/ ?3 j" }

( S4 M+ x" v4 k+ A' r, x& |4 o9 X 下面就以开发者角度进行解析下这个APP的功能的实现原理。 5 E% n+ ?) B6 g# z/ H' I' ]

+ z5 I& |* {, s; w

) n; p9 c! L6 |' O# C   : }- B) ?( U C# ~8 q" b

. \ ~ u% C/ i$ R; C6 @ \5 V

, a q3 l) [$ _, @/ Z) }; ^ 基础信息 , {3 g' E& t7 P: k' y$ G

- ^$ V# ~7 o3 ?

1 e ^/ K6 E, X9 u5 s H6 N3 W 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 % Y4 x; Z( W( Z9 v

1 D, y) t( m3 M9 n6 F- K2 B$ q

/ a# B' r: A4 S vshapes= }7 a0 o7 C$ m

5 A( x' \7 h3 ~7 u3 @3 D+ F- U! _3 r

8 Q2 U7 G; e- [: {/ c9 b- r" L   - y% _! t: E& g) t

+ B# S7 i+ c! o! q

4 c$ @. a* `* F# P k 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ' l$ A! a+ i' M2 ~ c! q

% U3 [7 Q8 A1 o6 S8 a# a4 K

' z' y- ?$ o* F) N vshapes= $ ]" J. ]4 \" {+ }

7 f! @ B/ D! C2 s

. e9 R! v8 c4 v# f- y, T, A   0 w" z/ m5 K" L' }7 X2 j

6 z& B: J7 g7 c

7 q+ `/ b9 u* }; X 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 / F( t3 a A: B, }7 ~1 p. s' o

6 a6 G" k: x. p2 S4 Q# @

) `3 g; Q2 ^, n: D- F vshapes= 8 L) P% |+ v3 N! K V$ Y

# l, O" d; j- r0 N9 W

$ b8 |- b8 |8 n9 O# ~; S) U7 I- K" R1 x   6 a1 ^3 \% O& H5 B- E3 P6 I

}* ]+ k( g* c% B( t" r

( e# |. d7 ~+ ^' C8 j+ ` 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 . b4 g. U! y7 j! H- x

# t9 ?8 t# R/ V- n0 D4 \/ W

3 K( k# y+ d; ], Q" E3 z vshapes= ( m5 O L' V2 Q/ y- x6 Y8 w' D

1 [4 @2 s8 t7 D1 q" l; [# n+ y! D

+ M+ d- l2 k2 P2 P* {% q   ( I9 y$ c3 ?; j c; T+ X7 w4 B% \

$ }+ T4 X: f# u/ q x. `4 f% r

) X7 _' q. m: K) S3 C9 H7 L 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 8 f3 R4 M9 K. q$ g4 r1 ?, f

9 j, r0 \5 a2 X3 C

* y/ w* F) K" C) ` vshapes= 0 \% ?2 @4 u1 F/ y

: b7 |, T9 K) M

; K' T" s7 a& }- `0 S! X+ N9 C8 F   7 n& { ?+ \# b( H

1 J5 x0 B# C9 C4 O% ~

& o1 y' ~5 D) v* k8 y& Y   ! g' @% f6 h$ D/ `# ?0 s

~0 I, G" P1 v8 @2 O

* F9 A& x1 V0 h: n; d; l+ ? 签名信息 . h* w/ ^! i" a# |4 Y" J

. q- R# O' C4 y9 P0 [% B% j

5 u' ?+ P2 b2 \. e0 q 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 2 w- v. ] I" c1 l5 n: B

: P! A# B c, j9 y- L( G+ i

1 Q7 ?' l, E9 V9 J4 }. R 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 . g3 O' D# N# @% i

; L W* ~6 y( E( D8 T5 H

w8 B4 L% D8 v8 y# @ androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 # O8 y4 m4 B7 S. g6 M

7 }3 _9 c6 i# ^% a+ J7 {$ L& i

! N% U4 M/ W k4 ]. X vshapes= 8 d3 K% [$ r# e5 k0 c! z0 a2 B

) k& q& p6 O3 `! l

2 k5 x S% K. n5 Q H   9 r* K, E5 n% v9 Q

! O9 _1 B5 j! k! J. x) \

: a7 @2 ^- A# {8 R) p android签名的数字证书的一般都是采用 X.509的国际标准。 # b S1 x) K3 `6 G/ E) o

/ k W8 U8 W" W# H" Z

7 { @3 t( |' }- Q7 |( c1 U X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 " d+ G7 I+ J" B

4 |7 P$ b5 T: v- G' X/ s

5 p8 O4 W) e* X2 ^, i. z 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 4 `* C% K% b/ }5 h

0 F. J. i& ]) j* L( j( [

+ T, A/ s* Q+ Y4 z vshapes= ) U% L8 Z& F( y. @0 {

+ V* q3 w! h- y( S+ M

& b+ c) O! L" S5 H T   & B6 x( Z6 D) E7 v

, `; K2 B9 b) a9 H: `- I9 W

" H# ~$ c( N$ x+ j8 Q) P 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 - P8 S' i# a% v0 W( p1 P! X

( |8 a' u. f$ H

4 k1 z: ]+ |) F- H, f# j3 m vshapes= 8 D. ]9 B7 V4 |1 V- B0 c& `- i

$ p7 N2 Y1 q! J' h" M0 K: B

1 C/ q3 b! L& [ 2 L& `3 [: P' B- |

9 R2 C" n+ ~! e; X1 |2 |" Q* ?$ s2 L

% z, F2 c9 b, `8 }   6 H; i/ @" q: B/ D6 Y( b4 A+ |; J

7 q' \( E- T( p

' g& e" t ?' q4 E! b. I 权限信息 ' q, K P! u, i* G% U

! |) k9 n6 ?, m

' T2 S( L6 t, T, [: O 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ) X! a* \- T( P( o

$ D4 S7 H6 }% R) S$ S9 }% o

; S* O" Z/ Q: { android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ' m- k' W+ N! a! d+ I

, s1 A$ V: V% z1 K9 ]6 F! O

. r& [) [! o$ n5 n7 n! q' U; s9 U vshapes= * C: ~/ u) X3 e( a

7 u6 c2 S/ J2 \! K7 m0 C% [

" z1 V" z6 R5 e2 \$ ^   0 q, a$ Z* b- \# _: d7 `; R. ?, s

( g, ~% ^- u+ m$ G5 O

! X- p3 f" l2 s+ T 下面对这个APP的所有权限进行详解下: ' Y. z' L6 b" p$ v2 {9 t4 Y4 T

) L7 {; k: w9 P8 d$ y

' x% S7 A6 A0 A3 G) K android.permission.INTERNET :访问网络连接可能产生GPRS流量 ' m4 k1 u# E2 Q; @9 Q; L( R$ ~/ n

& t' W9 l( |8 `# ^$ V! d

3 v( I% ~% Y7 z9 G0 q' ^ android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ' e: a" Q& l j

1 S0 ^3 y# @- U7 b1 x' z

- F( W3 |& w6 `' B3 X. s4 j Y android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 + [4 V- o( N* e

" [' n1 o' D, \, e5 ]

# c+ t4 p2 ^1 ~7 U' v& @ android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 & R- N$ P, { F2 _

' s. R' l4 R# D$ W

% V4 {' ~2 @& }" F, W7 b. U5 [/ o/ v android.permission.WRITE_SMS:允许应用程序写短信内容 / {+ r+ Q' G6 a: V3 t5 T' f

7 h$ d2 B1 E l: u$ z4 L

" g: y) c( ^" u android.permission.READ_SMS:允许应用程序读取短信内容 $ _8 o# V: @$ d! V' o/ F

3 e4 c4 M1 C# s

0 i: h) m5 g/ u7 o8 \& | android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 5 L) d z' j% a! f$ z( X3 H

, r9 q2 U5 _2 v3 G' q) h

' l$ I' S E v" W- d1 i android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 - a- p! x5 U6 ?9 G, a4 |/ g3 f# h- k

# B# { D( g- n$ b, G/ {8 W- ^& V' }- D1 u

, M; P: l5 M: u3 V. C1 [ android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ; n- H" }" G' ?# B& Z7 I

4 J0 b7 Z# X8 B! q. k' W

$ R9 P5 j" O- ? android.permission.VIBRATE:允许振动 / G7 O! h% s' o9 t9 W* a

8 G# x! D- b: \0 F

; |+ Q* e" t; z& Q5 h% ?! b; T android.permission.READ_LOGS:允许程序读取系统底层日志 9 V! ]- v7 E& O# [, r- r6 P U

6 t* K9 R7 X: o0 ?. Y

0 M3 E6 Q) V9 e android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  4 ^. z# {( i3 N( q1 ]: ~

0 f# K+ E- @+ t1 |7 U

. O# J r0 v. n   ) W* E" y5 i/ T

2 u+ n8 h; c2 k, N" @

% J8 b+ \& R3 B8 t+ ?5 Z' }+ p9 R+ ~: Z 功能信息 0 J$ K+ a2 B8 X8 U5 t+ t( W& L# c

8 I( D, s2 s# S& ^( ?- }: |

/ D) L, M+ J& T4 O9 a   : q; r" G3 ~ _8 J* y5 o( ?

5 @% q+ {! [4 {& y& [* M$ ^" L: a7 j

: i% w* b/ i3 R 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 % Z0 |! H$ E% L5 Y4 X( o

# X s- s2 P- c5 P* G. j4 r. E% v

/ P" n P+ @. R4 L Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 8 V p4 w& j# o% ^% j3 X

7 Q7 L$ P3 y6 z, _- n

! c& `. \; K7 B" F$ P6 Y# ? 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 ) u# F+ T5 J) v$ y+ t F

( r- K. D) ^, l) @% s' }

: n& L' u- ^2 r# M6 } 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 , b6 f* g9 B+ T. u& t, R+ Z

- }- O' J. Y2 k& G. T( G6 C

/ _7 J- [6 d; X5 Q2 b vshapes= 4 l" h% @/ x2 S; }2 O" y

& w2 F4 U8 P) H

9 z! a5 ^0 ?9 r5 ^0 S   & l. J' G D2 D. r* K" b

: D2 g; h7 V- D3 I9 o

5 p, S3 y. Q7 C r8 x 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ) Y6 A: J8 i N: u

4 _1 ~9 ~4 ? H" M4 V. c3 S4 N

2 q. c6 P# L! \6 } \ vshapes= * K" a" O. d9 I' [/ O

1 [" J, }# ?, P( y

: J2 v+ k/ c. m3 @; F: x   3 i1 J5 J3 J. P

1 F3 f# c6 V* y

9 M6 _$ t7 R& ?( y) O5 m8 ^ lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 . n) Z0 g c: C+ S, P1 W" ~9 E

) F; i/ e1 h! }

# d% h% z) Q Q1 I vshapes= 5 c* \3 X# {! V" ~7 E/ r5 z3 g

' Z4 `. R6 G/ W9 U' |

; X& s1 d* j7 [- O 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 + ], m6 G% e7 o9 d

/ U' E! G! ^% O# D- X3 R) T

' y( V4 Z1 c' S6 ~/ z: I, [9 H vshapes= , |6 V, T* g1 `! X

b# n' |/ b1 W1 H

6 V& ~' Z$ h- I8 }- r3 M. L   # ?6 f; C# O- X- ^/ K, o# r

8 j/ ^$ w" V" d9 d3 h; y; B

. s3 B; ], U$ a8 G& G1 }- b 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 9 B0 v4 A% B; }. Y: j

/ f4 e8 p) }; o- q- Y

+ v; E- g, q! W. C' {; U O8 j5 _ LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 , k" C0 s" @: L, _$ G

6 e: g D) y6 s3 X% P0 ]

# }2 b5 S/ n X0 G; B. `! }5 @, H5 f 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 2 U6 S8 o4 T; [0 p5 ~' e" ?

% H3 Q4 ]6 G0 N( f5 J1 f: }

0 G$ ^0 u+ ?! ^* ]3 E 源的luasocket代码可以参考学习下 ) T8 ~5 o8 m6 p# N3 I

5 M+ f# Q0 g( }

w; W/ ^3 @9 v. @; B) N https://github.com/lunarmodules/luasocket ! m. f9 T# J! j7 i7 E

1 v8 {( v" t0 g/ C l. v

- v3 _0 u0 E( U3 x) h$ x @ https://github.com/fengye/luasocket * {4 b: h% F% f: E+ Y) n A

+ a1 M: w0 h# G5 Z& ?5 @4 g7 I& ]

7 F" d b$ P! V" j2 R   , z, ?8 c6 `: x# _2 a3 }3 [( b) F

1 n9 [% g( R$ i( M% k+ v

- K9 `4 A# m2 }7 M* G" C- ^ B vshapes= 7 r7 C2 \/ T ~/ J$ Z6 F

* t/ o2 C4 \: U# {6 [2 B

' {2 Q h. z' n( O   % @9 p5 X+ t- U) h

; M# ?2 U# u3 r7 v

}% d' O4 x8 L# R" M7 F: H   1 t9 H1 t$ N# L6 g; J3 y' O, c

9 J3 I) U( z( J- D! D- |

( O, j& ~9 q3 S s 总结 " Y# }. o" a, R7 @ {% D1 u% ~ n

# G6 C- ~% i7 F9 V9 |; W

, B- Q# A: w# ?2 \ 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 # ?1 G( P, Z, k. Y1 @# J

" W ^* W& o8 f$ g! k4 d1 U. [

4 H: D8 Y: F2 a7 h2 ?- ~ 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 : i- o! L- F/ n* _' U! k

6 g7 d8 H2 h9 p8 t7 D0 @* d

. ~* N' R! J! Q' Z& s! ]! y 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ) f8 Y+ N- M+ H. r

Z2 `, _9 Q! k

" H( q- r1 W' n* o/ Q1 t' @3 e, x 结束 $ K& v/ ~% |; U v! H$ K

+ u5 M) ]. m6 @: p/ x" m+ d

1 c, f- `. w8 B) ]! A: m  【推荐阅读】 6 c3 T: q2 e3 b5 ~. b# f

; {& `/ ]1 V d* q! w' H. m

" @& B; W* O# w( K4 T Z 对吃鸡APP的分析 ) r! h6 U+ e; D# d4 U8 w. Z. |

9 u" p, b$ f& u: g! W! M7 u

8 c( |. L% [. i+ u5 B0 u 你需要了解的APP安全 , A- L+ k4 q" F7 J! Z

' F8 P3 G' ^, O) l

) h4 v3 N6 g; @. K# F0 Y 你需要了解的APP安全 s1 i1 L9 O6 ^: D

& v) f& q7 I/ G; t# L: p/ G

, |/ {; f# v# d9 T   ! b' m6 e# I8 Q1 Q4 B9 S

回复

使用道具 举报

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

本版积分规则

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