找回密码
 立即注册

QQ登录

只需一步,快速开始

欢迎中测联盟老会员回家,专门使用25年老域名强势回归
查看: 2018|回复: 0

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

[复制链接]
发表于 2022-7-8 21:25:07 | 显示全部楼层 |阅读模式

% q! i: `( c. H7 _0 J, W 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 : z# d" u2 g1 N) B! ?0 k8 r

; Z8 Z* t$ F D8 v

7 ~7 [* G6 ?. y( `5 w8 q# f vshapes= # x0 ?' I( ]1 [* A

& d4 V. e r3 z9 Y

3 l$ |+ q* R9 F1 K8 N( \+ b   ; [. f% r# F+ q$ \

$ R! o; ^2 T" @: \% U

* b- X. G) ^; _1 z$ X 下面就以开发者角度进行解析下这个APP的功能的实现原理。 # G k( d/ c$ q5 s9 S; D

# ^4 x, g" D0 p$ e. M1 r! [" V

3 B; W6 o5 `% _4 m   - ^" h. |, a8 N3 }. Q

- {& W7 Y: C( c* X8 X2 C

. F5 ]4 |3 @& R( {; Z2 e6 Q; L* d 基础信息 4 \1 b) Z1 C. i$ U) t0 G7 J) R: A

$ s( z5 U/ i/ E+ g0 I' \3 a

: a3 J9 {6 b7 u2 r+ ~5 Z+ f 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 - S0 y/ Y1 ^3 v% w6 @1 }

' q, `: @, p4 i- q+ P) I

" Z7 N) k2 w; E' _" r# H, e6 G- U- ] vshapes= ( g; K* J% u( {

. H6 z: _7 B* {* M9 \

" Q, f, r+ E5 U! y   " f; A1 F. {* `. _

" f5 x: L; ^9 j( r% F7 `% ]

6 K2 t' z J& l. _9 u' w 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 5 F$ _4 l2 z' O5 B2 e! r8 I5 r

7 S$ L1 h2 x6 r

2 Z3 a% I2 w5 A vshapes= * S# _( E8 A/ K! J/ \5 k

2 [; e2 s* \" D P: M

' j2 _* y( M+ r" G" }- j   ) Z' P3 H/ Q& {8 r

- g1 T0 K6 Q0 M. h

- H9 |8 L( _" F4 n. ~ J 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 # T# A6 h! U" j0 r/ k. T( J4 T

/ ?7 Q' F1 w! f' G, \/ ~9 ]

0 z. i( u4 J: Q( {3 I vshapes= : y. j3 Z0 m# ~. F: `" q( c! Q

5 B9 p1 `5 \5 l. u

6 l' r( k$ Z# H: {   + x- A7 q3 l+ J

" }% I, i/ S* ]* U

. y2 \( B( J' o/ B; V, b; Z' B 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 " q5 e5 C, d5 ?3 a1 G. v

9 O8 S3 ^/ F3 a3 f" j/ h4 F

/ c+ L: X6 Z% \4 D- H# Z1 u vshapes= 7 o% R, D! k- d9 X" w/ Y6 c; K

9 x% @# u; d1 N7 P; ?

1 O8 B. a) _; H) n   / t3 g) {5 }# J- s3 ?, g2 L

2 J* J5 X! L9 U. Z( a& O8 x( h5 }

; w$ X6 \5 H' I 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 5 }. S5 Q+ a: w* K. D9 @

' L& h* s- Y% Q, `

# D* J" O. ~/ W+ t7 t1 C# H vshapes= $ \- r9 X @7 s4 ] i) g5 U) A

: F4 Y0 {7 ]. |2 R

: g( C3 M! K6 {/ d# d* g# g   + Q2 S; ?4 m. v# q u

( u* D5 i. v/ S- C2 o/ L: d

' w F+ E2 ^' Y   ; [( p p9 G6 Y( f0 V: S6 s/ n) m

$ }* o9 N: n' {) ~, X

& K* [. I& @' W3 O' L! ~- R6 G3 r5 L 签名信息 3 q4 }0 w7 j( }! L

6 F( I8 j: Q- N' [) r

$ j# {6 F% ^8 j% k 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 9 S5 e4 L4 Z( B5 ^3 r/ d

& H5 C! e9 h. H; K! \

( h( \& B2 _6 ~# R2 W; ]# I* U 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 5 [. m: X! p5 L4 j) A4 D- D V5 t

& P4 w4 U6 T7 G

/ P: b# g9 n: o' b. Q androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 7 O1 ^2 o, t) g2 i L8 g

5 B# l: k6 W# o* V+ a% J, u4 p

" v- I7 }# o2 U8 h+ D vshapes= ( Y% u# b7 j6 [6 {" d

; z& O0 e8 W( A/ A+ Y

0 d( c5 f8 S" N+ v& ?   1 | h" X8 w* h# w2 c: F# p

( p+ o9 y2 h( w/ G9 y

8 c c& o: M) { Z" ?( N android签名的数字证书的一般都是采用 X.509的国际标准。 / v8 ?: H* c# l5 r7 @* J r9 P

4 A0 D+ x. R; s; i

v. @6 F- V, d5 r: s. }, u X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 9 D& d5 ?+ l+ c- e4 K: {

w' U% k2 p; ]' H) P( d8 W: k

- o" n g, c) I( J 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 9 v, z2 c+ o* n! ^ C3 c7 K( {0 w

% B6 Z& W5 [" A x5 Z# ^

; g" z6 h7 {8 [# h8 U4 v. h2 l vshapes= : O3 U/ y3 s% i# c: D! r

m" j2 T* J: j/ L& L5 \$ V

( [/ T; g; |/ p! Y- E& a* X; I0 [   1 W3 g1 q ~# l+ ?2 [

+ E4 L/ W6 g6 Y9 f/ i O/ x) p

3 s9 V+ O4 m5 {' v- [. u' W 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 % W3 G l* A8 q

' O i: v8 T) g% s) R: y( r

& U* u4 Q O1 C7 o, A$ Y. i. |+ u* K+ ~ vshapes= + q U2 o3 }# g0 e2 H

3 v' ^: d6 W k/ M- k% z

- q6 D4 a. U8 Q2 O! t+ @/ P# d9 X 7 e0 _$ ~1 ~: J( V# N' _" r# Q

" ? j& R% t9 P! v; F& n

! h( |3 J( d6 Y3 g+ j7 E' d   % F. R* {3 a/ ]: i; {- i, k

2 `3 P2 J* }# \% |& e

. Y- m/ ?" k0 E 权限信息 0 T: G7 p/ K' ?, [$ U D

0 I: V6 I+ s& A% k8 q6 P

* F1 D1 B* z& g; ^, U 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) - L. h7 `" U4 ]2 D8 l' H) P

4 l ?: l( Y& Q% w$ ~

& }& L- V- R* K) a- m/ k android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 9 R* x3 w n1 E) l$ R6 C9 B: P

7 \6 Q$ z g+ L, H

- n8 f. x a( w! }8 b4 o0 x vshapes= 5 |* M7 k- U2 D/ s$ n8 R$ _

- v. J8 v% P7 P2 k+ R

7 p3 C- M3 S4 z% G   7 k# {" o- n L8 \. T. A' U8 R

' v9 A) l& ]. }, B5 n6 ~

8 x5 G* C: `9 a6 R& l' X 下面对这个APP的所有权限进行详解下: ! w9 G1 D+ O5 _7 g

1 Y7 u, e( n3 j

! {/ ]# H$ P' G& _5 r android.permission.INTERNET :访问网络连接可能产生GPRS流量 1 Q4 a6 [3 Q" K/ Y

* N3 V6 d8 L( W% ?. h1 f( }

: V* i1 }$ D$ t android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 & f v6 I( T! s/ F5 V6 w

* a0 J+ ^5 A& w6 `$ R4 N0 W+ u

# N" S% W; m% q# Z4 M5 H& {; P/ Z android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ; P% o. v9 u" U5 W4 S

9 O' }% w& u6 l6 ]8 L. S$ W

$ r% l; j( w/ _; ] android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 * O' o7 C$ R5 k5 w% `; ?

5 i$ k8 X/ ~5 U t% d

7 Q& R8 Y2 e2 ]/ w0 p8 w android.permission.WRITE_SMS:允许应用程序写短信内容 8 u* K9 a; h3 P" O8 ]

6 @. o6 {' W2 S/ X

( L/ `2 G4 q. n U7 @: [ android.permission.READ_SMS:允许应用程序读取短信内容 4 ? c& ^/ ^( y, [( t% H }

. f. n" n1 r7 X; H* S+ }! i

- E e" C! V9 k4 s. ] android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 , J4 a% o) \ B# L, s H+ L

$ {+ u# t0 t9 R$ l1 N

d# s# Y' B; e4 N9 {, H' p" Q android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 0 b+ a! X* N& ?- x5 U4 ?# O

W; g3 @8 l, ^- K) Q$ k

! N- N# O% [- U' Q# F android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 3 t$ P0 g6 h7 p4 ]

( I# c$ ^' P; K1 O+ Z

' @4 N: |# _7 B: P android.permission.VIBRATE:允许振动 ' ?6 D* o) q# W: {( `; Q5 \+ S

3 \( J! }6 w" y3 Z2 V5 D

* t! h Z3 s1 X& Q& b/ ? android.permission.READ_LOGS:允许程序读取系统底层日志 * y7 _% B. P3 E/ U) Y7 h( W$ F

0 x: K6 X) f+ I$ m4 ~/ F2 K

9 r5 t( J) h, M0 a. Z' J+ e android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  * f3 _+ }! G- J+ Y" s

% U5 Y3 l0 q0 |: r

; c3 d: a5 U9 u4 N# P( E) M   " V+ E8 `6 I4 R+ s

4 [# v& |* W3 U5 F

* u, E7 D2 d# b 功能信息 ) ]0 r. U2 H. I

% I1 K! U8 s6 N$ x1 T

2 R! e" ]: k1 B9 @& ~) h9 C* o. m   : M( z8 |7 U; M* f% Z+ F

8 ?8 z' V% w+ `

]2 m/ `' m2 S( |. ? 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 ! p8 c4 }3 n m6 O; e# k2 U* l0 ^

7 A& B8 ~, `" K6 ^8 Q

- j+ E0 v+ V+ O! D" Y Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 , U# e: M( z3 L, d- w: ^! C

2 a( G0 Z/ ?. ?0 O( F; N5 @" E

9 A7 S7 V, G( \; K+ Z4 ^ 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 5 M6 Q6 S+ j0 l6 B3 {" @

( p4 E) @4 f g0 H

3 G" F5 ]6 }7 w 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 ; O# n6 @8 ~8 i

& U! C8 R s% ]

* r5 C$ V8 U) O* P1 ~# h% G' d vshapes= 6 t. H2 A$ s- k% C

0 u# I* A8 I4 q/ j

, N3 L8 f& J6 z- q4 a6 `; w   ) Q5 o" S7 I( ?9 u

1 u) @3 A% V6 ~, O' I+ i1 I

+ D# Y8 ?/ u" v2 P+ K' s/ s 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 + a& ?. m" V( m2 e0 J

% l5 m1 @$ @' F; @5 Y3 \* B

% q1 a) E) {2 Y$ H1 Y$ h. _ vshapes= * Q8 s; W$ `) L: h4 ]

0 E) G3 Y& G. q2 o& D5 h

5 p5 a9 Y# J, |0 ]   5 _. N+ J8 k6 |! u* Z8 R# C

7 O P. }2 i: M3 _

7 R0 u! J" q7 ]0 Z' w4 v- S lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 7 @$ [+ x w5 M" a

7 J! P# N9 H8 r# U

! M" h* k; \: R A* L5 Z8 U vshapes= " E% Q' k" \9 y8 O% n* V+ ]

# X( f& {& A; V+ |) L* @

1 x. g2 r9 `1 @) @7 F6 l 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 + M* l0 G U8 p

9 e% Y: X1 e6 F/ ^0 V1 _9 G# G

2 y2 p- k! j6 V/ V. Z vshapes= , f. g5 }# R8 e+ p) }

) M8 E, L8 c* V0 f, D7 P/ h3 p

: z* v; E) }! W/ L. e( {   4 D1 K5 j6 n* R( S* W

* S1 h8 Z& d, W; ?

5 c* \# I" o, K4 W 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 0 J5 A1 U5 f) f+ C5 Q( G9 {9 L* u

+ L& x9 J- t( X: C7 |

/ F1 Z5 l) R$ K; ^! D! Y LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 ) Q$ w) C! e. v# D# h

7 j# `4 q* m7 k

# m1 j& q, N, P. u2 S b) A 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 8 C& |. Q! g! F3 y. h

5 d9 T! n6 B: \ @

5 S: X. c& f# }" b4 U% q5 O 源的luasocket代码可以参考学习下 ~3 t) C9 s1 J8 _% l ]

7 L' l7 \8 D6 C+ b: a

1 G: O( \" m \7 t" L& r0 ^ https://github.com/lunarmodules/luasocket , M, k2 \9 q3 }; t

) E* L& q) R" @

8 s( [7 U9 _& T- D8 } https://github.com/fengye/luasocket " o v: q% b& T3 C5 J7 k

7 {8 c5 u& T( ^3 p' t! x

3 x1 K3 \: _2 X   ' k/ F* k8 v! ]. Y+ r

N$ X n1 K' e0 e

' v1 C# e: Y) ^# a vshapes= 6 r) p7 q0 z8 c! s1 z

P ?! c, W0 ] W' E: j

9 \4 \2 [, k `' c2 `$ R8 v   % w" F; U. V. ?

; f1 k0 R) Q& z; G, x

/ z2 f0 {7 ^+ `) `   , G. A1 Z% i. R3 Y& u' E

/ t# a, c* d( _% w& v' Z

8 G6 [2 g6 e* y' K% z+ g& ~ 总结 : ^# L( d$ {/ y5 }

2 K# y5 }' e0 |, k" t

- G: _' }4 J: b, H3 U 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 1 H2 U( R' H& `" Y: ]" n

+ ^5 E8 x6 |) K6 b6 P; G! N' E

" |) Y8 r" T" @. H D 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 + \1 H" d x, ^

0 V, @) E* M' E1 j2 x i" E% |+ N9 j

+ Y. [. w! I' O5 j2 H' s5 C 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 9 Q) P* I0 j6 j- y/ f2 O

: N( ~/ c7 ~3 A" R" |- y( k

3 G3 W q# J! s7 K7 l 结束 , i7 l5 U6 @" a1 T" P ]

) D+ ?9 v$ ~" L& P( e2 o/ C

# A: @1 h" t5 [  【推荐阅读】 - y8 T1 @ q+ R. F( A

9 [- G' X4 B7 C7 x( v* o( }

3 h& E a5 x3 w' i7 C5 a 对吃鸡APP的分析 " m7 m/ C! h8 H7 i

3 r8 d3 n1 k$ [; n$ q! l1 {; e5 v8 j

! o) X, O; D& x0 B- e3 ^+ a 你需要了解的APP安全 5 ~7 |2 h6 Z2 ~; s3 r6 }

# ~7 l2 n7 ]0 M& O9 V/ J& P. N( b

0 r" r( {, E. }: O5 A+ y 你需要了解的APP安全 `$ j/ E* c2 i, z% _- A4 A7 K

n) X& _0 f5 Z3 v+ w4 x3 P

3 m* H- v3 r/ [* @4 F   ( ^ z% J+ x b) e8 s2 w: D h- H

回复

使用道具 举报

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

本版积分规则

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