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

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

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

# J. [5 M' d- D/ Y0 } 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 $ B5 v1 W, q- E! v" ]

1 i/ }' N+ ~" I! e3 O0 Q1 ^

1 K9 K8 V C+ i; _) M0 {4 H vshapes= 7 @, }7 x- }( k1 k

# t' Z4 r* l7 f+ f5 i/ }% y: G

1 `+ E' B) H q% {1 U" m   ! }. l; i# \; }% n, U( z$ p4 p

; f% b$ P0 _0 r

) }7 Q# q5 U) `0 k8 `% M, j# @ u& ] 下面就以开发者角度进行解析下这个APP的功能的实现原理。 0 U! ` T+ n4 s7 J! w

* x# K3 s+ E2 o! z, m

+ u$ S7 x+ D8 C) F, L' a1 d8 K   & H: J" E% M) G4 L9 u4 r3 e7 ]+ m- N

, O) t4 {/ O! }- u2 n( J9 E

! @3 E7 W6 N0 V3 K# d5 g: x7 x 基础信息 M( |- B; F" H* T% j: E

$ d6 v$ B3 T- u& B0 [9 O3 N

: N- m4 Z R/ M( Z 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 7 X" Q/ Z: v* K: f" c* E0 F

. `8 {* Z2 \* C# W6 x$ P$ J

3 I% y; c1 I! F1 y5 I7 r; r, J vshapes= & b8 R7 T/ c( Z! x

3 f8 u+ f) N8 k5 r% D' F( C

. J( b% w7 v# ? K4 D. x: E   . @. I# Q* N8 L; g( g1 z( ]- |) ]

0 }' U# z" y4 C$ k' ^$ n# w

; x) U2 F6 d8 C# I- ~8 h+ D 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 2 i" e* K& _0 T5 s4 ]

+ r$ H- s$ L; ?9 s0 T" Q

3 m9 T Z6 P* ^9 r vshapes= ' C, U' x, I& W

$ t+ \: Q4 t( D6 z, [+ }

* n9 u6 [- g. ^4 l! q   7 s1 s' z, u" @, o5 A

4 J* S: _! G* c3 x" y& O

7 G/ R( E/ b; p4 k 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 G" G; F5 V/ ~- n0 M5 [% s

/ ?- U- D8 ~/ s/ d2 }+ p9 k8 X+ `

6 t6 ~+ p$ U! |: W0 V vshapes= . W5 O) j$ d0 U# K

5 t* v4 Q3 p( J7 H' M# S% ~) |; @

8 C, d9 O& p& R: o& D   9 D! [! a) q' x S3 Q/ K g! [

; U$ H3 d/ d, Z

' ]6 t+ R) Q6 y* q 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 : D! ^" {0 x# [2 q4 \

' {( W0 O$ I9 V( v% L3 q) j

/ m( [# W4 v8 q0 T' \7 r vshapes= : W2 t1 S. \% G6 h! L

! {1 I* K) n1 X# O

; v& D" c7 T$ r5 m& r: G   0 u* n, r: U$ P

! P' c. v3 o# A( e

) {0 x7 L. s4 z6 i. [. L 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 2 W; z" a. ~! ?3 j# a3 L& E

' y6 B) ]8 x, S' y

8 ^% x+ r& N5 _, W+ _0 Q vshapes= ( |1 d/ J3 \ h8 ^3 N( M' a

4 P/ @% W5 q% A3 _& p. N% |( \

1 t8 o3 W1 O& {. \ m   " ]5 @6 E8 v: B$ C+ S& L) b

' f6 T3 v8 f; z; Y0 q6 B# [

+ t7 Z( r q6 ]' M   * f& {8 W* p S2 [' w3 a5 I

}) A* o; m0 d% b( M

% m; g f; c) p6 \6 H% h o& i 签名信息 - q6 Q7 q! [( p* [

( M5 b8 a p; t7 F4 R, m5 J

' L0 s" o1 V$ h& v4 }2 T, @ 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 , {2 p, b5 W8 S/ m7 x/ f# m! o! |) ]

/ ^9 F4 B1 e/ X6 A

$ p* E( W& N2 e' d' ^& C8 s4 N& @ 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 $ |5 |' s9 S1 J7 Z- M( C4 y6 A

! I6 h1 t+ F" Q

: u7 y& o& e$ E# I* F0 N androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 # f+ d2 n/ F$ L

8 y* p! W! Q8 f4 {

& r% i" w0 |0 {* x# S" S2 t vshapes= ! Z6 [ h, U2 h- h

1 C, D) L7 O+ k5 Y! ]

5 t1 E5 y. _) Y7 p" K$ c   % o0 A: m. Y$ s g) `* p! i, x

. z3 H1 G6 U9 j& t

# `3 t5 E, \! m1 t1 P, ]) B! z. c3 U android签名的数字证书的一般都是采用 X.509的国际标准。 # L) M- n( {/ i. k# a* S' S

# v9 @" a2 a( m+ T4 ^$ l$ M

: A& r- c* A! ^2 q, c1 ~& ` X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 - P5 G8 \: N/ i) Q+ Q

5 R4 v0 P6 F1 G- \' J

$ i! w5 T6 y% ^ q; O0 m2 j 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 - |7 _$ u; V# A0 P! P

* g4 Z+ J& ]7 s" b6 r% @

9 N! J( \, P) T: Y+ G vshapes= * t/ C7 ^* W5 d' ^+ D! f0 S

4 p7 ]# ?8 u# a

/ `' q: i/ F0 a q5 C6 y   # A4 f9 f$ Q2 S. M0 S W5 j* t

1 y" e) B$ w% E" T( A- }7 }$ x

3 J7 t/ X/ r o# R& a! o 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 3 s7 l0 d' u2 H' k

, q. a, F' H" Q) A) N/ n

+ {+ n8 ]5 l4 f0 d# o" D vshapes= # k3 ?8 E; h& S5 @

; [- K$ {+ D; [6 w( Y# Z( |

% s* u# a. y# C2 O, l . ^5 U6 F7 g: d# v0 e$ m

$ Q1 _5 {; |0 j) @; X

5 J* y n" l9 `6 ]4 _   ) V. X, D( r0 H

- { B$ r- p3 a s* p" y

2 d" m c" k* C 权限信息 0 w* n: E5 \) K4 p

0 B9 O6 ^; V" e

+ O# Z; [/ ~& k( t4 | l4 r 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 9 G% a4 |% g, d" o2 l" S$ ]( o

5 x4 j& E) [& H( g ~

, m! W6 N% E/ \; ? android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 , d# O6 V- M& l

- [. l. {0 g8 T( G- ^5 J) F

5 u1 L, t: f- I/ N/ z! f$ d+ Y& [9 {. I vshapes= ! Q. ?9 b$ a% H: B* U7 n! K

6 X' ~1 a- ^/ Z

. V7 n8 N9 Z, a1 i5 b   T5 B2 I+ L3 j1 {% P

1 o+ y1 V( Y( @) P2 g

a2 d# m% B. L& |7 L# c! y5 m 下面对这个APP的所有权限进行详解下: 1 {( H x1 b; r( S& A

2 X- ]# ~$ ?' O/ u& ^, ]/ h

; W/ Z4 b; l9 L" G# b% ^4 G android.permission.INTERNET :访问网络连接可能产生GPRS流量 5 d" i/ a4 y* s3 ]

- y! _' ], T, _ n

2 Z* p6 X. c: E android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 r" Y5 P$ D" Q& M4 b; k. w3 d

' Y8 `4 N6 K: V2 A. [

9 x1 X3 T4 L0 I I android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 6 v5 H) C F' b0 ~6 h

+ C, x+ w6 S# p6 V) [& y# d3 Q

/ [ ?- y& h( w$ A- c, D android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 1 }& O- J+ r/ B! v* z- Z

! v& l& f# h, x6 y: D0 [

W( e- c9 ^, J5 N android.permission.WRITE_SMS:允许应用程序写短信内容 5 K8 i$ q- I) l( e! V

" U$ }$ ~2 a' f/ H |: l

3 w% P2 H9 ` X0 l5 d android.permission.READ_SMS:允许应用程序读取短信内容 . O$ }- n: K0 d+ D) H+ `

4 ]6 `1 e/ N, v0 H8 l

/ R% f# \- F' X android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ' s4 o2 `4 O' g" W- W# M6 F

' \: g" U. A6 B# L4 m) K3 e3 {

/ F/ L i' u7 |3 d! h/ x& o android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 4 [ f! U' i6 e$ e0 l1 A* u( [

& c4 m# q; N6 J0 F: M* N+ H

1 M2 _# T& C, E. z4 R% i0 r& {3 ? android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 1 @- ~, B; _& X& d* x. P

1 i: K5 y8 ]- P8 p* h

, t, W# `3 J% _) i android.permission.VIBRATE:允许振动 ' L4 e0 A! w- f- y' O2 y8 \

& D1 o* c# M7 C7 W7 `4 ~

! M- p9 G2 d" m android.permission.READ_LOGS:允许程序读取系统底层日志 1 p: `8 i) A- h" o9 [

5 n+ u# G O3 d: B7 N2 o$ P

' Z1 Y: e1 d, G1 d- u; Q android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  9 ~" v f' I5 f) @5 v

% y7 V. N; ~5 V }$ M# X% H

, ?. R. \! C2 N+ C3 }   & p; W+ S& W P$ z2 \+ f& A

- P5 W' S* c; S `* ^% f

+ D+ q" w f" h 功能信息 9 [, I8 \: b: Q9 [4 S: N% w

- g5 o: y! |: Z3 b v# x( a& `

5 a1 d1 T0 W& y, P+ R. c   ; c2 x, b& w) B, }$ r

; w2 f7 X k, K: Y

! o7 u3 \- y2 N2 i2 g/ Q! i 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 9 c/ `# i# }, m" {* t( M% r& U

# ~0 V$ Z5 e) N5 n# d5 V, {, s$ L2 d

- h; B9 j g4 @! K5 _ Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 3 A+ a" _' a# s( I; n/ u6 P

2 _/ t0 A* [2 W- a" q# Y

4 K% T2 p4 {) U) w) `# A) ~ 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 5 T- u0 Q! v( L2 V2 P _

; g3 x# k/ F% L. d( T! q

6 d1 ^. t# h- x& s/ B1 p. |1 I. c 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 ! j* W6 _2 e: ^. J4 e1 K

+ U2 p7 f9 h5 j0 ]

* H$ |; p& Z6 H5 j vshapes= + w5 }8 U9 K2 n! O0 r7 }2 Z

' @% x) V1 z9 e$ D$ I) Q5 e- D

' C, P8 h* \; o   2 L: w6 b" s7 k1 P5 F3 H* d

5 [# t3 W$ E4 t7 s! j' {0 l% n- ?

$ H2 ]* ^+ ?, ^- o" O5 L' B8 P1 t3 O 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 + O2 f' I9 s8 m! G9 \

" Z! a, ]! l9 k" m

1 R+ Q! T# X/ r& ]5 B* U9 T vshapes= 4 ]( N3 ^" E- h

! s }6 K# A6 T( G3 @

8 u: Q1 M1 p2 n! [0 W+ X; X1 f   : z) l4 e7 \# D1 Z" Q

1 T* B; ?) m& K Z

0 ~$ j" L0 d2 Y H; p: k2 w O- X lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 5 E& T6 Z3 O( r* U ~

: N! J: {, ?) L+ u) v5 t8 \. K+ D

3 n8 X( O' S- b% { vshapes= , |' B* L( B: U: s$ c

) {/ |6 U) p3 i$ w, Z1 Q

2 S \# M$ `' l) d! Y* b 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 ! ?7 V* Y% d9 B! C* U

t4 M2 o' T; Y! g2 e- J; F

9 L3 H' u2 G+ @3 C- {6 L vshapes= 4 l7 G; T- M0 B4 V. h8 [

* d0 G* g% v/ U8 ~2 C7 i, s G

2 W% o5 ]1 _5 l5 X   " h/ k0 t; ^. R" u

, q& i6 L% t) i

~, @# v9 q6 |; B5 K5 p: H# @+ @ 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 - ]! g! P& d0 x+ ?, \

. w+ |8 K, Q0 D- `5 {

& e2 O* E( r* a& A LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 6 p ?. d- M, N+ D' B. n9 ?- A

7 E# j& U' w7 D

7 n& h8 A2 N: j8 V1 }' S- x 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 5 M2 j; P" d' e: L3 B! _

8 u( a) k' w& T; U4 \- `) v5 V

6 g6 x3 m" h/ W! B 源的luasocket代码可以参考学习下 3 U0 `- h+ c7 G: Y- G

6 d5 v! D0 P/ d, a9 Q9 L

# g& d* P. U+ L' T( S& k& u) Y https://github.com/lunarmodules/luasocket . F) c- @ D) H; G

" [" Z0 S' F2 X

$ J* k h8 H: I- h https://github.com/fengye/luasocket . K' u: N1 Y& i$ j& e5 C

8 u7 P6 j- c# |. D/ h P

# t/ ]& v$ `' l6 q   - \5 V2 p0 j$ @, y7 j& x

# l5 g# Y+ g/ p, Q& Z3 ?' i( N9 }

4 h+ g8 M/ F- X9 N n" m vshapes= 3 K5 X5 N9 y3 S( b% ^4 |

& S( q% D5 H% z

& z& u4 } T/ N! `/ O; F$ M   " M( S! L T8 ]& t

( a2 V& {9 f' E# X, d' }

3 P: c/ b! G0 f3 E5 ~4 i- m4 T   ) x' O5 e# o! _. F" @

( h) a% ?5 }8 x+ U1 c

" i- Z- p+ Y3 x 总结 , f3 w+ ~2 I$ p1 @

6 x! z% |8 ? \1 L4 [

5 B+ i. b% n2 Z- C 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 # c! s/ f+ i: e, ^# [3 v: g

: D* N! q: z! h' ?

8 l3 Z D; f+ ?/ y" G% T; l 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 2 x7 Y; J* P" O

+ b. v; q8 y2 X7 c% I" ^# m4 o

) `: P0 R1 `+ S 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 6 O# b( e) z/ c5 |

1 O* X6 |1 b+ x0 v# L

7 B* s3 N# u& B/ i$ U6 ^ 结束 / w. n1 u f8 F+ p' |" @9 B# s1 |

3 ~& y+ S9 D' G7 P/ }2 i

# {; X' [6 ]9 g7 v0 P/ m  【推荐阅读】 9 o g4 g8 w2 E

6 v1 C# Q( u3 G

0 ^- r- t$ V3 l0 t 对吃鸡APP的分析 5 g: f e& Z9 |

9 |( N3 j/ @* R) ]' T1 q2 K

4 T/ i, b/ s6 g: F& j 你需要了解的APP安全 8 g5 [& {7 ^* J) w3 F

, [9 g! Z8 k* C; Y

7 ^+ E, q( a( G% n9 B) e 你需要了解的APP安全 , k5 @- ]- A y; W7 N; u

, n6 Z; T4 h' f6 R

8 b: r5 h% ?; M3 {& m; i3 X0 i   - K3 j7 G1 @" C

回复

使用道具 举报

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

本版积分规则

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