找回密码
 立即注册
查看: 5641|回复: 0
打印 上一主题 下一主题

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

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

X" R" } l4 M/ f 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 - O) M; V7 n; f3 n

2 B6 @2 l2 X! _5 c' c2 a# a+ U

4 Z/ j% i7 c* o9 V6 @7 j vshapes= % u4 ~- E4 v2 q( ~6 x7 x" T* [

2 F# A( q6 U( Z, t

2 T h0 J( [- I5 g   9 G9 K( }: w6 {9 J" g

" r6 }. u. A+ Z; n1 s8 b

0 B3 ^: A! y/ I: `6 c. H# @ 下面就以开发者角度进行解析下这个APP的功能的实现原理。 : O+ E& {6 d1 c5 V, \% q

# L }6 U6 u" m# g6 S2 Y" r

8 e% \# i5 _3 |   ) T5 e* c4 i4 ?& t2 X# R9 W

& L" y/ v2 `# P& v% b2 l

1 e1 m0 K1 Z! Z' [! D8 c, h 基础信息 ( ^$ A9 S3 {. w; V( ?; L/ a

8 n$ ^# x" S0 o7 J( t" J4 D

3 T: k, V% h4 q% r 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ) S! i9 d4 Q, R5 [

% U9 M) y% c& ]

o6 ~& m7 @$ z$ d) Z) ] vshapes= ! |1 l) k% g6 N% \

5 z/ A8 R6 N& g

1 b F/ i0 R$ v1 n   ' z3 Q6 S( d- z2 V

q$ P2 A, `* X3 w' K* o9 x0 _; g

+ I2 N" x L7 H. k 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ( Q2 R- C, A8 [2 t& O( t) i

" ~( V/ n, B* r

( O. n1 s: ?& K1 C vshapes= : Q, b" p( u* O* x2 \* w" I

# ?9 ?) R2 X( V# U

$ D3 C; |4 [4 e$ D6 Z7 \   - k4 J. |5 L7 F6 ] M2 \

( ?) `1 V1 E( ^, f9 m1 u* S

" C( z) t& I7 h; e+ H) t5 M' b 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 7 @6 G) k7 U3 a# u

" m( L8 _0 [8 O Y

k5 W6 z: X3 J- t% A" T1 ~; M! Q0 v vshapes= . c5 O; S: L# _! w- g

- C0 [, Z5 F S3 [+ o

2 P2 g" q$ ]; I- J   g) f8 y; O, w8 `5 p- x; J

! I) N8 h( v0 }9 J

+ j% r1 l3 T' H8 {- p7 X( r0 ` 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 + {2 u4 k, I7 D0 I) J7 d7 _

: ^. ?; m0 k% m$ o0 s" t

/ Y, {, B5 @1 e vshapes= 1 ~6 O) t; b5 D

- @6 h- W/ k7 Q% I n

+ g* k% {0 d) O# N! V   , T% X6 D2 \+ k: T' {1 K+ K: D

! Y5 C/ W8 j+ v2 X) E0 O0 G

5 p& d$ [8 ~4 \) D 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 9 b; E- q. l, x* D/ i

9 h1 x' z# e9 P

; Y- v( W" b% Z0 |1 o vshapes= 6 W+ u+ Q8 Q/ m% r ^& G

7 z* y1 f+ Y% ], \ N; H8 J

$ w) ?$ _) p1 F+ q$ y# [( | e6 C   8 D. ?9 c& v" z& P+ }

( h( ^. ^) D9 k V+ ~% {

5 n8 L1 E# g( S8 i$ N" w   , Y# y# O V5 a! K h. v) j; m

1 K- G q" d/ c. r/ P

9 X5 T) g/ z0 m( |! `+ @ 签名信息 ) I5 M% M, c( i! P7 K, E; m8 P

! B ^* Z* m5 P. X& U2 F7 T+ y: I

( R/ E9 L/ M. }7 R, B7 z3 U' p( i1 [* ? 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 7 C# v, R7 J& @0 x" c V8 Z

" b; _- X; k4 @. c, C, V6 P

4 ?% A. [$ @; g8 c7 w S 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 8 e- L9 R9 @* w/ z; R# u

/ A; ]1 p4 I& n& l

* {& q" y- b# z4 d# ^ androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 5 b; f8 |& z- ?2 v- o1 k0 g

P; N8 b% m$ ^# i, \

. D$ [/ v0 C) [# ~ vshapes= " v0 e+ l( t/ x) l; j% _

! J k7 v+ d3 M6 [- Z

' [2 S2 m3 |* U) _! w1 I8 t# K   + ~: h: L5 F& b) c5 A( E8 b

: O$ P g( c! |4 N% a2 k

9 x. Y8 _- t- f* l' e5 l! ]/ r android签名的数字证书的一般都是采用 X.509的国际标准。 6 [7 U! A0 g2 ^

7 C, k; I5 A- L. q4 r

6 S6 o5 U& d9 K j3 h, @9 W X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 , `1 d+ M2 ~& w% Q" v* }$ U& o

& q3 G$ ]( a% d" l( M V7 h/ B

* c1 j3 u/ `' s' d, i/ f 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 # I/ M+ ?6 h3 t- ]; V' m& h

, s- m' V1 S/ U1 m- m/ y3 b

; K& X: Y) R- ~ vshapes= 7 v% O& w( u3 i0 p. C; j

1 l X2 F8 Z9 i- I2 Q

V2 O# ? r$ n3 B7 S1 [, j   ' b1 B9 \4 r* o$ q. D4 L/ W( o

- X8 m5 n0 W/ \% e' Y) O

! {% s4 V H, `# A 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 . v6 \6 D4 _- x1 j# w

& D1 s+ I2 R" s

' a# c' q- B6 _3 d ? vshapes= + q- d( q( c1 l1 e

" R; R' l _/ u8 \+ o

k- h" q( Q) P! M3 w) X) Q 5 |* [4 P' g) l+ n

. C/ O+ {" ^* s! @. t

9 y6 i( g2 |0 z9 h. {( h& f   7 W- D/ A! ^5 Z5 Q+ P! V

% y% t# l/ p) v8 m" F

4 X4 i. y% p6 @6 s: \9 k 权限信息 1 z2 P# G0 u. l4 _( Q

" M$ y0 g! U8 f' E

* t" R% M6 W/ I( ` 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) / _$ D1 Q9 P5 o1 Z: R2 H

+ W; C5 D1 O, z5 g% {' i4 v

# ^' Z6 D& P4 m0 }4 C android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 0 O8 b9 F# g% ~9 d3 F

. n3 F4 J9 D2 v- B6 Q

- F/ F! }5 P. \! X0 q vshapes= : V1 a4 H/ u) g4 b8 l

2 f4 M: B2 ^# V6 r( y

3 I3 l: D0 I7 F( R0 V! u   ' A5 q* Y! |- j8 [$ k" Y

9 f. i& @# d( B3 N4 c+ N

: [" {' C w4 _- x 下面对这个APP的所有权限进行详解下: 2 }2 c1 \/ M- I0 _

0 k( o# V5 H! B' d8 H" n

7 b5 b$ t- l( h" ]+ K android.permission.INTERNET :访问网络连接可能产生GPRS流量 # E: D: @: r; z% P, |- g; y& \: x

5 U5 f W" y- ^

3 q! B2 F# |! }- ?7 Z- b4 q5 q android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 5 r5 [, `0 v% H1 b5 x

% q1 I+ U0 ~3 G

) @4 p8 D5 q7 i7 G0 l' w android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 7 x: S4 W1 `+ M% C9 v3 M: V8 X

( q- X2 Y* P2 G' s0 \6 _5 {/ x$ o

- ^8 d2 y9 f& t' n# ` android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 , N6 b0 F/ M& U' y6 ~4 w

F( u: l9 m* i! H

- D, h/ _) E' H: @4 ~! a' c android.permission.WRITE_SMS:允许应用程序写短信内容 : `! l4 h+ J/ ^+ ^/ ~9 h

8 |* s q. ~$ \$ q, [" k

: F/ Z- R9 M' J/ i3 Y, W0 p' U8 } android.permission.READ_SMS:允许应用程序读取短信内容 / T& Y* \3 x' g5 x1 f; p0 y4 a

3 x0 T) }9 |) T7 J/ D$ u. ~) n' p

, z5 g+ F2 O9 j- Y: `' u android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 # I2 j0 `- b5 S; y* ~1 `- Z

5 a+ X# N# P, L6 w( s

4 `5 ^7 d0 r* P android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 2 e F5 n( Z* G$ M, W

6 b6 K! p* z& P) |/ S' m v

- p% M4 {, _+ }5 y3 Y$ @ android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 9 K1 q- u. Q1 [2 A; r

/ h2 ^+ \" D- ^( ]7 j

. s& |& [, K+ i0 ?' E1 \. e5 a android.permission.VIBRATE:允许振动 $ h8 h3 l% o4 K6 e! ^- a% L

: |" P0 S, W h" J" h/ ]/ ^

5 ]) \# }: S- Y/ U5 C" L android.permission.READ_LOGS:允许程序读取系统底层日志 / A9 i: x0 p: B3 s* i: \

+ p8 R5 l! o _0 x

) j' k# v, R% A: ~1 F( { android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  - Y3 J/ X4 ?+ a' f: P$ ?

8 |7 j4 ?) V1 b

2 |. f6 K* }" l2 d( }0 h5 [   , O C9 K. U) o+ C5 S3 v% y! W

0 S2 n1 K0 W p9 K$ S5 k

2 A/ G* p6 A- M3 y+ U 功能信息 , s5 ]- P( G0 j

, o" |& X2 |% t2 y* |$ x( X

; i6 C# v! w- n3 @. }( k9 s' ]   3 m' W- e! H. _2 |$ r1 V

& H% u0 [. k" _( `

+ d1 [% d) U C2 e 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 - v% b# s" K$ i& V( A1 P0 u

+ N) U3 l# ^/ K& I% `: D

% ^' O9 `% t# x: s/ A4 y Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 % D# a) \7 k* ]9 y8 k' E- Z. u

; q1 }! G' n" I" H1 {7 }

% N: | L1 @# u' ` 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 8 v' S2 A( v* E0 E+ \

4 f$ ~% [. D0 b$ H

( P! ~- }/ |) q6 y6 t {' c9 Z! Y' K; G 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 + R) \! w' B- I/ _- n% Z+ S

8 s2 Q6 _) H+ m [ W$ B

o# C( V8 E4 U7 m( ^8 D# Z vshapes= 4 y) K& `- ~6 o2 I7 C+ V' ~

" |' I) a: N; S0 o) `. i$ ]

6 p. t1 c3 y1 g5 e   ' }) H5 e/ \, I6 M6 t# J

6 U0 S7 t1 F8 F

" P5 q" [8 C) p+ ~. q 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 : P& E3 P0 }. g5 _1 W- t, U8 D ]

4 W7 H2 B5 {5 b' T

! X8 V4 c# n8 A7 V vshapes= * }' k$ w; Q' W6 H

' g3 s4 w) Y# R5 r$ u8 }4 S

8 R& _- {5 n9 _3 k. Q   4 s# W3 u8 X$ g. Z) o# l: n; h

% X8 Q9 z( u' Y( v) t

7 f/ a6 _' q3 L; r; X2 V lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 + f3 O, O: L8 B e( i

: p; i& L1 d- s/ V7 X# a/ x

' h3 H) t9 W; Z# ~9 | vshapes= 4 f9 e% ^6 V. f' g- c

( S$ X* U. h, f3 T& B! t ]; ^6 W" }

. f5 g$ B5 r6 L9 S1 R" y 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 - v$ ^) ] H4 @8 k2 x! s* }3 \

( D# _) W9 b1 F/ c, N2 L. Y

) y7 p4 {% f5 | vshapes= / Y, J- i. A% o* m3 |4 C

( K8 F/ A# u5 W* k- M! P5 ?

: D8 D" c: z8 v; V1 }. I) ?$ ?) R* R   Q; A1 @. B" u4 y

' d: R6 A5 k/ G2 x% O" b" C

; q) } D( p, K) Y! e 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 $ S8 S1 N' c2 d: n( M, b

2 P2 Y8 _ b8 i

/ ]$ v% u3 }' [- ^! F LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 9 ^+ l, k- O& a- `1 _- z

; l& R* ]! K2 K( y. v

+ {7 ~& Q0 Y1 T! |( A' B& w 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 & _3 _% a/ a! X

! t% r6 U$ f' L* I" O9 B. D

, S, U, N3 ?' N3 z) } 源的luasocket代码可以参考学习下 5 q, k9 E' `( V7 Y* ~/ J: R! e9 H1 O

( X7 C7 h: r& a. h$ H7 c( l

) v0 g& @; F. _1 ]* ] https://github.com/lunarmodules/luasocket 5 J7 H" V3 l7 U- N4 B# \0 t) B* q$ w# H

( v' f/ o S/ l, ^& k0 o1 `

& t8 i8 Y- z7 Y8 ]- C# G' ?/ k# G https://github.com/fengye/luasocket ' {& _8 E% A) \6 e2 F

. {; O" G1 G% _( S; D

( ^& t7 h+ [; t; O ^7 g   9 p: W8 K1 N2 d, Z; F. x; X& J

: T/ `/ q' Z: t

! O# X0 k# n0 j, g$ D) U$ C vshapes= , K( n0 G Z2 a/ E7 u( D4 F9 L' J1 x

4 Y) y. K+ Y# d* W

+ g' Q+ h; w" k% e7 C   - ~! I, \- {6 \1 k

2 d' x1 v0 p: f( k0 [. m) v0 r

8 y* a) b( l6 {   " K3 H1 T" L5 v R. V$ |

* a) y) ?& W$ P# ]

" r, ]" q3 m% z; G% m0 f+ c- X 总结 0 o6 P6 M. X# }4 G- p

5 q* y8 r! @# n# h( V4 A% v

& a- h+ S8 p$ }5 Y3 Q% X 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 / O* W6 o8 `1 }8 @

S. j# K# @) D3 ^

$ S1 u! j! b+ K' y8 _. q7 ^ 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 4 r! z% S7 l& M! T+ e

S2 M" t9 g1 r7 c s D' l, _3 N

8 ~+ t/ S P% L/ ~& {- r 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 , _2 u6 u; P! P( R$ y

# @9 j2 [6 G* y

3 _5 o# \3 K* i9 d; `( W( X( S 结束 & ^9 Z- v2 `5 {- m& ]

0 I8 H8 N# D+ f

& h+ y2 F) }8 C- l+ [" [  【推荐阅读】 1 z* A4 j9 _' f

8 v# A& |! |9 t C9 @

0 Y& J/ g' S# [$ n- H7 o 对吃鸡APP的分析 , {# l2 J9 @( O" e0 O: }

9 Z7 s. U; `! B D, A; D

" R# z5 T: {+ w" U1 f$ N% D6 Z 你需要了解的APP安全 & {/ t! f5 |; d9 X0 u$ a h

6 ^- Q" w# u. ~. C5 m

# [8 Q: E3 P& q1 `0 i 你需要了解的APP安全 3 H7 A* P% t8 D

6 A9 q0 h* |2 }) j

) }7 F" c* e% B2 e% @# b _   9 ~: v- Z- c% W. P6 ~8 v* D

回复

使用道具 举报

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

本版积分规则

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