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

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

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

' k; {5 ?+ `: {9 B0 _ 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 4 X4 ^) [" P% p- S6 w1 f* h

8 f6 X2 p% \: ?# p

2 d/ x; J& @1 y& G; f. t. G vshapes= 2 ~) [$ Q0 h0 O+ A! z( a& u% Z8 G

1 T+ E5 C/ Z; _" h) M' m7 K, S

r6 p$ C# \2 l, H   8 r6 W# v7 D6 T. H. }3 p

4 @9 @; s/ G3 J

# F; x: L6 E4 `: P- h2 i- k% T 下面就以开发者角度进行解析下这个APP的功能的实现原理。 , x0 F# i: i, X; j1 l2 C* w; K

3 Q5 t, @$ x. ^

' h. T$ ?0 s* Y5 d1 w; A8 B   ) G, ?+ _/ w& L2 V! T0 R! C8 Q5 ?

8 a+ D0 p! G: A! c

: j0 Y s1 H3 p& v- d 基础信息 4 h6 P6 z( D8 p8 Y. u3 d" Y8 L

/ `" D! n t( {5 e

. n [( Y0 \& w) B0 w( p% x/ z 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 , |% V( J; k2 {5 {6 ^1 b& ]( @

* j& m+ P: d% x# X. e2 W$ n

0 p5 f# n3 b. @# s, t) d; h/ N- Y vshapes= % T E. w- @0 b n4 N; X

5 U% i: ~' y+ [/ s1 l( n ?

4 \; K' A! Q0 w% q6 W& F- R: ]8 a   , v$ i @# n' A/ g9 V$ n

4 Z, g2 R% e8 l6 H$ z

( P! b4 k) r* X+ _" h 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 % I) _9 o$ x( p6 ?: u; z6 x6 ?8 Q

3 U% Z: B8 A7 A# { }% T

. f; p3 A" {2 Q' v vshapes= # X; h2 b. }4 k3 Y4 w* N

. z. X$ ?4 M b

- G' O7 t% e' m1 J   - V0 _: l0 n3 r. P2 d! z: d

6 Q) q' q$ S+ m" d

! n: O+ E% ]7 M, z* p8 |( e 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 9 \8 J& }/ M [6 k% Y. a7 @, O- s

+ p1 c. F$ f- N

& H" R) S' b( Z) Y vshapes= 0 t1 B7 G! K5 F9 T u% W9 [

( R$ d3 P& i/ T- W* Y

) @- P/ L5 W* i; I- a   # V& ~; o6 K- E, D# Y

8 }3 O/ s( }5 L1 {

9 v3 d' k* z5 P1 Z 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ( V; e4 Q: P5 N% s' u9 Y, V

7 R& ~5 p5 X; f0 q- s0 _ A

' N! _0 y6 ~1 C' a6 x5 G vshapes= ; V, h! f! l7 A: v- [- X0 L% y- s% @

, ]5 p/ v* X2 F G

0 n D# X, T( L( g3 e2 U   * W# X7 L! r' q

3 _/ d4 |. ?1 M6 G( a# ~0 x* b

, a) S7 I5 ^" e2 s7 l 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ( o5 H. p1 w( P

0 S! U2 `2 P1 x [8 y8 l% c

" B! c% R* o! B1 k( ~8 ]6 S6 I7 ` vshapes= 4 k, j# q: q' \( i% x! g4 ^8 s

- V- ]# F8 x( u1 ~" _* l. }

5 R# z8 \9 N; Q1 q6 N8 B6 e/ X, P   Y- w6 D# G. B4 q+ A1 m, }

6 b3 w$ a* d8 e' H

5 W' H! v& S' C( u. u   ) U) ?; D! l5 l" P) l% _& v

; @! Y1 s" e; a2 j9 ^% _- j4 U

3 y8 j- [5 h2 H0 L% g; ^. ?/ q( r 签名信息 . ~1 z G, Y- H1 E) J O4 e

. ?* N1 J; @+ N: C6 {+ U7 }) `

! Y6 W1 C, R6 x ^# n, T9 S/ Q 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 1 b/ I* S/ V. ^- b" ?

+ J! |# A7 n6 J1 t- c4 P3 A

7 G# m* f" N& u1 S# X 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ( k' D1 d- r, w5 j5 f- h# V

. K B% C h J% K2 E. }5 i& J5 p/ L% M

5 f. [, q/ X2 E9 E+ V- Y androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 % O+ I' a6 W+ w# q# Z/ o; @; y+ B

3 y3 Z( y( J) Z( i9 }

c1 i7 I0 o0 }( x2 u$ r vshapes= 3 s9 ]( W. Y9 h; ^0 j5 ^6 K6 Q

. j7 S: W( J) k3 G/ r$ K/ m

7 X( h5 u" D0 v3 t. Y   {) d- {% g7 w: j

3 R% F2 y4 P$ _6 H

]) T& R7 F" v3 k+ S/ k: r- S android签名的数字证书的一般都是采用 X.509的国际标准。 & d4 ~6 l5 ]: B) T

0 ]7 q4 m" m2 a3 Z7 G: B6 H: W* k4 V

8 A" b) e% {, Y) m X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 8 e9 V& N6 v5 C$ o! l/ w

4 j! i5 ^. Z: k$ ]* O$ u$ `$ F0 C0 N

' h- v" j+ {8 Q$ ]$ O8 ^3 u# Q4 d3 Z 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 H t7 C" _+ @ i# ^

: V' G; |& m8 r$ `# O+ ?+ g; r% M

- a0 }* ?. U; A3 o- S! l vshapes= ! s8 h+ M/ l9 ^* q$ G

0 w9 r6 s0 K3 w

7 y: f: \: W" p( ]   . S. S1 H: ]# O$ R- X0 n3 w

* s3 G/ C2 g; X4 v

9 z9 |- \5 @: C# ]% B) B 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 & ^ j1 W. l) Z, Y' e

" `. p% C& y4 }

9 m8 n% t% \1 M x, Q vshapes= & Y- Y# ^8 f# v, N# t, n

* A# c' {* K+ T3 @

( A9 K! ?& r$ Y0 }# [$ J0 _" E: K6 A ) D* M* W' ^" z- T+ T; L" g& f

; I6 S1 s# n: o/ ?3 d

# i& m& P" k5 p& q' f1 m) Y   1 i) t& ~3 B" S1 M! h; [2 w

X7 c& u- ~/ F6 Y( S" l

) j+ q* ^0 u, B1 V5 e 权限信息 ! b9 z; G* U8 |. ~, j! Q% x+ Y6 v

# P% [) c* Q( D, y& {

[9 x3 {- a) b0 D8 o+ n' L* M 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) . E: N1 q1 C6 c( Q4 {( T' K

1 F* m2 v+ h# Z' ?/ S0 G" R0 o

( `' C7 h4 k" i# \8 S8 H$ `# j android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 2 t/ ^: j" r! i! G" Z7 m+ O' y

8 W2 Y' R& N/ I& `8 R

( |# Y/ l* a. O) G+ ^ A" b4 y } vshapes= + O9 a( v, }+ \

' k9 q7 A% T/ D4 `- ]5 R4 L# g. }

0 h+ p5 r1 Q2 @6 Y* l+ s y   / }0 M8 e$ a1 C! _

2 u$ A9 _# d2 m& J" d3 x/ s. |8 T

( o$ d$ |; U$ B6 x 下面对这个APP的所有权限进行详解下: , d. {$ C. G, I3 b2 W1 g7 I+ W

+ _& T+ X. g) J5 c* ~& }

( O9 X3 k k3 k" B; i* V android.permission.INTERNET :访问网络连接可能产生GPRS流量 * U& w: U8 ] ~: U" B' J

8 z6 H& g# d8 Z3 ]1 J' w

* y1 h4 ^3 q' e$ Q android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 : k, p$ L; a9 e; F3 R" y

/ Y+ O2 d! h! D1 K" x

! C, {( R, {: W0 _ android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 3 b' G, v; S$ `" k6 W

3 U/ q6 q: ]* `

5 ~4 }' B6 M: j- N5 q! y) t android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 $ ?+ ]# G, \3 _$ G6 A

: u% W. R' B' M

$ U K; i6 O C3 q6 K android.permission.WRITE_SMS:允许应用程序写短信内容 8 R* h' ]0 I2 O H

) X& R. I. X, Y+ b9 B

9 n# }; I7 @/ q. [ k- ^ android.permission.READ_SMS:允许应用程序读取短信内容 + ?' q7 u7 M3 {. ^4 m

. P D$ ?. T/ ^* p

* g* }4 [) @$ V' J2 z2 ]+ F! V" e) V android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 2 F; o) C) x2 p1 r

9 V Z3 o$ K! U6 W6 s" W

3 }5 [' ], a6 v5 C android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 * r+ t; _) @% c R3 w$ M

, T; p6 P0 a- R; ~9 C, ^6 }

, A: C% ^6 J$ h. X3 m android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 * q' d3 O6 N1 ]) Z5 P( V

F$ w( s6 n, @; Z

/ d% D! @) x# g( b9 z1 \. J android.permission.VIBRATE:允许振动 ( R; G) ]1 d7 ]

& S1 m( } h3 h- c( I) Z, ^- ]

( s7 o% E: g( o5 ~ android.permission.READ_LOGS:允许程序读取系统底层日志 * p8 t. D {0 Q) J+ O6 G. A

" K1 h! A4 ]- F$ j8 ^; U

% m# l* u7 h$ k I2 Z2 Q: Y android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ; d: w2 X: }; M/ d' T

1 Q0 g+ G# X1 D/ T/ D) H& ~

' B1 C: v/ N( R/ _! S# F( h   6 f" \7 z# h" r0 P( d

! S- A: r: ^8 ]3 _( n9 |

9 {4 D g i( A. U: C. E0 Y 功能信息 % F7 |5 Z& h0 Z4 W8 S

2 m$ i7 y1 v& [& W/ L+ {

1 O) l. t) F$ \* D+ |- ^) @ \. f; m   , b3 [6 {$ H6 L* S6 U2 ]

0 C9 T5 D4 @' i+ o) l

# O9 e2 u6 X }! e: g% T4 U$ ~ 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 4 ~" h' X* R! [6 W* j

Y1 B2 Z0 v$ z! M9 C+ J# x2 S

* g" W4 l- N/ a1 |$ y Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 8 h6 }; C( c! ~( K$ N& p( S8 Z

7 y( T& [: C# a* o3 X

$ X# @* c# R& D, Y/ _' j9 @8 v 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 . @; b0 J: \+ `% y) {2 W

- |3 w7 P# F8 R7 O9 G: v

* x0 D0 O- |3 A) A I. X% Y 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 8 V( k$ i9 L( S6 U- O

t, b; H# @; C" s& l9 i

. Z( V- V/ M8 w$ T3 Q vshapes= & W, l, y. l, y ~' l

. r% i4 M0 n4 E9 Y) X

& m; M$ I* h) F. k   ( G- n& t8 _% d5 p3 t

/ i3 o# @: ]. s; f$ P

9 l' f( B' v5 L3 [ 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 / K8 E2 R& _+ i! m

+ R/ [5 J L6 j/ L' ]7 ?

1 T0 ^. k' h- ^4 E) V0 Y vshapes= ! I. p$ F7 H5 P# T1 W! u: i

5 ^$ x; f8 g2 I* S

- R ]6 F/ k3 F2 H* {" \   7 J. S# ]3 u, S

4 @& z) E6 B* q- y

% U8 _) F" x4 m' w& V lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 $ O: G. ~( a \6 v3 c: x Q6 k w

% y( X: T* o) K# u% F, I8 O1 [5 R

$ c" J/ B% |9 }- s vshapes= + F! h. S& @( m

$ u8 X. r5 p3 g3 P4 t6 j2 C

3 K9 p' f. H9 ], ^" U& x6 h" I" c 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 % A6 J# l1 t* W% P i

1 k6 @: D% A. M1 p! R

* ?( k6 F0 D( Z4 n vshapes= ! t6 A; A N6 `1 \/ ?

& Y d% g' w( j) k" J

- C3 H6 ?/ y1 {   4 g, U8 z! F L9 l5 i! `- r- Z* k

/ _; x/ z7 L3 q' S+ F+ U# \

5 J6 |) b0 Z, m7 D3 M+ k 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ' j( y9 ^4 M, b9 O7 a, P

: }# V n, v+ O4 t3 f

9 I8 m* N' {: X* A LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 1 ?# D$ W6 i* u- }% `( r

+ n% q9 [% q, g$ e$ _& \

- u. j, L1 u* W$ ?2 W 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 $ E! \+ d5 f8 o3 s( b( V

* c% [0 k' U2 g/ _* L

, _% y) T8 T$ ~& v 源的luasocket代码可以参考学习下 R$ e) x$ F/ H7 e

6 X; E+ r: E! o, {

$ q( h/ C# a$ H8 u6 i/ B https://github.com/lunarmodules/luasocket , q- f" h# e1 Y4 P

- {* S5 s. T( R7 T3 r

( Y5 q" k2 j$ y( M r5 f& \! ] https://github.com/fengye/luasocket ' b! ^" o7 K4 Q" T% e& N

$ c- o7 ~! h# {( i. D/ i

% b. Z4 k4 u8 M9 R: x2 U   . R& e, T4 x+ V1 V% I# P

2 I# C" L# H! \2 h' X9 C

+ z* K* K" i4 ]7 c# r3 c8 G+ F vshapes= ! s' I, `& c( _

: d) A+ Z0 C% ?

5 p/ y# e7 {" v6 ]% [   5 X7 c3 \7 M5 p% g3 v( ?

. v8 h' r1 H. r* L3 W, v4 ?: G

8 q$ E8 E' W% f8 }" }   R9 ?4 L: M- Y% R. r, A$ s

! U/ j, Q) J) ?7 W. `

4 f( R* |- ^1 X i! U5 E 总结 0 o" i. }/ |& J% { f4 a/ a" L2 A

) e" k# y! D0 a! `; G& c

. i+ s8 n# X/ U& Y, E! Y8 }' y 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 / g$ T7 n9 u) M! m

5 N, {- {, J1 q. K4 S( P

! F' W: Z, T0 A7 `8 I# j, Z 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 # O) \0 U! a) z; |

* n K) {& Z7 s& Z

3 s8 L* {! r6 r, \3 j( u9 D; f. _- m 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 % [- @5 t" w$ C) q' X

8 s) y7 H. x' |3 r' w! E0 \& I

, g% f- S+ G2 N; R5 { 结束 + v* b: H5 R" S" h

, V) X" Y y+ v

; \3 r E- U* A1 c0 L X7 H+ b" ]% j  【推荐阅读】 4 ? |0 f2 p! b. o3 \; o

0 d" Q) q( T+ u! I L2 q8 R

, v5 x( h' f5 _5 F9 P/ N 对吃鸡APP的分析 6 h7 T5 [0 p# l ?7 O8 S

' Y6 J W! I$ i u4 I& H

. z9 ^# M1 b6 M4 s, V5 { 你需要了解的APP安全 1 z; p2 i& ] i1 ]6 p/ H. q7 P

- w/ `0 q/ i$ [" |

) V7 Y5 @" A, E" v' f 你需要了解的APP安全 " i0 Z: D6 l7 f4 [6 Z- r1 t

% u; n1 v0 ]0 `8 L3 z, t

- E: g4 d: `% p) Z) I7 p8 h5 b7 E0 u   ; x9 k* c/ i- g' i

回复

使用道具 举报

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

本版积分规则

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