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

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

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

1 C7 l' R+ E3 W/ E5 ], p 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 5 V! d- O* f1 z P7 S

8 s+ j2 x( g! q; o! q: y. c

$ G6 e5 ]: E2 w$ S( ?6 Z2 K vshapes= 1 G* B" x( a3 I! s7 m

8 F" L; ], e1 {( y; D' v

9 S# C5 k% _, }& G- S6 ]   . I6 g! N6 y7 a7 F

1 |4 m; }/ O" f% e. G

. v- K, y1 o3 \: P. u# Z9 u! I 下面就以开发者角度进行解析下这个APP的功能的实现原理。 3 K# k V5 M0 Q0 m1 H

# ]0 O# [* D3 E3 `( s0 c; _5 N/ X Z

* ?* i0 v1 C' K$ X# Q   + p0 K; [. V) O* C% z# t

1 W# D, f s7 K1 J+ c9 [! f

4 Q$ a* H, I- C 基础信息 - b/ u/ g9 M# i7 O9 D; W

5 G" K, K4 M1 \$ C

; H u( m Y& ~ 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 , j- V* I' | S( z6 W6 G' t( ?- ?

5 i% f- a% g- |) e2 c, Y

' s7 \7 x! z3 E8 H vshapes= 6 ^& C; g3 h. I' J* M. U0 [* _& @

d9 E2 n% P& a# v! m- ~" i. H

9 U/ k. r0 B% @2 S+ F+ S   $ y, u$ N; z9 c6 ~9 x% h* a# \

* o4 s7 B$ S$ j7 P& R

( p( \9 k: J! A- a& n+ Y! B2 F 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 1 J$ z! g) z$ E$ x" k( Z1 J

' `$ t+ c( e4 [& R* l

+ p( ^5 ?9 Q. b: q- l vshapes= / C, i, o+ Z( \$ q3 \; z7 W6 e

; `" Q) b( ^/ Z* T

1 p+ r2 [( h$ g( F: ]( m, R   6 `5 D$ `1 v1 Q

% L; {8 |4 ?, o5 `# t1 H+ C3 T

" \0 i$ @: h5 j) H5 R; D& _! M' w 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 6 H! g9 @8 S; { W7 [

7 @ ]6 A4 P! U4 O; R( P

% H3 R6 N7 |/ j: G- L1 C1 @6 [ vshapes= / r* ]0 f0 M& a- n6 p

t/ ~/ N2 N9 k4 T4 E c

$ R1 f6 C3 q3 K8 F3 N. @/ d+ Y2 J1 c$ w   - w- w+ ]: g7 u, s

6 z8 H5 d! V2 }: R( e, \( S4 g5 _/ j

& {0 |7 P: m$ e3 p8 \, n3 y' V 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 + D* f3 q; c4 q6 E. _6 D

! x! A B$ z l

$ c e' n8 |$ j& C" @# @0 p vshapes= : b+ y: }) ~8 W/ |; y. Z. l1 ~

! o6 |! }) f; A8 s. |

8 |! p5 J' w7 a6 v   7 j4 P0 h7 D8 ]# ]. c' r6 K

4 L6 o- Z; o9 ?4 \' M

d8 F; W# }. @# x% k- M 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ! ~1 W: j* ^+ z9 K; o

: B; l2 R4 q% C5 T- @

! g, Z. s$ Z+ M, } vshapes= ' C [2 q5 V, i$ o. Y5 {

: U$ Z* c) o% V

) n& _+ x( K, g& a# r. F+ S   & z2 ~# B( T& o( z3 L! p9 W4 z

) u* R1 m7 m( l1 ^) {- ]

* Q' f4 v" l, Q9 _2 h   # e* o/ ~; |, U8 `

6 V9 E8 v O- d% }2 J* p3 T

0 ?* @, c( X- ~# y3 m; S! l) g 签名信息 4 J4 b$ _4 M0 L" y7 g

; @( x; G8 B7 ^8 l, w

4 D6 h0 I+ h8 a1 f' A 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 B% P; b1 o: P0 @" p) }

# c6 z! D- }! g1 C) Y

7 D( E6 m7 y" ^: x8 o 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 & ?2 y, h# z R1 g: C4 K

; A8 q N- v7 e! l( O8 l8 K' u. S

. b- i1 v6 ?' W+ p% Q androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 & u8 ] s$ G- m% q f; H: I& M

: ^3 G- S+ l# d

: K8 {2 X, Y8 M. O1 G" u- q vshapes= & B4 z- L/ @2 ~8 S

; }( P3 ` }( E% c) Q" }- R

: _2 q3 k0 u0 K$ T   / o* z; r6 R" o: X+ ^

M( }- D0 @4 ` O

}. x7 f9 ^& f3 n android签名的数字证书的一般都是采用 X.509的国际标准。 - k3 a4 Z3 D1 L+ H

1 T6 H2 L9 t9 z) a

0 b' D2 x! G3 S+ L; h I0 S X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 5 M4 a/ O0 q; `3 B$ Q) u/ {, I

; o9 O* D2 v- @3 M

6 `5 `- y8 I" a- ~% T2 P3 b: h9 j& c$ B# } 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 $ M9 V( S- I. j( S; W4 e- c2 v: J

6 y& b( J& w# H1 v/ Y

9 x) @/ P+ g$ y2 k" B) | d) J vshapes= " K* p5 U5 |* ]# |( ^

- z6 H1 w2 {2 d9 e

& q G$ h m" O6 w0 o" v, x Q% L   6 {, Z7 @- U( i- B# \2 S3 Y& p

8 q7 ?7 N% v: K a; x/ @

C6 l& s, v, n! ^1 q, B1 ]& i 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 $ ?: e& E$ [! x1 m: r/ H ?

! a: B+ `) ?3 i0 v9 e1 P: o+ ?

/ H2 N* X$ I# D0 d% x3 J! A vshapes= ! B9 w& E" Z* |( Z

5 {# t" G4 D: ^; B

, e8 y% K# U/ y" q ; }% s" _+ g% S" i

" d1 d5 R" ~) ^6 J

6 N! N& a2 w: {   6 T, }$ ^8 m2 o( y; D

& @, Z- \. H& `3 I+ Z( s

" ~- V6 W2 ?5 n5 N( ` 权限信息 + f. F+ `3 M& z6 [- S7 @9 l( I

/ p; O: a( s6 N) }- @: C& u4 P

7 z- A u7 ?" {# R3 a8 c 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 4 J- V. U2 a0 I& I. k! q

' J: D5 o% H: @2 _& E% B

4 \" J' z) {: \- N' w8 t* P android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 1 ~' v r/ D0 J

/ ]% [4 {7 R1 P- [7 u) K+ f

2 g1 l4 \8 e6 L8 c5 q: v( ?) g vshapes= # i% E( x5 J& {

' q, H* r! W5 K5 E

& P. {" ^' P' D& m' D   4 E( ]- U1 s% l3 j J% x

) x% c8 T8 g9 s' D( J

8 M b+ @8 p- l' ` 下面对这个APP的所有权限进行详解下: ( d. W$ I+ K6 o) a8 ~6 @: c6 Y8 M/ D

* c9 S4 a+ G4 o0 x6 r8 C

: S# ?* e i$ Z android.permission.INTERNET :访问网络连接可能产生GPRS流量 @% E5 S! s" h% A

. m& o! l. {8 |2 \0 H9 X( s

% h! h# v/ X2 ?5 w android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 6 T4 \5 K( C4 C Z' b

+ o6 f) ^/ V9 K: r

$ o+ m7 @7 V u, e$ V6 U% q2 ] android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 5 c2 I3 F8 q. u( }6 q

5 x% N# C# w3 q3 o/ A- v

! s4 Q# r, V$ D$ L1 F0 O' l android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ; \. R( E" M, [9 u3 r g

& ]4 M& e" O9 T& B

B0 G' V7 z, _4 o2 J8 i, u' W android.permission.WRITE_SMS:允许应用程序写短信内容 B, }* K. m: M. H! ?

- J, S( }/ \4 m

: p5 v' s; R& ]! M. ?- U android.permission.READ_SMS:允许应用程序读取短信内容 4 A+ [3 O# x# k' A# ~

8 |! t' ?9 C6 {# A$ C

+ F) C$ D: z( c8 C android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 & s3 F R" P+ d( L' P+ s7 g

9 i! f0 E4 J% D/ R* w6 F3 k! B

8 \/ q6 r4 }$ S! I/ ?2 q android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 # x* f" L6 L# f8 J! t2 k

" m7 T N- n% h" z# Z

^3 ~, ~) a" j+ G: t, t android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 9 B2 L! u ]) I( _$ _) W/ r

! ~" c' R o* E: H

" _8 W% N" C A; l7 P) d, a9 ] android.permission.VIBRATE:允许振动 s0 D; k; o7 N+ g

/ |9 r. }; _. B% u5 t- g+ d2 Y: C

+ e! I4 ^- C0 k/ K8 ^. h' i: I android.permission.READ_LOGS:允许程序读取系统底层日志 5 ^1 J b0 ~* Q* a) ^

6 p5 k5 \) i; P% Q9 o) @8 h

# s0 R! `' l' @/ o( H# E$ Z android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  7 R& A2 ~ a) X2 P. q

( V& U/ T, R# n

( S5 ^5 ~' E& B. G8 d* b   0 W$ q8 E5 i3 L4 b* S

/ \! {0 w; z9 f/ R2 P5 {3 K

4 |' s5 |6 L |, b. x: y7 N9 U; d, b 功能信息 + o1 Q- Q7 f9 H% r( `" W6 V

0 P. F8 k% f" U

; A# \+ L, v9 D. Z9 k# K2 z, o   9 d) x$ }0 O2 C

1 Q7 W9 W( J) u# ^# r

4 Y- j/ R5 t/ s' N 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 * N1 c0 o" [3 z& ~

7 n$ H" B, w* r3 @5 n

* b7 g5 A% A9 p Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ) |( I) G# v, Y3 Z' U

& T. v! a4 E: Q- P

( A3 x3 y- i8 d; E; T 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 % T- Z6 W9 _6 `+ x) ]. ?

$ F( Q: _* Y3 a' I8 o" Q4 @: a

- N7 c, p s& {1 h 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 - v9 J1 I9 j5 @& U S+ O) b- {

7 H% G+ z% ^" Q+ c

t, Y! _# u1 J5 r/ p% u vshapes= " k9 o y% i6 X* v

$ l( O8 i$ l- m, o

: b0 c! b* `5 r8 t( h   : s3 b9 x7 L6 m& F% l3 @

2 W5 S# @9 _, }( }( k- \1 D

+ L+ h1 M/ b1 I 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ; W9 B* ?& D; y2 {# e5 b# \& v; C

) G! X' V& B! M0 A

; m* V: {& e2 }, _; [ vshapes= : w( M- z# }. [0 B

' Q6 b& p5 F# ~" E9 J

* o. K# N' {' a2 u# z2 M D   ! d: d) Z/ F7 @) @9 I$ B3 `, ?

) t6 }5 Q/ v: `# F6 `& \. h: P

( p9 e# j9 G$ F lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 & X9 q3 \1 ]% _

* J* q( {2 {' w' Y, ?6 Q: ]/ x

) F2 T8 K! d1 |. w6 S) e6 P vshapes= 5 B+ t. E. v% t4 N/ B

! J) ~2 E4 k* } b# y1 B" E

3 [3 [/ h2 T5 c" s5 Z: x! E 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 5 t, x6 b* E- ]& b! s

1 l0 X0 n, d' Q/ D7 |2 ^- B2 F

+ C# _! r+ w- x% e4 o9 V vshapes= 4 `3 w* P9 h8 m% d

2 u9 A' z2 o6 o4 U3 r

; _, l( o" H; V2 J3 E& g' k# e$ t$ i   ' J' u; Z: f/ ?

* F% H& B; a" |, E6 N3 e2 k

( V( Z6 D; _% G+ `* ^' B 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ' w5 y; [0 A5 U* @/ }8 X' ^

6 W. Y: y: {& T, c

; s, `, S9 ~5 ^: q ^ LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 $ f" {, Z, m- ~# [2 ] m

$ {, `! G3 I, S) B) D. A; a: I/ s

3 }# C! R6 v8 _/ ?+ j( N* h 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 ! v Q& I1 ]6 P' N

: v5 R2 C! u2 z- W

& I) b; L+ d, T9 A 源的luasocket代码可以参考学习下 0 [" L' Z; X! v1 _1 M6 h6 w+ U% O

# n+ {4 o N" W9 v

! T9 K& c5 A5 U% i5 j https://github.com/lunarmodules/luasocket $ P M) Z3 n: R5 b

- G( P" n8 P4 x" _

/ ? h. ~; [6 a8 d$ O' j% p! c https://github.com/fengye/luasocket 2 c& c# N$ J! u1 }, m0 f' m

% Z8 M: S4 T5 N) R. W/ f

! E8 N, ` A- A! ~ ^0 _% D/ I   ( ~/ u* i5 [/ P+ ^, ?, H5 l8 n' A

" N! z8 G4 F- O6 V

6 G' k! Q, @8 W/ L4 { vshapes= 1 e& C8 N* B$ a5 g

; w2 _" D- q" m0 O- Q2 K

7 `; U8 {) q. w& m+ Q# i5 F3 u   , F0 ^8 h* o5 E2 E" C

" k; r$ q. s7 X

1 a+ R l% N5 E y$ j   " O4 v2 x3 D$ H, [: E* L/ W9 M+ a1 H

+ d3 x% ], w8 k: J' ~+ R7 C# |* G' V

* i3 D. y$ o" N/ `+ I p 总结 7 X' }7 w: S$ V, {3 l0 V

% T. X% {, |" W: @6 e8 ?

; k% i) m B& ` 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 1 m$ E' Y9 f6 o% w/ \

; R' X3 s6 }: _; X

$ J: x- M* h" S9 T& e 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 6 [9 |) U& u$ r+ F1 C2 s+ l- w

9 Y+ ?/ L5 _! p, W

2 V( L. u& t3 \ 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ' d8 K7 }: t1 B# |) ]

+ q- e' K" y+ k$ {+ W3 P' l* e

4 n$ E1 k: x4 Y' g+ \6 | 结束 & ~9 d4 k3 ]/ ^. v+ L( N# O

" Z7 V) [# G. n5 k, l

G! r+ E9 ^8 Z: Z! \# m: d2 K  【推荐阅读】 1 B6 N0 }/ O. g/ e

7 {, a$ ^. j H+ o* j# ^3 Q

, X4 r P9 L/ \ 对吃鸡APP的分析 ) f ~9 [) f' K, Q

' O+ n1 }3 O: N% c$ p9 l

" D* S6 G" C% [" M6 ` 你需要了解的APP安全 + P9 R) \; u$ p/ ?6 i

# _, l4 o' x6 ]

% _5 ]$ W% V5 { 你需要了解的APP安全 - j; i2 p% B, B7 y1 j, w/ k- D

6 B( h/ w- e% l9 n; e/ P

+ v1 e8 G& R9 v( p9 K9 V5 @) M5 Q   1 u3 l O1 F1 S8 w. E

回复

使用道具 举报

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

本版积分规则

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