找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 5084|回复: 0

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

[复制链接]
发表于 2022-7-8 21:25:07 | 显示全部楼层 |阅读模式

2 G$ R5 U* L, q. l 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 7 y! h# k8 p0 n- f" |

% ^" g- q. L( I* x5 N

9 |! T l M8 T4 z8 {! G vshapes= 2 @+ ]3 |! Q' D+ y

( x" { B% D1 C

3 S3 J0 \- S( ?; t. c) Z   0 M3 r8 K# z- }* A# u+ s

9 F3 Y- s3 P6 D/ N8 y# }% K! R

% m2 u9 _! j/ C) T 下面就以开发者角度进行解析下这个APP的功能的实现原理。 + \% J" }9 p7 [

) b7 U: q& {- I, N/ t

7 y: _/ ]0 g) w/ ?   8 k' x/ A5 I" e5 f& C6 Z

" ~! V3 r6 G" s# B9 _: v0 ^* k

& m! k3 K1 }7 ~1 v% G5 n, p0 J- ^ 基础信息 3 s. H0 S$ E9 _9 S, F: }

2 n% Z! Y( d1 q2 r4 `

" Y$ R# W% b$ v/ q5 O 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 , v8 H# z/ L& ?* G( h, b0 z

2 V3 p% V- s& `2 t* @# V

. C) d" ?$ e0 _8 H5 r% S; Y vshapes= 6 I5 b) [ s8 z8 f9 ~4 a1 j1 P

9 M' @$ I3 l1 F. _& Z% a

" Z: r1 k" I. g- D7 z) q4 Z3 C/ Y   / o; x- B1 M3 u$ b

: Y, Q3 F6 F$ ?& T2 F2 ]1 l8 c5 ^

$ e) o' p) C/ H7 j3 } 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 : x5 R M, F) C' S$ g' |

; v l; r6 p3 A( L3 O5 ^0 D

/ S2 w/ t$ S5 M8 V: L vshapes= 3 [- `' L; s/ b7 A

- A( ~+ q! |* d5 N1 g+ a( q

% [ p0 I2 e! H$ G, q X0 V" i" Q   6 q; }0 z$ p( ~# n$ J. W$ F

. L/ X+ w9 a3 j& ~

2 k( ]( M$ X+ G F& s* N7 A& z' _ 通过jadx工具查看,该APPJava层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 4 e; U" |8 g) {+ j4 Z& W

3 @9 J$ m6 N6 a; G7 f8 c; g, }0 u

9 ~4 e7 E3 N0 v" Y0 _ vshapes= ( U! }/ f" P4 _, D' K0 _

2 y( W) }5 U! a& e7 V4 n+ M, A1 }

" e7 Z5 U6 B; f, M5 ]; l8 ]* j   4 m ]. }) o, J; `8 q2 @. a- q

# e4 G3 }4 o+ W2 J; w0 [

* }0 \- ~+ ?$ t4 E9 D, a 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1EditText3Button控件组成的,也就是下面的截图信息。 0 e! n$ u6 M# n9 ?

' ]; \8 A$ m2 F! A

1 H7 {: }9 p8 e- F vshapes= ! s9 y# {1 W: v

) s5 V' d) C4 C; T% x

7 Y( c0 n! j4 d% T   * x+ V3 x' N1 B8 V) x' w8 K

$ o; f- K$ R- Y ]) ^) g! i

4 @" {3 c0 M8 r& `3 U5 J6 o 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 " h V2 B# L4 |8 \

2 p7 }$ W& ?# [: g ?

6 v/ l$ A+ Y1 k- @; E0 W1 h vshapes= 4 ~$ z" E5 c( y9 J& j$ y

$ {* X, P3 I* F0 E

5 L; o" e+ H5 h' C   8 e" {+ G3 @. A3 K7 N' F! l- Q# I

# d1 E- v; a7 P5 D' y6 |

; q- Y) m. r* Q. O   6 j3 k0 A) f7 g' _+ g% M; f

& O ^" r" [" V1 y5 ?" N+ V+ A

) V' a8 a2 w$ R; ^+ r 签名信息 3 r( C5 t# U* S

5 f6 z3 `( y" P9 \* C

- k, O! o1 N5 q: e$ u 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名 8 r0 X6 `# F9 G, z8 p ^

7 U* r9 N5 E2 t

8 v0 V; d- g% p0 V$ e* l" J; D 目前APP中大部分都是通过V1V2签名相结合的。并且这个在签名过程中要保证按照V1V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ! I5 k5 Y& b' R$ Z( x

; v/ _, K. v" M* a5 L4 [' ]# @) [

7 B, y2 c- o: O androidapp开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。 ) }" r7 F7 ]8 f# n( w Q

8 v/ j, M6 r, h- M. d/ h: e

% M1 V( j9 |% E0 U5 V. Y8 j* ]( V vshapes= D1 y! W& w- A1 v' P* g: F( R4 S/ Z

1 E! N0 o/ b+ g3 u9 @

/ } i5 D. M/ t   # \7 S4 P7 j/ O3 n3 ]" {

8 f) N- ^1 {+ i9 n$ P

6 r5 j N/ `# p3 n6 O9 @& y1 Q, ~ android签名的数字证书的一般都是采用 X.509的国际标准。 1 _7 v/ T) @/ Y0 m1 A) ?3 K/ y* v

u7 ?, R1 G( X- r0 g: P

: F" R @, e7 o: \. f" t7 A X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 ) w! s# f+ G! F9 A' j5 u2 y

: @( K/ m$ T W

4 g$ I; A6 y% J" @/ `0 V+ i- J j 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 , u# o2 m$ I% ?" u0 f% P$ s& [( }9 Y4 `

3 A @( Q3 o/ e8 J9 A% `# s/ s1 n y

' d5 q* C1 o( V# Q" U vshapes= " n7 w5 L2 ?% W8 ~" i2 o

. g3 x( u; B, |# [

7 G; ~/ b6 s3 s2 S& c- ~   + N/ d8 H- \' |

9 K) O4 |7 m6 m! C, s

6 A2 b' E2 \5 x7 {& c+ |1 j+ d" ] 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 ' i" S/ z# @0 S0 f$ U

* a: {$ j: J( F" j; U+ N% ?* }

3 ^1 U# u! \7 Y' B1 v; ^ vshapes= 2 T( C, M$ {3 D& @" l

& P' E' h& l/ A6 R8 G: q

6 g) R6 B. d7 \ / n! |) F9 L9 J, s, A

2 t- u% \4 a, S' `/ F

: ]7 ^8 F$ s" \8 X" K, [# ?   % i4 U8 M, H5 ^' q/ X7 w$ T# ^( x

2 E' P& v5 c% _) n# V

* P) g. N! g3 Q8 \7 W 权限信息 ( {9 ^" w. d' t. f9 |

7 J# ?4 Z5 f" T0 x. K

9 m- n" h* Z1 ? 在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) ) ~% J, l1 {. B/ N; L9 b; D

9 J) l! J$ g$ Z; @4 F, i

2 Q& |3 y+ S3 G0 M android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 8 O. x2 U) f) A, ?) b. P

4 X5 l4 j5 Y9 v, V2 P3 v

) F' Z: D2 k$ N. o, J% ]) r vshapes= % { \( K6 p6 w% T

0 T3 N# a* v! v9 N

9 ?$ c# k1 M9 T   & @2 F3 N8 D0 C' b8 ?; i

2 [6 Y6 L. X9 B/ j4 \

2 r( x+ \/ W0 g4 e: w! P 下面对这个APP的所有权限进行详解下: 9 W5 [' w6 k$ c( E3 ]. c8 S; \

& K/ R7 |) [1 R* e1 e% B

7 g( q6 e5 I& U8 b. ` android.permission.INTERNET :访问网络连接可能产生GPRS流量 $ w; v, }, ]! D% C

8 U) L' g% b$ E0 D4 u9 ]" m$ M

( E+ j, M/ m$ _/ l; P* s& I2 M android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 9 u' [) G( V6 h+ e; K) _% z8 V0 v5 F0 A

0 `5 k7 ?& e' ~& J8 Y* c1 W; m' d

9 g1 G4 m& t' ?" Z, f2 ^: [" u) j android.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 ' E- j, C1 W. c

6 c/ r. P* R6 I5 ?4 q

! ~" E4 f" I4 M" M android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 : v' R( u7 G6 d

' Q) n0 p, c! _. R: R# v9 D! D

+ _' w: M% r! n- {' H android.permission.WRITE_SMS:允许应用程序写短信内容 " W, A1 e! X. q& y

# e* D$ F, q# `

2 C# c# [+ q- I, U* _7 a android.permission.READ_SMS:允许应用程序读取短信内容 0 r6 Z5 X4 ~( G1 M4 l, g1 W

. Z) x2 p+ Q5 g5 R/ h- e

& ~% R, f5 m. V android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置 1 m( d& D/ ?; s+ K* G6 l* V/ I7 @

6 ?0 Z' A1 ]- t$ {& E

( n$ v0 C7 r" ? android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存 5 b0 i# {) Y8 b5 h$ g2 S5 ^+ {

# y2 F5 ^- h* q1 t1 G- _1 }% w5 C

6 d! Y$ u. X% g u# L7 Z( O0 w android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 9 C+ Y9 |, q/ F+ ^" s# p9 E

: }0 P! n" J8 L5 N i3 t

1 I. Q4 ?5 Y, j' v android.permission.VIBRATE:允许振动 ! G/ @* E5 h* l& L1 S- G

# k1 l8 a/ z' ?& l

6 T1 E7 V0 C1 ~* K+ _4 m4 j g$ P android.permission.READ_LOGS:允许程序读取系统底层日志 % G* O' m" I1 B+ B8 K: L

5 P* O5 ` V: w

- K2 x' \, M O! C/ n* Y android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图  5 X# Y8 u! c0 h% E- d. @# ~+ w! U

. ~# E+ y# I& D# `) w

2 N, I3 s" V- X   ; v3 C/ u+ H5 x, y9 {: ^

n' _2 L5 P9 d7 h3 {

% F4 f) f# e& N) j X0 `' ~ 功能信息 ! H- ]) _* Q7 \

; s7 _0 I+ Z4 N' ]

- ^9 u& F8 k. t; v$ D% K   4 e" t( |: J# d/ Z; K

& l' L( U4 R( x& f; ~+ ?5 A, f0 |

* w5 f. g" C9 W# n 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 & H6 G1 V* N( B5 d. g* x5 J9 \

$ ~7 }( z6 k9 f3 h: [9 V7 A8 L

; K( A }; K2 m; n Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 8 ^8 h0 W7 ]. d' p! o( ?1 w

) H7 A: p! J$ K0 t1 Y$ ~

0 f8 |/ M/ F6 K4 q5 V) j) E 1、需要用JNILuaC库进行封装,这样才可能在Java中使用。 & d2 |1 _! D/ z+ X6 }4 O6 v$ |

l4 Q- D I! i% x

/ P' X3 a9 R" L r) w4 g9 S' S 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 8 T0 ~& X( d8 X( _5 b7 ~

% R5 Y8 d& X5 S0 d1 \- K- [. U

! }9 {1 i: s8 R9 t* c3 x( Q8 b vshapes= ) B* ^ [+ O) W ?! w' {2 C

/ x& j* ?. _4 |+ Z! c

& e0 p. s; e& x   5 w8 @9 j* D! q2 y F4 D

+ K4 m6 A+ }( e* ~

3 F* J8 [/ s! W9 T7 h 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 9 x' `2 L/ ~$ U: T. X' D% l

z5 Q0 ]0 b4 ]$ @9 ]0 [

* v7 N4 Z* H9 D* `; B vshapes= * z0 B. ]5 G- X4 l) L

) P. P8 }% w4 C/ ^+ K" @, s9 O

- |# g. r G- J; m   3 N; g% t; N2 ~

( }; b! R, p- `* O

. N6 `# z* O. J$ s6 |, r lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP其实破解这个验证很简单,直接将文件的禁入信息清空即可。 + S }/ ?# \" g7 J4 Y: V* p2 p

% _; u. e7 b" d2 L1 j# r! A' Q

% P. S7 ]$ n7 Y0 r+ y vshapes= - d- h' ^" X9 f0 {- M9 `7 b6 V( g

) F/ S! N% k. u# V$ u& h* ]

& Z8 H5 {3 e6 ]; k1 g/ g 下图的这几个so是网络上luasocket通用的so文件,并没有什么可研究价值。 y; b Q$ U# e- O6 i& W) c

1 {% D. p4 ]! S" }/ }8 n+ M

% K" J+ N: e( @, \ vshapes= ! g% ?: D4 |" W9 g9 k

/ {& D# b) R( a. ?( t

3 D8 x/ [6 W3 r   , l N A; p ]' n6 T7 W

' {) @% l* x2 G# }3 x; v

/ X& r8 [6 L/ Z& W( i 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本 7 V; g8 L8 a g: J O t& G3 ?

9 b+ U$ p: D8 x4 }& _# f

7 {* w0 K+ }' M$ g LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCPUDPDNSFTPHTTPSMTPMIME 等多种网络协议的访问操作。 ' _9 t _: j; y

, D* \4 V8 `' X: {

% Y5 F7 Z" }' ]) `9 ?' U 这个luasocke一部分是用 C 写的核心,提供对 TCP UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 / u) J9 t( C- p

6 v& i1 s/ }: O* d8 E4 C7 O

" C) M- x% ^8 G7 K- c3 G 源的luasocket代码可以参考学习下 ( M/ g; Y5 U p. l U& [ H- x% N4 _

8 _" f3 n! N( G+ P7 I

- Q5 C# A6 l6 R, z https://github.com/lunarmodules/luasocket 7 \7 y9 K) U0 y/ M K! r

* w! O. m( T' I) }* Z

8 P- [- }) O+ N: P8 m https://github.com/fengye/luasocket / d3 ` {; w8 X3 g$ ]+ g

" C& O, e2 w* W' Y

5 T9 j! T# s7 [0 m& k( x! x   . l6 s* a/ H6 C8 h

1 C3 C! _3 i# K, G

& L. i5 v" o6 a8 M1 n' n vshapes= 4 _0 d f0 a( y$ ]% s7 W$ S0 D

; n3 A3 G6 j7 u h1 h" x7 t

: X9 n& v) K7 `# v2 D   ' O- [0 A! X2 b# z! K0 L

; b4 t9 W. ~3 s/ q

5 H5 [4 O0 F) c: A. a+ B" `   1 f5 g& y& s# I3 c4 Z

! M3 p% L; `* n' U

; |3 |& r" a6 l7 t7 O 总结 7 S6 `+ K8 D) F( f4 Q' H' w, l

. I8 `; A0 A1 ^; E3 D& v

* d" q1 W1 R7 ? 纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadxcharlesidauiautomatorviewer)工具就可以将功能全部分析清楚。 : u `' \$ z) L4 Y3 K4 M- z

5 m7 _, W; s/ W$ w" ?

9 V, N4 X. d4 f+ L( W/ j7 ^4 G 感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 . N6 o6 ~0 v8 z5 M: r

+ s3 @' Z: u3 Y r6 b9 [

+ `. B: e# B1 Y8 M8 `. A5 y0 j 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。 ! F5 e) z) ^3 v! W# p& ^

9 Z* t8 A& S3 x; p7 h9 V; `3 l2 I

$ ~* Q. O* W4 i& u9 j! ]9 R 结束 7 |9 X3 d; j# w" M

@; @' S8 C3 E' e. o7 u9 ?! R

' ^. U: H8 H/ B0 L4 h- S+ R O+ L  【推荐阅读】 + F3 a. z% R: W

% q0 p' g5 f( h3 }

z/ |3 h4 @' Y# V: M6 ] B 对吃鸡APP的分析 # R. P N( m( [/ [% o. V

4 K- K' M' w7 ?, q" c# h; @, u8 D4 J

7 f: I1 U( u" X 你需要了解的APP安全 / z( p7 ]( x$ b; U$ S- Q, |2 N

: P% e; E5 V l$ e' P

' r) u v( g( |- @ 你需要了解的APP安全 1 j D+ Y( D" B: Z

" r( ^! {# j* j- _4 Y4 O- H

+ u2 p2 \7 \$ u7 A- r   2 R$ X+ x/ R% Q# d8 l0 ^) u

回复

使用道具 举报

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

本版积分规则

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