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

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

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

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

0 U; v! c! g2 j5 e% h" ^

! Z+ s; O& w+ D" ` r! w3 J vshapes= ' E) l& m4 C1 a* o/ T

7 {# E& s% x' i/ j

! S' z9 p1 `* c% ]   4 U1 O& i8 j( t; l. L

2 P( r( K9 ~. u

+ o: j' L3 {/ Q$ F2 N 下面就以开发者角度进行解析下这个APP的功能的实现原理。 4 S, O" f! v1 W1 a

3 O+ o" Z* n' \0 K" I2 P

x* w3 h: f0 H   8 u9 j. B, ` l% N9 S

/ R; @; X- a0 X5 Z

+ v1 q7 z$ m% ?, W: Q9 X+ E% G 基础信息 6 o1 k4 P( L1 _6 k6 W

* D) R) J8 V; n, ~! ^$ Y& K& v

$ a: l2 x1 r' ^$ t% V 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ! e6 O, |' i( Q! c

1 X4 ^7 M; D; `: x# Y$ n, t7 R

0 q4 v* I! d. t vshapes= - v: s' Q! t4 u2 D

% ~- u- g s: f+ n1 \% Y! K

& E6 V/ {0 e$ z9 N% c( I" U8 P' A   5 r, z+ ?+ K$ R" M/ s K8 e

! O7 J) g1 N0 l) w3 k3 A

+ \- c$ J& q& `: {! M Y3 X' f 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 # t5 i: E- T) h. ?8 M- C Q3 R `

5 G- u5 B: A- [# r% y3 |5 o

- b S- a& c" ?2 K1 L' @: k0 h vshapes= " `% M" T1 u) [3 v' j, D* ]+ [

' x r# p+ }( M7 _# R: E. [

! M* j9 i/ J+ {; \3 V   ; |! x# Q8 s3 z5 N2 S9 j) t

, [+ y7 C6 A% `( f

]5 z3 k: P& D 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 , ^ K+ B/ h$ E4 ]# P4 {" v

$ _' j8 K( U0 N" {: i7 M

* h M2 |1 r" j; i" m6 U- o3 U vshapes= . O0 F6 O) [! i; T

7 M" F" T0 k+ a( c& i: E

, B$ N9 H. T* V. n2 ~: ^. q   : T; R# S4 v3 b7 d

; M& D' T, R# O4 }3 |: P

+ \2 L9 l v5 j5 l! m% S. C, k9 a7 A 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 9 a# o6 G) V! {+ `, P

9 J6 G. r! [7 q

2 V( E" s+ Q3 X1 ` vshapes= 3 O' O1 N8 f0 u, a M8 T! \# B

( ?7 j$ I w( t/ d! ~

! ?) n/ d S9 o2 X4 S$ C   9 a; M& z* M1 R5 r) V4 h

% y( u8 l4 o9 _: O1 Z6 C: l; h

% Q! T" L5 V4 O, h9 p) X% E6 | 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 1 D+ _1 B6 n+ P

( T$ M9 N0 p0 ^9 C! o- h

9 _. {$ H$ n* t l3 M$ v vshapes= ) C5 W) I9 m% q& M+ x

7 D: j% C1 c( |* F v3 g; l. v

, t% n3 w0 W& }5 S% P1 G" f   ) E8 d0 M$ n2 Q

; ?5 N0 n# i1 j. v

+ k9 e: k4 n/ m+ {# `. f5 }   3 c3 |, ~& @" F8 l

# M" c! T2 [* `

7 w+ z1 [" z+ N$ { 签名信息 ; O. i7 y8 o/ G2 M N

( }5 h7 k6 E; l. f6 l+ E

+ j6 ]1 ?. @# a! z; } 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 b7 @& L$ E/ y$ X& M

4 f& X0 U/ ^' s6 @# {

6 \0 `; ?' H' g 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ' z O" n8 J$ S7 q W5 J

1 P5 t* ]4 Q6 q& z

9 d1 C, l0 G4 y' y |8 ? androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 # _9 e: M$ r+ ]

5 ^5 B! R M1 z, Y& J

o3 K) H, t: G: w" r vshapes= 6 f3 i9 l6 n; X/ b( F" h

4 O5 P( N, V" J4 j( G( Z! n. Z2 g

0 j8 x; y9 W7 |" y$ f# s0 Q( B) [   ! ^2 j8 p I( U

Y; Q. [0 a4 S* P c

5 J" @: `3 h* f! l! { android签名的数字证书的一般都是采用 X.509的国际标准。 + o: M0 _- }6 H0 u, l! Y/ N; p

& ]5 G: G# Q( o+ o

0 ?% H5 R: U P) e a X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 7 o' N8 s' T) c/ h9 A

: s! c& z" G, v) L4 A

( E W0 X. M! E3 X+ R* s( D9 ] 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 - q3 w$ e3 |8 e" P0 c C' A2 v+ Q

; N1 K' x& x; q& M$ `' _5 \% L7 h

5 g( f5 P6 h6 b$ w4 J( W vshapes= ^+ o& U' d7 l" x

; O2 o+ C; w% n" D/ s3 Y7 \' s

s |( l" _" R% _4 f' z" r/ }. ?' O   & Z: B* _6 S6 v" p9 y# w: }2 I

6 }9 `6 W& P- x2 H8 j' I+ ]

0 ^/ R) U, C, s& I7 g 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 $ G3 f- i/ r- [! O8 D4 D

& `8 a2 S2 _ R# |7 i

7 d) }( @$ n+ ^ vshapes= 8 @$ D7 v. J5 ?7 z% F* I o

! v. Q0 C% ~! N# S: U6 H1 J

; |, V4 O5 R. N: B% r$ U# a : f# W# W: L9 i

2 q8 a5 i* @" x+ s* p C

5 A9 x" K7 L1 b1 n* f2 {   # O* @) V. B6 l

2 e0 Z u! U, @$ c

" e1 g5 M# s: u$ P2 z+ g 权限信息 / n0 C: M/ F6 P2 p1 L6 b

4 T! J b: t( M1 J

" S. h4 w! ~# P9 F 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) + r* D3 z( y" Q3 ~

: v8 |& U6 q9 _( q2 T; A) E

0 i! [. h9 n5 V) w0 H: R) h& u android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 * T# C, h* W3 I- U+ q. G" P

* b# {8 n$ _% \; W+ l6 [

4 f, ?: ?. N9 i6 M# o# ], f, R vshapes= J. H- A$ U% B$ A0 _5 \

" h+ [3 v; F3 c; l$ ?5 \" l

; U- ?7 b' e: o/ ?$ f   3 j! q% j0 O7 B- t1 }

) N% F% N* V6 u( R# i' b" k& Z7 c

. q ?8 K( P9 o3 B( H1 Z# p$ c 下面对这个APP的所有权限进行详解下: ( E1 m) v1 X* m$ }3 g: x8 _" F

) {" `5 z0 a4 E+ ^! d

3 S' |. I- x" T" v! V; P android.permission.INTERNET :访问网络连接可能产生GPRS流量 ( U0 A/ {5 \3 m# N) A5 Z

$ Z% n- w& O; O9 y+ T- N/ N# r+ W" F

. C* w/ Z) L' |5 [/ T% j android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 7 C" s$ D$ O. u `3 e" G" q

7 W2 T1 W& @ N* Q) a

( z' h3 K5 s5 Q5 f9 C0 y android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 9 S5 f. j: m+ X% G

d0 W( ^$ M/ w% @- T% K; m

# w) U7 L4 |" b# q0 |, O android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ( N7 U0 x* e: f7 r& i* E

* l/ x# @$ @( F! |9 V3 b

# v" `; [7 o7 x: x android.permission.WRITE_SMS:允许应用程序写短信内容 - B/ o' } S. A* ~& e* n

9 Q, t- a, U& j2 b+ q( G0 f

3 W# e j5 N4 P- g* ]0 I$ p3 R android.permission.READ_SMS:允许应用程序读取短信内容 9 L; d A4 A! v4 {% T( H6 o8 {

& i. S% v+ _" P( I y

0 B" `% j1 d9 I+ T, \: q android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ! S9 A/ D; e3 y, l& h" G/ }

$ V& o, G. n5 E* s& S

; q, e9 i0 E9 `0 @/ a) t android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 # b, T' f, e2 G& { Z8 _1 u

/ ]6 G7 Z1 `/ {# ]# T9 t8 V0 t

1 s. T2 L) j1 \1 h5 o3 g" W android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 , {# d- }- G% B

& j6 ?5 n& j2 | p

8 f+ |# H; A8 |! L6 P android.permission.VIBRATE:允许振动 / W9 F3 h/ {: x+ S# d- ?% Z

( ^! @8 U) m$ \+ S

' W/ W5 K$ |' C/ i% u, m( }! t# q android.permission.READ_LOGS:允许程序读取系统底层日志 : }6 Z, _( E; ^+ r! J7 k

$ u' |8 T. d8 [ Y6 B6 z8 O

; X% k# n! u5 y( w: R$ N! k android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  3 i6 V7 k5 L0 C$ N+ z) ]+ ?

+ b' x3 h# ~3 C q: h" G

; W- j- |7 E( h. g) n3 l& N   ( D4 Y3 W. ]3 t! B- F

' j8 R% { R5 x2 |, a- e

& s' e9 X! j& P$ F" k 功能信息 + N1 G" J" { ~3 C

& }; s3 T3 F) j7 N+ \

3 b' A- H" U) n- H! b   # G( S- Y* p# N8 \( B

6 |0 M( [9 B1 K m1 s, s" n: l

9 t& q7 ?% V/ a5 t [ 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 1 H9 [# P+ o8 i8 q; j7 _$ }

; c, Z# O; c6 o/ n0 b2 q

3 z) O7 _& R' i" I. W- r# S! S9 n Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 : f; U6 C1 f% L) U

4 j2 u7 `$ o9 B& J

: ]& w" b: l0 D/ d8 O 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 8 \: u! a" ?$ \( e5 _" K

# z5 I- Z. {. H: x; l% q) s

, ?' E! A! H, w6 | 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 9 g5 S/ g' V5 R/ G/ `7 ^4 q; ?

) a6 b1 z, C! Y% j

6 N; @& M! V4 u$ F3 W" o) O. q vshapes= 2 t, m! U2 g6 }: _

7 j, X5 h* a7 u! L8 u

+ g, [$ [) I+ r* U7 T( ]   , m9 q0 x5 P B" Q$ A1 D

# M" K9 }! u) M8 t) T0 m

. {3 s8 o, P' s% _% x. b3 ^5 K 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 3 V& K9 _' Z: g+ m m

% z2 b1 E4 A7 f/ B6 V: Z) b2 u

: ?) M. g$ ?9 O9 B, O vshapes= 4 e3 D( s& H* a9 g: [

1 p) ^1 Y( |5 q7 H

' I+ {" ]- o6 L   + E, D$ a9 y3 X

/ | O' y z# u& x+ B Z* y

6 K M( q/ z/ r) S/ _# O lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ( e% R% e- K* u; @( u- [9 x3 [& ~

8 z/ N1 G( r2 ?+ t3 I

. O( S s* Q- n3 Y vshapes= ' d8 X- `. P% X: M# y5 G

|5 |" b) D5 S$ w; c6 W4 p

Z# m" w i+ ~! l* ?7 K$ j 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 1 U5 U; r5 l5 ]# [3 V( G

4 n! I# {+ P* K3 L! V- N# W5 W

' I! @# Y1 I) c" I vshapes= , I. g, a8 t/ V, X4 j1 o5 l- E

% i, z6 Z) ^* B P2 C, d

4 B! a5 D1 q; x, l( p& H   % n8 H8 j9 D% X7 Z+ B9 s+ N8 k1 U

! @$ J6 g: q6 \1 y

% A0 r" T% e) W6 ? 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 & Y- o+ X4 B$ y5 m1 i

" Z/ p- X. c+ S& T

2 z# _* V* x4 P7 ~, P LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 - X @3 t6 j) ~" \& d. V2 c

, \# v7 [" z9 @$ z1 E, t, p, K, T

d8 g+ @" ]/ O4 D7 ] 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 r$ f8 X+ c3 G' w- V" ^6 b% e

3 D; m+ }( r2 T6 X3 O' A2 i9 R' }" T

6 E/ |9 U4 X- K! o! N 源的luasocket代码可以参考学习下 3 ^ o! b) {/ R

+ n! K! X" i4 ?$ O2 @

3 s1 u7 N! j& f) l8 w: H$ h* l* ~6 N) o https://github.com/lunarmodules/luasocket / Y: N G# i! u$ j

- S% b' R3 U. K

" V: i! n$ W# g https://github.com/fengye/luasocket 1 d' W: W1 s. M2 |5 ~

; {2 H9 E3 t" B9 E4 X

* B$ M& ^3 a- d5 f% L: h4 A! c   ' K3 s: {4 U; G w+ l. T

: t4 I$ k# X/ T6 J9 C

: i: A$ a9 _: a7 v" Z vshapes= / B* U: \3 K& }) a

( [1 x9 o3 N7 A9 E O; U. E

( u! |, ~6 P) w: Y% O }3 u- R   + ]5 X2 x5 W w' X+ |

9 x0 Z! t" y! ^2 g

u c3 @0 }$ ^/ t9 a- D4 T" @6 y   ' n% w, e6 r! C0 v7 l

2 }3 b) n j5 ^' ^3 o; A4 O9 \

$ U7 B/ c5 z, X 总结 : a/ N Q. b5 y1 Y4 w; {

7 T F# N' g! ~& D3 _

* f' n5 W" @5 w }( K) k 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 O+ S/ k+ t" E% m

, h7 h4 @" J: y( d! H

& E& Q- O3 V: t# }3 p 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 3 ?' t2 z& i5 a1 s

3 I+ _, B9 |0 r+ k3 K4 G* E, r

$ `% b0 T5 n5 c1 F: Z( s 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 7 A0 F- {8 H% L3 h5 {- q

# o0 E4 k! `" V( r! `

% z/ X5 S+ G9 D( z 结束 5 k8 S/ _1 c4 ?0 t# h# ^8 v* P4 n

2 U% B8 Q5 K- ?: x) H" M3 W

, U9 g8 F" d/ C/ `6 Q ]  【推荐阅读】 - E6 s1 q' |# x1 k s" X; _

# X: O- N8 A1 D+ |+ R9 _4 }1 c- d# g

1 q6 x8 `# ?, Q- [9 g 对吃鸡APP的分析 ! U$ ^& y t. k" u. d! @+ U

9 _( O3 }( W' K6 k1 Q* r

, [' J/ `' F3 x 你需要了解的APP安全 9 Y5 h1 G7 h ~9 K/ i* t' q

( @5 W4 C" I% l" w

; M3 a, m- T7 { 你需要了解的APP安全 $ q& b. v- t/ V2 {4 n

9 a$ O9 k* n. P+ p# g, t8 s

0 N! N' l; |8 s. i$ @% J   - m* l! `1 p' C

回复

使用道具 举报

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

本版积分规则

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