一. 开发不改代码,Android7实现https协议的fiddler抓包
给Android7及以上的手机安装系统级证书,实现HTTPS的抓包
Android7以后,系统不再信任用户级的证书,只信任系统级的证书,所以要抓包就需要把我们的代理程序证书安装至Android的系统目录中
1.准备
- 一台已root的手机
- Openssl
2.证书生成
1.将Filddler或者其他抓包程序的证书导出,一般为xxx.cer
或者xxx.pem
2.使用openssl
的x509
指令进行cer
证书转pem
证书 和 用md5方式显示pem
证书的hash值
#1. 证书转换,已经是pem格式的证书不需要执行这一步
openssl x509 -inform DER -in xxx.cer -out cacert.pem
2. 进行MD5的hash显示
openssl版本在1.0以上的版本的执行这一句
openssl x509 -inform PEM -subject_hash_old -in cacert.pem
openssl版本在1.0以下的版本的执行这一句
openssl x509 -inform PEM -subject_hash -in cacert.pem
3.将第二条指令输出的类似347bacb5
的值进行复制
tips: 查看openssl
版本的指令openssl version
4.将pem
证书重命名
使用上面复制的值(类似于347bacb5
)对pem
证书进行重命名
重命名为: 347bacb5.0,切记不要忘记".0"
将新证书放入手机系统证书目录
1.手机系统目录位置是:/system/etc/security/cacerts
2.需要拷贝至此目录必须拥有root权限,还要解锁system分区
- 3.解锁system分区: 开机状态下(打开发者选项,开启USB调试,USB模式设为MTP),在adb工具文件夹下按住shift键右键打开CMD,输入如下命令:
adb root
adb disable-verity
adb reboot
4.由于adb版本问题adb disable-verity可能会没有此命令,此时需要更新adb版本即可,下载地址如下,下载好替换即可
ADB和Fastboot for Windows
https://dl.google.com/android/repository/platform-tools-latest-windows.zip
ADB和Fastboot for Mac
https://dl.google.com/android/repository/platform-tools-latest-darwin.zip
ADB和Fastboot for Linux
https://dl.google.com/android/repository/platform-tools-latest-linux.zip
重启Android设备以生效
1.拷贝证书至:adb push 证书到 /system/etc/security/cacerts
之后,重启手机就可以使证书生效了
特别注意
开启了root权限并解锁了system区,则表示真正解锁了所有权限,风险也如期而至,之后请谨慎下载任何非应用市场软件!
1.关闭system解锁:adb enable-verity,重启生效
2.关闭后重启后,fiddler证书则会消失,再次抓包时需要重新导入证书
Windows下openssl的下载安装和使用
安装openssl有两种方式,第一种直接下载安装包,装上就可运行;第二种可以自己下载源码,自己编译。下面对两种方式均进行详细描述。
一、下载和安装openss
方法一:直接使用openssl安装包
Window 的openssl的安装包的下载地址为:
http://slproweb.com/products/Win32OpenSSL.html
一般在安装openssl之前还需要vs的一些插件,该地址中也提供了相关插件的下载。如下图即为openssl的安装及其vs插件在下载网页的截图。
方法二:自己编译openssl
此过程比较复杂,需要先安装perl、vs等软件,然后才能编译openssl。
1、下载并安装perl,
1)下载路径:
http://www.activestate.com/activeperl/downloads/
2)安装与配置:
直接运行安装文件(例如:ActivePerl-5.16.3.1604-MSWin32-x86-298023.msi)即可完成安装;安装过程将自动完成环境变量的配置(安装完成之后,可以在系统环境变量里看到perl的bin目录(例如: C:Program Filesperlsitein;)已经被加入进来),无需再手工配置;
3)测试安装是否成功:
进入perl安装目录的eg文件夹,执行“perl example.pl”若显示“Hello from ActivePerl!”,则说明Perl安装成功。如下图所示:
perl安装成功之后就可以开始使用Perl的相关命令来进行OpenSSL的安装了。
2、openssl可以自己下载源码编译也可以直接下载安装包安装完之后即可使用。
2.1使用源码编译openssl
1) 下载openssl源码的路径:
http://www.openssl.org/source/
2)配置VS2005的环境变量(因为后面编译openssl时,将会用到vs2005自带的nmake工具)。
执行VS2005的bin目录下(例如:C:Program FilesMicrosoft Visual Studio 8VCin)的vcvars32.bat文件即可完成配置,如下图所示:
3)配置openssl
(1)将下载后的openssl压缩文件(例如:openssl-1.0.1g.tar.gz)解压缩到某目录下(例如:C:Program Filesopenssl-1.0.1g);
(2)通过命令窗口,进入openssl的目录C:Program Filesopenssl-1.0.1g中,执行“perl Configure VC-WIN32”即可完成配置,如下图所示:
(3)执行do_masm
在openssl的目录下执行msdo_masm,注意不能进入到ms下面直接执行do_masm,否则会提示找不到文件“utilmakfiles.pl”之类的错误。
(4)编译openssl
在openssl目录下(C:Program Filesopenssl-1.0.1g)执行“nmake -f ms tdll.mak”,如下图所示:
注意:如果出现“nmake不是内部命令或外部命令,也不是可运行程序”的问题,则说明VS2005安装的有问题,VS2005自带有nmake编辑工具,在安装目录的“VCBIN”文件夹下(例如本机的位置为:C:Program FilesMicrosoft Visual Studio 8VCin),需将此路径加入到环境变量中即可,如果不加,则执行nmake命令的时候,还需要在,命令nmake前加上它所在的目录。
(5)测试openssl是否编译成功
在openssl目录下执行命令“nmake -f ms tdll.mak test”即可完成测试,如下图所示
测试结束的时候会显示“passed all tests”字样,例如:
(6)openssl编译完成之后,会在其目录下生成文件夹out32dll(例如:C:Program Filesopenssl-1.0.1gout32dll),所生成的文件(例如openssl.exe还有其他动态库等)就在该文件夹里。
二、使用openssl生成ca及证书
使用刚才编译openssl生成的openssl.exe等可执行文件生成相应证书,命令与linux下生成ca和签名证书的过程是一样的,详细操作可参考文章《Mosquito使用SSL/TLS进行安全通信时的使用方法》,该文地址为:
http://blog.csdn.net/houjixin/article/details/24305613
或者:
http://houjixin.blog.163.com/blog/static/35628410201432205042955/
下面将使用一个现成的ca文件(ca.key和ca.crt)生成证书文件(client.key和client.crt):
1)创建一个目录用于存放ca文件以及将要生成的证书文件,本例中将该目录创建在out32dll目录下:C:Program Filesopenssl-1.0.1gout32dll est,
2)执行命令生成证书的key文件:..openssl genrsa -out client.key 2048,如下图所示:
3) 生成证书请求文件:..openssl req -out server.csr -key server.key -new
4) 生成证书文件:.. openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 36500
安卓7.0及以上用户证书导入的问题
安卓7.0及以上系统对于证书的安全策略做了修改,用户证书只能用于代理浏览器的流量,而应用是不会信任这些证书。【ios和安卓<7.0的版本没有此问题】
解决方案:
1、root手机将证书导入到根证书目录下
2、换低版本安卓系统
操作流程
1、导出并转换Burp CA
以DER格式导出CA证书。我将它保存为cacert.der
将DER转为PEM格式证书,并且文件名为subject_hash_old值并以.0结尾。
当OpenSSL 版本<1.0时,文件名为subject_hash。
使用openssl将DER转换成PEM,然后输出subject_hash_old并重命名该文件:
openssl x509 -inform DER -in cacert.der -out cacert.pem
openssl x509 -inform PEM -subject_hash_old -in cacert.pem |head -1
mv cacert.pem <hash>.0
2、将证书复制到设备
我们可以使用adb来复制证书,但由于必须将其复制到/system文件系统,所以我们需要将它重新挂载为可写。作为root用户,adb remount非常简单。
adb root adb remount adb push <cert>.0 /sdcard/
进入adb shell将文件移动到/system/etc/security/cacerts,并将文件权限修改为644:
mv /sdcard/<cert>.0 /system/etc/security/cacerts/
chmod 644 /system/etc/security/cacerts/<cert>.0
3、reboot重启设备
remount of /system failed: Read-only file问题:
1.adb disable-verity 会出现
Verity disabled on /system
Now reboot your device for settings to take effect
2.adb reboot重启设备.
然后再remout就可以成功了.
可能出现的情况:
但是有时候终端不能识别adb disable-verity命令,一个可能的原因是adb版本太低了,adb version查看一下版本,然后更新到最新就好了.
只知道执行了adb disable-verity, adb reboot之后就能够remount成功,但是adb disable-verity具体做了什么呢?
官方给出adb disable-verity的解释是这样的:disable dm-verity checking on USERDEBUG builds
大致意思就是不使用dm-verity验证userdebug版本.可以理解为userdebug版本有些system分区被verity标识.
所以会出现上述错误是因为某些分区被系统标识,必须要验证数据签名,我们只需要忽略验证就行了.
上面可以看到签名是否需要验证主要是由dm-verity决定的,那它又做了什么呢?
它的作用和工作流程可以移步http://blog.csdn.net/u011280717/article/details/51867673
adbd cannot run as root in production builds的问题
手机没有root权限