" G. K6 e% _ G8 P# K2 q 在网络上意外看到一款叫小绵羊的轰炸机APP,经过下载安装(这种未知风险的APP建议都在模拟器上去安装验证和分析功能,有安全风险问题模拟器删除即可)后确认,只要在APP界面的编辑框中输入手机号码,就可以进行对指定手机号码进行短信狂轰炸的效果的(已用自己测试号码验证过效果)。 + L5 r* ^( D, `
$ Z# p/ \ _# |8 x8 ]
" N+ f1 @; V( X+ B" S/ [, p
下面就以开发者角度进行解析下这个APP的功能的实现原理。 " k7 ?" A& ]4 y9 d' n/ {
- k7 H' D. }% r9 c1 h" U
/ b. L9 d0 D( [% I& ~ 基础信息
& l6 N5 e4 @) q4 n+ K7 o8 t" \! |2 \$ }/ C+ j4 e d 拿到APP的一般做法,就是先对这个APP进行查壳分析确认,决定是否删除卸载APP还是继续分析APP,还好通过查壳工具(通过识别APP中是否包含市面上的加固产品的特有的so文件特征)一分析这个小绵羊APP是没有加固保护的,这样对APP的分析门槛一下子就降低了。
' a% X% J( r. ?/ O% }+ \: ]" I" r5 w$ [/ e: V
# C* u$ G2 V" ~5 X ( j2 }1 r; u1 c: j/ ~0 T. V1 b
' {& i7 E- X3 n$ P( H4 M8 a I4 D' x% G8 G5 r# c 通过使用jadx进行查看APP的整个组成结构和重点查看java功能代码,通过工具可以查看app主要有java代码 C++代码(so文件),资源数据,lua数据,签名信息组成的。 , P' E5 d# `6 k9 ? Q' F
$ `; Q9 a* G+ D" H
" r3 h5 T% |% W, M9 d
. S* ^/ p m! z u1 C q) i2 q/ ?) h. D- o. T3 ? 通过jadx工具查看,该APP的Java层部分代码采用android studio自带的proguard插件,进行对个别的类名函数名称进行做混淆保护,虽然这种混淆强度并不强,但是还是有很多APP采用这种方式进行对java层保护。只因这种保护成本低,只需简单的进行配置下就可以达到混淆效果。 " e" i. A3 q, h
1 n. f( n: Y% h/ ]( ^+ C) Z% `0 T; _4 i4 r% Z + y6 B* S) j0 V9 i* ^0 c' y5 ?* \
$ j& n7 i g, V+ W5 x . L* l/ w: l5 D E5 x; r {
a) W* Y3 n1 G0 A3 U7 E9 U# ]/ B' w8 M8 o. T 启动APP后,通过uiautomatorviewer(SDK中自带的分析控件的工具)工具进行分析该APP的界面控件信息,通过分析可以看到该APP的界面主要由1个EditText和3个Button控件组成的,也就是下面的截图信息。
9 u, J3 A6 G/ N6 I . a9 D0 ^/ Q4 Q3 `
/ a1 Q- @% a+ a9 w: p k. C2 N8 y5 r9 B
3 `; T4 ^' e. @( ~ `/ B 下面是这个轰炸APP的界面背景颜色的设置,这个实现功能主要是以lua脚本方式进行实现的。 ' R/ |# n9 y F2 L8 A( T5 y7 u) u
8 }0 `' M% m3 q. \1 T$ |% O
- |5 ]6 z' c- K" R {& K
- C" A2 B% P* N
签名信息
1 H+ q! u* O6 {, ]0 W 通过这jadx工具,可以看到这个APP采用的是V1的签名方式,我们知道V1签名是android最早的数字证书签名,为了提高验证速度和覆盖度在android7.0的系统中引入V2的签名,为了实现密钥的轮转载android 9.0系统中引入V3的签名。 - `& q" \0 s! I/ @+ S
( G' h. K& u3 a7 E9 z8 u3 Y2 {( t1 Q% L2 v5 x# s 目前APP中大部分都是通过V1和V2签名相结合的。并且这个在签名过程中要保证按照V1到V2在到V3的签名顺序,因为V1签名的改动会修改到ZIP三大部分的内容,先使用V2签名再V1签名会破坏V2签名的完整性。 ; B- a1 B* j+ x: h
' x' b4 z% R+ |# W# O& y' H* [在android的app开发过程中,必须对app进行签名,不然过不了系统验证也就无法进行对app安装。
/ x: e: Y1 `1 d: f3 N
2 K" X0 \# g: z6 t/ K- m
android签名的数字证书的一般都是采用 X.509的国际标准。
5 I8 G( n* F; u8 N+ `6 U+ g因X.509内容为第三方可信机构CA对公钥实施数字签名,故也叫公钥证书,数字证书在PKI体系中是一个表明身份的载体,除了用户的公钥,还包含用户公开的基本信息,如用户名、组织、邮箱等。 % f# O( }4 v' F) Z! d ?
1 `3 x/ }, M) g2 R! J3 F 下图是android studio工具中可以自己创建用于对APP签名的证书,可以看到它包含密码信息、用户名称、组织名称、地区名称、国家信息、省份信息、城市信息。 . ?6 \ n L8 v+ `
& U# l( Y6 c! @6 M: v7 }" k# N0 T8 m: F8 C$ \9 q. r
. _" c6 o. A7 W3 l% z$ c1 f: {
' A8 r) j9 [# `同样也可以通过jadx工具,在META-INF目录下的CERT.SF文件中去查看确认签名信息,V1签名的主要关键字Created-By:, V2签名的X-Android-APK-Signed的关键字。 7 g& ^. X# F& a( e; Z
( m5 O; j1 L6 C- Q; H
+ J4 o! [7 m- I0 ]/ v/ Y I 、
5 Z% N5 k ?) b! [2 d! a0 Q1 B. @, b
" S0 d6 ^! D: Z1 q 权限信息
% i$ E. s6 N3 c4 a+ k( O" A [5 j+ z8 c在这个AndroidManifest.xml文件中主要包含app中所需要的权限,四大组件信息,app包的相关信息(包名称、sdk目标版本、sdk最低版本等等) % G$ K( Y" j% o
5 X% I! s4 ?+ q* ], n/ q) j* d- q( C, b. v- N# E0 B7 _9 y android的机制下想要读取相关的信息,都需要向用户申请权限,这个不仅符合android的安全机制,也符合目前国内的安全合规,同样也可以通过申请的权限信息了解APP的功能需求。 ' A0 q3 x, J d( |# q! ]
. F6 U% ^6 Z' \$ X- t* I3 w
/ o. B1 `2 u# O7 a% t, }
/ G3 \4 {' B1 q2 W% c- b下面对这个APP的所有权限进行详解下: ( c+ X6 L' A- ^" j$ D3 J
& z* w0 F$ m0 R* b* o6 [' @8 e2 m7 p8 Z0 N6 k+ } android.permission.INTERNET :访问网络连接可能产生GPRS流量
( j: \! A& M$ k! |9 U! Mandroid.permission.ACCESS_NETWORK_STATE:获取网络信息状态,如当前的网络连接是否有效 , I3 _- e- G+ `
8 I) i- \) }+ c" Aandroid.permission.ACCESS_WIFI_STATE:获取当前WiFi接入的状态以及WLAN热点的信息
android.permission.WRITE_EXTERNAL_STORAGE:允许程序写入外部存储,如SD卡上写文件 ! s% E2 a) m( D9 R- d+ Z" S: ^7 v
) ^& z# D# u; r& X) \. L. b' Y android.permission.WRITE_SMS:允许应用程序写短信内容
5 S9 O0 E, l8 C- `7 k8 v. j android.permission.READ_SMS:允许应用程序读取短信内容
/ _$ I V6 R% Z* ~; Z( pandroid.permission.WRITE_SETTINGS:允许应用程序读取或写入系统设置
* }7 ?* C6 C! I% G( ~3 Q9 m* q( s$ y; ` android.permission.CLEAR_APP_CACHE:允许程序清除应用缓存
0 j. \2 z8 E, A' bandroid.permission.BLUETOOTH:允许程序连接配对过的蓝牙设备
android.permission.VIBRATE:允许振动 " v' t2 A' w: E; ]% K
5 A& ?# b% o' D1 C- J2 v( ~. T3 u- I7 s h' ^ U3 B# V android.permission.READ_LOGS:允许程序读取系统底层日志
# w5 m( E' t( L3 r- ^android.permission.READ_FRAME_BUFFER:允许程序读取帧缓存用于屏幕截图
; M$ Y2 w; }6 t7 I* N
5 r$ Z7 }& q1 ~) E: A 功能信息 ; N; W% b! \) \7 R6 e# M
8 a' l( S. c0 s" E3 W4 [9 [- y# |' B( G3 Q- {* |' `, A 9 V& L/ l# |2 O, u
这个APP的主要功能都是在lua上实现的,从界面到轰炸功能都集成到lua上。 , n$ P6 c3 L3 B
$ \3 Y4 P4 ?' `! bLua是一门用标准C编写的动态脚本语言,如果希望在android上使用,则需要解决2个问题。 1 \5 t- I! O$ h
: `! b: p3 D+ b S+ f1 b1、需要用JNI为Lua的C库进行封装,这样才可能在Java中使用。
4 C; U( S3 Z. q2、由于Android系统开发所特有的系统环境限制,Lua三方库的动态加载机制和lua脚本模块的导入机制将不能正常运行,需要进行特殊处理。 7 W2 l* `, H8 E* c
- n! I6 S4 g) k. |' I7 u" ?% z# r* k/ n6 L " T' }4 G' S* Z3 O2 g
8 p# \3 f; j9 H ]* K- @9 t/ |2 u$ P* Z9 d; }9 o- Y8 m0 b ; N2 K. c# P z3 `' W/ w1 \$ Q4 K
' X0 F/ Z6 s# m$ y& w& V' e 输入好手机号码后(不过这个输入都没做验证,随便输入数据都进行执行一遍功能),通过charles抓包工具进行抓取数据吧,可以很清晰的看到,点击轰炸后,马上执行发送406个网络数据包,这些数据主要集中在作者收集的406个各种类型网站进行发网络账号注册验证码信息的轰炸。
' i5 B4 c1 k8 b# n1 t* Q$ k4 {" @: o9 K7 M/ \& M! M) |
# K3 v- B5 z( y% M+ Y+ H, z* S0 M" W; b
在lua功能中,有对vpn的判断,通过简单判断获取当前网络状态,并且判断网络状态是否属于vpn的状态,如果属于vpn状态,那么就往storage的目录下写入时间点设定,并且强制关闭APP,当在启动APP的时候会先判断文件是否有写入判断禁入的信息,如果有就不让启动APP。其实破解这个验证很简单,直接将文件的禁入信息清空即可。
! ]+ ]2 v' H- q' O9 ?$ Z( h; `3 v1 L* W' M3 s( V+ N" g # z+ e1 D, I% h8 D5 O$ E
下图的这几个so是网络上lua和socket通用的so文件,并没有什么可研究价值。
2 V+ Y; k* Y2 T: S1 ]/ v) f% k- j- _" | B4 p& N7 v ( y2 v: K# J/ ~9 M, K1 y
! A5 [! ]; y1 j% }! a+ Y d1 g3 a( C) W! [1 C w* B$ \: O
. D" q5 n' h: B" R通过分析libsocket.so这个so文件,可以确认采用的是luaSocket 3.0版本
LuaSocket 它是 Lua 的网络模块库,它很方便地提供 TCP、UDP、DNS、FTP、HTTP、SMTP、MIME 等多种网络协议的访问操作。 N% q1 B) g1 a' D7 H2 N @
2 K4 y2 b$ K/ ~; P7 S. |这个luasocke一部分是用 C 写的核心,提供对 TCP 和 UDP 传输层的访问支持。另外一部分是用 Lua 写的,负责应用功能的网络接口处理。
. l H+ g1 P+ F& Z9 W& z6 b% A, I8 m* G* p% `' m! k3 d3 ^ 开源的luasocket代码可以参考学习下
+ r, o$ F1 p9 }https://github.com/lunarmodules/luasocket ' b @7 b4 |& Z, }+ @
% h6 \5 O6 U& A# Thttps://github.com/fengye/luasocket
: B2 n% M* O' j q4 y
6 I' u1 n8 ?. k9 A' e2 R0 R3 B$ M: W% Y w1 ~/ L
$ Y' p) v- c' p, R5 R; @4 H
4 j F/ C O% A7 Z* ^' x5 F& v0 E
; v6 I* j" Q9 E, |3 T, s3 }( ~ 总结 ! F- A& P0 S7 K. x2 ~0 C
纵观整个轰炸APP的功能,分析这个APP都没有采取任何保护(加壳、反调试)就没有门槛了,基本也不需要涉及到脱壳、hook和动态调试这些操作,只要用几个(jadx、charles、ida、uiautomatorviewer)工具就可以将功能全部分析清楚。 , w4 g% N/ O* M7 a B
5 o3 r4 _, |8 i7 d( J/ [- }; e感叹这个作者确实很用心的去做这个轰炸的功能,去收集了406个的各类型的网站进行手机注册功能。 ( y8 G& V {* a2 }6 T( B
7 L" `( R# w8 G% O. J8 i对于这种具有攻击性的APP还是要慎重下,免费APP功能的前提往往会有给APP植入后门或者病毒的存在。
& j4 l$ d2 f& c9 k3 W- W9 r0 k+ M6 ]. ?# h% P 结束 # d' S6 |( g& Z
【推荐阅读】 8 q p: A& c; S
& U4 L' d3 \; g$ Z2 i / L. {& B' c% H3 ]5 u: }& A- W' F/ W4 i* w+ ]6 v 你需要了解的APP安全
2 |# h2 m* {- J7 ?" I- `4 _! T) T 你需要了解的APP安全 9 ~2 h+ n. N& B5 Q8 I3 O3 N. ]! c
9 G8 G+ D' e/ H# x( e0 s) f
欢迎光临 中国网络渗透测试联盟 (https://cobjon.com/) | Powered by Discuz! X3.2 |