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

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

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

% I7 s; s0 c0 Z3 `% c0 B& \ 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 $ T7 P3 f( }( o# v0 ^# ^8 b

5 ]. @# h# F- A( ]" \

3 N6 ]9 {9 y% {& _( b6 c! f vshapes= 8 h' g& O5 X' K1 u

2 P$ `& [4 _% K' B C& K

9 P! \/ b0 H5 U- z0 M$ y t. `   3 l) s+ M' _ |

9 a) e9 T: O. [1 ?4 p

6 `* _5 a. c7 e& }% Z 下面就以开发者角度进行解析下这个APP的功能的实现原理。 $ R4 s$ _' t; \5 Z- o) a

. B; k7 _2 ?4 C6 g/ x v) L

. Z) o& N) K+ n9 q( {) E5 U7 b   0 N0 u, @+ f6 V g4 ~

& \! Y" H4 ]) e5 N0 W7 H7 o

( p/ R; E- R: f2 u! y+ U 基础信息 7 T% ^; E2 N$ p+ d- S E

! _! h# U0 ]4 g

4 G0 P5 X% ?' l- z6 j3 |5 f 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 * F( o* O; d6 x. A" g

5 Q# c7 d' S; J$ ^5 V* T, n+ {

, l9 E% h4 b( }1 g" S vshapes= % _ v8 U% d3 e. e9 e) @

' e* q+ Z u4 A9 h& f; M* A+ U* Y

& f: H/ c- }% g, _' K( \. p   * {4 x6 y% F* S1 V9 e7 z

3 F. K3 D9 ^( j! Q

4 }6 }9 r- u8 _0 b$ P$ Z- a 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 2 Q# A" v' y; [& q

" n4 n% ]: y* C( R. I

) H. Q6 N6 ^* d, G* p# b vshapes= $ C5 c* B/ E6 k9 B( T

) Z& N1 Y' N3 J/ J* [

, D/ p9 |! ]! Y p! `# D6 K/ _   / A. L- J, L) |

7 R; l; a4 f& G1 U0 ], B% b! r

5 O/ b0 G4 C3 [& ~& k! v 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ( @; J% t: d: z

" v9 N- U8 y$ U9 c2 X

% }& m3 x9 @" D, k8 e1 A vshapes= 7 {6 Z- T7 R4 ~+ U; J2 S

! }3 Q: B6 A4 C A0 c+ g

2 W5 w3 p) I9 ~! `& d4 T8 x   4 k7 O7 }2 D$ t

! [' Y, A1 J U4 m" `* Y

1 i; R, r/ o/ y) ? ]3 B 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ( C. ~7 n# w5 }: F' B& ^

7 ]9 G5 F4 V5 ^4 c. l$ K% [

. s$ C- d4 q2 V vshapes= 4 i/ } Y& x/ x/ s( }

/ M. o$ C7 p6 Y; G" [( A" A( ?

% u) E. ` y* x; W9 I   0 I K" {) N" h

' M/ y3 `4 M- i5 |& z

& A. G- U; \2 {- C. K1 I c 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 " f# J' S+ `' m D$ }

]/ g" r. }: O% J* n! B2 T5 v$ b

; O8 m: r) ^3 e% b" M, l$ ~+ m# q4 ] vshapes= & l9 b6 X" D) b9 y- {

% ^6 i" ]0 g' v/ n9 w

?: j4 ^0 Z4 ~   + P4 D( @( \6 c0 O- J- A3 J

( t8 M5 E; H4 O; \+ y. O) C

, @2 M! o4 U9 ~3 c$ k7 Z   % f8 W H2 b" x r9 @0 x

' A6 P4 ?) T; e) g, ~! U( h

7 B0 j6 P' ~% X: ^% C 签名信息 : s$ V3 s1 R" Z- ~& M) }9 a

" |$ B+ e- w6 B0 h

+ E3 |+ s6 f/ R; f8 c 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ' Z5 Y+ [5 l% j5 Z; P, I0 a

- C* [9 m- j# A6 S( f: v3 p( }

1 L+ N; u4 \- ?2 \ 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 1 Z& ~; \. J2 b' a, R7 j- u; P1 m

* g- E. M- ^- L3 w4 d

( H- f9 n' m* Y5 z androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 " ~3 }5 S2 s8 ~8 ~! q8 W/ s8 H

. @4 K8 D$ j2 a+ m1 u0 d1 O2 k

7 r0 d# C" M: i w# D4 Q vshapes= ?+ i; J* m7 p0 D* X( ~9 Z1 i

9 I ?/ |, b" N# F

- x J0 T' C4 o   * C6 e0 p( c" P

# [! G( b9 ?! |& ?/ w

' u# `7 }- [- ~3 w) a android签名的数字证书的一般都是采用 X.509的国际标准。 ( d. Z: J! `& D* s: K$ b# a

9 b" c& j6 |$ E T+ C

5 G# J( k) R% h, `. {! l X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 / p/ h5 B0 [ `. t2 X( j. ~

. L0 l7 b( x5 g U6 W

" R8 x( G# Z. p 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 5 v1 W9 z! C6 E( N1 ?, T: Q; c

9 ^1 z4 O) r' ^$ Z* n) H

2 g' u( R6 n- q& Y! O& c vshapes= , t. ] N" I) s; j v( l( j

) G' h: z/ f1 L# M+ h! b, o( E c

& \' s8 j5 D, c" u   2 v/ M) d" E1 h3 x. A- N7 [1 i6 ?

" r) I; n7 z; l$ `

/ ?9 | W9 t# K9 H4 w 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 3 K! G8 N2 G+ L# W' g

4 j: I2 |: U7 u

9 {. d+ e8 I4 a( N vshapes= 6 ^$ l( n+ `8 N5 t" _0 Q4 h

" W$ g) ?) b: v$ k

9 h# R/ a/ R% Q0 D 2 Z1 k3 I( X4 N: b9 B1 f. A8 a8 ^

. F y: ]! n& t4 v

6 d) v, \5 m. s5 R& H   ' }. l3 f# T$ T

4 A; H8 R+ x# a" G

3 w, _( l7 J" v+ R, ~6 w: \ 权限信息 9 G! n7 c/ l q# k3 @! v; {

+ G& D4 p1 U$ v( T) D) r# Z

% e f! L( l" s! p* n 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) 5 M, M" _% ]2 H8 ?# i

. B7 Q: W$ |! x/ k- B* p

6 A# }) y5 M/ k+ F, { android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 7 Z6 o1 [% f. N7 N

% U2 o Y) T/ H( U% V2 Q+ s2 M7 y- |

" }9 a7 d% u% I; ?" ^/ ^" t vshapes= 9 g9 w! T" D- a- c/ m( ~

- m5 y0 a7 v6 K( D. `& n

/ o- B! |+ @* l: y. \9 G, @3 r& O   2 D6 J/ J- \' T) P

6 Z2 A0 D& Y% h

R7 Z9 ]9 A6 K: I j% D 下面对这个APP的所有权限进行详解下: S- }( f3 t; I! _( }- O; G+ ]2 K

$ P) X$ `! Q: ~5 P

5 _, |" [. A/ s4 f( g android.permission.INTERNET :访问网络连接可能产生GPRS流量 N8 q: p, c6 k( |9 c* l0 M% i

) y( s. t" G3 I8 ^

+ Y: W, ]1 x+ r. J android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 + u( {& z* J9 }: H& i4 D; D& a: f

5 r4 e% l" i: Y

- p) w) b# p' c# _" U; }3 ] android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 , @, v d3 S" B- A

- ~) k8 q+ c& U1 i: _; ^' F

0 Q! e0 ~" B( j/ ^# W android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 9 x; U, J9 z9 _; n7 I: i

. B; |) t/ r. ~/ o$ l. A

" q/ m$ [7 h( a: W( G5 W4 U android.permission.WRITE_SMS:允许应用程序写短信内容 3 [; M% i. X! A! `8 B

( q2 ^" p+ A3 u( ]; c

7 o/ Z D/ I! {% f' s, L android.permission.READ_SMS:允许应用程序读取短信内容 : e3 L+ y J( |4 Z

! o" H, n& `" ^8 W0 c

- r% A s. s- Q android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 0 P5 w/ S3 Q* i1 g0 \) b

0 K0 b q4 B3 w; A

& y2 }6 x" T4 k0 S2 x8 } android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 ( k' Y, a+ y5 [# o

' W; _; z( I& Z$ i

. z6 ?6 E+ K! z, @ android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 $ _: Q) W3 f8 v+ ~0 a

$ ?/ E! p: j4 l2 G8 [; U. e5 D: z. Z

+ u. s. N- d; T( ^5 `' Y2 E android.permission.VIBRATE:允许振动 , _( A4 N( M; t) U# k

) p# _: @$ z2 S% p; `

( d" P( I- b8 K5 T$ C- f/ R( c android.permission.READ_LOGS:允许程序读取系统底层日志 4 G9 U- q) x9 x* o

* m7 P" ~* O' Y4 [! l

# i- Q# a5 t# b/ ?: O# F7 K android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  6 H, B, l1 v6 Q

. X' `" ?+ ?; y

- L" q# b2 G6 V   ' v+ b3 F) \+ k$ J( J8 [6 F! w0 c

; \3 R; S( }. j t" _) c2 l

8 J+ f% C- R8 ?. Q: \0 m 功能信息 J$ ~$ W, |. b5 A7 Q8 Q- S5 k

. t9 P& e8 e5 M. X$ n: w; }: |2 W

# ]/ I% t9 L9 E$ u   ( z& j( U; e, {0 _! i4 w$ @0 h

8 S+ g0 P- L1 N$ A- J% O7 B! z/ M& q

- b' L. w" S) A8 @6 C# E) j, ?' l 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 4 M D, }. h5 v' l, I6 l' M- l* Y0 D' z

. U" X9 z8 U3 W; F

, _, X' } N" |% s$ g( X. N Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 % S/ ~; m, U, P) p2 X2 J, U6 x

" s- q7 {- }) Y4 U

0 f' d: R. q. P$ A 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 + L1 h3 ~% p# E( U1 J* Z) I+ b8 ] r- e

( m' F2 |/ o# {" `( j

5 n" I& V6 @5 Y B 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 $ h# O" k8 V2 P7 t! O2 P( [

4 p3 d1 t D; i8 A1 ^5 ~$ b

: m7 e, o n$ t vshapes= " v, v0 X* \, {; P8 p$ k

' I' `2 O, O: r' Y

& z' U7 K+ ~7 b) T: w   2 X+ x" }# E- ~& O7 X

t: y# |5 ~: m$ b% K& S( y0 N

7 C# U6 u8 H4 i P 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 * I. m" |, e/ u! q) I

* g8 x# }& {: i5 Z* H

+ M9 d2 @: x- }, z1 R vshapes= 2 c [& a8 |2 ]1 \! g- K+ k' _' B

1 k4 S+ a: e4 t9 C: G

5 ?7 L$ e5 g1 u& A6 F# T   & Z# x/ ~0 `) U B$ J- y( f) a

2 r7 r* F& f1 i; O; b" |, g, W# ]

" C* X8 R0 [) @( `8 h lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 1 l& W# t% J1 ], X" F1 h" I' ^

$ x* i( v ]# ^6 x

; y8 ~7 b2 R, L1 o8 R( D2 J vshapes= % T2 ]1 i1 Z3 i, w- G0 Z4 ~5 B

) `$ ^8 f# m y+ f% N

: G( Z* s! l+ T1 \& R: |' Z3 P 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 * F4 \! B1 D5 l( ^2 d0 K* R1 e

& r# C3 D! l/ h9 }

% S: t+ @6 \7 C( ?* u& {/ g$ @ vshapes= ) p# f! V8 W" }6 R* H

1 Z1 @+ Z$ w2 i" ^$ y7 C& X

, h, H: n+ x5 A3 q- x. b   ( Z. z7 V7 b- d: z+ ` b3 z8 {4 ~- N( S

- O, o5 R5 j: K, B& f1 e" X: m

8 t9 a$ V r- X: W- q4 G g 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 , v/ x8 ^ O) M$ {, _* a6 d

: v& L. ?) ^' P

+ k i7 z4 v& Q3 K: X LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 / S$ C& W2 F6 _# U: p1 \3 @

) X- l# m. s- r0 T* f* o* M

- I- M7 ~! e- j5 o; P7 C2 x- U 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 " S% j4 r) F" Q

5 f3 \0 I6 L- {; G- E U! p

7 z3 j7 v J5 w1 f4 b 源的luasocket代码可以参考学习下 ( Z. S3 W1 A: r: c3 y& Y

! J8 W" A; C/ {+ O" q$ T

9 [0 v6 b* A8 a https://github.com/lunarmodules/luasocket 9 C( I) c6 i/ f0 U

. V1 c% ` [1 X1 s# P, m0 c: v( k( R' N

A! r/ Q9 N: U) G https://github.com/fengye/luasocket , E- ?( v6 E2 F- S; v1 F

) b" X! u% ]: S- J* c/ ~3 y: p

* f. |; B {& F f   9 [# C" U: I1 W9 u; U p4 o$ x

4 b3 t N1 { x+ n$ k: Z4 k

4 N' S; E0 q' l1 ?, x3 c0 ` vshapes= : s' i$ R O5 z g5 ]; p! g

. e5 R6 D- t# ?- o; U

" w M( ~( J! a r8 l- i2 l7 M   ' F2 m7 [! T2 l7 s# ^

' j- @8 [% d- j: Z2 i8 ` @4 l

) {; E4 j' \1 O" G' C/ N9 J1 Y   / ^0 J6 z1 {( M& t N6 d" n

9 F3 n* i0 f5 Q: ?% r2 i- b

6 F% |# L k3 \; ]1 b 总结 7 \# s9 s; ~% k; L% h) g

5 n9 T0 j: G! y3 B9 T

; L2 |$ [& l: X8 R4 ` 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 : S) y% ?! F1 q4 L/ J/ {6 |

- Z5 q: A1 j; u* o4 `8 b

; `0 i9 B% k; o4 V 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 # Z% [5 b/ W/ b, I

" G4 Z4 O; e2 |' v' e

4 c. ~, U6 V5 k9 o/ B 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 & T3 M F# J1 f5 V5 b

; q0 I- [2 c6 d; U" A' C: s; G: }

7 {( D9 C& ?* p+ O! o 结束 # k8 ]( [; E$ N' G/ v& H4 Z

8 [$ ?; c2 [9 W/ M# Y8 y

3 i( a+ R. M7 Z  【推荐阅读】 % c5 K2 e# @1 A G+ n- L

) y% k+ G4 {" u: J, i$ _1 m

: M. n, v: I: N* M1 a/ V# {1 l 对吃鸡APP的分析 : M) y9 q; u, I. m ^" r3 I' N3 B

% Q" l* n3 D. Z9 f* Y

% l% c y+ V* [4 {" e4 z 你需要了解的APP安全 8 C& \ c( F5 O" I# k

, m% Y' P0 ` I1 ^' L z6 k

$ T/ n! n' E8 n 你需要了解的APP安全 " R) \; \5 P9 S8 k7 u% G% \! E

0 F6 z: v4 e, L, D4 |" z p0 i

% `7 I& C* ?8 t, Y3 U6 L) B   5 E' G; ^8 g& W: I1 P( Y- x

回复

使用道具 举报

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

本版积分规则

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