1. 程式人生 > 實用技巧 >Android7.0以上版本抓取https包問題

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 -days36500

安卓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許可權