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

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

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

- S8 z3 _, G, A& T @+ s 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 , U% y' a) G. N% r+ {

+ u; s# P& L9 m

# @1 k5 h# g' B4 m' K vshapes= $ i7 h+ \) P4 Y0 y* l

, _5 E8 l$ b! Z' W d% e( V

1 A4 L7 |) a; l& R' N   $ |2 Q9 G' j7 H

, @: T3 C- P! z7 j, i

$ e+ h6 J) A$ i6 Q7 B) Y 下面就以开发者角度进行解析下这个APP的功能的实现原理。 + L# o9 m# V5 k1 v; @

0 A" L( ]! U; a; F3 w, M5 A* o

5 _/ S9 i! V5 P' b: S- M   - l$ _$ W# Y( a" [' Q8 h' a; {

' D2 }& s R0 S3 s- J0 Z# I: ^

1 q) j2 H. }+ \. d 基础信息 5 L8 p. S+ S" `' }% w

# L/ B0 {* p- `0 ^3 @

1 p. b+ M, |- V# J# E 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ' g6 {1 H6 d `7 d) w3 ?

) F' h9 P! b u+ y y8 ^

* o/ y* f6 q8 N0 L% l! h0 U vshapes= x6 s6 o! V$ d- M7 D

7 Y- [! A+ c* D4 G2 ]

( ?( U/ A0 c7 p" f6 }$ ~   : W$ _* `/ d+ X" r1 a0 \& _8 m

9 P: K1 ~( m3 q. ~" d* W

3 g6 @1 J, P4 j; e 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 - V9 L8 `9 |6 ^. e

6 Q- y! [7 T( X" H+ B

/ D( j# o2 @/ D n+ z3 _ vshapes= x! ~) K/ Z$ H$ T

( R" Y6 v. ?* U% m8 Y

- q% ~# }/ ^% N) R   ; |) X0 W5 A3 u2 m1 ?

4 L( l3 W9 y, D. c a

! S5 P9 L2 z; j& J& `4 z+ O/ H 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 - z% ^. m+ |5 ^: E! t5 e0 f1 E

9 h! o/ {9 n7 j9 O) o+ m$ @4 c- K

6 o- a9 C; T( c* f4 ?1 f vshapes= - G( A$ j; W4 T6 F9 e

( N- f2 w: b: `

" A7 i/ z h+ @0 L4 P z( i   . N5 K" F; \, l; h

& f, i( n w) R; \: c+ x

6 b1 U* n7 H+ I3 V' h# B 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 # Z. Y' z; g; C) }( L2 Y1 {

; H: b% }9 f7 s" f* y7 ^

7 A0 ?, ^9 }: i* C vshapes= 4 {3 y7 M3 ~1 j- Q6 S* {

: |7 v$ q0 W* S; D% |2 g- \- s

4 ?" _8 t( N; B# Y9 f7 c: k   : L( C2 Z# v) Y6 O( y

& X: P( |, y* K: j( y

8 l o8 L* W1 s2 V; ^7 V& p 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 + r! |7 e$ m9 ^. ^

l, A3 Q& |* t8 y

% d8 M# ?& G+ o( w* }0 I vshapes= 7 {; I; e3 p5 s2 v5 Z$ P

6 c9 i$ Z* _1 N& C3 N$ k0 f, V/ B

' \, Q7 Y- F, t6 m3 A( N1 ^$ G   ; u M6 \$ L- k9 X2 Y+ \

7 W. i8 V& y$ R5 k* s

! Y5 Q* y4 ~' u% j6 e   ' z) F' R% X; Z" e

0 w( O! M l9 }1 @8 j: U, {

% }& M' y0 C0 r0 S I 签名信息 6 P& J0 H. D2 M; ~

. N6 p$ [4 f9 Q

' W9 ~! b+ i+ K9 R+ H 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 9 P3 Q2 [) i& T! l

, ?( a) `1 h! P1 f/ w

, H+ a% Q0 u; A5 V; F' O 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 2 `; X) I$ e' i; H; ]# r! ^1 V/ c' ?

5 E9 n7 V4 k. }* D- {

. ?3 Q5 N8 T& X/ ^8 u, E3 ` androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 0 s, m1 u5 o% B+ M% k# Y2 y

6 l7 u/ q* A) g5 ]- E8 I9 d+ L k# i; R

' ~ a) ~0 X- F: y$ @3 c vshapes= 2 e- g; I! d. I

# Z2 T1 @. J" o: e" K9 ?

# T: f8 M: }. N& Q5 ~$ s, b* i* w' X   3 n, Z! X- f m3 R0 T# M3 l2 Q) s0 l

0 n: m& H" n: @ |" b& |4 P3 E5 y, s

4 ^+ C0 s- l) i+ i+ y android签名的数字证书的一般都是采用 X.509的国际标准。 " c4 y! x9 e4 U0 l4 f

2 B) |) y& O" j+ f

6 p8 G. }6 K# ]: o( e1 W X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 2 g( {: D7 c1 A

* q7 |2 ]& |. S! {$ j6 V; c, c

: L' h0 x" `6 d$ s3 |- k 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 ! s7 F9 e' ~' F% r

! X) z* S& b8 E) f) X2 G* M0 Z5 N" A

( S2 U' I( I- F5 L5 U! A1 c0 I vshapes= ' @' U' ?! a8 u$ ]

* g( u) K* B+ D' e3 m# s

5 u0 G5 r/ r& u$ X" @   , D6 D1 M" [' C5 B

. A1 m9 w& p) N9 o! Z

& o8 x, e! c" ?- ] 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 8 I: u) u# g) J- q: ?

2 @8 |) f5 C1 O7 G# O! [2 d. P/ P

. \8 V8 k8 ^9 `+ k! M vshapes= 2 P% L: m, \+ a

0 @7 ^ y: M& |& D! X

4 b( M2 s' C; e# o/ \ L b6 A0 H" X* }3 k

; v6 t! M8 }4 F0 m, w. ^

: }5 B4 P% G' v I2 I/ J   0 W9 Z" h: H; X, Q0 N5 y/ g0 V

. w$ Z7 G- G# ~' s9 J

6 q) F `2 [! V3 w8 [" `/ S3 s% |( v 权限信息 ' [% M2 U4 M: q y9 G6 e% l! Y/ L

- S, H8 e2 W* _" ?# @

/ v* l! a4 }2 i4 d 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) $ [& m% ?4 T* Y

$ T: r6 t7 I Y3 B* Z, G* t8 `

H: U. }9 b, E2 u' `0 \ android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 1 l# ^5 O" A1 v1 u, t4 k3 N& }8 m

1 e& j2 `/ O Z) d( `' u

, y2 _+ z7 h4 {6 E( f vshapes= # T6 R% }% I3 {

' q6 D' E. k& x: B

0 r y% C: c3 K4 J' _   / J ~( K) r/ m9 D& O. Y

/ U4 z' v7 U* K% z! I1 u; }2 e+ ?

; |- Z" f/ \5 F" ^5 H9 p/ z I8 f- l 下面对这个APP的所有权限进行详解下: 4 t- l9 D+ b. _2 p

; G( s/ v% Z- Y/ a. [! w) ?4 \

& w' q- F# k/ b android.permission.INTERNET :访问网络连接可能产生GPRS流量 3 N* C1 u" l. C6 b( c5 I6 \% E

9 g3 S3 C. }9 Q' f2 j3 }& f

! H8 Q0 h/ N- Q- S android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ' a# g$ ]" b/ f

5 c3 G$ V; R2 ^3 D" f1 a4 g

( c' l2 R: F4 U, }; ?- P' K# I android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 # V, q5 j! a# `3 J% G

( O0 {. ?8 @' ?+ x

' ~2 Y* H1 x% \3 l1 p android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 5 p9 _2 z& D7 z( Y! {

7 k' W' d+ Q: W5 g3 G1 Q. h9 ]

, v% ?; J/ ~' g android.permission.WRITE_SMS:允许应用程序写短信内容 7 |2 k: R4 t7 R4 X- W

, k1 Q% k& f6 o" f s% }

4 n9 B% b4 F: N4 W: i android.permission.READ_SMS:允许应用程序读取短信内容 $ M$ `" `8 ^2 }+ n3 _! J

# C: h& U+ V* ~: ~- _' B: s0 U

. R) G8 ?4 W8 E/ s' K+ K* z android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 9 m2 R# b( C6 I5 y$ y- b

# ^$ [9 [" |' k/ w

$ Z# n1 g6 G8 `1 {/ }6 ^5 E android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 2 E2 ~: L8 G- o4 N. E( ^

0 @0 M; l7 }! p3 Z- _" {

3 |5 _7 { G# u6 _% ^- w" b% h. g- T android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 ' k( T& p* F# c5 i J2 T7 H

$ W, `5 u3 }+ u6 |# z) M& s9 v

. }5 p3 v4 j* Y4 t' [( ]+ w android.permission.VIBRATE:允许振动 $ x; W; K3 B3 E5 l% \3 F

$ \/ q) H/ C5 K! L; M* B" w7 O, [

! j% G; X! M$ E. p0 X- E android.permission.READ_LOGS:允许程序读取系统底层日志 % A. n& U6 d4 j# i: f

3 u6 {, G* L4 Y8 i

' c1 \8 ~; } a3 \/ ~9 b: y android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  : ^2 h, i" w: O# e: k

0 Q6 v# h. Q% c% M( a& e8 U

# U% A+ u. v1 M3 g/ Z) I   / x9 x- V, |+ L5 C' w/ p, [ X8 A

1 l4 M) R k! K& \

5 M) Y# C/ U3 k' x# r7 v 功能信息 ) W8 ~' j& A* G( @* I- y6 t2 O$ I

' h4 c. |# c2 g5 W' S4 z. u5 F. Z

3 ]8 y( {% G) u7 W1 z   + E& j" k7 f7 }5 a- c0 h0 I

. l$ I- w: g' X

& w, o' _; R; y& [3 g N& M9 R 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 9 g- `* @. D& p$ p7 h

' H) _- a; d: w3 J

6 E" u( Z$ e2 v; k O: K* V Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 8 b- _& c# L) P" H

: X' Y; @) d; `' {& a# B) x

) J* h0 ?5 ]# W8 F9 R8 R% X* e 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 + T: \3 o+ i% Y: G% }

T/ ?& N7 T# O. ~. U1 L

* x( T( a- \+ }( X 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 + L. t( ~) ` Q t

+ a4 W# e$ S- I3 G

' Y$ b# [* q9 h* E vshapes= 6 d) l$ y+ ]4 h! T- {+ l

1 a3 D, M2 J, C4 {7 O7 x3 Z0 ~

2 g! M( z# D# n4 n' x7 C   . F! H, U# c$ H" W9 e0 l' W2 K( ^

7 t( o) M9 W/ N6 l5 K+ v

1 q$ D/ E4 a1 H \ 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 & ]; u% b. ]( H% o

. ?& P& R7 _ E$ @; q% w- [3 a

0 r3 X3 n; l. U# U0 W8 k _ vshapes= & }/ `) A) ?& e7 K6 O% [

/ n0 m8 N) U. @

1 R1 y! V7 n. Z6 k; u   7 d) R# u4 P0 s7 s" Z! _- w* [

5 Q1 ]3 G9 r4 A0 q

2 L5 d- B( c8 S/ t lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 - r9 |& W; W* l+ u2 K) X; V& y

' v; r$ a, Z& I, z' e

/ t% Z7 r$ s8 s: g7 ` vshapes= + M1 q# u* A& h0 g: @. g. K

1 j: G9 G% M: {/ G7 d& f

, Y+ \; g8 m* h: o 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 8 s" }' ] L2 n0 H& L6 I9 o* o3 T& |/ ^

: L+ i- L5 ]* A0 f: n7 Q1 [

s+ D# C4 @2 ? vshapes= . F" @. \. n: _4 g2 x" [0 m

! V: E: b5 r& j9 h

+ K+ w& H" D# c   * r% P. P3 G+ E, e7 g" s. ]

; R: Y0 h2 ?- _, P5 T( C/ E! x$ k/ H

" t8 W6 F5 f& e; F3 \, A 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 6 \8 ^. w0 f4 t# x H. d6 x% P

9 m* a0 }2 l x2 H) o' |) C

% \7 \( W" K1 c$ {# L LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 7 x5 l& K7 ]9 M0 ^8 @2 ~

- @* e6 W" \2 k/ `9 T5 [8 r

+ A1 x6 }& r- K% }9 u. d( D 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 0 Z! Y; t* U; f/ [6 _. o; s

: V0 q# }" T0 U: N$ c1 ^

6 K4 f, W; `) H" d) K5 ^ 源的luasocket代码可以参考学习下 , v( ?, K( ]0 `( m" W" f

% P8 T# D9 H* ~2 m& k. x. h3 ~0 P

" T3 W. B8 d9 @8 j. @: u& j. f( ] https://github.com/lunarmodules/luasocket 8 L2 n2 ]$ Y' h; B

' U% R3 A+ d0 Q# i) x. z

9 q6 E- D7 H% |7 g5 c( J( e https://github.com/fengye/luasocket / }, H- w2 s, J% x; w

1 I7 v9 r7 A6 M5 V: x

, p8 @1 n9 R6 v( ]/ A9 I$ m   1 ~: t4 L ?( x; ^& O1 B: |

2 u& }6 C; T+ x

( ]( S( O5 Y |! B vshapes= : W g0 X! a) [$ A# U0 C* i

; H' X! o- F9 ^3 i

4 G/ H, X, a- c, ]1 x   9 N# u7 [ E/ o

2 e) C( E- a1 @

" u- n5 H* t0 o- f' M8 J5 h7 W   ; n4 ~( O; n% f, g. \& Q

' @. v: _# b8 k! R5 |

/ U" W" a& z* S# b 总结 # H+ M: f' }! M( p* F' B

/ p; w" v7 Z M% p

3 Z+ M7 S B3 u, q# r 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 ! V3 }# I! Q8 L/ M/ C

' {( t; r% g& w. b* x% c1 c

5 z; v5 c8 X0 W- s: ?! C9 a 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ( P* q) x7 g: R

- m7 A! k: D& d+ T! p% a% o

0 b! K8 B" t; z/ y 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 # X, Y$ C; P* B4 z

# O5 l6 t* c# m. _

) B, O/ v) H& H$ R0 i# F+ a 结束 % ~' k$ K$ l2 z" |7 q) }9 u

# }" t+ M% ?! U& l+ ]" e

3 E( j" ^, ^' q# m/ y2 `$ e  【推荐阅读】 : y; k0 s0 J2 N; L3 `' a! w

, |/ w" T4 M/ [+ U

" T8 D. ]6 `- ` L' ^8 J, B 对吃鸡APP的分析 0 o: h5 x6 Q. @! Y6 K J) d8 Y! l

1 C. X s2 e; a F3 z

2 j1 \9 l( |# M `! G& `/ B 你需要了解的APP安全 $ A$ x% w, W w/ H- l$ `

" m- u! n R. I4 ]) Z* [7 K

( ~. c' A2 X5 ]1 X" Q1 a( M6 U; ? 你需要了解的APP安全 7 t2 P9 K5 W3 O4 F$ ~. @

% [* X4 `5 q3 i+ _: e* @

- J2 |$ B4 u# D8 N7 |9 }   + b6 I8 `3 |8 t/ z, ~* P; L: t, V

回复

使用道具 举报

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

本版积分规则

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