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

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

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

& M4 G. j# F. f. | 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 7 B4 V& ^" D |/ Q3 H) n- @' `

/ u6 l; n% o0 v

& F/ L% Y0 k8 |2 Y* U* ?* W vshapes= 2 o5 H v/ L; T0 f7 P$ J

+ Q+ B' x" j" P+ C

% f6 x1 W, J6 E2 N3 f   / A& \& O& Y+ d) M" N* ^

# R; |( A3 o2 U2 H2 f

2 ~) N8 S' S3 G$ q8 y4 ?' k 下面就以开发者角度进行解析下这个APP的功能的实现原理。 : U" e9 }+ C6 O) q5 g

4 h$ I8 C# n$ R0 z9 ^% V: G

6 @4 A1 i. V# s( a$ G/ c3 h   7 t6 w9 O' c' h6 }

# B) F& T2 `- z; N* {% Q: {: h

2 v1 N O5 q) K6 p5 Y; u z 基础信息 ! P( i( k1 E' H/ s6 Z

8 o; S" F) Q' p9 U: ^ _ a& E2 `

x0 c& E3 K& b' L+ P 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 5 ?! D5 {8 w) a- d7 X$ ^# j! p

6 q D4 S; X+ E9 I& t4 f K

8 `! R+ a5 N( s vshapes= + N' E7 q) s! `: u* n, {5 D! K

* O: q9 _: y# P/ q' Z, O. S

! ]0 }/ @- b2 e0 J3 L   6 X8 F( i' \) c! x- H1 E

7 n5 y+ m! i* p. u; W4 L4 f7 P

# g' ]" g: A6 v" }) @& ~* s 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 2 b) `# e4 ?, g! z

9 H0 J E5 G$ W* c

# v- \3 k/ u. x" }, K vshapes= ) d; X$ {2 S& o: X

" R! R, }! s9 e, @5 I

. K" k, \7 ]5 ?' V9 D" v+ k9 |& Q   " e' M8 m- ~- B/ D

0 {" w8 R5 e9 N

' g( q' ?* h' S R+ ^ 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 6 l6 t. u/ q$ N7 G, L

* }2 I. L- F4 U8 l8 N0 C

- m' O. U2 ]$ ~& O/ p# q vshapes= 1 X9 B, z" Q9 M2 ?" u

5 j e, T% o& I1 v$ k

) b" X/ z5 J% G* z% G9 u   - i$ `; g# a. X

9 s+ n% q* M- x; M7 M2 v# b

* U$ v e' T6 | 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 5 Q4 {+ e& s" L9 x

: @# ^6 J& q0 e% d9 v4 Q# a6 m

@( X+ n( i! r. {( ^ vshapes= 6 e6 G* j: a: _; a2 o, | m

, ^0 [3 C% E$ J0 {2 M/ ?1 y

1 q! Y; J6 b% n5 D# [   $ B z! W) h, [9 Q% Y& `

( [1 T* k6 _( ?1 C

h4 ^! W& X3 p& A' W 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 5 U" G8 m y6 J( p

9 E" N8 |: S3 a' e

3 W4 I- W& G9 t% R0 G vshapes= ! f; `+ z: M! H, w% D0 l1 ?) p

$ k. [2 f" g6 ^- ^

8 D& M% u' c- O' v   : z t8 Y* f% g% _1 e) C

7 s2 m# C4 | G2 n4 u! W

0 W0 H) t, M3 m6 g   8 L2 H1 X6 }" `+ h# K( f

+ N8 g- _3 B G! _9 ?

4 c, T* R ~ j: Q 签名信息 7 `% ^$ _7 V+ G' x

7 F" I3 ]$ x8 P3 B

! X6 ~4 A5 R6 \. m: r6 B 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 3 _2 k, x2 l% Y$ o) S8 ?( `8 C

2 l8 B( |# {6 P& ^, j/ ]

* G. ~" S# p6 W2 p, D, {, } 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 6 p% Z6 }1 Y' s5 K

" B& t; P4 p: ^

& A* {: q# \) P: G: N3 l* G androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 3 b9 v. V8 w& g5 Y E" S% l

2 P3 M9 J; o* t1 m1 K

; E3 }+ @. ?3 \0 n" |4 ^& P' l vshapes= 3 s7 } w8 P) i. I+ f1 Q

. ^0 O# T% A8 f1 {5 Y: \6 K

7 }* w# i3 y5 T& x( U- E   1 u5 ]3 { |7 o/ B

/ W8 H4 U" ^/ ]; p( V1 @; S3 l

7 N7 {" U/ D- I android签名的数字证书的一般都是采用 X.509的国际标准。 3 K7 E6 w' X. U/ W% w

' T- v& ^' r% Y3 H. _

: T( o G( D0 e* e7 E Z5 s. P- X X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 - J# O3 F( U2 X' F2 R' l" {. l' I

" G+ A7 I3 e' r

9 Q, i% E0 O- V4 C7 B. j: z 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 " A( b! h/ [$ v1 G) V2 E F4 o

" n0 C) P7 Q1 i% y' d4 ^

4 a2 w: \8 P5 @: S) ^; G f, R vshapes= 2 L3 p( o4 O9 I6 _ Z

. q+ H% y- S9 D7 x

* s2 e- x# r/ u* @2 {1 Q) J$ E   : n) E: a2 [- q6 _

7 F+ o; C- @+ @; [' K1 Y

) ]) Y6 V; W9 R+ Q0 X( H# C 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 6 T7 N4 \# |0 V3 G! ]

$ _9 B* p& o* ~% K3 T5 B

" T! e& v/ N+ S* h' r+ d vshapes= M5 L4 f# s/ J2 q1 ]6 E$ i6 h

! V' H* _9 C& [# ?2 X; b% {9 `

. @1 V+ B: | x. { * c. F9 D- k3 y* A. ^

% t. N2 t9 a/ s* W: b2 g; e

2 l. g Q) x$ t& W1 |) a   % P3 Q6 J$ ~( l$ \. }) g- Y% r; I8 ]

9 y/ R2 M h5 u% W @

5 }) a% F8 O% X! r. v7 k+ j$ T+ c' i5 }4 B 权限信息 , ]8 f# Y7 C) r

3 P1 t+ F3 s$ [+ Z

# C4 ~" Q6 N8 x8 H1 V 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) : b, X2 R, e) n& A+ b

' O9 s. ^4 J+ O2 f2 b9 \, J

7 n) D8 [/ {+ M) z3 R android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 2 z6 k; M7 V$ L0 L) q0 P

# J, N- R! m/ b% C8 Y

5 }/ `9 a# y0 d5 R8 Z4 Q vshapes= , ?4 w/ [! N' U i& W; w

8 O- R# F* x, a$ p! J7 F8 W0 e

9 R) W; n. @7 K6 h! b- A   " W1 I3 _% e, L! x

( _- `7 I5 Y+ m" S# a; M% I

" M: c* t- L! e- \7 ~ 下面对这个APP的所有权限进行详解下: + R6 c3 v( S. w3 w( H

c5 Z/ i7 A/ g. @8 ^, S

7 T: \) R/ V5 C! R8 R7 \ android.permission.INTERNET :访问网络连接可能产生GPRS流量 2 \. h: {" @3 ]$ Y9 h/ ~

+ ?: |( [7 ~$ R8 V

" q4 S3 ^7 H* e& H* w# g4 q9 {1 E android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 4 d6 Q4 V/ }: ~, K! K+ |

2 _- Z9 Q) }' L

( D0 F O. H p# L: K% @: F! A android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 1 k8 ?; M, D% K$ S }

+ j L& }/ k" Q- s

$ X* G/ }8 B! L( |& C7 {' M android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 & U$ s. ^5 @* E9 C* Z! [

6 z. V, O4 X& y

9 O$ N* d& w q% k# H8 C4 B android.permission.WRITE_SMS:允许应用程序写短信内容 " r3 P% w! A, @$ c4 h0 {+ E8 M

5 c4 [& {0 g5 w

' r# g& S! V, S android.permission.READ_SMS:允许应用程序读取短信内容 ' G: y6 X# k, X+ o% R5 T: f# e) T7 E

% c$ ], _5 b) I& E7 s0 \0 _# O9 W: L

4 A' @$ m- ~; Y! D android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 ! ]: g! X0 g/ u6 X) g

9 ~5 d# D# O* A2 R8 ]% `$ I- U% L) g2 O9 M

; e& Q) I r8 O android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 0 d) S9 c+ I/ N8 s' i

& F7 N. e1 {0 A3 W6 b

, O4 D. i9 x2 O8 `5 m: p android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 - p" @* U, O G( b

* f9 ^, }3 |, U

- t4 G- d' \: F ~& u/ n+ [- R android.permission.VIBRATE:允许振动 3 G3 e/ s l. U _- p% e4 o

% \5 l0 s- v# [7 D+ b; j1 k

7 s: G) c2 _4 e9 A- M android.permission.READ_LOGS:允许程序读取系统底层日志 , _& b. d7 M( Z) b; z6 a

# d' @$ \& ]4 ?1 u

- q5 Y1 N5 e: Y( |; g8 m' K android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  , x- C2 }+ @) x

& T" F8 C% l. |) ?

! y2 L$ D, q1 F. @* M/ K   & `. B( }+ {8 \: }: `

2 y( W; k" {3 V# r

9 w3 t2 H8 Y0 B% T* d0 y 功能信息 , r& I. d# i: O( J9 [0 n1 G

8 m: C( H, R5 x5 C @7 a L- X

, b; M9 Y% P1 @2 k6 w; g1 b3 f7 A   5 W1 k9 h* N: w

& m# l6 j* k2 I( B7 l

4 _3 z& J' M# W$ |6 b 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 / A# Q3 \1 U. O/ U

4 y" F; G" ~# N

" m2 F8 L1 \$ o" b7 g Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 : g2 B" F9 c% E, G$ r) N

. s5 w. O+ ]2 E1 s+ I. x" X9 `

+ R R6 W$ h1 N9 f6 s# X* A( U# J 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 3 a! N0 p1 t9 m2 `" P6 z) ~

2 Q2 ?, A: V+ O" Z/ B

' J) o0 |/ z, X( Y, c; v5 O 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 1 c8 O: S: r; S3 N2 g

$ F- Q! T& m! M

0 u" H7 w+ E' X vshapes= % ?1 X4 e# {0 ~' u$ S6 `/ z! j

0 h* j- q; m+ c3 \( Q' z e D

6 f( w0 [; R+ w0 V9 U   4 e/ X \7 s0 [7 j

/ N* W3 v7 |$ G- S. ] ?

; Q* }: [! z# ^9 ~" j 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ( a; }# h: ]8 W" _! ~; L) l

! U& L! o Y+ s# ^/ n; X8 R

# n) R" e! o' O6 a% K8 L vshapes= * O6 z; X) e4 ~+ n

5 [! P3 @1 j1 }/ g! c( {- h& ?

2 E& O- K+ R8 o! E8 F, s, W7 {3 U   % P7 E* @7 b" L4 h

: Z! I, }2 `9 Q( e7 O

7 g8 _: A! ^$ g% [/ G2 ~6 a( \ lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 & H8 k" P6 |! L r

+ s- V3 y6 a+ I9 t8 y8 S

* c' |- U% ^; `9 l: ~/ ` vshapes= 2 r, n5 `* T8 L; i1 b/ {* e; S: l

" L& i2 h- S1 F9 D4 ]6 f- U$ [, u

( G; ?4 [- P; g3 T9 k 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 " { E% \$ f# _; ^& P

, p+ e& f, A& c3 R- [4 p7 A

- C1 [+ D. Q9 s! r vshapes= & H5 b6 Q6 H. o) z

) [0 m' E p' x

1 ~$ i$ ^% H. }7 _ I7 ?8 \   * ]: m$ f4 l# ?! X, J

, t. J& ^) G/ O- u# Y* _0 R

. ^( D, D8 `! [' t7 P0 q 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 1 z2 G, Z" c- J0 ~* E; F

1 B; K9 _) p, y

& x- N0 \+ G( q* d2 ?. f LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 / j1 S9 C5 h( [( |) u9 Z4 R

' N0 p7 t/ _% R& ?5 v

* P) t( v* d% Q }' @0 U 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 0 j F/ q3 ?0 u: y# F7 }- z G

% F, E! q9 [$ }

8 } i G- g4 K; k1 l+ i0 s 源的luasocket代码可以参考学习下 " j* q0 j4 ^2 }$ S

* N; A' J3 p' N# i9 e' o) X1 Z( h' Q

% e7 A! Z5 s" k. n8 w/ y6 F https://github.com/lunarmodules/luasocket X3 p: I3 k w* p& f9 S

4 J0 l' G9 g7 @+ d

7 c0 T& w* B, P7 P" p. I/ T https://github.com/fengye/luasocket , `+ f8 P" c. H

, F- `7 @4 \+ l4 q) `

|7 W- k5 d: e8 Y: `5 ]   3 P; y J$ _+ m) p7 j7 q

3 F% C7 J, K* q& ]' o3 A& ]! j

) v+ _0 u7 ^. ?* x9 j" T7 E vshapes= ' Y9 _# g! N1 I

( E# \6 W* ]( e/ w

0 @) Q/ R- i/ y! O' u* Z: _. o   T% s4 P+ C6 n. J% z

' ^' k5 a: @" Z

# T0 n, p, ~3 c( }" h; z* U   " M) k1 C u$ n1 W, D) ]# j) B

# Y8 r" |: F. [1 k$ l8 I( E a9 a: i0 S

9 V' M/ K) D; M! v2 }* I 总结 |# M' v3 r3 L, B3 }% [

3 x L+ F4 d0 w3 D; i' k9 k% T1 D

+ c5 j! U) F" U% o 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 1 j! w* \0 Z" [3 ^

4 f' T, t9 X0 [; ]

7 q# S, D$ o8 ~% q5 o( P/ i- [! C 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 7 E/ V. y5 X: s

- X- Y/ `$ l2 m# i2 }5 I

8 [! E1 g# I$ ]6 O8 V 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 " i9 b9 _7 D5 n" v8 g0 L3 B

1 @- Y5 l a5 W! S' ^! N

* p _4 o- p3 q5 ^& L) w4 A 结束 # z* f& D7 q9 H4 N) j9 e6 O

! o! [3 e% S( _, }: Y! G# _% T

7 X& T, P6 |1 |2 D- Z. A, W5 `4 \$ O  【推荐阅读】 % `& Y6 a9 @; W. [# E6 z$ i

' O# U6 N, m T0 v2 i* V

4 `) \& E ^2 g( i& {9 m9 `1 H 对吃鸡APP的分析 7 P3 s a3 t$ O% N, u% M+ }) d, U9 b

, T- g( `* v. M& f2 \

b- Q: v2 i# V5 b( P 你需要了解的APP安全 $ M! ]4 v! |7 C' d* W4 N- v

; w2 {; e7 ^6 _% ^3 f& b

0 M2 O) C( V6 ^: n 你需要了解的APP安全 9 p! M: i# q5 V, c1 q

+ e! e. I$ j) l2 x# ~( N

# |+ g; f+ l, C( _   6 Z+ i1 d X2 u

回复

使用道具 举报

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

本版积分规则

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