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

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

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

6 V! U; \! e/ A8 c+ {$ V 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 , k9 F" v/ ^) |' k( }; {. e, J

( B- ?1 P& E C( v

/ q2 E2 F1 T0 E5 |* y* z- s vshapes= 1 W8 k, }) r" @% I

" T: |1 g" G E

# G$ e8 Y( E! w3 j2 H7 Z. l4 }   , r0 ~! V2 ]2 D9 c- z! `

1 `; l5 {3 }. D( s4 Q3 b' O% e

8 {4 D, b5 X0 D 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ) h' {4 [/ \. q# F( P

# T# v. r1 H1 g/ h

9 a6 o1 A7 w0 ?   a! ?! F& k/ ~2 g3 N

$ x ]6 }% a" i7 w9 K8 {) ~- N7 _

' y @5 y+ F8 L" i# H 基础信息 0 O Y' n( Y0 H% _; Z3 H

+ n4 v9 u2 b1 V) _5 Q

4 f1 c* h& n9 b: S& M' c 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 & a3 N, H. d D

; @9 i. D1 y. K' X

& U& r; `1 Z/ | vshapes= ' q4 }6 B! `2 x$ Z4 }7 j: ~, H

3 _+ m/ A( m) Q- K

9 x4 Y3 \, p3 P" m' q. J6 H8 u% K+ o$ e   , L2 i5 v) s, k% F* ^* [

- V/ I" A+ m3 ^+ O

9 O9 I3 j1 J6 U) H5 o& Q 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 . q# G2 K8 {& B

' V F7 K, ?1 T

2 Z9 w+ @6 B$ V vshapes= , R9 A0 u/ q4 c. T3 ]

4 z- M1 ~2 u( w/ E

) y/ A# D ~& ]: T+ F2 H# L) \! z k   * i0 g9 p( L w# q9 v; L5 c' Q

" l- N" y f& a8 s) t

4 h" I4 A3 ^6 h! z$ T3 W! r 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 $ }; x# `: ^- F5 [

3 S6 H( y/ y( U# p; W

y4 L$ s. {$ j# }/ ?1 B! Z vshapes= _ z1 w {% T2 g; D8 O# f

" L) z' j4 X3 j" |- C- D, ~

0 P5 }; V1 u9 T4 h, A$ w- j" E   f" w9 T* ^ i+ H6 z2 h/ g

: @. T- C6 Z5 l1 ^4 I

% c2 t! G& q9 b$ s' w3 Y! M& v; i 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 2 ^6 g6 e, U' ]' l; | r

9 }0 p/ K! N8 C0 K$ q q

- b1 p3 ?/ P! X5 u* F9 s vshapes= , B" K; Z0 r+ o# c

. B: {( a, b9 q/ ~6 C6 R4 K

% Y: {/ Q5 K" I# P8 w& {/ _   # W0 m' g1 C' j$ w3 K

" \, \* v! `$ ?

/ h4 |8 _! e( I' J+ Q5 M 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ) I# w ]$ I# Q) K

0 X& t3 v% N1 r6 j4 P' y

$ {# V0 X8 y, o- B" ~( v: F vshapes= 3 y: N8 `6 k1 F; i1 Y

7 e8 {) a1 G: g: ~! s& d2 Z

( V) e; M2 I. j5 B t. Y; Q   " G7 K6 s% R4 |) k9 Z

/ U @3 V" d% ~+ R: \; d |

! m$ }4 C; N/ v8 ~1 H% e2 I# W   + i# v8 P; U$ m1 W7 ?2 F: l

7 ^# P* |3 V3 q

# ^0 s( F3 K/ H, x9 ` 签名信息 # G) j: b& s0 l

0 l, A7 z, ^) h

) k8 X: H( O* z' r$ p- A 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 . W: U9 i- ~$ h4 l6 H

N0 l) m& |+ G; s2 ?% ^

( T9 c/ L7 [/ [$ U' V/ @% `/ W2 T 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 - R8 ?4 K4 t1 ^ t1 o- @* Q; b& i

" x4 B& {0 E3 O l) V" A, u

, |5 q* ?' q& } androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 & u0 }5 |- j" ~) f" x# k

* ^0 y1 ~$ \( {* S

7 K% C, e4 g4 `0 ^% l, ? vshapes= c- z7 M+ L4 s+ M: D

" P' K: E4 u" l

. _6 R. d0 A0 Y" ~   % g5 V9 A6 _ `& d3 z

: K& V9 E+ b% s; r+ O

/ |& ^" _& i' R6 H' H android签名的数字证书的一般都是采用 X.509的国际标准。 6 t1 k9 d) l% H; S; y1 X, g

% Y$ H4 E- ?& a

0 Q5 t, B& |* s) s/ \* Q7 D X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 9 t* M. L8 G4 \- \) ]) u& w

5 ~" z! @* ?; n+ _" k8 a# N

L5 R' d, J& O) a 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 3 C \) [ }; _

8 ]9 J; @ Z! Y; y

8 T* m4 B1 Z! ]: U' B vshapes= / |4 F. m( Z( w. T; Q$ T

* V/ F$ Z' t: |9 `

7 ^1 B( D# E! s   3 `# O$ K% c( w" q

' \- w! X9 ?$ x$ `

0 w5 B; X' a; |8 s* A5 p0 g 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 3 J# H- n" E* f1 h

7 Z( l; w2 [ Z9 w- |

; P: F) @, g% t. @: F3 S. G$ T% }! N h" m vshapes= : N1 l& g+ c' N# S! i

S( J- N" \2 V. L7 D+ \" R |4 g/ e

4 _. \" C: D. I/ e/ g k4 e % ~: j# s8 h9 w# `

3 S! {- \# B& V) J# z8 n: \8 ^% V

7 w' ]0 U5 y7 F4 \   4 _" C' h1 b# Y6 {$ {

5 T0 N3 Q' i+ w0 x4 S

+ ^& ?9 _# w+ \) v* m( G. g8 t" h 权限信息 2 O* O9 [$ Q. ?5 K" L5 `) Y% C/ l2 B

5 |" l# ^/ B. ^1 j; Z4 U! m3 v3 v; v

0 W' i, h% i% r- ~' ?, ` 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) z0 Y- m3 o- D* y/ G

' N. v/ U2 }1 {& }2 K2 B

9 D+ u) \6 M2 y/ ~+ [ android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 4 N6 F9 V: }- S+ B

9 D; t2 E# r- L/ F

2 a1 A# d2 U6 Y9 U8 I( Q# D; |2 D0 h vshapes= ) v, B; D: A/ `# @; T

* d+ X, a2 c' U3 n B [

1 ?0 @/ G& T5 Y& J: ]- y   * L" h! a( H8 Y: p/ ?3 a' S/ l' `

, I1 S- T, g0 V: L6 l

, V$ t2 S- |1 L) `' P, H, w0 L 下面对这个APP的所有权限进行详解下: * K8 h# C+ S1 c4 o

. x+ e* d2 A' D# U* i

G: r$ e2 Q' W" Y) V android.permission.INTERNET :访问网络连接可能产生GPRS流量 6 |2 ]) i: v6 X1 m) B5 K9 \

( S" X) n* ]6 r& p& W( a1 ~3 L

+ W( X% Y0 e2 z& N4 n+ S2 w3 Y android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 4 i- \ v9 H# p

9 W: ^1 T! ?8 Q% }

( l* @# H) h$ }! [. o! I9 \9 Z android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 3 Y' ?2 q' K8 K+ U3 z

1 ~; |& s* n2 N, g7 u

% k8 Q! O% E7 v6 J android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 9 ^% @2 j8 W; y) ]( B: M( k

2 g# T$ _/ A! g7 \ C

3 i$ V8 E: a, v$ [) y android.permission.WRITE_SMS:允许应用程序写短信内容 0 j/ R$ @# a. t1 v: Z

7 ]' ^7 Q7 w C; O

4 B" P s2 g) M+ O: v% O } android.permission.READ_SMS:允许应用程序读取短信内容 & d) \/ |9 a) p, n5 b, y3 F5 R

/ Q7 X) A* X( Z* y

9 h$ {2 g* q% t/ N android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 , X9 o; d% y# k9 K: u$ w

' \: j; e. L/ v0 O

! h* ^0 k+ S T8 g! C2 _ android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 5 I9 r9 a- J9 p+ d. S

8 N& [( H, j- Z4 S3 m/ n3 j

5 n& ]" R8 e- P+ A& k. A android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 7 _. C0 n' |- }

) P/ g# b) {3 Q" T- s

# h5 E+ z/ X: ?/ ~# f& o android.permission.VIBRATE:允许振动 - C7 c* |# i9 t# @3 e' l

' P% f1 t! X! \3 S) c9 i2 U( t

9 s$ P, K; F$ s. _) h2 T android.permission.READ_LOGS:允许程序读取系统底层日志 , \0 q' b/ i* W2 X* E/ @$ f

- @& V ], v$ C2 _* t) C* q

$ v e. V+ V: p2 g android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  ' D% n. ^( \ ?" _3 J

, P: l4 G3 s7 ], t( p/ `. f4 T

) Q8 D" Z6 [- E0 D0 L. M   1 R4 k$ E a* o" ^0 w0 N

; T% R* R4 Q+ Q0 F6 K& Q5 _

+ h" ]. [% X% J/ Y1 c# ^ 功能信息 # }+ N/ k1 Q2 q/ K; I$ t

: ~- v( S8 |% E

0 ]6 Q1 v+ \+ |8 w3 C4 X   + [/ @1 d6 k; z

( O5 B3 {6 o4 L4 q) u

- h+ _! ?# i; e- `) ` 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 ) I- U I: r4 P( c

/ h/ z$ w; A3 S0 ?1 F; G

" G# i- N# ~0 A% w9 U( q( N Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 # D R, C1 q5 o1 U

1 @& C7 a' }" O$ O) S8 U

1 r, W8 J' ~& Q: D; E# g+ ] 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 # s# | Y6 y5 U: v2 H1 `' b/ D

K9 Y$ D$ {! b! `. O% q

& S& c: p( ]1 s1 t; P( P 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 1 [1 M; J/ {7 h) o) o" S- p

) K' s' y! q3 L3 j+ y" M

8 K& _: V- t9 V& |0 x9 B/ e+ L vshapes= ) e- @6 h& `- R1 ]# W5 B

% k& F5 J/ w" k: S2 e0 _/ g

6 s6 R7 B1 ^% b4 h   4 l* `$ j' h- j9 i2 I+ \

' x( Q; \; f& u6 G& n4 ~( w

: T9 O/ @/ B0 S1 t) B5 { 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 " k& J7 g% V( L; A

' b- s5 G3 q+ {/ ]6 |" n2 ? h

3 D; w1 N; F6 {5 Q vshapes= ' V$ I, M, }/ Q1 }3 `" a

9 v( a2 O! W! E: ^

0 O: J" @8 ~7 E1 |   ( m8 ^( N! X, O' v% N

; r+ Y0 u: x( S' @# X

; {, V3 r3 i* e, j, D/ o4 H lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 + \( ?- f; F3 |1 \& h3 }

, A. b3 A L) n3 |# l

' L0 _. e a) o8 J+ A" }9 g4 r vshapes= ! d- {# S0 u0 H ]: @2 r. |

% A# e; n' k2 b d/ C' \. |9 K

; N4 M1 V" o5 w$ v" r' u 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 # i+ J7 I: u& T0 F, {3 d6 w7 P

. O) o5 r. v6 G4 i9 D$ [/ n

5 z- p9 ?3 O/ U. I, U vshapes= & b( h" v9 N( x- m; {( g

5 q! V+ c: z: \' O' L

, [1 @- X2 L m. O   . A; X4 h9 g B* i

+ k q# D* ^4 L) h3 g1 `

6 \: \# p+ w. B+ I( ? 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 6 ^8 V, A- p% X: Z" k& x

3 l) G$ G$ e) h' P

7 Y; g& j8 g0 B6 u7 L0 A: M0 I6 W LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 3 w% H& E9 M. X( f6 s. s

/ {8 Y' M: p' ^, f

3 C5 o7 V" F3 ]1 E5 Q( m2 B 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 7 F0 y" z3 _' a7 @

& @$ g( x4 r1 Z1 ^" P8 {

1 {1 p& f: f! f 源的luasocket代码可以参考学习下 ! T) C7 G% P! V' I1 d

/ Q; y- g9 M4 e, e1 q

; X' W# C, o, S2 o! {6 \ https://github.com/lunarmodules/luasocket ! m) B/ L# a3 J# ?

! `7 X" ?0 g7 Z( v4 p9 T

1 D! f1 i/ z; e5 A- ]2 E# G6 C https://github.com/fengye/luasocket " H, ~4 w- V* ]

$ K$ p# E$ l) i

5 ^0 ?" |* C3 N! |; R9 u* [9 q   7 z0 b. }% `3 s+ `0 Q/ ]

5 r% ~9 d6 w6 T& b0 v

5 K" L7 \8 M" f) |0 t( x1 E vshapes= - h0 W( {1 C0 o. }

3 {" w, y4 O. d$ p7 n) F0 G

6 J: o" ~, i" a7 s; U8 `, v9 Z5 o   * E5 s4 t; T0 u9 ]1 q" q

' O2 P8 `! A" q1 d1 Q, ?$ T

' R7 L$ G& m; F" F$ B   9 i0 z% G9 R7 }7 B8 ]7 M

' w- t/ _+ J# G6 c. M, u. O

* m- D! H- r/ c 总结 : I% y" a5 ~* d. Q6 Q1 W* v

% x/ q7 w8 a# s. T

3 x: B; b) v1 b2 H' y2 s 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 9 n2 F( B/ y3 H' K4 r. b2 C

+ ?& y! l |1 E7 a5 ^' X

) l+ D5 ?* a- Q, j, M$ I0 i* z 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 7 V- ~2 }' [, d- M- j- E1 n

- y8 C$ i) b) r* s# l

: ^% ?7 F, K( F 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ( C8 `! }* |' r0 \) g# ~

2 x! Z( ?' b4 ^8 r2 T) k+ S

1 |$ U+ W, [+ `& O# L 结束 & W# z3 @1 n( L8 S

0 p8 }- E c% [; [2 y8 m3 u

, }5 @; Z' o# y2 D1 w8 e' `1 F  【推荐阅读】 ; p) P- z2 y) }9 j3 c

7 T( `+ H/ P7 s& h! p) F) Z3 }

1 {$ N9 Q- L# \ e 对吃鸡APP的分析 ) q6 y( S& V5 O4 b% B. F

X4 |& L) r: F! ] d

! Z$ ^3 C% e" w0 k2 o 你需要了解的APP安全 3 _& m* C8 e* p' n

0 a, W* K( }6 ]1 T

1 E* _5 d% l |/ ~0 F9 Z 你需要了解的APP安全 & _ c- y& F; z! A/ t' J y# s* e

& [+ O; A& y: N+ U$ {( r5 w

. h, D- ~$ M+ J   1 p. p/ I J, c+ l

回复

使用道具 举报

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

本版积分规则

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