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

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

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

2 f" R- i; t) F- G6 W( N 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 ! c2 }* {# e5 m% W0 T

! A$ ]4 n' L9 j

' n6 `6 d6 j( @/ h vshapes= ( l) \, H% b6 V5 p1 M: T2 I

; g6 M2 b0 _) g

% ?& }7 c* Y5 i# e3 Z   6 l$ K9 A* H0 ?% R, D( A, E% C: {

+ \& e8 H. C/ u

& {% k1 D2 r! e# X6 x 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ' K. w& N9 G. P: E

- |0 J) g: D" k5 U* P# n# W ~- r) ]

6 E+ K6 X8 q# L* Y' k( u: F   4 F- F' U$ {" {

( W+ E3 s0 { |6 F$ a

" I/ ^2 q j' S5 O' I 基础信息 # M. m. C4 |0 x+ }" J0 P' a- z

) u. Z+ r- k0 D w, Z/ Y6 E

2 }* C- C) s6 }" _/ f( v; Z 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ) _( Q" Y" T' v

2 v4 ]! v& G: b3 ]. G

6 R$ O2 Z* J, z( D& n6 t3 S vshapes= 3 i; h4 {9 }" p& ]; F

" q E( y, r e. R- z9 r2 a. z; O5 c

) A6 _( }8 q9 y& V   / l( r- [: g1 ^. m5 e: t

. f1 Z" t+ g2 c. a0 j

6 m0 }! ` B! s0 {: A& k, o 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ( E- f) g2 H" }! ` { i" Y2 V

. b4 S; [" H( J6 I. s+ q) ?

" S8 @) v9 B* z; H* Z; P, Y vshapes= " I( O/ B! `6 S' z

3 S* |8 P) R. b' a8 V$ n1 a

1 V& f9 p! W* {, E/ q" P6 R   ! p0 _4 k; Q5 u, L% `- ]

2 Z+ I! Q2 `+ D! L

3 o A7 d4 p ?" \8 p' F( u 通过jadx工具查看,该APP的Java层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 5 y! @6 z2 }; b8 B5 M

8 K9 a/ @1 G) I: n4 A/ ?! e

5 B$ Z5 o. M6 x6 W# Y vshapes= 4 j- P/ m4 f% S P3 K: h

% k% T7 \* ?- }& l" i

. H; x5 }* b$ q- K. F" W% ]   ' N. E5 _' |$ D, ]. M

; l# o3 z6 R2 a8 ]7 ?) H) ^

5 b' F0 d: z/ u$ g# b 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1个EditText和3个Button控件组成的,也就是下面的截图信息。 / Z7 u2 \+ r1 Y3 t

/ c8 f$ X/ U" ~7 u/ g7 _8 I

" z B& u4 w+ s) E2 n) Y vshapes= : \2 B0 I M' Q5 }) R0 J

+ g ]+ r5 E: O% h. C5 U7 ?, D% L) F

6 C6 v& J. ~7 V, h   * y' C; k& ]0 v) e4 W7 ~7 T

( l3 A" g* b: `% q

( Z$ H: {. M" L& f) _ 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 0 Z2 f5 i% W% u9 M) J! a

- U) {- F$ W! N4 A

5 s3 R2 E5 I- C; F0 D+ \1 ? vshapes= 6 O" i# r O8 x- W( C+ V

* e4 A I4 W) R1 C: e' c5 k& E

7 e/ u3 I' _9 c( L3 ]9 L3 ^" A, V   $ p$ v" ?9 t: B

[& m4 w4 Q' p$ a. O1 K

7 J3 @, q2 t6 l   1 U8 p* ^2 g, _5 \: n- B5 l" ]

9 y) e# L, W9 t; R5 z5 }! x! ~

) M" A0 }2 F3 V& H9 D8 U5 l 签名信息 . _0 N0 F: z- f Q# \' Z

: v I. g3 u7 U/ {5 m

% {1 u" b% R: [! T; d 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名。 % Z3 }0 C9 a# _% c

4 _8 c8 d: [, c7 o

, V( O1 O0 i2 `3 D 目前APP中大部分都是通过V1和V2签名相结合的。并且这个在签名过程中要保证按照V1到V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 7 B% X) m8 u( N& U

& w/ k* a6 A. W+ b/ z

- I+ f' r2 `# l& w( e" M6 X 在android的app开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 - m* d% U+ }" f1 s' ]1 ?0 Z

8 M0 Q: R5 o. W8 Q

/ `- @2 U4 H3 g2 x0 j. u' | vshapes= 0 W4 M4 m! O4 y2 M0 ]8 a$ d

) k1 `. y! n3 l! U$ i" Q

2 ~3 V6 g$ H4 r) h) n   0 z0 D) S3 v! A" Z

& `6 S1 F( G8 W `6 W

# o; ~+ _" k# O/ g( J" a android签名的数字证书的一般都是采用 X.509的国际标准。 7 N" x X" u' ^# k/ c

- {9 R) ]' j, F7 U% p

8 B8 r. B( x! `) s 因X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 0 Y, n8 D) L1 k8 M$ D/ p

& Q$ h1 W2 K M [# y* D. u

% r" l' u- H# I! s 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 $ P" Y( _# e0 n9 ?* h

) Z' i' C K f

# M1 B! q/ i+ ?" L vshapes= ) ~1 M* T# [7 l5 A; d) G/ @

1 k2 y. I1 h$ W2 u) a% W3 f _; W

$ Y: @" C# g( \ G; d: k% w   ! X& ^! \" Q1 V& m# N* i

9 X. ~! ` w4 C! Z& K+ z- m

/ l( O) {$ P- s5 P; V) N& D 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ! N! A& ?( F4 X+ T$ w

$ l& ^9 i* p- {' { ~

1 f/ D) `& o. }9 Y( z9 q- `: n( k/ v vshapes= 7 d5 Y& f! {6 c* r5 `. [% M

4 q" A1 o6 _- m+ G4 o0 B n

5 \7 i% _- q! |0 a! s 、 & _* T* s- ^$ \+ Q2 ~

j% H8 T: d3 \1 N, _

6 r% m* B, I8 P   7 d7 k. \+ [) d" a }$ s5 w' i E

. }1 ^) K/ B; K( S

3 D) v! X9 p, T( ?! R1 O6 i5 ~. H 权限信息 . I; v4 T* t4 g. {. D; { R

$ |) g( v2 u2 K {) U/ h

# s4 N# i( t" `6 f9 t, t 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) : I% F& ~+ O" ^

( b5 r: ?% M* \2 {9 T4 { r, e

$ Y1 g; a+ O; Z0 q android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 9 i, N1 d t6 T! e; e$ Z

3 R+ z; J: F4 \$ u7 E

5 e9 N8 Z Y8 G$ w7 {& ~ vshapes= % @. E- u5 @- t' E; t, E

2 ^8 G) O. a& t+ e; q c

9 u w0 D% Q5 p, M: B   / O$ L8 K3 r% t3 X: e

# Q" I$ h. h8 N6 z" J0 X

& B4 X& G2 K7 T( @! ] 下面对这个APP的所有权限进行详解下: , L% j6 L" z* i5 ^' O9 E

& `7 _$ @8 h2 o6 ]% j" Z, L7 o% n

% [4 {. `3 \+ w* p4 J android.permission.INTERNET :访问网络连接可能产生GPRS流量 . G2 Q' o' n- }7 |2 M; u

" T& a% P( ?$ ~; z' m5 ]

' |+ t& _' C0 }1 q5 B android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 # w( G; \. r4 Y( F

5 F- i2 T a2 D. w9 d& l5 Y' S

3 J8 y1 {. j' C android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ' m0 r: ?7 C" a& J! O. V, M% S3 Y- h

3 X S8 Q) N+ u/ S0 \

- P& {, z6 ~: N# Z; d! [ android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 6 s+ u+ o/ T* a* }

5 ^7 }1 T; D# D

) C3 D( @/ E; U4 o8 a) {0 O# j: D android.permission.WRITE_SMS:允许应用程序写短信内容 % c/ R0 X' L6 N

; I ^2 B8 D. D6 W4 m4 ?% M

8 e7 J7 F! i! {7 p5 M1 @) p android.permission.READ_SMS:允许应用程序读取短信内容 ; I! e2 q' m; C4 M( z4 S

+ F% d4 d( ?+ ~: K R8 L' ?

+ z, I W3 x' C5 x android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 : g7 b( i& d$ z3 ^% _4 x

+ Y% ?9 S' }9 O6 n

( {* W, t# p) N. u9 w* i9 X android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 - ?" t: j4 d* U) m

+ p {. L8 M2 f3 J L* g) j

% ^5 m& M& f- w- o# j1 v android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 1 \! X5 }& F* {

! G! F! A) F% e7 Q

7 z- L+ S v+ N; y android.permission.VIBRATE:允许振动 ! `- d6 i( R! [2 y/ x1 q

1 Q/ W9 e, H8 z0 g! U

4 z0 J# E( G- \8 G8 O8 C; ^ android.permission.READ_LOGS:允许程序读取系统底层日志 + x' P5 `' j9 F1 O" u4 U* E

# z0 g# C, H2 ~8 K9 [

2 H$ ^5 B' s7 w! V$ `& h( |' z2 A# @ android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  4 T& E7 C1 ], z9 \

0 m# X6 S& F4 ]" G3 O

% G8 S$ u3 Y0 n   2 g" @: L: ^% y, i' m) u" {# G

- E3 g2 |6 [4 X! ]$ L* H4 C" K

+ {/ t: A0 L8 ]5 S8 \/ r 功能信息 0 F% m `' T, a/ O0 f. u5 z) F

1 {- v% M/ d5 Q' [: a

1 D% F6 Y; V; a   * D0 j; N# L x1 P% E \6 m( Q

; K0 w3 ?4 n6 \6 `

, L, b7 k% f& `3 ^! z# O, ` 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 0 v/ V2 k- ~; B; \; `' ^7 x- |

% q$ P+ O% Y% L5 t. ~

: E3 k1 k2 u. D/ r$ a0 T Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 2 U( S2 K4 z7 U; i

$ j" V' t! x, s; |0 p

" t7 t& J0 o2 f7 \( y$ K 1、需要用JNI为Lua的C库进行封装,这样才可能在Java中使用。 ( [ G w; j9 b, ] L, {' v

k6 \1 k# [0 ?5 ]

D7 ?; B" m: z0 a3 F+ c$ | 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 u! w, j) j3 M3 a# k* ]) ]$ I

6 q: }; | ~5 L/ `2 H* ?% K5 h0 x

8 ^' U3 P, z1 ]; h- B: H$ B! c vshapes= 3 D' L0 N- n; j/ n9 X- l! I

3 U6 d- O Z1 `! Y8 @! M* H

9 \# `# a6 s5 d- c) c# `( L8 Z   ) L, T+ D7 ^0 _- n

1 B- \, A+ }8 u$ A' R2 [

- F: A! ?& Y- M! w' N; w* q) o! @ 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ( H6 O: g; ]+ E; j+ B1 U

+ \6 J2 K/ T5 ?$ E" P6 O

& J8 G/ d4 s# F) l N! d vshapes= ) q1 l& O9 U8 \2 K2 A8 f& ?

C: T* Z. \/ c5 h

" P' V: ^7 ]+ l7 C$ s3 ?* N6 l- U   # z# V& h, [5 K$ ]- z

! D/ F' V7 {1 _1 E! {9 T

% S, }9 c$ ^2 H2 e) | 在lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP。其实破解这个验证很简单,直接将文件的禁入信息清空即可。 # r1 Z2 n% ~8 u$ U' u

l* `' @, t% X

2 A- W8 f( Z( U4 J. Q z4 i$ | vshapes= s6 _6 n2 O B% R( Q% V

! R; I, F" {! [8 o0 o3 G' d

5 n& p. v* n$ B; j+ n) ? 下图的这几个so是网络上lua和socket通用的so文件,并没有什么可研究价值。 . W k, S: d4 N3 O5 V4 E# r' h

, F1 m" ]" ^4 n1 \1 r, @

; `* V. V- p3 w9 g j) T vshapes= 3 d& A* e# b1 r O H" _: e

; z1 H) r; t! L( F

; |/ W1 @( q5 f; Q9 G6 e) F   3 ?& Q' ~# w( q" Q& f( f: F7 q2 _+ R: \

; e- [' U) E, l4 U# x4 \

3 \3 `0 R1 w! a2 n 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 4 b: H( o; h# @9 y$ O2 F

; m: D5 F" g! ~$ r- n Z

" y; ?& o* K, ~3 A c1 j LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。 ' `% ]% V% H4 y c) l

9 h# e8 z% l& S+ H' t2 b+ g N

, }( n. n; T7 u; a( G! ] 这个luasocke一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 $ g0 I5 `8 c; e( Y5 |9 G

9 C6 D- @( Y5 U

: I! N- T9 s- M: M0 c# a4 T4 U 开源的luasocket代码可以参考学习下 ( F5 t |- a4 r) b/ z

. H5 Y) T. R, Y0 h) L ^

7 T% C4 f. j% t https://github.com/lunarmodules/luasocket 4 D3 p! d) i, o. ]

5 k- E: D9 B% ]* r Z

. O! |- \/ ^$ m9 T) x6 J https://github.com/fengye/luasocket , ?0 b* c0 |2 ^" e- q) @

, S$ |* ^" X& \

, z1 ?1 a2 G0 M& Z% c% X( C9 k   / i% ~9 |7 `6 \( {

+ d6 _3 _' g6 D7 u: f1 i' b" d

% U X& r) I& s! \, @5 r vshapes= / J! u: ] E) q0 {- X. D

2 j" k" A0 e% D# ]

. D! @# Q- t$ o9 v% e   0 {$ k- q1 U( D. i5 `- U- c

7 A0 w5 R$ t$ Z8 Y |1 j! X

, }% e" ]: _3 O   2 T S, X1 M$ J

4 I% c) M }& o v+ C$ c

0 _. Y& W! ?* v 总结 # b; o: e. f" Q# e

: C4 y; M. ?4 g( C1 |- }

7 }/ U$ c5 R. `0 k 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadx、charles、ida、uiautomatorviewer)工具就可以将功能全部分析清楚。 2 V, [2 J& I p/ h

7 h9 E, m& P8 A( L x6 S- v6 D* G

. M2 H2 N$ e( _4 @ 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ; D; L3 D; s; Z( J6 y7 M0 ^

4 I; A( B9 y# E1 ~" [/ m( g" V4 s

, E+ J2 f' i+ s2 f 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 # v) v' D: t( u+ G! K8 N# `( K

$ I& }9 |0 K2 ~* l. C8 J3 N

8 z. o3 s' ?/ M( g6 W { 结束 : b1 C* n' b0 }+ N$ d- T6 r

, k* Z5 I _4 w2 Y

1 O7 @" g g4 C5 c- @  【推荐阅读】 . K9 U# M% s m/ z

/ p0 j& B* ]1 G' w7 m" [

* S7 W+ P5 }3 i; M( a: W 对吃鸡APP的分析 % {% R! Z! v! P! G+ q( L

+ d, ]# ?% N) S4 h; L$ _- }+ @; O1 @

- X( N8 z5 r5 F" C, |3 f7 A2 C 你需要了解的APP安全 * f$ R2 I5 @# }; o2 ^' T

" G: P3 |. F+ i6 ]

% v& L9 K: a* H 你需要了解的APP安全 . W5 B# F! V7 j. p. w- g

2 I7 y$ E9 L3 ^

) @) M" r/ T6 [ p+ N" e   0 R2 p& B* q+ s; }; u2 H& P

回复

使用道具 举报

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

本版积分规则

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