安卓测试环境搭建
1.前期准备
1.1测试机选择
推荐使用谷歌的测试机,原生谷歌系统,对于安卓大部分软件及测试软件兼容性会更好。我这里采用谷歌的Pixel XL和Nexus,淘宝即可购买。
1.2硬件配置
Nexus 预装Android7,刷机并root
Pixel XL预装Android10,刷机并root
1.3开启USB调试功能
在手机“设置”-“关于手机”连续点击“版本号”7 次,可以进入到开发者模式;然后可以到“设置”-“开发者选项”-“调试”里打开USB调试以及允许ADB的一些权限;连接时手机会弹出“允许HiSuite通过HDB连接设备”点击允许/接受即可;

1.4 模拟器选择
2.adb环境
2.1 介绍
Android Debug Bridge(安卓调试桥) tools。它就是一个命令行窗口,用于通过电脑端与模拟器或者是设备之间的交互。
ADB是一个C/S架构的应用程序,由三部分组成:
- 运行在pc端的adb client:
命令行程序”adb”用于从shell或脚本中运行adb命令。首先,“adb”程序尝试定位主机上的ADB服务器,如果找不到ADB服务器,“adb”程序自动启动一个ADB服务器。接下来,当设备的adbd和pc端的adb server建立连接后,adb client就可以向ADB servcer发送服务请求;
- 运行在pc端的adb server:
ADB Server是运行在主机上的一个后台进程。它的作用在于检测USB端口感知设备的连接和拔除,以及模拟器实例的启动或停止,ADB Server还需要将adb client的请求通过usb或者tcp的方式发送到对应的adbd上;
- 运行在设备端的常驻进程adb demon (adbd):
程序“adbd”作为一个后台进程在Android设备或模拟器系统中运行。它的作用是连接ADB服务器,并且为运行在主机上的客户端提供一些服务。
2.2 adb的下载及安装
---
下载地址:https://adbshell.com/downloads

下载完成后,解压文件,将当前路径加入到环境变量中

使用命令行进行验证,如果出现如下界面,则说明安装成功
2.3 adb常用的一些命令
---
adb version 查看adb版本
adb start-server 启动adb server
adb stop-server 停止adb server
adb shell 获取可交互式命令行shell
adb install [apk_ptah] 安装apk软件
adb uninstall [packagename] 卸载软件(需应用软件的包名)
adb devices 查询已连接的设备/模拟器
该命令经常出现一些小问题:
offline 表示设备未连接成功或无响应;
device 设备已连接;
no device 没有设备/模拟器连接;
List of devices attached 设备/模拟器未连接到 adb 或无响应
## 此处只标出常用命令,具体更多使用方法见官方网站:https://adbshell.com/
3.drozer环境
3.1 drozer介绍
Drozer是MWR Labs开发的一款Android安全测试框架。是目前最好的Android安全测试工具之一。其官方文档说道:“Drozer允许你以一个普通android应用的身份与其他应用和操作系统交互。”在Web世界已经有了许多安全测试工具了,我们只需要给出一个目标,这些工具就会自动为我们安全测试报告。但Drozer与这样的自动化扫描器不同,Drozer是一种交互式的安全测试工具。使用Drozer进行安全测试,用户在自己的工作站上输入命令,Drozer会将命令发送到Android设备上的代理程序执行。
3.2 drozer下载
下载地址:https://labs.f-secure.com/tools/drozer/
这里我们需要下载drozer的客户端(APK)以及服务端(msi)两个版本

3.3 前期环境准备
python2.7
在安装drozer环境之前,我们需要先安装python2的环境,下载地址:https://www.python.org/download/releases/2.7/,添加python2.7至环境变量,注意安装python2.7后千万不能给python.exe改名字。
jdk1.8
安装jdk1.8,并添加至环境变量
adb
添加 adb(Android Debug Bridge) 至环境变量,上文有讲到
3.4 安装drozer.apk
启动夜神模拟器,将apk文件拖入模拟器中安装
启动drozer应用,Embedded Server后的按钮选择开启即可

3.5 安装drozer服务端
安装
运行下载好的drozer.msi文件
在select python installations页面,可能会没有搜索到本地安装的python2环境,或者路径错误,需要手动填写python2的路径(如果后期安装完后,发现无法运行,可能为此处问题导致),点击next即可,安装后会在 python2 安装目录下的 Scripts/ 目录下生成 drozer.bat 等文件
安装完成后,需将安装目录添加至环境变量,默认安装在python2下的scripts中

启动
在终端(cmd)中输入:
adb devices (查看是否能识别设备)

端口转发,drozer Server 默认监听的为 31415 端口,所以需要在主机上同样与 31415 端口进行通信:
adb forward tcp:31415 tcp:31415

使用drozer连接客户端
drozer console connect

常用命令
# 列出设备中所有已经安装的APP包列表
run app.package.list
#利用关键词搜索得出包名
run app.package.list -f [xxx]
#查看包信息
run app.package.info -a [包名]
#查看sieve的可攻击点
run app.package.attacksurface [包名]
#使用start命令进行漏洞测试
run app.activity.start --component [包名] [组件名]
## 此处只标出常用命令,更多命令使用方法见官方介绍https://labs.f-secure.com/tools/drozer/
安装过程踩坑记录
错误1:
输入命令行:
E:>dorzer\Scripts\drozer.bat
报错提示:
'python.exe'不是内部或外部命令,也不是可运行的程序或批处理文件
分析:
解决思路及方案:
注意点:
- 安装包安装过程中,记得选上 Add python.exe to Path,不然要自己在环境变量中配置其路径
- 若是没选上 Add python.exe to Path,自己配置环境变量,然后重启机子才能生效
错误2:
输入命令行:
E:>dorzer\Scripts\drozer.bat console connect
报错提示:
Traceback (most recent call last):
File "E:\dorzer\Scripts\drozer", line 30, in <module>
import("drozer.cli.%s" % (sys.argv[1]))
ImportError: No module named drozer.cli.console
分析:
python安装环模块和drozer 安装模块不能交互
解决思路及方案:
- 重新安装 Drozer,记得把 Python from anther location 选上,选定安装目录。不选上的话,就只有 C 盘作为默认路径,而且看不到安装目录。选上的话,就有两个安装路径了
- 重新安装 python 2.7.× 安装包,记得选上 Add python.exe to Path
注意点:
- 第一次安装 Drozer,若是没有选上 Python from anther location,则两个安装目录 Lib 和 Scripts 会出现在当前安装包的文件夹下
- 删除第一次安装 Drozer 的两个安装目录,再次安装 Drozer 没有选上 Python from anther location,则默认安装在 C 盘中,但不显示安装目录
- 第三次再次安装,选上 Python from anther location,则 C 盘默认安装路径,还有就是另一个安装路径
重点选第三种安装流程,选上 Python from anther location
错误3:
输入命令行:
输入命令行:
E:>dorzer\Scripts\drozer.bat console connect
报错提示:
ImportError: No module named google.protobuf
分析:
缺少谷歌的protobuf组件,安装protobuf组件
解决思路及方案:
错误4:
输入命令行:
E:>dorzer\Scripts\drozer.bat console connect
报错提示:
ImportError: No module named OpenSSL
分析:
解决思路及方案:
错误5:
输入命令行:
E:>dorzer\Scripts\drozer.bat console connect
报错提示:
drozer Server requires Twisted to run.
Run 'pip install twisted' to fetch this dependency.
分析:
运行"pip install twisted"来获取此依赖
解决思路及方案:
接着又报错:
pip-build-7vaymo\twisted\
You are using pip version 9.0.1, however version 18.0 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
分析:
你应该考虑通过"python -m pip isntall --upgrade pip"命令进行升级
解决思路及方案:
python -m pip isntall --upgrade pip
接着又报错:
分析:
缺少 Microsoft Visual C++ 9.0 库
解决思路及方案:
最后,输入命令行:
E:>dorzer\Scripts\drozer.bat console connect
报错提示:
drozer Server requires Twisted to run.
Run 'pip install twisted' to fetch this dependency.
分析:
运行"pip install twisted"来获取此依赖
解决思路及方案:
成功。
错误6:
输入命令行:
E:>dorzer\Scripts\drozer.bat console connect
报错提示:
:0: UserWarning: You do not have a working installation of the service_identity
module: 'No module named service_identity'. Please install it from <https://pyp
i.python.org/pypi/service_identity> and make sure all of its dependencies are sa
tisfied. Without the service_identity module, Twisted can perform only rudiment
ary TLS client hostname verification. Many valid certificate/hostname mappings
may be rejected.
分析:
解决思路及方案:
pip install service_identity
错误7:
输入命令行:
E:>dorzer\Scripts\drozer.bat console connect
报错提示:
分析:
解决思路及方案:
错误8:
输入命令行:
dz/> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --vertical
报错提示:
分析:
解决思路及方案:
错误9:
输入命令行:
dz/> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --vertical
报错提示:
分析:
解决思路及方案:
把手机端管理软件退出,然后再打开,重新输入转发命令fcp
错误10:
输入命令行:
报错提示:
分析:
解决思路及方案:
猜测可能并不是错误,而且list为空,当前目录进入到drozer的安装目录Scripts下面,重新连接
连接成功后,再次使用:list命令即可
正确效果:
dz> list
app.activity.forintent Find activities that can handle the given intent
app.activity.info Gets information about exported activities.
app.activity.start Start an Activity
app.broadcast.info Get information about broadcast receivers
app.broadcast.send Send broadcast using an intent
app.broadcast.sniff Register a broadcast receiver that can sniff
drozer console connect -c "run app.package.manifest cn.jac.fund">>E:/a.xml
4.Xposed环境
4.1 介绍
Xposed框架(Xposed Framework)是一套开源的、在Android高权限模式下运行的框架服务,可以在不修改APK文件的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。在这个框架下,我们可以加载很多插件App,这些插件App可以直接或间接劫持、篡改、伪造一些信息。
4.2 下载
Android 7以下版本推荐使用Xposed框架,下载地址:http://repo.xposed.info/module/de.robv.android.xposed.installer
Android 7以上的版本推荐使用Edxopsed,下载地址:http://edxp.meowcat.org/
4.3 安装
将apk文件安装到设备中,启动应用
点击安装/更新,会下载安装包,网络不好可能会很慢
下载完成后根据提示信息重启即可
5.绕过Root环境检测
5.1 RootCloak介绍
绕过root检测的方式有很多,这里采用最简单的一种,即使用第三方app。这里使用RootCloak。RootCloak(Root功能隐藏)是一款能够让你针对特定的APP将设备已经ROOT了的这个特征隐藏起来,从而达到在ROOT的情况下继续使用这些APP的目的。
5.2 下载
下载地址:http://dl-xda.xposed.info/modules/com.devadvance.rootcloak2_v18_c43b61.apk;源码地址:https://github.com/devadvance/rootcloak
5.3安装
将apk文件安装到设备中,启动应用,点击add/remove apps
点击+号,在弹出的列表中可选择目标应用即可
<font color=red size=4>#!注意,此应用需要先安装Xposed框架</font>
6.突破SSL Pinning
6.1 前言
如果你是做web安全,当你在测试目前大多数APP应用程序时,一定遇到过burpsuite无法抓到数据包的情况,开始会以为是HTTPS的问题,但是当使用了burpsuite伪证书也无法抓取时,这时就应该思考一下其中的蹊跷。
为什么HTTPS的网站使用伪证书可以抓包,而在APP里面同样的方法就无法抓包呢?答案是:app使用了SSL Pinning(又称SSL证书绑定)
HTTPS的原理你必然懂,在建立SSL通道的过程中,当客户端向服务端发送了连接请求后,服务器会发送自己的证书(包括公钥、证书有效期、服务器信息等)给客户端,如果客户端是普通的浏览器,比如IE浏览器,则:
- 使用内置的CA证书去校验服务器证书是否被信任,如果不被信任,则会弹出https的告警提示信息,由用户自己决定是否要继续。
- 同样,用户也可以主动的将服务器证书导入到浏览器的受信任区,下次打开时该服务器证书将会自动被信任。
为啥中间人可以劫持HTTPS的流量,以及在浏览器上我们为什么可以使用burp伪造证书,正是因为以上的两点,即:
- 浏览器允许用户自行忽略证书告警,用户在无足够的信息安全意识时,可能会直接忽略刘浏览器的安全提示
- 浏览器允许“导入证书到浏览器信任区“这个操作让浏览器信任burp伪造的证书。
这种伪造证书的中间人攻击给HTTPS带来了很大的威胁。
6.2 SSLPinning了解一下
如果能够这样做,是不是就可以解决这种"中间人劫持+伪造证书"攻击的问题:
客户端在收到服务器的证书后,对该证书进行强校验,验证该证书是不是客户端承认的证书,如果不是则直接断开连接。
浏览器其实已经这样做了,但是如"前面"所说,选择权交给了客户,且浏览器由于其开放性允许让用户导入自己的证书到信任区。
但是在APP里面不同,APP是HTTPS的服务提供方自己开发的客户端,开发者可以先将自己服务器的证书大伯啊内置到自己的APP中,或者将证书签名内置到APP中,当客户端在请求服务器建立连接期间收到服务器证书后,先使用内置的证书信息校验一下服务器证书是否合法,如果不合法,则断开连接。
当然攻击者也可以通过把APP源码逆向,找到证书校验这段逻辑,将其干掉,或者干脆把证书信息换成自己的服务器证书信息,然后重新打包前面,但是一旦APP做了代码混淆和加密,这个操作也会变得比较难搞。
因此,这样看来,通过预先把服务器的证书信息“绑定”在APP的native端,然后建立连接时使用预先内置的绑定信息进行服务器证书校验,同时使用足够的代码加密或混淆,是比较合适的解决办法,这个方法就是“SSLPinning”
<font color=red size=3>#!补充:
不要将SSL Pinning和HTTPS双向认证搞混了,HTTPS协议本身是支持双向认证的,即除了客户端对服务器的证书进行验证外,服务器也可以要求客户端提供自己的证书信息并对其进行验证,在APP上,HTTPS双向认证的方案也可以防止中间人劫持,但是这种双向认证的开销较大,且安全性与“SSLPinning”一致,因此目前大多数APP都采用SSLPinning这种方案。
</font>
6.3 JustTustMe介绍
JustTrustMe 是一个用来禁用、绕过 SSL 证书检查的基于 Xposed 模块。JustTrustMe 是将 APK 中所有用于校验 SSL 证书的 API 都进行了 Hook,从而绕过证书检查。
如果你逆向比较在行,你就自己逆源码,然后过加密混淆,然后干掉SSL pinning。不过使用Xposed + JustTruestMe应该也不丢人。
6.2 下载
下载地址: https://github.com/Fuzion24/JustTrustMe/releases/tag/v.2(可以下载APk版本,也可下载源码自行编译)
6.3 安装
<font color=red size=4>#!注意,此应用需要先安装Xposed框架</font>
将apk安装到已安装Xposed框架的设备,进入Xposed的模块,选择JustTrustMe,重启即可,不会的建议放弃渗透吧。
各位师傅有兴趣的可以关注我的公众号,感谢支持。
