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

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

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

, N$ `# D+ M. C$ ?0 k/ C# ^+ C 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 $ E5 ^3 q/ g- Z: \" T5 H

2 v7 E! i5 B+ V: Q* ]

: p- ?5 F# r# H& ^& D vshapes= # {+ R4 L% Z3 g: Y8 S

) p8 T6 Y& A* Q# A/ q5 \8 ~

$ }( R- L+ u5 Y0 ]6 H   $ [9 }+ I$ H. j5 u/ ~) }

8 R. Z' I( x$ U# r. R

- o& s* m8 _, R2 W 下面就以开发者角度进行解析下这个APP的功能的实现原理。 1 `1 \* F, O, ^2 b" E; o9 ~

5 S# Y+ y2 C4 |7 m4 Q0 n

2 h" T# m( X6 [0 d   ! s0 r4 ?' D( v( H

, p/ \) w% ~ g8 H. S4 K% S

a; Z/ e5 J. h- I, n6 W+ l 基础信息 6 |" ^2 H8 i: C, @- F' r# x

. u' X) T. Y" P/ m9 V

7 W1 ?/ q+ t, G" W5 z3 q0 C4 E6 _. g 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 + \+ P' {/ F- b9 o

. D4 ?+ Y- Z& K- }

7 J3 ?) Q# d% s4 z! R vshapes= * J: G2 x7 W% {# u8 B

1 h5 h1 u3 K' j' O+ B1 `, e

& r* U9 d# l- p- K" A- |   8 y1 M! C5 G6 y$ k

0 P* K3 a, U1 j: K- n+ l( Y

9 C/ e5 b6 j# A5 I* e/ f4 f) `2 H 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 5 ^, ?! p7 W: { q7 g

8 U- _6 H+ \4 z1 |/ e

Z) Y5 R& v; Y) }: v2 d9 S vshapes= $ [- \( P5 j- B

* V9 _" E: x+ z, \8 C; O* D

i V, F) B& \+ X1 A   # ^" A+ k$ A- l9 x

8 Y' B4 p* D5 }5 z% Y3 F; i

3 Y9 B( f6 _& p4 s- ^ 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 2 y$ s% ~' {# @

6 r6 v$ ^+ D+ p7 y- f& K9 h

3 U8 \4 m4 q6 r3 C9 X: C vshapes= + \$ z. ?, K/ p* f0 }5 n

6 {# ?1 Z! s5 K; X$ x

( [0 Y$ ~$ q+ Q& i5 d   6 S6 |0 p( X8 v' g" k5 Y E# N9 r

5 t* b, ?, c( F, A; f$ e/ K! i

3 B" A: g' q |1 l. t& {/ s 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 4 x6 [; a/ u* ?- T8 a2 l( B

4 M2 f, Y2 M, u& X0 d2 E; W0 _3 p# ~

, k9 G" N; B% \( x* ^, h5 B vshapes= + [5 y3 e$ J# s8 Y4 a. C

. @ S: _3 H: M9 h8 p

0 `( q" e& h6 q$ w) Y9 J   : l) H- l) E( J4 `8 H8 x0 E! N

6 z' R% ?5 b/ R9 x3 `

& C0 ?, y" Z' G6 L4 J$ k 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 * I: s( l3 Z3 }5 ]1 e+ ]" z

6 @/ ]1 @! }+ N% x$ m- ]

) H1 j6 ]* u x" @1 s/ Y0 F vshapes= 7 s: n5 Z- `5 i& f+ Z

2 x% P( K4 |" S/ F& `6 k

# T! L( G! x3 q! h+ W9 w. P3 P   ' E1 o* |8 i: p' ~: C

$ s$ b- ?/ [; V$ B W* ?3 {$ S% S& y

, g5 U+ G$ h$ {, ?+ f, Z   8 g: x+ |5 N7 q6 U) G) h& }! x

6 F1 S$ y( D7 W( o0 z5 j9 e, z3 l& p

8 |! q) z6 ^! o! {% W8 w 签名信息 % Q1 @$ I9 Q1 F) K0 `* z

) u E0 M# W" c& L# R

% r3 a& m, l) H b' D 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 " ?+ r+ Z& P9 m0 f

% v, \. Y! `0 A: W6 A

) ]6 T6 t( E' ?+ h7 C" g8 l8 v 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 % M3 O' j c" q1 T6 L

4 ~5 ~+ x- ?4 H' e6 O: \3 S1 _

' K# @ a1 L! p7 L' c7 m androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 7 L1 L: X8 g4 O

R8 D9 Y9 h' T) v0 l! U

# T8 `+ w! N% _ Z vshapes= 3 \ D4 Z4 t/ A0 L

2 p( a9 x2 q* C) g7 ?# s! {& E; @: L

+ }' ^) n7 ]) X7 T2 J   , c3 a6 e: @6 C. ` Y9 @

5 P& w' z9 p( m" S& t( ~

: X! [ ~5 b5 W android签名的数字证书的一般都是采用 X.509的国际标准。 ! `& c% J- z, Y

4 ^) [% v& M' T, D

; E& u9 q- k! t8 ^9 c5 ^# H X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 3 O& d6 ]+ W- K# h2 o: S; m5 h

0 O J/ W* f |/ c% m5 y2 T6 R

1 F0 h' U# j" x4 n; D9 a/ e 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 0 [# A1 z! h: A6 Z

, f. E6 C! H* n, `! I0 \. D

3 O" q! A7 Z2 s& C! D8 L7 ^ vshapes= $ V; p. ]4 k1 r) m7 V8 h$ w

$ {# g8 P6 r8 ^; Z7 H

& P, x+ `. t0 ~) }9 w5 i+ T   ; u8 S- T1 E8 C2 Y& s3 a

# d" A7 Y2 |; Z8 a" O7 M* ?9 Q

/ ^; S) Z# @0 @. L- D9 h3 { 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 2 A* x" `& @1 o! x+ v7 H, E

, `% @3 _8 Z3 D

5 N0 {! `8 J# t; G* q, I vshapes= 2 {: m" B* e9 H

# v& i( X0 S$ N4 X6 \1 d2 N

& `" j2 Q7 |% `* L6 K6 C! W, b( |# k$ s% R 4 b* e8 L( k2 p z

! W! `# v3 P" o: W: X$ D

% ]4 V/ ?$ a% U }/ T, h5 f6 p* @1 S   * c$ I% Q7 J ^5 B" ~& y3 n

' t6 m$ V1 Y: S

1 C7 e- p- ]5 P2 _, q. i7 n 权限信息 , ~; ]! e7 N8 a( D5 I

! f# O0 F/ a9 r0 C, v. ?

/ ]0 L$ R2 W' g5 N4 x' P2 V 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 8 } o$ Y( o' k) B) r

. S+ ?3 S! ?. h: x

2 _2 n+ P P) n6 w4 ` android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 2 S% ^# E- p' U' X( g( K

/ w" b* {) ]! G8 i. v1 Y; g

0 l! N) J" _& t) Z$ d vshapes= 4 t0 z. L& P- z% n N

& `5 `9 Z, `5 O; ~+ Y2 ~

% o. J/ q& W( k" ~/ P   0 n$ ~7 c! b* K n2 Q

1 s7 w* v w0 w4 x# E

p. \' ~) j: p' d5 Q; w! z 下面对这个APP的所有权限进行详解下: 6 g; r# G& X/ |0 \

$ X/ S0 l9 ]7 I J

: Z, r( O/ G6 @) n* k6 @: J3 ? android.permission.INTERNET :访问网络连接可能产生GPRS流量 ' v5 h/ a/ V" [6 }

: t8 O% m. l3 O- [

_6 {. ^0 w6 H# A android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 & Q& q& _ e/ T3 y

$ l; W" n' G0 e1 t4 x

; B a# X c% w$ u0 \4 w android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 % R2 y7 t% G: b: i: p

! }+ _& J+ L3 ~1 t! P L2 z

& M% ^) a. A+ {+ X android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 , c( |. r! q6 `3 Q2 K0 C

- z7 S/ h( Z( e

3 J/ t. |3 i- d; G; z V0 b android.permission.WRITE_SMS:允许应用程序写短信内容 3 O! w( ]: V$ Q

# M" I% S+ @4 _9 t8 ^, @

/ F( Z/ O# k6 q android.permission.READ_SMS:允许应用程序读取短信内容 7 k$ X- g, z4 H! D1 j) Z7 I$ ^- `

5 e: V* \& l% I/ O8 [

, P f5 X2 u- X$ A* O! Y android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 6 Y5 C# x0 L% G1 {, y$ R

, F. N2 q4 d. C9 i+ Q* } P

: c$ I6 b& ^! n9 k% S: T. p android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 + v. t: X) C! O# ~' `

7 y5 c x/ @" k! f

* V* b& ]. N! n# j3 j android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 : x4 V8 Y0 W/ _8 k1 {3 b

+ }7 p; z: z3 S [

9 A4 v: a+ k$ W( P" x$ v: O+ l4 d android.permission.VIBRATE:允许振动 9 ~& k, R$ ^' O, Y" a+ Z( W9 g7 ?

; P5 s& X+ U- C& u) v

+ U' y/ c6 `1 n+ S' \% |' x) D }* n android.permission.READ_LOGS:允许程序读取系统底层日志 : J3 y8 r/ c, h; P+ ^0 f! x2 }( @

/ l+ c) ^. y- {% n

5 n4 k0 e e6 [# b( O android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  " e0 p0 o+ D" ~9 g) E

7 @6 w0 h1 L# G; b* p3 z

. C O& B/ {8 ?* |   9 H+ G( L; j, J7 w7 r# X |" _

$ L7 B& g) S2 L

( X6 h: ]0 U, _6 i' r 功能信息 6 z* P( Q, e' z& l! f' Y, Q3 K7 `0 b. O

" |$ A1 ]5 N- k& C5 S2 n

) q2 Y% P4 E3 U5 d; N0 j6 G. e4 K   _. Q3 {3 ]" n( ] A* m

4 @: M% {, z9 B

: n& `: h* v) M& M) F" I) U+ y& S 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 $ E6 L6 ^4 k) s0 x2 D! U. \! `

u, @) c- y ? m8 R7 n8 \4 s

: k4 ~: G, N4 W" A9 E8 z4 h Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 * K' j$ [2 a. f

3 d6 j7 U/ q$ l r) B

& m+ B/ A6 j* E- a 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 0 h8 G! H' z; ~1 p( Q+ w: Y

% y1 X. }. r$ `: L e* _

/ S2 d8 V& k7 k" y. q" C 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 1 V" h+ _. `8 e

. G/ b: u' W& G- f

/ I) @1 x' i! x* [8 T/ L% U vshapes= 1 L3 C8 d- b" Z* _& Q; M# R

7 O; z- P! F" U9 @, H! {3 ` T" B4 W

# x! u# @, s G9 G6 D0 ]/ C; W& O7 t, f   / l! E# w! ^( I; U- D9 f i( `& P

9 J' Z3 N8 j! T) o8 ~8 ?

1 B, s. w( X# t5 ^6 r6 j 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 5 K* U9 W3 x0 A+ p

* a1 E5 g4 z Z( p2 h

% {* E4 r7 ^2 |9 ]! B/ V9 R vshapes= 0 h- }7 s" L0 Y: ^8 {

5 ^6 P) i+ z- G! M, a6 t+ Z

# T8 P; V }: n   ( m) P3 u c8 l: v2 V( h

+ N+ T0 q* {5 ]3 S& S, o. M4 z

/ {9 ?* {8 } j3 ?4 b: r: m lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 # q% L; h( w" u) h3 E1 u/ p

6 a% q! j& i, p n

, e6 `3 d2 G: O vshapes= 7 b9 U5 z6 f( B% J2 b% ~

) F/ j9 g( Q7 t* x

' ]& g& g5 N8 I& J5 h ?/ E 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 6 D: G3 L3 y; ^1 L1 o% X( b3 f+ U

! \( u- @% |% y

4 ^# P: L, j/ p# l3 v vshapes= : F8 p# W6 T* u& W( t2 k

1 g$ @0 H Q6 O" s) J6 S

- h" f; {8 k0 i0 ?0 ]+ M. Q   P, X1 o2 s# t0 E/ k

; Y- m. L* V( | I' m' ^+ ? D

5 ~/ S# ~( p* U( M1 S1 P 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ( x1 Y% Q, {+ Z) m

2 @- O, a1 r- L6 d6 P% j* o

/ i. z" d: c) l& F LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 * h, Q; _1 j% S7 k. a

4 Z; r: u _) F& W$ s

; f4 I0 v/ w% D 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 : W* l) I* d2 i$ E" b/ i2 |" G

) B6 Y! r! ^: r. D, }: d

( ^: l* ]6 w7 Q$ g- M 源的luasocket代码可以参考学习下 8 l: S9 g( p+ H

3 d9 @) A1 k2 }6 U a3 P4 F

" u; }2 X# ^! K) t! x https://github.com/lunarmodules/luasocket 8 F* V4 _+ V7 _1 N8 q

4 Q$ N0 j$ e6 R4 M/ R- b% X

7 m' g7 F% X. {; h5 ~! o& K https://github.com/fengye/luasocket i. Q$ {. P, d0 X. D' D6 }

: }6 K+ P; a8 q- N# ]$ x

0 V; j: s) }- E! C- |   4 m; u: p1 W/ R# C! m' \" E: H

$ g9 D0 ^( Q$ ?

- r" u+ E) Q! Z, w vshapes= 9 |3 y% C6 l) S6 }

& _8 _: q5 r: o7 S/ s1 m+ h

/ \* E! i5 p/ }8 l+ U+ i   ' b- q- `% B' q$ A6 ^, N5 R( K# X

9 k$ n* N6 P" N2 @6 w, R

$ R$ M/ u/ U" |; c2 m1 p6 f) U   - c+ ~2 d2 s" |0 W4 P* |6 r

; ], `' b4 W) l5 @

6 @9 p2 }: O' w: x5 N& u- \ 总结 2 l0 H3 S; i1 p4 y Q4 ^' X+ H8 K

, z8 {: v2 r' i; |( \3 h1 N

V- Y& M q2 u* S" o7 K 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 % N5 x, T/ h9 T. g* @1 w

6 ~$ n9 t- b; [" t9 @. A$ s

) F; |6 J, F# z/ U- q$ G 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 1 ]/ K. d# f4 n

% a4 ^1 T% B ?( ]# L

( r. o& L+ p1 F& l 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 * D' e; O/ B4 s( k

! N/ t: @1 F# y$ V, c

/ h% |. i" a$ w: P5 s- [6 a( ? 结束 / L% }7 y1 o$ f+ H) f9 Q2 g

4 N5 @- `0 j% L% G+ |5 t1 L+ {8 R0 l

" b' X: c5 P+ n" w  【推荐阅读】 ' [% I* q( A1 S! r5 N! P

7 Q/ b+ B {( ~# n6 W

# }3 _* Z7 H+ |" i% H0 M/ J% A( W 对吃鸡APP的分析 : R( n+ z+ g, Z) L5 p

9 Z0 {) T; ]: p5 ^2 N4 y

2 p' o4 f& j! i 你需要了解的APP安全 , H! C4 Q8 O+ B: |) q* ]

8 T6 R( j: {+ w* i f9 W; n0 y

4 u d8 T' A. m5 d p. E5 p 你需要了解的APP安全 & K0 ^; s# |+ U2 ~ h2 G# E+ k9 a

' h3 ? j* s+ f7 p! Y

; Z) @2 o( b1 ~   & s$ x: p/ w/ l6 Z. p/ g

回复

使用道具 举报

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

本版积分规则

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