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

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

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

2 D# c6 n2 q6 {% W0 S7 q8 ` 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 + n: W( \' l9 D+ p

" T% y! s# E( {' d p

8 ]7 v, `2 y$ Z! d. ] vshapes= 9 t7 k# u! y" ^

- Y/ R4 k, T; ~1 [& m

! C. c6 c+ n7 {   / ~: P: k0 B1 b1 ?

5 G: u# o6 d, f" Z

+ c5 B: a2 f+ ?9 j( C; j 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ; k' z; p- Z8 z4 n2 U

" O' L5 x& ?$ p

/ v0 t2 R$ [; `" K   + z" I- l ^9 N4 X0 p

8 w' S, Q/ w" y) X! n

0 q$ X0 S3 X5 I8 ^9 W8 j P) [# Q 基础信息 / Y! b6 g3 W9 u0 w$ q' M; \

' W- \# G* S! D9 P3 O0 h4 h/ y" W2 }

# D& ^' N) e, ` C G1 b4 d 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 " _9 b# u; \+ M5 h# D; V6 h

5 E' c ]+ j5 ^) K( m; F! r1 N: a

% G X+ h/ l' u: W/ `( l2 k( m vshapes= ( n/ H5 a% i7 J+ a

- m& a% y, q$ Q6 g2 n7 f, [

. r* r4 e. }3 H0 E" {   ( Y& B' S" n' g# y/ f$ F

) a! K* T: k8 Y8 L

* z* |6 B7 S4 q# s6 s 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 2 S/ t9 d* G! ^2 Y

* [. g2 k9 K9 u- n: k) n+ N0 _, V

' I5 M/ Z: y! }6 b3 L$ E vshapes= ! D3 A) \; F" n! f2 D

8 G; ?5 e/ Q3 }+ q8 c: h

, z# X; V0 j O2 [   : c6 l6 _+ v: H2 _ p

0 K# G; o N( e& r+ C/ p( P/ ~! z

# q# A5 D' u) g" O g5 n: D 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 F- v4 k, X' w! _% u, k

+ Y/ o7 p. b# d3 c- P- d& Z+ T

$ u* M7 B$ }2 i0 x6 N vshapes= ' V* `- J( o* e" A8 S

. k' U2 A# Y* m- t) o0 ~) U( P( ]

1 C3 C$ }! V% L1 G, q7 ^   - _3 a J! M+ G% d7 \( `8 y. Y

# a1 D; m: B/ K

1 Q: N& v9 m: y6 x0 b, t 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 1 v* y, i" H* J0 L

6 U, ]+ ?1 X! ]8 t9 ^: g

: Z/ K: b( f/ J' o" G3 ^- j vshapes= 6 E3 b9 O4 l# }0 }( H

- r6 z, x/ v$ Y( x3 J% w( J

' r- O8 ?5 C3 r- u8 r$ z/ \   + v1 ?7 W# X. b {/ _* m2 r9 a M

( v4 ?1 H& U7 s; n* H8 b. J

; D) b8 W0 y: S 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 , }! L) e5 m, D5 `

) r" z8 Q; H; ?3 ?7 F4 O

# _# _8 C# f2 C: C. D vshapes= ' _( m* F0 s/ i$ H9 [

9 Q, g" P; j( e! t2 T. u& [. }' R

5 F3 U% ?( G" w; W   2 i1 `/ d- n1 Y" f6 \

% y* K) G, K# E8 c9 Y

) Y% u- p. p8 L5 D7 u/ A   & q' n& U8 E# p" v/ V: W& l

6 M# R. d' G* s3 w; ]: q

! I, [4 R& b# } 签名信息 # {! A6 S) h7 g; F: p7 u, X' v

) w1 y% Z+ F! J2 a( m( X, D% v, S

/ t R1 [ L: e7 @" W' U 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 8 W6 }+ Q4 Q0 |$ J# ]& {: U5 u' L \

9 `" A" K2 h+ g( P4 [* N# G

[' U; l+ ^6 C. K" X 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 9 u/ @& Z) X( u1 m

2 x& _$ `: y! l" F8 S m+ c

) ]2 R. x5 H; h4 y# s8 g! h androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 9 ~8 F5 s% r- V, ~; u

2 s/ e6 R2 O/ p3 B5 ~& L/ n+ i

% F& ?3 C) a" u S vshapes= & i5 ]: ~6 r/ Y2 {

( O# d+ Q9 B R% H2 h3 d9 b

$ h' q8 t; o$ x# I' \6 Q9 }/ c7 ?   % R! z" l3 ^- Z2 @; } f

( d7 J, T+ y3 d/ |* V

/ }) e+ m, D0 t" _- g$ Z8 m android签名的数字证书的一般都是采用 X.509的国际标准。 " W- T2 f; Y3 Q$ i

" _) h; O2 p( K- x Z

9 h: e s$ n/ x! E2 ? X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ! q k- P) {# m/ C. B

' {8 z. D1 f6 V2 ~! |

0 P- `4 T- J: L1 B. o 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 2 @# w! p8 x7 x+ s8 a, d! S' c

, K2 r5 G! [3 v; X; y2 R

8 ^; [; t) Q! ]3 `) P vshapes= $ F: m$ M8 ?0 J# k2 B- E( u

9 k( g0 ]; k7 D& T# I. i

( p. g' I" D' s2 U7 M   b' Q1 M% {, }$ ]: b ~

0 {- K9 f R# ]; b: L; p3 G- J

$ U ?# X: e- o* K 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 1 H L$ ?/ T# f4 s6 t- Z0 ?# U- @9 D

$ X, H2 c4 R" w

( k6 m: U0 F1 F* m4 F8 ` vshapes= - ?4 I# B$ J5 u+ h$ A8 Z

4 j" n4 ?9 G. k4 d

8 U) S5 W+ c3 ~* ? ( w6 u+ A! ?, c4 W

' [2 ]# q1 \0 B2 p q/ c

: F1 J1 }$ W, g0 ~9 D   & T6 N$ v+ _/ p0 |) j) o; p1 Y* ~

$ q' k; G# A2 G# u* D4 x# ^

: \1 P5 a- l& A" D W: m7 P 权限信息 : Z e$ s4 g% t* u) a% n

* w+ q4 x% C8 h) k* K7 I. C

; G. F2 a) ]! n) b1 J 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ; D7 ?1 z8 J3 h/ x1 T) \

: a) S; { C) }% o$ y$ u( F

- c/ I0 x) C8 H) U android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 |. F+ t* ]: r3 J# D4 W

% |. u; ]# N$ V; d

, a- z/ z: P8 b5 ` vshapes= 7 D7 m2 o, j, n" w4 D

3 T! M8 {/ b7 K& A5 k

2 ]7 p2 p" f# }" f$ _/ K- q: O+ q5 k   8 m: i( j$ q5 {# ~

# q* n) o5 o9 g0 g7 j- ~+ O

+ j7 B; x) |. \4 Q9 c2 q. o 下面对这个APP的所有权限进行详解下: . z5 f. {3 h/ J' l3 p

, a b) Y2 S. R9 N- r6 o, y0 Q1 Q

Y5 e) Z4 O! w0 k. M/ `2 k android.permission.INTERNET :访问网络连接可能产生GPRS流量 0 }0 P6 i5 [) E/ o

' u4 F$ w. e- b% I& o8 K

9 S0 X- q$ v/ k% o, x0 t" a6 Y android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ' Q+ \! ]8 p8 y" L* U! `

; f8 f+ O; g3 B6 N$ Z

" b- g6 p+ {3 O; W: V2 G) V android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 + z9 t2 [# d& T- R3 y

) t$ T5 f" q4 G; r1 G% s( l- @, x

6 M0 c |' [1 x" e) _# W3 T+ o H android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 2 W9 r# ?% J" K- ^# f( R

. C9 R' e1 h2 S% B% k

; u! I9 q3 M& g" y3 a! y. }5 r, z( I android.permission.WRITE_SMS:允许应用程序写短信内容 : A! k; M, [: u3 M/ u) p( U" E

, A% p) t5 h% p

8 S/ {6 j! s8 s$ S) J4 c android.permission.READ_SMS:允许应用程序读取短信内容 * C" t. g; I) E6 A

" Y. a: q* ?; n0 k. h% p! |

+ Y9 }% L1 h K5 K, S, s android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 8 A0 G9 r& s4 h7 \, A0 k

9 S1 q0 i! P. n

3 L' O) S1 t# t7 e5 p* G% V android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 7 _: y$ Z+ j3 n5 \! @

) a/ C( E) H5 U( O0 m( O

: h1 K& [' |1 s7 `9 ]2 K android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 : N$ ]0 t: F5 P. l6 Q2 e

) f7 V4 s7 c+ X) [& X7 T

; I- h4 I5 r: H z1 H- ^ android.permission.VIBRATE:允许振动 ) f. m+ p( ^5 W5 F) r6 ]

/ l; C: y3 k$ R1 S9 `6 n

. {! X" ]" f& x2 O) z+ \9 o% t android.permission.READ_LOGS:允许程序读取系统底层日志 5 E4 n9 j/ z/ K( \8 b+ u( n/ h

8 Y; A" ^! C* }% |

) t6 z2 l9 R6 u0 m; _# m1 I android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  / W8 z4 q7 t$ o

( R& n3 S5 G/ X+ W* e3 [$ D* g

3 `5 s( k" q3 n0 A$ t2 O   + X8 `9 v' S! z

' |' E* X1 {5 ]; Q( x, m

4 \" k c& f9 a6 M9 v8 A1 F, J 功能信息 2 J9 f* x8 M4 Z4 F- J

( L- q9 B+ o) s$ A9 ]; f

! m' c7 _* @1 ~5 @   6 Z: a4 N3 J/ z

* m3 u' b- V# K7 c" N' x% z5 z- | F1 Y/ \

6 ^; b& F$ c& I7 b( q5 d' i 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 " d& o% G! D( `3 Y

4 G; G* i% J! D! x7 _$ R% ~

) Z) O6 }& T) q9 j- q! s7 A Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 " L$ n! o$ q* u) D& [# a3 t9 o

9 r5 v( F4 b* H; H) N! P0 O+ o- U

& w! P$ V" N l" O1 L# i& x3 U* c 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 7 } F6 } V* _4 ]+ N# i6 g6 u

% \. M! j y) b) t3 A4 P

' `4 w/ t( ?& | 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 * N1 v! J$ n$ n5 p# Y

- o3 o, a+ E8 w+ N

* G. M1 T! o8 e" V* l vshapes= * R% d9 Z+ w! J- v" x# T3 U

, p' \4 O" s7 A

4 a7 R0 p$ l+ s" ]9 q. E   . }8 n0 P8 x: k

- F( i2 P K7 K! Y9 e) X \

) ^2 v7 B: @) `; U! n 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 2 O: u. R: h) _, [

4 }( k$ b. c* i

0 E. Q2 M6 a) e" F5 e0 N vshapes= ' K1 L4 f" U( h' P6 B" t4 U

8 d1 G2 a" b# y- o

5 r2 d* Q/ e9 k- ]! X2 E6 h7 L Y   + r# ?- z. d! K) @& n6 }

- e2 l- ?' P) p' w6 N

: J* ~' f1 p Y! o$ b9 ]4 l4 | lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ( V" D8 N( h% W5 h* f5 _$ s

- Q, T3 r' r: m

8 ^6 ~) l* y, s* ]8 a- L vshapes= ) M, ?# \1 _$ z$ c4 x) `

8 R, b# U, H. J9 }

% e: c) z8 p/ r; R j& m9 B$ N 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 - m2 f0 @( I$ r) c1 c

/ b# P4 E! f7 J! R4 h/ T

. S; ] g: M* T9 j; X vshapes= 2 I1 a! U6 @. ~4 D; s% m

( \ Y8 S6 V" g8 w

$ J# s+ W: N+ N; y: A& E   $ J0 \ r" F7 i

4 H" k% p' M; _- h8 U8 ^" Q S5 x

: a4 C( e# P# C- n 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 $ e' J! c: c/ C

' ^: N' N7 Y0 {8 Y2 x1 N& n

2 _8 a; @- A1 \* _3 g" Y6 t$ ` LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 - G) m6 F) M7 O5 \) G9 Q' D, f

3 D5 u% s9 V! T3 a5 t# e& ~4 I

/ j" H2 M1 m7 H. | 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 # f8 o5 O3 H0 }; V$ B, {3 O* V

0 _% d( U4 C6 @' b

7 p+ @& b- f# A' Q9 S* ` 源的luasocket代码可以参考学习下 * h- V0 u( ^5 k& K7 @! J

& J4 O3 f8 J8 M$ q. }4 @

) D9 a* S3 c6 m& x4 h6 \ https://github.com/lunarmodules/luasocket 8 G. v3 [/ `7 x7 U

6 X, V ~6 x7 p# K, \. V' i* \

* i8 W9 W! h; s0 H+ {3 L https://github.com/fengye/luasocket & I8 Y# C% C4 P. u9 Y4 E

# x* @% y7 ~# {3 W3 M1 p6 Y% Q' U

/ n9 S. P. S' a4 F% ?& Y# i/ v   0 {% d4 |' p0 D f C

# g6 h2 G' ?# D" P/ B* f

. v1 B# K& v% n vshapes= & N; e0 E! ?; F7 C7 ^" g! ~' z

A. ^2 A, `; V$ R

( g" [! ^5 g- L$ }   5 [% g9 w& R' C; k3 D3 k

a, u4 S* w" {9 i, J

) w3 d5 J v5 J4 P% S   / I) { d3 Z% Q$ T$ N- B2 s @' y6 \9 c

: T- v8 n; O/ P5 \$ V

: _0 i5 I- l1 }3 s b" F& Y6 ?1 v 总结 , h% Y l! m- X; |

: C6 j; S/ Y, D3 t0 {* q0 B3 J

; I O2 x$ m. H5 x 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 # Q# D9 g Z2 A3 r& M

9 D; ~9 u$ Z: }+ M" a5 o

& M# B* ]- B, _6 m 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 % p: s( c; n. T- g) J# o; o

: L* u, g5 k- m# j5 e

' }" ]) Z! A; H. Z) X 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 5 }- \: O* i- i/ O3 r$ M

5 X4 f, O7 r: l$ G c

9 C a- A& |% I! M. @3 k 结束 B: k6 A. F: U5 p, P4 `0 m; M9 ]4 B! U

3 Z; Q* W6 h* _( k4 `) A# u, ]

- R2 F7 a4 l4 ^( o4 E  【推荐阅读】 # M% ^* I- W2 O4 f A

# Q. a$ m- W' a |9 j

1 J$ P) C2 e! M2 d& e* y& B+ T 对吃鸡APP的分析 / G" F) a K4 } R! ~5 A2 |

7 o; @' s1 Z+ P- a& J

* s! p4 `! v" `8 o0 ]& t; b, S 你需要了解的APP安全 l' r' L" K" o o5 Q' x8 k" |

" D) e4 y' A' O: y* G

8 ]4 o5 _5 I; R' t% [/ v% K 你需要了解的APP安全 9 p5 y: w: h3 |8 Y# j `

& {) g- u# F( ^$ N) q

( _& ~% G% f( i+ E7 b   / E6 f( Q7 c1 J' E

回复

使用道具 举报

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

本版积分规则

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