0 h) m6 b8 b/ Y 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 - l6 z/ Y- t* [+ ]: _, m
; y4 T! V7 G5 A1 n4 [4 Y, u8 j
3 F. a/ x" v6 H- |% G
下面就以开发者角度进行解析下这个APP的功能的实现原理。 * H& _+ J5 }( y- F
- y% F* k+ K8 e2 g9 O; b! h , G+ T0 f* d5 Q! P! i
+ z) g$ n6 e+ r" x+ H5 h0 ]" h# ^- M4 @& f% C# U+ ? 基础信息
* O8 q% K. N- V' E, {& y7 ~拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。 8 _% `- [+ c: R6 h
5 y/ T9 c1 J' o& _: X2 E$ t6 L; W( a1 x8 {6 R: t2 `# V
* s W: ?1 h$ d" G+ S4 K( ] ~1 p) T3 z2 q2 Q5 P* {' l2 d
$ g; n. a. A( S: i M- p: \# \通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 * |% V* P! t: {( \' R. M. d
/ I* C# M. p7 O4 d6 @ 1 a; l& ^1 v7 G% d
+ }* Y" K8 H5 s& {- K& j3 A. V6 Q
+ ?' \2 ^- j1 f' n( _4 p通过jadx工具查看,该APP的Java层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 ; o6 d w3 f( P- p8 X
& l( ~' b9 x, @' {& I% g
5 k7 V7 f5 r6 @9 `2 r( k( H. ~
启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1个EditText和3个Button控件组成的,也就是下面的截图信息。 9 ~ U6 i: w; ~( E; a: n" f
- `6 _: O0 }1 s, F
3 a% f9 I/ E; T9 _! s& v8 ~
; \$ p4 d$ q6 T M5 U5 Z0 s下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。
. b3 U& F( z; R
/ I! N5 _% O: u9 D
4 z2 ], P* b0 g7 i4 G- t2 }& P. q
/ M, F# i# h, N4 `" x 签名信息 . g# Z! k: S- ?( x/ s# t/ e
4 y. c4 k. D/ ]: r' T2 \通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名。 9 ?% U. Y1 j) H. B
0 R: G2 Z' U( h) O: b/ I) F# d: I目前APP中大部分都是通过V1和V2签名相结合的。并且这个在签名过程中要保证按照V1到V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 7 Y! x! F# V1 y3 M( i- c: H! h
/ I# e' k8 l2 D$ y/ u" ? 在android的app开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。
( ~- n6 l" \+ a) }, W) A" a4 S3 w/ G& \1 l! `7 H / |% s) m0 R" z$ c! j( U) h
" o3 U$ E9 I6 J
android签名的数字证书的一般都是采用 X.509的国际标准。
4 V: o, Z! c/ G; s5 D 因X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。
) j/ D! \/ S" D) J1 {9 K/ _* x* Z% Z& V' m8 G( i 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。
7 f0 K2 z4 z' H4 g0 r2 S# [7 Y' L, h% T# T% o 3 }. Y: |1 ]1 c, h
$ ^; E! l, V4 s, \' n1 t( K$ k
, B! V2 l& E4 P8 S; F0 f$ ~ 同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 5 ^& j2 F" ~, H \* Y: q
% Z. e. y7 f X, h
* C7 q5 B" ?% I' n' I 、 ' ]3 E4 j4 F$ a
5 y7 G6 M3 g' h0 _; n, W, Q2 t4 Q- ` F 6 @' O4 F% k6 |! D2 H, F
0 w, Y& J" l( c# L: A6 d权限信息 % k& v2 {7 I1 z8 B2 A
( o, q* `6 ] j在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等)
, B9 e1 k9 C4 D sandroid的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 7 T Q! G3 h- k5 c4 I3 f# n
: w6 Z8 Y, z2 q9 C+ K6 \: S5 U! w5 W
( f: O3 ~; R% k S6 h
* q& X) ^$ R8 a7 A+ @' t9 a: n0 T# G6 f/ v/ I' t1 m5 g9 U1 G 下面对这个APP的所有权限进行详解下:
5 q! N/ h3 Q6 F4 A android.permission.INTERNET :访问网络连接可能产生GPRS流量
, B! j! Z( a( O8 ?# ]( _5 i! h9 Z+ P! Z android.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效
5 G; s+ V3 M. C4 W6 H, gandroid.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息 # K: O7 _! r$ ~* e G- Z! ?
3 w( \" }6 S! f2 x1 ] android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 3 d! W( w; `. j% @! G* p
7 g3 V4 Z! j( S' V: t0 D2 { android.permission.WRITE_SMS:允许应用程序写短信内容
android.permission.READ_SMS:允许应用程序读取短信内容
5 o& q: i1 P" e) L android.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置
: A( o+ J) L% t6 O% z; T9 I! A; g0 R android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存
7 [; |9 M! E$ q' c1 Y% O android.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备 * c L, d1 N: f& l6 ~
. j4 a) j8 o6 I- z2 A L android.permission.VIBRATE:允许振动
' g- U7 c7 x, candroid.permission.READ_LOGS:允许程序读取系统底层日志 ' V( l) J- r3 f- m; @: T* q. j3 I
3 p: I' J' \ w2 K1 b0 _android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图
; c5 C/ O6 \9 A7 D+ t9 J6 M, j6 R
4 B7 G+ a/ j1 P% k& X) X; h. s7 o7 F4 q+ d 功能信息 7 Z7 a" Y: F* ]" @, M
1 R" M) G# n C6 N9 O3 |! G; P. R# x. h* x7 m
; J7 d, M: N/ _- l% j0 V 这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 % P& V7 k2 ]& N$ K# [& u" H1 x
/ f. a0 _8 h7 o6 z; V3 \' w% n, _" l" \3 [- h0 R Lua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。
1、需要用JNI为Lua的C库进行封装,这样才可能在Java中使用。 7 ~& R9 t7 S- b& _
5 _; K8 E! w6 e. l; Q: i- X 2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 5 F- T4 U& I: M, J' b# V$ l/ X% V
% E: t& }) t$ f# |1 W) T8 H
j- A& v: F! Z$ \. B" e# W
3 A7 [8 _0 x* O8 s, O# B' Z* k% W输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。 ; C: Q1 [ f1 E* Z! o1 ^% p8 v& `* P
J3 w2 [ a" Q, M- E ^$ r! H* j1 M2 n% @y9 r0 b" j- w! [ 8 U. @, Q* ~# J' ^7 ?
& O( D1 m; F4 F% V0 K' k 0 d: h3 _) K. v" k
1 K- U$ O& k _& D! A* O2 ]3 z 在lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP。其实破解这个验证很简单,直接将文件的禁入信息清空即可。
0 ]2 r9 ]( x% A3 ] " f' e* K8 ?# T% ]
下图的这几个so是网络上lua和socket通用的so文件,并没有什么可研究价值。
2 R( h( X8 m& f8 T+ P1 m7 g: f; Q6 ]
6 O8 d# [3 c$ g- D
0 \8 \- |& }4 `1 D, |! L 通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本
1 S9 A# V( J( M+ u( I0 p) sLuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。 & F, z/ p2 ?* t
这个luasocke一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。 / A- x. @: x. l0 U5 R
4 ]- B! V) C& G: c8 ~: k9 Q$ X+ Z: C( f 开源的luasocket代码可以参考学习下
9 w( q3 `9 k$ H7 `5 ~/ a https://github.com/lunarmodules/luasocket
! B5 P$ P6 f: n+ X* O6 ?8 `' @ https://github.com/fengye/luasocket
$ r# j8 u6 a, C, f # p( [$ ?6 B, R* F4 Z
- q4 H( o/ D" L
3 A! {' u4 T5 ?/ B
; h' g; O' ~, l) `" Z! H6 Y0 x1 Z; U5 s3 ^
d3 U5 k7 k: u2 C) d* h 总结
纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadx、charles、ida、uiautomatorviewer)工具就可以将功能全部分析清楚。
- O( N- C1 l4 T0 W/ E' R# \感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 4 W2 t1 U! i" i
5 P) c% n* u4 B3 h) H$ q9 i 对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。
结束
【推荐阅读】
- [; Z* S D' }+ T 对吃鸡APP的分析 9 p! Y, Z0 d: `' w+ u0 I% F
0 n' {/ W/ ]; R% {4 }6 G你需要了解的APP安全 - a" l |& a# {7 ?- g
) q, T$ r0 j8 d2 ]2 Q( C2 ?+ T g- \/ \1 ^
欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/) | Powered by Discuz! X3.2 |