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

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

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

+ }0 z% a( e5 r. t' [4 F 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 7 z+ |( V1 d8 K T' t

5 q( z3 B" f+ G" X" |

5 O8 i% G/ h% x7 o vshapes= 5 P6 N, U" Y4 e k( b

: Y; ?+ `4 Y6 X5 j# y

5 Y3 e5 E( G- U+ x7 A   + k3 S; c1 @8 x& s V5 _( V

; x; K7 @! f0 }. Y

6 L( v9 B" ?2 X. x6 |- J7 b# Y! X 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ! y/ S: y+ E6 \2 A+ B

3 m: O6 O* W& ?8 m* _( q

5 I1 B3 ~: \" L/ T) c6 ~* a   2 n8 _" n& i$ u. v& J" i

3 D% S, ~/ I" F7 p* U; i4 W! j- R, V

( [1 r; A+ N. i, E! b9 _ 基础信息 . [, s1 {9 z3 {5 q% X6 m. v. f

! @& W# h. W, ^# N

* d9 t5 D: m9 G) d 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 " G% o! s7 H9 Y) [ f

% \: x8 i% Z+ H0 ~0 n# s

' A2 r+ F! |! H9 V& x, [ vshapes= 5 I( W' c" A4 g2 R' `; W

( _/ B# B" [, h/ v

; c; c8 m8 k' r, c* A9 m   5 M) O. ~5 _. G- n1 ]9 M& i

, ^$ x/ t( a2 B

2 d. @2 P/ W3 Z, K# G5 o, V 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 1 S, ~0 w1 _& O: U1 H

% d4 n9 E1 ^% r J1 `, ^* ?

3 O: |: G# b3 L7 g" E6 f; t. E5 ~ vshapes= 2 U7 t9 u; \) \

. M f/ |6 a, g& z q) i

% M0 S' R$ u& c( @8 _   ( Q( e5 \+ l; W+ C0 P

( F, J; s% y& S3 D

& J( L& K* ]& D! D* M& n0 _ 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 7 L( h' p c5 ]- s+ r

' {/ D( y9 T4 r0 l. ?3 A% e U

! e* N$ w2 i0 |% u ?7 T vshapes= ! P7 \" M) }% {

4 u7 q) Y+ }, i9 }

9 }2 l$ A$ }7 Q7 C   $ B/ s7 R4 w# ^

+ j6 S; |4 ^+ l; j% R; Z

: m! i: Z; c% Y2 |6 s8 w2 D 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 $ ^1 b, ^1 G k: ~, A( l

) Z7 O5 j' G$ c6 d) ^2 c$ n

3 h# c' o4 P+ }0 J! x8 X" U vshapes= & X" J; E5 A9 h1 }% J

) m: I! w4 n1 X- d

+ W4 m- I! C% `4 i   % f6 u2 w w$ X) ~6 ]

# a( A& L! j$ j; c- ?* ~, o, ?

- f$ f8 F( {6 p1 u# Y4 D: Q 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ; h/ `4 P9 L1 r* u

/ e7 y# h- Z; m- S/ m) C

0 l' d; J1 H7 v! z" u/ n vshapes= * _) Q6 h+ k# [3 Q A

7 u/ {; B4 d1 e$ G1 m1 _# B

8 X3 i1 J" T, ?   ) U9 f6 A3 Y' M. Q0 u1 b0 d' X

; V5 E. K! t0 G4 Y* E& z8 y7 n

E; y/ y$ ^: e1 i# Z1 I/ q+ e   2 j; G; ?5 z' f9 ?& M3 y

) O% G% J$ R* k8 N3 J7 w2 L

* U5 F1 s: R% P; \6 Z 签名信息 4 Q5 ~/ O! l$ n# J- Q% z& Q

v3 N, x( G8 p) w1 L3 @

) D' @+ l) N0 A4 a 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 " m- r) F( I1 f# [% H9 a4 y$ S

! t* p; j8 Y( l0 M( \

/ J# O" r. S D( j( I& I# G 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ' u& }% ^: U; @! j9 T1 L, f8 { Z

4 F+ S/ C% w: D) \& p

1 d7 m! ^+ Q8 b# [ androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 6 e+ Y- W: K' m0 n2 X9 x

4 c8 e# R. `" c: O/ D/ k/ C. s

3 B* y; T. S3 n; T" t vshapes= 0 X3 u- a( W6 j. l3 _

3 l& I- w$ {* r' J; n

' b8 Q0 y% s( M) G! J* t   & R/ X$ K, B$ A% I$ B! b# g2 U: j

$ N t( ^) c: e' R

# [6 J% g3 p3 d' `7 x" Y% d android签名的数字证书的一般都是采用 X.509的国际标准。 . m5 y1 L- m; V9 M5 {: D( [

- J6 {( x2 b Z0 ?- y6 c% Q- u

0 p' n/ S2 {! g X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ' o" |2 B- s9 o

$ D X" I1 Y* w3 X, h5 g) ~

. z% |1 q2 V& F) Q3 {+ M2 B 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 ) s$ r' ~ J, ~9 ^- k- b" I5 Z+ G

0 q8 z# w. }3 V9 ?0 Q

( [/ [/ _( [4 y# F* `( u7 ? vshapes= ; k8 q( t( ^! `# _) P. a |

. B" B/ j' o0 Q X+ B

4 v$ v, ]+ e) o) E   ' z2 c e2 i e1 o* c. Z# S

/ e* o' \( W9 s# W. A+ a+ P. }

, M* _2 M( [9 v: C( R 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 - X- f0 b5 P7 }3 e: C8 G* Q5 k$ o6 y

) j) ?6 e& |" n9 p% t

8 {3 I+ u' x6 X" J3 C8 v' q vshapes= 5 y# x/ { k$ l3 A' f$ }

8 a1 u; `/ M) F* W- [

f' G v+ E, g ' x" D% q7 g k% I1 v

0 C0 M/ I: s+ J, ?9 K

) M& t4 ^" Y% V' I" F   * G4 f* d( A; u+ u4 c

. M% v+ ^; F+ N1 e( b" @$ Z

$ e" T3 e- A- n; [ 权限信息 4 l9 N$ k& m! n P5 R( W

" C9 ]3 m8 t7 n" t

" ^% x# r9 t9 Y+ n s) A" V8 \ 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) + z, ^. e2 |, I

$ W$ k! L8 V: N! K) U1 |# _

& M' e- @, ~! P% L7 z) K android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 6 b3 E1 l$ i @2 P& {

- ^7 q8 Z7 F; \. p& p

( l3 h- V, p- r1 y7 t" k# R* F vshapes= # I! g. F* L/ ^5 J: j8 B' q

: V7 e x+ u4 D, j6 O V5 e

' Z4 Z! g K9 e: x' S' Y# {   5 U5 A- G; j- d* f" L: g

& L. V3 a z k; \$ H0 `

7 B! Q; m0 N8 L, A 下面对这个APP的所有权限进行详解下: ' o4 g8 S i; h/ j5 v4 c6 s4 E2 {

# {; ]8 [" l9 y: X' D+ ` Q

1 j* K p. t% E5 Y( C/ ? android.permission.INTERNET :访问网络连接可能产生GPRS流量 3 }( y, i$ r) H$ X) ]7 G5 n# I( U

! g2 z% v# z6 D

0 L0 f* G& X4 ]2 q" Z android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ( G1 v: `3 l z0 F; r

d7 l. C3 i9 M1 C1 Z- a) u& w

& J% o+ a9 S2 I, g0 Q" H0 K5 i android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ; I7 j3 j/ v: W% t; e) i* E. r1 \

4 X: O6 [6 V; c: M6 E: @! H# _ q6 N% T

3 v: q2 `% \0 C: ]4 e android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 7 p$ e( [- i6 [1 T1 J$ \

1 J u9 D; I' P. Q

- o5 U6 \3 ^. [6 K android.permission.WRITE_SMS:允许应用程序写短信内容 ) [+ t! f x/ N& W& W2 `* l3 W9 Y

' P$ i J _8 Q

# u1 d7 U+ } m/ \: Q$ ~" X) J android.permission.READ_SMS:允许应用程序读取短信内容 0 [# {7 u9 c1 U0 t) ^

! g2 e; J7 Q3 g2 w

+ p9 _$ K+ G) P) D% j/ k android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 8 r1 n' W% ^. Y) g

& ~% _8 D: c- E* i/ K! z

5 J1 ?/ @( P+ J android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 7 |) f7 F' r9 I

' Z- }! l8 c3 b' B* ]

1 m! @3 i6 b) B0 M _ android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ' g9 O! B" i( S) W3 [

/ L6 y& @ f* n% z8 U4 S4 z2 L

/ G% g5 R* \' g+ ?. o1 T android.permission.VIBRATE:允许振动 6 \2 x6 i( o8 \. J5 J: u

$ d4 z, y( t0 A, V7 L0 u! a

$ k# E5 P, q1 T! U5 K, C% y7 C2 P android.permission.READ_LOGS:允许程序读取系统底层日志 7 z% O5 a% I4 w" o

0 h" y$ O# p( i m

4 W2 z! W1 H n" ]* z android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ! D( _1 ?1 @4 O. K

) q0 I9 x/ Y: F c+ m& J

) Q: [3 [+ ?; Y6 {6 c1 @0 t) t   7 _3 i" |% z8 D* T

& ~) e9 I: R9 b" g8 c

1 `7 Z3 V8 p/ I" P( [" @* ^ 功能信息 / o+ Q) g6 o/ l

: H2 f# h. A! j8 ~& `3 t

4 F, M' e6 v' f* _ D   # y! E# c3 [4 m! r7 k' [2 Z% g. k

' L6 A: u- C: y% | V

0 {2 K+ Z5 p0 U/ T/ r! ` 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 # t: W, B, G5 n O% Q8 ]8 |

2 r- y6 j5 g/ g/ z3 }8 G

# Z. B# F: {4 \$ q9 Y Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 2 A; V5 C4 b! G

6 u! f2 J9 q8 r. K; M

3 M2 Q( O J* N( m 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 8 |7 f( T: n# H1 [" R7 p1 V

6 ? l0 H& v4 M, s; U# s0 t# K$ l u

0 c3 W p/ ]% v" l/ ~1 Y& r1 T' O 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 / v/ V4 \ i! n/ P5 |; I2 u; X% R

1 P# Q5 _2 p" H1 A; P2 O# V

2 Q' ^! D; W$ Y7 \; M' s vshapes= 0 {: U' K5 M- P

& d9 Q0 E* V8 d6 w8 a6 S- Y$ K" E0 A

. n# E' N7 Z* P# `; u# v   ' @, G$ o6 j, d4 Q

d3 Z8 D: K' m# s

4 r# V/ u& y% `% l: v 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 2 ? j5 Z& I. l/ F

8 L3 y& d6 `4 T7 ~5 Q

1 O1 A. B' H1 [& ?: T vshapes= " U0 t$ }& t6 o5 Z1 j- L

# z! M c3 m. `# Y; |

( V0 Z2 S5 ]0 B6 k' P   ; G7 M: D' O: F4 |; W% m+ S! F3 k

% U4 {+ b; G# l' g0 ~

# U' z! I2 C9 Q' U% V l lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 * m! M8 w; I; e

$ q- f( {! @, q, m. d

' J" @) C! W2 j# n- a vshapes= - @; R' f7 N- z8 k: F+ L

, |2 y0 C* L8 v% C" g

* W q8 W* L k! _) w- ]1 S4 v 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 ]* S# S7 V1 s, h; q/ |; u( H

; p" g& X# Z5 F' G. Q* @) V% m

e" ?& F0 X* g7 Q vshapes= + h) f2 Q2 b5 ^5 W

& V/ W: `& O7 @

$ m' F! T x( G6 Z" `6 m) s, O   2 R* _% _* O. l. K

5 ?/ b% F# w2 K6 P

4 u" Z3 }" t' O4 d! f 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 $ r3 [6 n# M9 i0 j0 T$ M& t

7 d# s# L" U4 i

& X \! V. |9 ? LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 * ?' H2 s# A' s0 t: k1 X7 F

$ N/ Q5 R8 A6 S. s% H k( }) t# T: k

# t" q& V3 @3 p 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 0 w9 Q& l2 Z5 j+ k+ f0 r

! e+ }3 k+ V" E7 v7 N r8 j0 V* i7 Z$ ~

' ]- K" i8 G+ g2 x4 g 源的luasocket代码可以参考学习下 ( q, V5 E- j7 q! b) H

' u! Z/ [) c8 J n0 N

4 i& J) }; i& X https://github.com/lunarmodules/luasocket 7 j, b! I* e5 L3 S! P+ Z- P& D+ w

; ~) }5 Z0 G! b7 U

& R5 e/ z# i. F( d. t https://github.com/fengye/luasocket " K& X1 f" ^+ g2 g

, P) L1 G3 _* H2 O

( S6 ], {, ]7 Z7 Y, Y   3 n/ B: W, ]" N. \5 N; S6 O+ M, D% i

( \- r W$ A; Y% Y* ?# D

6 S" W, o! w; ` vshapes= ) ]+ p. k/ J3 X( M$ I5 W/ K

U' k; O3 V3 d+ r0 Q

2 o, ?6 n7 o/ Z. y   ; l4 A2 j* D8 C! v

; Y6 z, z$ q3 W$ \9 B) U

* |. z- k0 q# u! E9 [/ W. Q   ) e I. X% w7 i) }+ _

* ?( o7 W( ~$ J* z

! ~ E) T& Y3 ~4 ^ 总结 1 w) E7 e# a5 h' f3 a1 d1 z. U& i. a

) k! F$ E/ r) k; ~8 W& x

$ Q* m4 j2 Y6 ?( U# B+ a 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 $ {- Y/ }4 k/ O

# h; ~" O# v% b1 N2 h

* u% Z# P- T4 q7 R, [ 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ) @; v# A+ a: G( R8 y+ t

! g! g1 ~0 n! g+ r5 q

$ P- v) Z/ ?1 V; B6 @6 n4 [$ {$ h 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 . ^" X9 O/ O, g9 L

9 @( E/ ^/ x0 N4 Z9 s

% t* U7 D9 o+ ~ 结束 $ x; U# H E4 ? R, o

[' R3 n$ V5 B7 `0 H# J

7 t: a- A5 K( r+ J  【推荐阅读】 % P \9 y, f' b4 |8 _* G1 W: `

4 e8 C" M. H) A2 N. b1 _* P8 c

2 }! J# k; }8 e4 Q6 d0 ]1 U3 v 对吃鸡APP的分析 / ~6 H4 K) ]& ^0 w( `) e

" Z5 Z+ ^8 d7 T- b* T' @

( @4 h( l6 H0 `, z# t 你需要了解的APP安全 9 Q( d! C A3 l; C, T% ]7 j1 ]

/ ~! t" t( |1 _

" G# _4 S$ S! I 你需要了解的APP安全 : f& T( I4 a: F& H6 d

7 W9 f/ V# ]' f+ t, o$ F

; {2 Z( E+ I, i# F$ i/ C7 K2 j& M7 Q   $ |9 t" k ? l5 [

回复

使用道具 举报

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

本版积分规则

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