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

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

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

3 c! I8 v/ R5 p# n$ {) [ 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 1 x, \% f4 q) Q$ S2 `

4 ~7 J$ ]' R* u5 c) o0 a

' {, D8 b& p- y vshapes= 2 v& N! e, p, C+ e9 |3 j/ z) A1 F# Y

; q( N* I+ X% f- v) P/ V- {7 l9 |

7 u2 } g1 i3 q* x2 o8 s9 L2 Q0 z   9 l8 X! ]% C6 X4 `5 S2 L7 m- b

5 w3 S2 k3 ^; Q" ]( ^

8 s T1 O% B8 V* d. n2 b6 L 下面就以开发者角度进行解析下这个APP的功能的实现原理。 t+ d7 f, V- c8 _ W; L

$ _- U: |& G+ c5 q# I8 D* [

" Q# ^4 ]) y1 s- d" K/ v& M' m   5 y# y9 W0 I& j

& w1 W% W t% |1 t6 ^) F

5 M$ d2 w' \0 _6 H' `2 l- y 基础信息 0 q) Y. N8 ^& i0 e, b

- ^# A: p# C6 {% S& k

% _* B1 @. D) B 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 5 e% O: M ^2 j# {9 [

, P1 i) W/ V' K7 q" ^/ r4 a; d1 X% d8 W0 q

6 ~5 B% @* ^" g* R. c- U vshapes= ( f* g8 L$ _3 G+ ~

+ K8 @$ O$ p1 X

4 m R; U5 j) b' n/ w( m   ; V3 I2 N. F' {7 L: U

3 n: G# g f0 B" y

( D8 O& h0 u; M+ _/ V 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 5 L' y5 }& M; k

- P( a" X9 g- V

8 ~1 T* u. R- \& c5 p6 G vshapes= ) H/ q9 ], ? {3 p

$ P! s; l/ u( W) l# V: u6 B9 g

& S6 w b1 `2 H# l" q   $ b- H6 U2 w) g5 ]+ p$ z V" {

8 i6 s( S( {4 ]8 O% ~

+ Q" [$ X# C+ O" I 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 6 \5 }) t5 A+ H0 V$ C! x C

0 b( T% ?6 ]" F

5 ~7 G- M* W: g, C, w9 G vshapes= ' s6 {* J* Y: P. R2 y8 r

9 r' R8 ^- T8 K4 ]# j

8 k2 _2 a: ~# b   6 s% C7 r3 z7 q4 @( ^. x/ m1 r

/ O5 p4 G q$ }4 y+ i( c

* M1 x0 M0 q A" P4 d 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 7 k" N( y e6 W+ D/ w9 U

7 K4 k7 T) ?3 l4 @' s' o4 w

' w% {3 x; X! P" l0 a* U5 L vshapes= 6 K9 Q7 ~5 ?3 s( c1 E, ?

) L$ P: Y3 q/ w( Z$ Q

5 l; w6 I7 e7 l0 j; k   + P( G1 O7 A; A/ p2 s

' i5 _5 `) P1 U

0 M6 K) P P) X$ @ 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 8 ^2 n) M- k$ M, Z( U

; F2 m# y6 b$ C8 C6 v+ t

4 E0 a1 E; q( C$ x+ v vshapes= ! F6 p) b& |; P, G+ K0 i1 ^

( N! { S. q+ Y9 _' l' ^2 {7 ?

3 \- A4 _% Z s1 n3 V' j6 }, w   % i$ N" F, z6 B& x& e3 d% \8 v

; m z; K7 B1 w8 k5 b

( w4 p* ]$ w1 j& h" q% U   ( a$ ]6 t+ T! x T0 L& \

8 }# K6 l" C3 H* p

2 o& b' P3 c5 e; L* p* U 签名信息 ' i; |9 M1 p9 k) Y6 T

3 C% D! T K1 ], m. t; @$ K

' ~! @* e4 m- B5 h; W/ i8 L 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 # F" | F% o* e

3 s( {& @$ A8 I( [( L1 |

8 s1 {" g! O p0 B/ x 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 0 e0 P9 }" t/ U! S

; N/ m% ?3 `# S7 L1 B8 [

. s; L( b% z. ]+ x" A androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 - Z1 e A# e: b6 i- i

0 ?9 |1 h4 C& ]! A, W

8 c5 a0 N* l4 l9 f7 {' d2 h3 Y, L8 J7 Z$ G vshapes= / ]& N+ S* ?+ e& f# j; k" S

- n3 i0 {; J8 z* L; m! i+ |

& s) r+ X9 Q1 d; X   % d/ q- t3 o. C* c

3 @# e: ^. M3 g u

0 x; Y$ m3 a( b3 ^) E: i4 w android签名的数字证书的一般都是采用 X.509的国际标准。 , Q- X) X8 v3 j: }9 j% K1 O, ]( V

5 ]$ r c! q' ?& I

1 f) D3 g: f* c5 `, E3 d: x/ o6 K X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 8 R- Y4 Y: D0 R6 F

( f& x9 {, I( v' k6 W# }/ q$ B3 R

+ l. x( V: w0 g$ y0 B) s! l 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 : B @' B, t+ h; D0 z* O5 T' ^% w

7 p. {0 ?& ~7 X3 [" P

" R0 K j5 T g5 \+ U2 I vshapes= : H m# P) o0 I r P

3 ~1 A5 B8 Q! W% K* f

) y- q1 `8 c/ d4 p+ a( I   G" @7 T8 c" y. v# J( Q' a3 ?

- X0 n) h. h- L) t& B6 e" n

( G8 n" [. G. _" ]8 w( R3 m 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 2 O0 m5 a' V# q |* M

6 H2 {6 g i1 z5 w. @+ h" r& L/ I

1 a2 l( p, x. y! { vshapes= # a+ v2 {# k4 u

; d/ i$ }; V: j w

1 _: c5 \) G9 }: j, d! B : e% r2 @% c: u5 ?# T2 N5 k

0 O) K: i2 y/ _# ^! C

x( D5 m- X) ]$ u- X' w1 V7 C, T   ; U1 @4 N, X+ q2 t

2 y4 n' g9 E& k1 `0 A9 ` L4 C

! j; A4 X: h% f2 J 权限信息 & `! K$ X' h. I4 x; Y/ o

* W* ?. l+ \7 g' u' T9 a

3 F- @2 ^4 l+ w8 g' Z$ R% Y6 x 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 0 \, V3 V" g1 N$ Z u s% F, _

3 x0 o9 J3 o% _+ B" _, t2 S

$ ` j% Q. i" _, u2 D C android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 9 o2 A0 [6 L \3 ]" ?5 o

; S# V6 K' z3 Q2 q4 }7 B1 @6 c

0 Y) J( T! R& f: h+ p vshapes= 8 P9 j& V7 I7 k% p% W- \

" _$ X5 }9 Q @% I! V- @+ K

; d3 a* s4 l1 s1 v8 Z   5 r# e' b5 `5 U6 [& o. v

0 h2 Y$ }9 i7 R6 G9 u2 }

! R* p% I9 i! i6 I 下面对这个APP的所有权限进行详解下: 9 |2 f' y2 Q( ]! r3 h

) }( ]) c, r) [; @# @" {

/ S; I \8 [, w& g android.permission.INTERNET :访问网络连接可能产生GPRS流量 8 P0 N. J4 n6 ^

' j# K k7 j \1 O' J7 u

# u3 ~' R7 \5 n2 J* F% t3 R- \+ j android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ~+ B3 V$ p. s, R- r. {

- K) h, ~/ S& H8 X

2 h/ _. ]7 w7 }7 Q$ T7 P; M android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 - l( {; L! g& N) [( Y5 _. }" O7 F s

W! Y$ }2 @) q1 u0 j0 V- U

5 o* x# J2 E4 j. y+ f1 {2 _, T android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ( A& |4 [. `9 U7 Z: D

% _3 z3 s S( O& b7 ^/ I( z: X

- [$ V/ [. S+ k! c android.permission.WRITE_SMS:允许应用程序写短信内容 - O2 r4 P2 u. n* F4 ^1 y* W

$ e) f/ v6 p( Z+ P+ n5 k

2 B5 l' O7 E% X6 ] android.permission.READ_SMS:允许应用程序读取短信内容 . {+ s( Q% `/ g4 h+ S, y

. ^+ [5 g' c% I+ n6 u1 Y

- G' g: b1 L) ~1 j* Y. Z android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ) l; [9 F8 _1 u$ N- y

, B Q; n0 e6 v6 ?

* a* e* m, J3 x: j7 y3 Q android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 , y6 N4 M$ Q, F( f4 ?+ u6 z

# r5 w* h. E/ d, _

& T! M0 P4 i9 E8 W# ^ android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 # u; s0 z" u7 O0 {

& `- o2 w; A: x! \

) r8 P( u# g. l1 a! t( J android.permission.VIBRATE:允许振动 # V2 C9 ?: O4 W( l; _. W8 F

0 ?/ o+ O* ~$ R' M1 j# b

2 k+ C( M' h7 Z: R4 [9 I android.permission.READ_LOGS:允许程序读取系统底层日志 $ S3 I! S0 C7 C8 ^

' J% `4 J( ^. x0 Q! V, ?0 f1 G' y

7 V U7 q5 z8 ^3 C9 x6 [9 H; I2 B android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  8 g; U5 P, |7 D/ B- p7 \' a

% }, r0 C) _9 w1 W0 \

1 s& O& u! W8 L$ p   0 o0 a6 C* } I1 A* r0 g4 {

8 J- b+ B; r- d8 K# F3 X$ Z

8 ^, p5 b' N( d, g 功能信息 3 Q- n* [) ^+ L, ?, o" z0 l

" B2 `% V2 z: Y9 r) @3 O

0 _9 W u4 c5 u9 ?   : e" D3 V- r H( ^

# k4 @0 h: l z! }- \& T( v( u7 ~

) }1 w: N r! w2 }% R5 `5 A8 d# k 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 + W$ } Z' l3 y9 }2 K

# V7 R$ E8 K8 f

; c7 \! x+ ?7 x6 j Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ' E. H* A2 F6 g

5 U# D% c* L# H5 A, O5 E, f5 n

: j9 U2 n4 M- ]) J& c 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 " L9 }% e/ `% }4 F2 T

7 z# e4 Q. \2 p. [: w9 S1 z, [

- W! x1 V2 t( T 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 : T& C9 B& l' h' C; B* ^# ^

# z6 t) J9 d! Y

# H: r( s; D: M vshapes= - b% j& M. N6 P9 o+ q1 }1 U" b8 ]$ C

* N$ i( z! n8 X- [! G. q8 J3 \

; X/ q: m; k4 {2 U   $ r4 n4 v2 n& Q5 D8 W

% ]3 g" e* }2 O9 D

`0 d6 } b: [ 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 0 p. y" H8 Z" X, x0 Y

$ a$ d6 c ^& Z, d3 @$ Q u

6 ?! \. [9 _" q0 l8 x! D6 d* D vshapes= 3 z3 J0 j& }3 V" a0 N4 @

, s. _0 z6 s1 Y) F9 U+ m& C5 r0 g

$ N( ]6 K) z* x   - k: l% @/ T; w1 Q4 A1 r! u

% z0 [9 U" ?) W5 \

0 \9 e+ Q8 D6 c% @. C# d! y+ Y lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ( C+ j& F, K! x, F, T' s

5 D- n3 ]! @% C) s! N

3 d X; S# }8 S3 E9 t/ J% y vshapes= 5 e. V: m s! J+ C1 G! D' ~+ w

8 R5 |! a5 h1 W/ g4 [( _" R* R, a

2 Y. W: P6 O! t! v4 Y1 V* _ 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 + |" `9 t2 [1 ^

2 v* |0 X: M) z- O2 n

! Y3 ^9 H- D% F+ f vshapes= % v, \8 K) l! n) _& c; S" w7 k8 e0 y9 n4 _

( u$ h3 N# h7 [& r$ w( }

, X9 ~! A4 R! e U: A1 e5 K# P( O   3 s5 S* B1 k C$ \, h% B2 W

' O) j; u, ]- ^1 a4 M8 I @2 I$ M

3 C9 ~; E8 K7 G, O8 l3 C* ]5 K% n: r 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 # y" i: `7 ~1 a% F

" _) j" |5 }# Z9 m" Y

4 K9 f6 N& P7 O8 w LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 , X% G$ w2 U6 v3 C

! g% s5 `0 j7 Z6 Q

- X+ j% F8 u0 L+ l8 L/ p 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 P6 y( a8 P, m

* d, N& |. W8 @! V- j8 X

2 G9 Y8 [% I+ G1 o' `6 g 源的luasocket代码可以参考学习下 ) {, c9 b2 ~5 K& U% _/ t, _

* \ {3 j6 Y. W& e

[( r1 k# D; N6 x https://github.com/lunarmodules/luasocket / D: D- x5 _6 W$ d* S6 f

) k" a% C" P& [' y7 [ F3 D k& m

3 h K3 k: F2 c! E# [1 I/ j https://github.com/fengye/luasocket ) [0 }* Z ]5 k

$ {* x& M* @% s. R1 I; S. U

9 l& [% \% N0 S0 h7 {% l* p g" g   0 X% g0 p9 s% y& {6 O$ `

$ |9 R# J" h5 j3 x9 K

: A3 k% I) y. O& M; j' Y; q: D" p: T vshapes= 4 G, \9 x& ]+ x* ]$ T7 a

% ?- E- T, G5 B" F$ Z& G- t

0 {6 g. }7 e. b& W   ! n) D1 S- s R2 D2 T

7 _" ]% g$ V& z) b: A, A$ ^" H$ Q" [

8 m, T1 n* v3 l9 c g   $ s. k* A! Z8 r( T- a. i

& i' E) M( O/ Q0 A& Q

! P/ y1 ^" t2 i) ~; y 总结 " d ~- v( k# M o

; s; p3 n0 Y7 N! Q( y/ A, b P

4 ]& @, v- v/ e! A4 Y/ o- V 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 " k, ]3 P. b! K# @2 U/ {7 N* @: E1 s

1 _1 \+ @6 i' e8 B- `2 ]7 I

# K7 n5 B; u5 \" [6 V) p* Q5 {5 R 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 5 t( H7 W' l: K0 E3 ~

4 o' P; D& s7 W6 J3 p/ _

* w; h* V% w* v s! j 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 & }$ j8 ?4 u; W

\# b! v# x- y- w# x& A

/ T. G0 ~4 B. c/ X N+ I7 _* @$ A 结束 9 R0 Z% X+ \$ `+ s

4 V9 k1 ]! H, c3 U$ h2 ~6 s

: L0 a( E" F& s  【推荐阅读】 $ [) D' D- K0 C+ D& ^

6 Q% s8 G1 a f( g* V- t

) C% R/ K+ X$ y. K: u2 L 对吃鸡APP的分析 / W% |1 X7 b' k0 v: `

4 {. @- T/ y5 X* r9 Z

+ j/ T/ d* [3 A: \: {5 @ 你需要了解的APP安全 / c0 N: P2 Z! Z; a; i/ K

* Y3 r& W& @( c, ?& T4 U" H

, q# }2 t4 n: h2 o$ D1 z 你需要了解的APP安全 + }, g2 O1 J5 U" u5 |+ l

8 c8 w, u6 G2 ^! p1 ~

. A& |- m; D% s. j; Y* Z, X   ( o5 e. g8 y) |) J) M1 @

回复

使用道具 举报

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

本版积分规则

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