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

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

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

' h9 G" y- E' w( b3 t3 C 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 7 A/ @: v3 w8 V8 N4 t+ q% \

4 n0 X- I* [, i2 u- `; h( |4 D. |+ `

; y3 @' E6 w3 f vshapes= d2 A2 `2 w; p- L8 a7 |/ {/ A

1 M m3 T8 @* @' O

& w+ p) ]+ ?- d   ( y' `1 _2 J6 @% w+ U$ B. J

+ P2 X5 B& \9 y

1 O5 r+ T% ?+ F( S9 H4 q 下面就以开发者角度进行解析下这个APP的功能的实现原理。 t, ]9 h& y1 X- L, x" q

0 P9 N/ I" }1 q" r( V; \) E" F

" B4 q+ L- e7 W* g# i; B   & ^3 S8 J8 _1 }6 `, A' O1 B' u

3 j( U" J+ `+ D7 R$ n4 V. ?0 E

9 c* F/ T% C* ]* l/ ^" k6 B 基础信息 , a1 z A# L5 }: f

Y0 m" t" c6 F$ o2 p! x

2 J% U+ O& Y9 |, H9 ?: e$ @ 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 ! `$ b4 l! m6 K5 Y9 K

9 }. b) M. B' v2 F

" L5 k" {' F2 R vshapes= 2 j$ z7 i& Q' ~8 s* U& J, H7 o9 M

' l M$ u" C0 @

; Y5 p% G% r2 f, }* K9 j   , w& E* \ Z! I5 z4 [

; D. R' |! Q" p

) b& m- {2 n+ {, m% Y" S9 V0 G 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 ' b3 m* i3 v$ ?# k

+ S" [$ m ]! S, N; u4 H8 w

Z a i) B( x- h3 h# V, P3 f vshapes= & k0 n$ e% H, p* p) _

4 G8 S3 u. z. w( j# Q- m

% T& Z& n$ c: Y9 A2 B! N) i2 C8 v, D w2 R   , G. A1 r! Y/ V7 H* J

5 O/ u' l' i% i

6 q; I+ g( @) I' A% X 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 3 d; h: |# C+ p7 Q% V

5 z4 j# s- K. Y4 x" P8 H( e: s0 H. u

+ V: T3 q% M& N vshapes= * z5 F6 _& r8 ]7 Z( V c7 n9 f

& [. O* b2 z* u% a2 C4 Z* f y( ^

, N# U0 R! @, D7 E   / v0 d: g+ f+ {3 ]* n

2 a$ t! C/ [# g& F0 [+ x* [' U: g

2 J0 d+ H( O) |! } 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 ' X9 Y: V' d6 \( C. C- q: m

# X9 Y& X! N+ l9 ]

7 O* K& E& a; F. _ vshapes= + Y! r+ b8 H M# h! B3 {/ h( |& S

7 {# G* ?& V, S) e0 _

7 j7 q6 M$ h$ n7 T   + `6 A; ?1 ]0 D

9 l" m, S1 X; i" ]! x1 }2 k( E

5 b% ]" q; N. \9 W# l 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 " ?& v& e# z9 K5 D

8 x0 F$ J$ r# D6 \; L: L% A

8 w6 k1 v) j* z; }& K vshapes= 5 R' O" G2 T8 |' Q+ s# \: }

/ z$ d, t& c6 h7 }

5 [ C0 }3 Z% T# P% U8 M8 D. n/ A   / ~! k1 o+ C' w0 v1 T

: A8 J+ ?. A0 ]5 `& L; x

( k% {+ u/ u% Y   / R+ E4 e2 n% ]9 x

6 X; ?/ ]3 J# h; @! i7 D3 E

* X& u ~5 p' y2 i. u" q" Z8 }0 V 签名信息 ( p2 g' u8 E; d* ?7 c

9 g9 V4 e7 T6 W l' o- q; J: V, r

4 ^6 t. E8 ?. h4 R6 N! M! c0 v 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 4 H3 G2 M7 j! p- c) V

+ [; @0 f; e) s0 Q' ^

: q: m# [) _/ o 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 # S7 h0 B$ N9 J, B! X

) j g4 y/ J# V6 \

0 {1 i4 M* g) S! A2 R% _$ a androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 & Z- n, _ P% ?) a) s9 q# Q

8 b$ e6 T% f) n5 ?% l8 S

% q* n( V# w9 h1 ]1 J8 G" u vshapes= Q6 f3 H/ }2 P, z7 w) T

5 a* h0 i) B- L/ ]' h j# _

; `, x8 k, q3 \+ \; w$ W4 i   2 Z! t, I: r) o, e5 m' y

) \4 C8 E3 p2 ~. A( V

5 [* @ r" p- P+ [1 q android签名的数字证书的一般都是采用 X.509的国际标准。 : g* C, e- r% G D9 x1 P

. @8 T! h4 z* h& U

7 K: I9 ^9 J& J' n0 b2 {: [$ c' O X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 4 l! r* G( ~0 j: A8 P& ]& `

5 ?4 J7 x) v& |2 i# C

* a# d$ C! E) k. l- h 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 7 T* S. X# v7 ]# f* O, {0 P

% | |8 r" V, g6 Y/ a" K

7 H1 x6 D# l4 U% S; ]( [ vshapes= 9 o$ B- X3 |3 ?6 @8 }7 x

7 B2 H% U2 D" S! o4 ]

) }4 c0 |" |! J l" {7 d   8 N7 J& l# d. ^$ [' X% O' Z2 d

7 m* b7 V8 |3 o

9 f; ?( p7 s+ t/ U 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 $ u6 k5 j. C4 I% j( ?: S$ E; F

9 k+ l( R5 ^. P8 Y

2 c7 d$ v5 ?& ^5 T9 ] vshapes= 0 Z& {+ ?# @* `" p; I, b

' U" a5 K1 C! w: r; L9 ~2 K

0 P8 b3 y2 D) W3 z# C+ p% m ; {6 H6 S) \# N9 A3 ~; M

8 l, D2 _( @. K, ]9 V! {

- C1 h7 s5 z0 |7 u8 n9 b2 L   2 I0 I" [" J' x

( b/ A' C$ D2 X3 C: E

* s5 A. x9 D' c( i. P# U 权限信息 ' c; `; q( v8 |9 I, A

4 i- V! U; l8 h8 U

& I" \2 t- \ R9 A7 E6 O- C 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) r" t8 {: v. T+ M" ~( X$ T# T2 O

2 p9 z/ ?+ Z2 B5 P. v) [6 S: R

. D6 W& M* l; i, d8 P0 r6 _8 [" n& s android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 $ [" T6 O5 w s! M

7 Z1 I7 k" w- j. v

- [/ B6 D& P1 C0 K, a2 M! C9 P vshapes= ; m9 o! m: e" [. c( l9 v- F5 m8 H

{2 d) `( Y) H5 D" s( F- y

* |3 i* T! w# e; I6 E# |4 |/ i   - q. Z1 _( l2 J( M' F, ]- H$ ^5 f

# x0 I( J- m2 a& @

/ d) h" @1 z' g& P# a, c 下面对这个APP的所有权限进行详解下: 9 C p# L# G* i- g, l

7 V# K9 F- x& H/ A6 b1 o

( Q4 X) o% R/ X) E* H android.permission.INTERNET :访问网络连接可能产生GPRS流量 ) N5 n* ~( R. g

/ v3 a; m; c) G' J# w- L* A% b

' p9 }! o8 @- k8 k* t android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 ; F2 c7 M0 m+ L9 b8 d

: b5 P( m% g# I' d# A$ |+ r

% U. u! \# g) ^- y4 r9 ^ android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 . M% t7 s% n/ W3 n* p

) h I6 k& ~4 N& l

" O. V' O/ {7 X: I" t+ W android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 + U: [% S, l; |4 s8 y

6 }! `$ @! i0 p7 R: y. ^. C( I

4 j2 ^9 K; m" X; g* W: b android.permission.WRITE_SMS:允许应用程序写短信内容 & s& o! N4 c( M' K

$ q& e+ a+ ~& T' ^- o0 |

4 e* J# h) u7 w" u+ a% ^5 P- s+ E android.permission.READ_SMS:允许应用程序读取短信内容 : t1 Q+ g* g j# a2 w

: N" g! O" ~% M4 x% n

7 E4 m+ W4 X s# ? q, Q: N( r9 Z3 t android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 : m( B% r) Z y/ q" R7 ^' W

( Q& P9 D1 M2 _+ j

% v- G) J- s. N9 o2 ~. _) h6 G android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 8 C# `3 S4 ]. U3 }/ h3 l5 }

1 [/ l: }4 p ?* b

" `2 I* O! @3 }- U- i android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 $ N1 D4 U, J3 _& }; D

. H; C7 ?( ~) S! n

7 S+ c, }" `! g* d+ p4 D android.permission.VIBRATE:允许振动 4 N, c& X( R( S; b7 @ ~

4 O2 \6 o. e( p! m! ]: {% M9 P# q

$ {5 k7 [; i. h8 P android.permission.READ_LOGS:允许程序读取系统底层日志 : A8 I8 z7 C$ p6 P( g3 U0 ]

0 e9 K: `" H- E

/ @5 d# T- Z( L: h' W4 e android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  8 R7 \4 E4 T- c- F2 | [

- g: M8 G; U6 }$ s( i0 F

. Y/ E& T/ [6 j; b ^   ! v" n: Y' U9 F0 l3 T

: w ~7 J& h! y) ]0 |! `0 g. k

& s; X* P# l R 功能信息 ; o6 W0 F, C1 O8 E4 e

. Y0 P4 X* z* Q9 W7 F3 w1 C

& A5 o1 ~9 A+ M% j4 o1 e4 `( [2 T- o   5 E: ]' A2 V) F0 T w& |; @* n

! ^* l3 l% h. z9 m1 e+ [

; O8 N. \% E) C% H 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 6 y" X, z5 h, v7 O+ o

3 o' D0 j" l& @

7 @* g6 g1 m- C8 o Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 * m5 i9 Y' n+ {$ J% f0 C

9 ^) q( \4 ^1 ^# m4 i/ w

' H- H; P' z8 D' t1 t 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 " ]5 b, z l2 N; z

0 S9 g. F( u+ Q8 A3 y+ Z% S

8 K1 O6 m8 k! n+ r) G 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 3 [: u! L0 u4 c8 o+ e# B3 G4 c3 I5 v

8 e p; B! a4 e4 p& z+ \8 |

; }, Y8 j& W- A vshapes= ' p) i0 @0 {$ o" J: r, W

& A" X' u$ c6 e' C( Z* x

7 L2 f8 d4 F9 }5 b   : R9 Z- R- l) Y, t. z8 q

1 M0 H0 S# Y- U1 e" I+ n

/ U8 e$ t+ y o1 V/ Z 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 : |4 M" U$ N$ z, ?

: {/ o1 }7 B! W v+ \& E/ Y G3 i/ e

- R! e( a4 e3 s8 t- R& G$ M vshapes= . q9 q! ^) x/ Q' L! r7 i8 L

' i/ N) W) w; S$ G

- f' G7 n' B/ a. ?   ! k. g' S# ]8 H @0 b# `

1 U" j' X8 N/ b7 A8 D

- u$ Z2 f0 m% `4 Q/ Z lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 8 p: Q6 u& R' H1 X+ d- G

6 X- O+ P0 H* h. F9 o

. j2 N1 T- C3 X$ ~5 | h vshapes= % ?! u# k# j3 ^) |( @ z. h) n

* ~2 e1 S3 u& p2 [) W- `+ f

, ~! w+ _' Y( y; k8 v 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 5 ]1 R2 T1 `: A8 y

9 r4 l$ L- z8 r1 f2 c! I+ H _

4 g7 O2 \ }" j( T% { k vshapes= ( _9 i5 c p I

. H/ ?; _% s; n( U: B6 i

9 I- l9 h" x( [; q   # M' N. R5 q7 s0 F

9 P2 D' \5 |1 Q

: z$ @7 k8 q' s 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 ! @; z- ^: S3 t3 w8 t y

& O- V1 p- h# c7 O8 D8 X% }& P

; h8 ^1 L. K; d% Y! X LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 " J) y* _5 D8 m" F* i, g' S( _" l

( v2 S0 a$ z3 e% i, K

4 z/ y6 n* K' z2 v. h- W 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 8 k' C) y# w" p+ h

* @. \( ~: `9 U- n3 m% D1 I

6 C6 ?5 ^9 b7 Z3 ^/ d3 l# V% A 源的luasocket代码可以参考学习下 5 g4 x/ j' u% A5 x; n

) w& }$ x, H" Z1 Y/ C

, |! n) b T! l/ O7 g https://github.com/lunarmodules/luasocket : k% i9 ^1 \- N

1 Y7 s1 \0 {5 v, U" A: }

" s0 w4 m+ s) u, ?2 [ https://github.com/fengye/luasocket 5 p- x) H4 A0 t6 U0 D

% h$ F4 |7 z) `3 s* ]1 |4 B/ A. p, \* P

6 i0 K+ C4 F* i6 L   ( @, p& V# R# P( P

' x: k# q" ~% f0 l. { y. E3 {

$ ~! [: K" O6 O( S( p vshapes= - @6 t/ P/ P [; P" H! V

! R5 e! `. X2 n, ?8 m+ V8 J' y

p" x8 K b/ _7 F7 n   ; T" P% n& R( |

/ d+ ` e) n5 v2 @

+ v' K, g) _6 k) h+ q6 k. J   ) b" `5 G z% O( M/ Y

, `2 N5 Y5 D; s' }9 `/ e9 W: g1 I

- o; h' D, X' D+ g0 \9 j' ] 总结 : S1 G$ i* V( K1 x- I

, C- e" J1 F, O9 N2 U' q

" |! ?6 }+ G& [7 J1 x7 C/ P N! ^: ~ 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 3 h$ l3 c1 r+ _+ d% M: s. H$ Z9 e% P

: M2 D- u! E3 a

# d3 b0 q; {. |. H: K) u/ p4 T 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ) E3 c5 @ t' b' U, J# p. t

' j6 x1 ^# H) S: \7 D# t

D+ p: y5 p* m4 Y5 {" @ 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ! K/ ] t% _5 j

f- O: W- G/ S% a

+ E. E' M0 b, s 结束 ! {5 g- U$ t; K" d+ R" _- A) _6 L0 \

" f2 D3 m6 n3 U: a# R

d" n& s |4 l+ c C# }+ v  【推荐阅读】 $ f F+ t: u+ q, D

1 D- d/ g0 B( \# K/ m1 l

U( e3 C0 A# T6 d) R, A3 W0 b 对吃鸡APP的分析 3 y( a! S7 ]" x3 C

- ~7 j/ H+ Q- z% S! v

9 f+ R0 I, R" X0 }" B+ b# q6 z% h 你需要了解的APP安全 4 }$ ^+ J: z6 Q/ ~

9 h% A% {( o2 _3 [

2 I7 h. ]/ g1 `" ?0 l4 a 你需要了解的APP安全 " u* ?0 D l8 B; i/ r- {

7 j! K7 i4 [3 m w4 D

" b2 h# p& d' G L' i) r   9 K. J, K0 `" T& b

回复

使用道具 举报

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

本版积分规则

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