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

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

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

9 L6 `5 w3 S6 m, l 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 / @3 C9 b, H r: B- C. r- }5 N9 c

% U, _8 K" o" i9 z

4 e4 \# s* ]; @9 B- ]% `& u- K vshapes= 8 N$ ~4 [, y4 e% I

: L9 \$ m; F6 h5 T t" |

: W1 R# s& v' {3 c& B5 C   % Y- S0 a4 Y. y; F( E6 t) E

* n3 ?2 W3 @" ?7 {8 B# [

% d2 b8 u' F* |( r" G 下面就以开发者角度进行解析下这个APP的功能的实现原理。 8 q" _& _' X$ Q$ `, ~! q' R

3 F5 ^7 P: }/ S& {, J# n& ]6 C

2 n9 m( a% I$ T/ {( _7 _# b' z   4 Z: v* U8 E: R- F1 u7 Q; K C& N+ s

. |* y- ^& r. N

0 z+ [% G/ }6 _$ V4 t( s$ L 基础信息 ( B+ o$ z) w' d) h% V: ^

( H/ T( G2 j; b2 a( R

& a) O( T( T' X8 V% R' k 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 8 K1 \$ X, R/ g0 F

, A: ~0 I8 |1 O! v! C4 s5 a: p

* i! F* H& _* B, k vshapes= . f$ _' K6 \9 h6 f$ F+ |& f

% B3 q' R: j+ a, H' V, r

& y; ^& _7 {# q1 e4 p   9 K) U; k2 d( a$ U' Z6 x

6 X& y, `0 Z6 v# D( U/ W2 k

J+ H9 N: x) U2 W: A! x* t8 ] 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 4 n5 S& m! M" o R" r1 K* C

' M7 B" ]5 z, E0 W/ ]% A) w

" l% ?: x1 P& `. I; a9 i% M vshapes= # E3 p- D- a# k2 x3 `$ R( ^0 A: m

- r1 M6 ^/ B& ?! n! W$ x

. W9 @( q. q: T4 ]6 e   . v3 \6 `1 p; T% \# L5 z

. }% k9 Q( S3 h* E

2 z0 j8 N) K% M, q0 ? 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 + v0 A% p& P x9 P" r: V

/ o) M n7 l0 j$ o8 }

5 U: ^" S0 i+ o9 I vshapes= , M" U8 a& }$ w3 y

( t; h: K2 a6 h- O

U8 I% Q' f) H( b- r   . X; ?9 ]- Y% X

7 u: f. K) z% Z' l. k7 b' D' I- {& r

6 m. a' W, `. f9 \; t' e6 f) C 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 . A0 e( J; z' p; S, u$ q3 ]0 |

2 e @( i6 \6 G

O; V, G, b+ n6 B: L vshapes= ' J' f& y0 K# h9 i" Q0 l

$ g, T) B0 q) H* _. Q/ R

& K* G+ E+ E0 y, q; ?' h6 Y+ }   8 i8 c1 H6 S X* [. Z

, `3 g0 a1 i" m& Q- R

" i, x; a& K" e* b" N 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ) t( F" C" z8 O

* C1 Z0 p1 X7 b) ?5 S* H

) n" I1 ]( T5 X3 n X% F* a2 b vshapes= " O2 Z$ u& N$ W y' i4 z$ e; k

- x) W. H- M8 N% V; P6 ^! K

: l! A% S% p: @* ]6 i$ c   , b* W4 v( }2 ^+ v* S5 _6 L% s

7 p$ n5 M d0 b8 ~$ U x7 S: f, n

0 u; \+ I" }6 ~5 L/ c% [! w% F   / x7 x8 F/ L8 T: I; ^

W3 Y. F( {$ M, ~" e7 K+ D

+ @7 I/ ]* P- Q3 l/ S g5 I 签名信息 $ J9 j! P8 ]7 S( |# r) Z- ^- U

; W: z2 s: y- t9 k' H5 z& n' d% s

9 t: e' g, B# { 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 ! I$ T% G ]9 D5 E* K& f( ~# U

- {8 `- Z3 O0 ]2 ~6 G; Z

0 @% |8 M% n5 V2 Y! k 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 * M6 Q9 w; W# e4 d1 m( w

- {; w& p0 C2 W

4 ]. h) O) ^" _) X, @( ~ androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 * S# ^$ K: @6 n- z4 k

8 o& [+ z: s6 {+ X( b

5 ?8 J+ E, _1 G) @& ?) @* m9 w vshapes= + ?! X3 Q" U7 L- `8 b/ B% Y

2 u% I s0 J T% ]/ @

8 o6 R$ U, e, `! [   " s: c5 [+ z0 ~$ |+ r

7 U; ]% F* _! x8 X* ]

5 `( E* e* m6 M1 g& L( p9 @9 l9 G android签名的数字证书的一般都是采用 X.509的国际标准。 5 ]9 r A0 m/ m; T+ L, d

. @8 l) N; h( E- ^+ V) Y

1 C5 _: [. ^, H) p4 _8 _9 y X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 6 k: \4 t$ v6 A

6 f3 f7 f, I: o+ I0 N) [

# N9 w' \) ]+ u+ P: K9 O3 E 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 ; A) z$ }2 B5 b$ |5 p# Q# w

+ L( {1 h- y. A# d

& ?* S" W9 E; g0 R; A vshapes= / A: _4 p1 Z. T8 s

1 |2 a9 \4 r1 J( b+ y

; J0 u6 i9 Y/ v: [& |   2 k( a; s! m0 u+ h2 q1 A# _

; e& n& R- ~% E& g7 A- T }

" }: \' Z* X' h" ^6 W 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 - p0 c5 }8 j2 I+ \' \! M+ d6 a

9 r# _1 r7 R4 @: k' g1 V% s$ ~3 h

w$ B$ z% Z' a' a* @, t) T vshapes= ' d$ q7 k# L( w

4 C( T* c" Y) g- ?4 Q

0 x4 W" b; Q/ b) h1 Z 3 B" F* N n; ]0 t7 G$ K8 W& E

2 J: T0 C- h! v2 y0 y

/ d7 R+ U- @! @0 g1 b% Y   ( S, _3 _3 r+ l

- S8 c5 h5 z, W8 J& u. n1 N

- t$ j: ^4 v8 B8 F2 F2 R% H 权限信息 0 \# w7 u* @/ L1 D

6 ]) T* o2 j5 R, A: y' u+ @/ |

% v" t) c& A% ` 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) " X, R* r; G! q! E

" c1 Z3 Q! i) [+ j) O4 ~

: `" n* j7 k, M) _) D7 m5 r; G3 c android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 : U F& H T5 Z

9 C6 Y+ X3 z. I& ^% `2 W# r( G

* y2 t1 i( E( P! W' ? vshapes= 5 [9 [; E( k+ w+ {% N

: \2 B1 a& H% I" e6 Q) ?

/ l5 ?0 f1 G3 W( F1 _, B& U   7 t2 i& w Q" T9 i$ H( [

2 ^0 S1 k C; v+ {" T; |6 g" y

E, F z7 q* ]2 M* f" Y 下面对这个APP的所有权限进行详解下: & D1 M# P, g) w

6 T1 c3 z$ J3 O4 y9 z

0 _$ Q6 }- O v9 V; S, B. I3 f } android.permission.INTERNET :访问网络连接可能产生GPRS流量 " Q" m$ S7 P2 E d y

4 a4 O' t% a1 ]# p

9 N& q/ Z+ d8 P# q, d/ O) R android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ! k5 N1 D& V/ a

9 n9 L7 _% J% G v- u" Y% Z

; Q5 o9 q/ _1 d# y android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 " o6 Y' ~- D8 a4 T6 X1 i

3 h0 H/ R' W7 Y; y7 @) r% t+ I. Q

: [8 [2 ]! E, I6 G3 a" { android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 3 d& A6 Q- g+ J8 e! H5 P

$ S; F, p: h7 J" O: u* E0 Q( x

3 q0 @- P) |; t P0 y) a/ @/ g2 y ? android.permission.WRITE_SMS:允许应用程序写短信内容 / q& R% K3 D# U, }- ^$ X/ e

9 }0 p) I6 _* w7 h- W5 h" `; e

; V- C% q2 h' q5 P) ?% i android.permission.READ_SMS:允许应用程序读取短信内容 7 T" N0 v$ e( ?

2 p# p. J% ]4 M% I# p3 J5 T/ o

2 f1 p% D) L: G* }5 Z android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 8 j6 X& ^* c+ h3 k @$ L" Y9 N

- I* w( v4 u' ]' F( T% }

( r+ |& ]& u' s$ z' n android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 7 F1 p3 a( _; [& r9 z7 |( W

1 p O; g& ] h

3 w% V4 N7 Q6 r" k android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 / p7 n( m' w6 H; {3 d1 ^

5 X0 K$ N) ^9 o1 }/ ?7 h4 W

H, J( q' z1 [. O) E6 t. F android.permission.VIBRATE:允许振动 , p d/ r+ z# D/ B- E" O6 a

8 n* s) v- S9 g5 b1 S* l& r8 c

; A) D0 |1 H9 Q+ m9 r android.permission.READ_LOGS:允许程序读取系统底层日志 / V& y" n" v4 ]5 T6 a8 Z$ G

# [5 X1 |* ]9 y8 }; m0 _ E x

8 n1 z ?0 D) o android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  7 O6 z: l \& \( g

! |* _' o. h9 V

5 I- E+ [8 @9 T# X( Y0 f   ( k. C ?1 X% F; _* W' C

9 E9 C3 v: T r$ \% u) N2 k2 W

- L0 \) G6 T6 b' ~/ t) ]/ \ 功能信息 6 q p3 W+ U+ L( i

3 H' z7 {8 ^# F- D. _1 g

, W; e: e# n |# N3 k   \+ D0 t8 Y* s0 o# E# l9 {

- J( _3 b" r) O+ |" D+ S. t `

1 }, c# X9 b% W' q# y 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 " p3 U, g N) \% N

- U t+ e/ ]& k4 [) z# o" a+ m$ ~, P

& ~6 V, s/ @$ s9 k/ W6 Q- E7 ` Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 . ^6 `7 e5 }' ~# U

7 x$ I% U1 X/ s1 A, f

h# \) i$ U" h$ M$ P% m5 b5 V 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 8 ?5 C+ Q6 g0 d) m" d3 [( ` i

! K( Z; R6 i' t

, a i8 f& b6 w# P 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 3 p( }# @! T" c) l, l7 M8 y4 h

" E4 h$ f: u% Z% |1 H

. {- y7 y! z+ @, _% F& _7 O/ F" U! W vshapes= 9 X+ |% F. \$ T- B

" x6 ]! s- v: k- M7 q" e! @0 S7 k

' ?- N, e1 o4 U+ W. E   1 J5 B! \) n7 V

* h+ V c- T6 B5 R" E/ Y/ W. I

& }4 A3 |+ C% G$ | 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 + ?; A' n: W& _- p- j4 r6 h

+ H) N# @; P; k2 r, q' @5 U

2 x/ X& P/ X! V+ A vshapes= 4 D$ W P2 e$ R/ @2 u

5 z3 D6 x3 f0 n" t6 `& y) N! ?

G. F7 o/ M j# m) S; ]3 V   % ^ m3 U( i, i# `6 U0 H- i1 Z8 i: V

8 Y- q& }& u) {+ n0 B6 p" D" A4 x. H y

' u; {- v6 E+ A) P/ d lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 ' I' {3 G7 j+ W: V! ]+ b/ `8 n

# k1 @2 ^7 ?4 k; Y1 V# P; O1 a

- Q+ Z+ B; d: B4 M# r vshapes= 3 v" Z/ g) { W9 m( |4 @

6 y6 A5 v9 i) ^! F2 `6 s- s

+ |8 A8 @# A8 @, K E& L6 K 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 ; A; K z& A' R, E# I' `+ |' ^* X

4 E3 h q2 O% s# Z2 |

, J& j5 f3 U. v, Q8 r0 {9 s vshapes= 1 N+ |! J+ |; x2 h! Q: w: q$ Q

L: b+ K8 {6 b7 {

) l0 s, @& G) X" E1 O   . @3 h- g: P) K& R; a u' r

1 Q" k8 u" Z; N# h2 C' ^

/ ]+ u7 H; d1 d 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ; F( t" u4 M; L* G

- d* u7 v( D9 \2 J5 F D/ _

+ U, s/ a- }) p, E# n LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 & z: v( e. b5 l. |# D

& w2 q! Z0 ~4 i1 V- h/ W8 c" _1 s

3 ]% V3 K; ~4 j! Z# P# d 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 / k0 S1 t! X$ {1 q5 h

1 Y$ ]% M1 z& N" v* H) V/ x

7 S, Z/ I* a. v: E9 w% R2 D 源的luasocket代码可以参考学习下 9 D' I1 l+ N& W" X/ I0 S

; E4 q- D# l& r2 @; B1 q

, [% R L* F: M9 I https://github.com/lunarmodules/luasocket - @2 O9 P" G. p Z; p) f( r

& a+ q. e" m. b- |

( y( r$ e' W; \. c https://github.com/fengye/luasocket : l- c# z7 R9 L5 i! d: ~, ~! ~

1 X; s5 C. ` S3 c

- [" P; `$ m! }% X! u* J- Y   + F' e# c" ]- @- X% }" ]

6 A. f0 W/ X( j

' R! r9 b& t8 N vshapes= $ U7 U& a2 k% `0 D

! b- a) K- y5 e5 Y

1 i9 ]8 r' @! Q3 x   9 e$ A, `* Y# e; T1 U7 b

7 @" K) _ U7 G }+ t& K1 [

1 D8 ^8 ]6 }4 I0 J" F8 Q0 J   / j# J1 f) G+ t. s: a$ O1 n

6 H: b/ ~: e$ y! C x3 r+ F2 S

& o' l2 Q2 E, V& |( j9 i3 } 总结 3 H& ]& `# t2 A

1 A4 I& f1 D& [. C# p- U' O

* [3 n3 j3 }/ r9 h4 D: g 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 4 f9 M4 X3 j2 r+ Y

: U2 L0 s$ [: b: g4 L

. H% e o' S4 w 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 6 w0 w8 F( }) \/ k1 ^* h

3 c" m$ R7 D7 a# }5 v p# m+ G" {

5 r" c+ m! _ g4 s. s 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 + ]( |* g m% u- D. d- v, H

0 ^+ w. e3 W% ?/ a# G9 e! w* ~% r9 |

1 D" N8 q0 g% e E9 v/ b. w. o 结束 + n" u' p/ N t+ i4 V, \8 ?

6 e0 r& Z! w! a% I+ m

7 r( R5 J9 {1 |' v% O' ~  【推荐阅读】 * s+ |3 K; O. d0 g. J' R

" q- E7 P D3 u* l2 t- s3 E

) O* S; y4 [& T. a( U 对吃鸡APP的分析 7 T+ i9 S {+ F( w8 t$ a

6 }! \$ x0 t, z3 K' Q& ?

- I. d2 [& i6 \" s" t" `4 h( w 你需要了解的APP安全 0 t) t; l/ |$ n1 Q

, o- a/ C7 k ~$ n- G; W6 A

. x8 R* m$ C9 X/ C 你需要了解的APP安全 8 F0 E" J( z6 T' b$ E

! s# {# ^# k0 w/ k1 S+ {$ N' Q

/ y$ u# Y9 |4 m! u* @   7 J. P: l2 ?$ ?# s8 b

回复

使用道具 举报

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

本版积分规则

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