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 Files\perl\site\bin;)已經被加入進來),無需再手工配置;

         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 Files\Microsoft Visual Studio 8\VC\bin)的vcvars32.bat文件即可完成配置,如下圖所示:

 

         3)配置openssl

      (1)將下載后的openssl壓縮文件(例如:openssl-1.0.1g.tar.gz)解壓縮到某目錄下(例如:C:\Program Files\openssl-1.0.1g);

   (2)通過命令窗口,進入openssl的目錄C:\Program Files\openssl-1.0.1g中,執行“perl Configure VC-WIN32”即可完成配置,如下圖所示:

 

 

(3)執行do_masm

在openssl的目錄下執行ms\do_masm,注意不能進入到ms下面直接執行do_masm,否則會提示找不到文件“util\makfiles.pl”之類的錯誤。

 (4)編譯openssl

在openssl目錄下(C:\Program Files\openssl-1.0.1g)執行“nmake -f ms\ntdll.mak”,如下圖所示:

 

注意:如果出現“nmake不是內部命令或外部命令,也不是可運行程序”的問題,則說明VS2005安裝的有問題,VS2005自帶有nmake編輯工具,在安裝目錄的“VC\BIN”文件夾下(例如本機的位置為:C:\Program Files\Microsoft Visual Studio 8\VC\bin),需將此路徑加入到環境變量中即可,如果不加,則執行nmake命令的時候,還需要在,命令nmake前加上它所在的目錄。

(5)測試openssl是否編譯成功

         在openssl目錄下執行命令“nmake -f ms\ntdll.mak test”即可完成測試,如下圖所示

 

測試結束的時候會顯示“passed all tests”字樣,例如:

 (6)openssl編譯完成之后,會在其目錄下生成文件夾out32dll(例如:C:\Program Files\openssl-1.0.1g\out32dll),所生成的文件(例如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 Files\openssl-1.0.1g\out32dll\test,

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM