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

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

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

8 H k& H0 ?* J3 x) ~ 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 : ~. @1 S6 z5 L2 P2 l; H9 ?) [

2 E4 f! b$ J8 J- m6 ?% {4 Y& Y/ p

5 t+ m6 i1 L; n# P) s0 X8 L6 x vshapes= y5 q# w+ A$ e& g

' X2 E' O) F* l% {/ T' _5 Q

8 D. k! _6 g" h, b( _   8 J7 y a1 A7 X7 S4 O1 u

R; H; o; d1 G: k

& p5 D. h' v2 A. e* l8 S3 }- d 下面就以开发者角度进行解析下这个APP的功能的实现原理。 ( a3 }( w, `* {0 z* f- A

6 W4 P0 F/ g; U. o$ u. x

% h1 y& }6 r3 L7 J# B9 \- X   ) Q. e0 l x* [" e- d1 j. Z9 L/ e0 ]

/ `: y2 {3 T6 R( w* s* z$ o* c

' [3 f3 H* m i0 Z" p' N+ {; }9 s% _ 基础信息 1 K- U: B" N3 |+ V. ?

# b+ r6 u' v7 i; H" Q. S

7 b; w( l h2 B! d 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 , V1 z2 {9 W9 `" Z& F) [+ e

1 o" B" e9 M6 g F

, v0 J4 r$ e* a vshapes= & E3 Y6 H' P% v# V0 [0 S- y

5 e$ o8 d' ^1 T% W; v& o) a

- Y1 [: S" _# [; {6 ^. A5 Y8 z% o   6 r$ Q" f+ y4 K( H: v- n

9 u j8 W$ S$ C% p" A) P( ] U0 a# R

4 b# I( M A9 w3 R; j 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 5 w, O1 L: q3 v3 W; S }3 S6 a

+ H# V4 V8 z( `. X$ I8 f

9 c- w) R2 A+ q1 \/ H+ _ vshapes= * f) k" I3 M" ?/ K ~1 Q! z4 t

8 D$ [% d( w$ [% I

2 X' m" ~ z8 b2 q1 t9 v/ Z0 R   . o* Y% F0 g7 A3 s

4 P f& F0 ], L% e+ y) ]+ E

2 H% Z2 `" L* Y5 H 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 2 ?( a+ `3 e, [; g: G9 z0 H9 B2 L

3 D0 }" J* A: j$ m9 {! P2 c

1 w" p) U' d4 P& j vshapes= * ]' n5 F! V$ N1 u" Y" m( X, o" i

8 O* {; v0 Z* _& }0 S& e* a

9 S' N7 f: m, ^5 ~( W3 m( |   : q" k o+ U8 D2 X4 B. P5 Q1 b5 \

( a% [6 v" O" {4 t# ?) x7 _2 q

! a3 I& _% w. @& ^1 H( f+ s 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 - T# A5 T. s, M* X* C

8 A, D, o* V! ]; I3 ~

3 |1 n' J! [$ S5 E! q4 v9 | vshapes= ; d3 u- V' c( E6 R

' j* X ^5 k" }& l' B0 g

/ B5 I( { R; `( W0 u   9 Z; W( {/ c8 L

" [2 J# A# _) c9 r+ K0 r2 J" j: B3 E$ U

0 ?' v5 ^/ }: i 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 + s T$ G1 S) n; `2 s# m

: j3 h( Y) e2 J) k7 i7 u6 P6 ]" C

5 ^! w) }0 |6 U1 G: D5 Q5 \; f% s7 ] vshapes= ) q4 T7 d8 E! |) J

0 T) K2 s7 z6 q

5 Y' G& v* K* q# t- [   - V' ]/ ]9 o. m& d

N' F* ~" [7 j+ m! X* C( }

/ N. C; W8 {6 [% J0 j3 s# _   / S0 ^5 G7 S2 [

) y1 F3 _& h8 Z+ \3 I

5 S. e7 Y% _/ T( U m4 E" x9 t2 u 签名信息 0 O! P/ |6 P7 H9 j. A. N) P! ^

* C; [/ E4 Y, g

4 @% R% N, [4 ]- p+ V 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 $ z* ]9 B' v# A( ]$ }, m( k

. D3 Z! E( I9 L

/ m3 w& _$ X: _: q5 B 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ( R6 l8 \* @& y5 D! S) g4 _

+ B% R9 \6 w: ^6 ]6 ?* t: X

9 V; Y$ r: W" Y3 r androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 % M2 P! [! G7 L/ j2 N

# Q( V7 z, e x9 s. r

7 c8 c! i, t9 J' ]* C! b vshapes= ! }! F; V4 N5 i$ i) g

$ p5 w) Z/ N. F, r1 h

: t L. W" J9 z+ e   ; H: Y# c, B6 r. M: P

1 i5 B' p- a- x2 ]2 i

8 Z8 q9 o1 C, p1 i, c. F$ | android签名的数字证书的一般都是采用 X.509的国际标准。 9 j4 l4 q9 i. \' u

/ h7 E( ]# M6 `

2 F6 ?) _8 |/ Q4 \! a$ z# i. ?- Q X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 2 ]# P. Q7 B" m- s

& j: o2 N! g4 d0 s* g, O6 b

# \# U3 d4 q2 o 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 ; k9 t! w# A h

- Q. v& o L0 h. K0 z: e5 g* ?

7 E8 N6 j) a/ i6 A vshapes= . U! E3 ]( k. {. D9 I

' o; N4 d7 i5 Q2 p6 V, ?; ~& c

4 V- D$ J4 L5 i2 \. J5 x# r e) W   ' s4 g& F0 l [4 F4 g' Z5 m& Z, b

7 X9 M: \; E" S4 I$ j! Q n' a

l3 S4 F8 H) ? 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ; d" T$ T+ \2 J+ i9 |) Y8 |/ k- s8 D

) ?5 F) k) A, Z( B2 Z

9 J7 J' {$ f6 A# E% \2 i vshapes= 6 M ^& c u J8 ^5 X2 U

- Q% a' N! @5 u! ] j. u+ j

8 H8 o/ [: l" }( @" v% |) y2 E2 j) E ! |. U3 y2 x% T, V0 m% J3 o( A

1 h( _# D$ }2 k( o

6 Q$ L$ J6 v3 K1 W   a/ c) T8 s% g$ L0 ~. h. s( s

7 I G9 U% _: N g/ ]' Q( a# G

! ]% O/ w2 m0 f2 y- s 权限信息 . I& e, _: x: ?" Y2 q3 w% l

- L$ h" |- V. p w- u

* b, h5 k; f! J) F; N) C1 Q 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) $ x+ z4 O' [3 {7 I/ j# M5 G! J

& L8 b V, `1 C8 f) |4 |8 u+ }" V* ^

5 e; V* \6 W, O+ { x6 h: I4 L: G# H$ \ android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 - V! P& v6 ~& Y6 _3 r3 h o

: t! O% o% V) I9 c- g# J

# a8 W8 ^9 K5 {6 O, i8 U/ e' f vshapes= / N2 R. {8 F) f/ G8 p

9 a' F3 a6 a( ]# v

# P7 E7 j) R J5 \8 ~9 e- \, M! b   0 H+ @7 c$ [$ d

+ p, ]9 R6 H! V H8 p8 s

9 k W! w' w2 f0 ?0 Y x 下面对这个APP的所有权限进行详解下: % w/ @* Q+ _! ?3 m% \6 @

& i% {; w% {+ _

& s" k1 S) F7 Y android.permission.INTERNET :访问网络连接可能产生GPRS流量 ; p. \' e" M# D- ^

6 N' W9 S: v, _$ {

1 Y& z( B% s% D& f android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 7 k) I j$ L4 X$ t9 Z! Y7 h

& e( f. T+ B+ [# R2 U

. X9 Q0 v+ W. q9 U. b android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 4 B1 ^1 m8 \3 k; E- z1 L& R" L

! L/ R6 @) w( t+ D1 p+ n# e: d& s! h

2 t4 f3 ^) W* |/ [3 j" F @* x( d android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 . J4 J% W0 G: c

( d; Z! R. ^- ?$ v9 V' f

) d- N4 R8 K- y. U( m5 S- U& y android.permission.WRITE_SMS:允许应用程序写短信内容 ( l# b4 o/ s: ^0 m, A2 y8 Y( ?

4 [- B) }2 U' Z* B7 w

' \/ W# a+ k3 N+ N android.permission.READ_SMS:允许应用程序读取短信内容 0 Z) k4 g: x+ `2 Y8 i/ q7 _

0 T8 f# u# x% V6 c4 z+ X( a

" _% H- V& d$ K& d6 F android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 " w. ^8 @- g7 l6 r9 ?, a

1 p+ J8 W. s+ \: p" Q

+ p- c9 \8 R6 [7 X4 A( _' A$ { android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 z4 N3 {0 q( L2 T8 y+ I

4 I( k) g: _7 H6 M S, m6 h+ b8 k

7 \( V0 T8 [: j8 r% Z8 H o& S android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 # u* b2 x" D/ D" w- V" q7 U# F7 g

. k2 ~+ P1 E: X

0 g2 R' L& V2 C7 S7 z' o4 V android.permission.VIBRATE:允许振动 7 b8 \% j: e& k$ i. ~

3 s6 c. E/ ^8 E0 I' R

& @1 ]) y3 L( m. l6 k9 | android.permission.READ_LOGS:允许程序读取系统底层日志 : z* u8 b, X, Y" K! r' @$ [

4 P; V* }1 [/ v* U

) k& Z& t J% n) L& e android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  & n1 h" |7 P, M" t$ ?+ ?

8 s! h% y# w* C# z6 t7 w

$ j/ I2 J# T8 z. Y. O! e1 E   & ^) A, C, {: z& w* v* ~' B7 }( v

) c3 m8 k) y# u! }* w

7 k6 `7 f0 ^, ~6 ^, d' L0 v+ { 功能信息 + Z8 H) L6 k. {% W

1 Q' s. |4 }/ |; s! o; `7 I6 B4 g

& u/ b% [; Z; a* q( d$ e* [( j   ; Q" r* W/ L( c& K

. T# Q6 O' Q" t% T

; i) z7 R I% x$ q- \. a' N' @ 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 : Z" q: z. E& |) Z, }1 M

' o1 I2 k1 H! Y" h7 x: G2 l6 f

+ a: j; U& O5 q2 [' _$ | Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 ) C& ]: t+ ~1 O `' _/ d

) O' h8 i: h4 P

( f; K/ H' O! {3 e" e 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 0 z- R' N6 E& K4 r. C" q% i

# v6 K* C# D% t/ |- ?. S

7 f; L Y$ Q* Y8 U1 q, [! m 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 3 ]7 I2 {) `) f/ h! D$ x: F" d

1 X4 X( v# d+ y. d4 B! m, s4 z, m2 G

. C* { k- D& |9 F3 {1 {6 V vshapes= . s* H s* V1 @& S; S" m3 K

, J& e8 z. }3 S% Y3 L) _

% T3 v6 A8 Y' l3 m$ j/ x   + x {/ j. {# k. h ]- r

7 E8 K/ {' F# v* K% E/ _0 c

4 W5 [3 t- u- W3 g 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ; U F0 Z% Q8 V: U

9 U7 \% A1 Z% l+ u

3 I9 z7 I/ X+ h3 k vshapes= $ J; x+ T# K6 [% N. i* J& ?

% c5 K' ]6 }) o

" g. x* y7 n2 r& C/ ~ o5 k   2 [- S6 k* E; {* b; N6 |- X; ]

# @# u( w$ a4 ?

" }7 w; n0 o/ F/ E4 u$ a lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 * H# S" d6 F0 v5 E- D8 h+ b" y

- A; I4 i+ U9 P2 }

) }3 p0 ?, ^1 P& i' X: G$ ]( O vshapes= 3 Z5 n: e) ?# o w+ ~8 u

3 M; ^9 P: u* d( o

( K. x: Z) X# R& [* e, P 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 6 G9 {. O; F) z9 B7 }

' w! X+ o5 \, z" b

; ^* C2 q3 q3 Z& s) \4 p vshapes= 8 p; ~$ f+ R- B: [ O' U

) Z1 m; k' T) V: L; t9 X

0 N. N0 L2 \/ x# ^" a' X   / v; W1 @6 Z# y) q

* D& K, h( I1 B; i' Y9 E& |4 ?

6 B$ w. _: V2 O4 a5 L 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 " l/ S9 w8 K4 E; i

# h+ C+ R9 C9 b, [& L* R0 o" a

+ E2 y5 x; j0 m8 {( c; B LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 & t9 [1 z5 H7 u9 ]

6 F8 G6 e2 I+ F8 H: `9 L6 p

; H/ D/ q7 y% o3 Z+ ^1 m/ ` 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 ' v; d2 f9 W) y% }0 [5 b

3 F2 r: ~0 b, r% ^, X, p

) A! r5 r1 S( |* l: R 源的luasocket代码可以参考学习下 ; D- C7 F, S8 A/ E: ~

5 d* X, b( A5 g+ n7 R* @

# a" ^/ g) f; c https://github.com/lunarmodules/luasocket ( v k/ N- z) e8 E8 j

; e5 H6 _9 F+ f) o* l# A* t

) q# |9 L) U6 Z) i ^ https://github.com/fengye/luasocket # ^0 E/ k2 @# Q3 V

0 ?& K6 w3 a+ f& D! X! G( n. j

F* }! d) D# M% A, P   : b( V- |: P9 @! ^

7 l/ E5 s- F) \! C3 `8 C

& \; m& Y& \6 x7 C, ` vshapes= 0 q+ _& m7 v4 i* v1 R9 o, N

1 l) m! a6 |, B; M+ `. b) l% s, g* G- G- C

v/ W1 p) j9 M# L( \1 f   1 V3 y0 R. V' p/ o4 Z, ~

; u$ H8 e3 z/ l1 P0 h7 d1 w) p

4 l& g$ Z( S" O B   * k5 u9 M1 H S9 o$ y7 Y

- ]; D+ t, ~- {& \& G1 g

8 C$ r/ ~2 D4 I. u9 f0 v 总结 ; Y1 ^& U! s' C

5 o# U% n' D) ?5 z. i8 H; i

$ e j& u: k3 L7 Q9 N2 {$ E 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 0 Z3 H4 q( J- H

+ O7 \0 w( k" C0 u

& Z/ a, l) `5 `! b 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 % O' K( \5 J& G3 J+ a7 r

" |+ {6 ~! p; f' \/ E W1 c6 V* J U

( G* B: q3 s3 O0 l4 T/ [ 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 8 T# g' _, V6 w/ k7 P

& K" S5 ~% W% y( t! |! N" Z# h

. N) d1 t5 @3 Q. ` 结束 7 K* F( ?) B* a! |. W

: C9 f0 \, d+ t9 \8 p2 L

+ b0 J) \+ A- M1 g8 q  【推荐阅读】 + w" D' S7 x7 J0 d

- U- ]6 {6 J) l% L* {

2 H$ U# R) H* p% T, m& W6 Z3 m' J& h 对吃鸡APP的分析 4 N) {& R! t" x- q7 k

& V3 F0 t% _+ w! l

+ w i2 J: e- y; d( a% ]' x 你需要了解的APP安全 4 F3 ] V3 {" z2 d

8 N- `) T k+ J( N8 F) g u) b

0 }! b* `" }+ ~% S 你需要了解的APP安全 2 p. d) P- v6 b, z2 d: `, e

( K* S+ ]" _7 D

6 {7 k( ?; O$ I8 Q( o3 ~3 z0 q   7 i g2 C9 a" j6 J

回复

使用道具 举报

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

本版积分规则

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