一. 開發不改代碼,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 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非常簡單。
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權限
