zoukankan      html  css  js  c++  java
  • Android7.0以上版本抓取https包问题

    一. 开发不改代码,Android7实现https协议的fiddler抓包

    给Android7及以上的手机安装系统级证书,实现HTTPS的抓包

    Android7以后,系统不再信任用户级的证书,只信任系统级的证书,所以要抓包就需要把我们的代理程序证书安装至Android的系统目录中

    1.准备

    • 一台已root的手机
    • Openssl

    2.证书生成

      1.将Filddler或者其他抓包程序的证书导出,一般为xxx.cer或者xxx.pem

       2.使用opensslx509指令进行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非常简单。

    http://entropyblog.com

        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权限

    关于fiddler使用的随笔
  • 相关阅读:
    Golang基础笔记
    PHP面试题
    PHP操作文件常用函数
    转:C#委托与事件
    转:Tkinter教程之Text(2)篇
    Tkinter教程之Text篇(1)
    转:Python 从FTP 下载数据的例子
    转:Python模块学习 ---- httplib HTTP协议客户端实现
    转:Python yield 使用浅析
    有用的网址地址
  • 原文地址:https://www.cnblogs.com/testerabner/p/13898458.html
Copyright © 2011-2022 走看看