移動端防止被抓包

2022-08-15 21:30:18 字數 2217 閱讀 7197

最近在除錯乙個bug的時候沒有其它好的辦法了,用到了抓包這麼個方式才發現問題,不過問題已經解決了

不過在抓包的時候突然想到了,我擦,我用的https也可以被抓到包啊。所以又看了一下https的鏈結建立的流程(ssl/tls原理詳解)和相關的中間人攻擊的流程,想了一下其中的原理。

1.客戶端首先要向遠端的伺服器傳送建立連線的請求,並帶有自己的支援的加解密的方式級別,這個過程經過了中間人的竊聽,中間人把訊息修改後發給了真正的目的地——服務端

2.服務端收到了要建立https鏈結的請求後,會傳送當時從證書簽發機構簽發的公鑰證書。這個過程中中間人又竊聽了,然後中間人替換上自己的證書後又**給了客戶端。

3.客戶端收到了中間人發過來的公鑰證書,驗證證書的真偽,並產生隨機的對稱加密的金鑰,用中間人發的公鑰加密後發給了中間人。由於剛才客戶端收到的公鑰證書本身就是中間人產生的,所以中間人用相應的私鑰就解開了,拿到了客戶端產生的那個隨機產生的對稱加密金鑰。中間人再用剛才服務端返回的公鑰證書加密這個客戶端產生的用來對稱加密的金鑰,發給服務端。

4.服務端收到了當時用自己下發的公鑰的證書加密的對稱加密金鑰,用自己的私鑰解密,也得到了對稱加密的金鑰。

以後的通訊都使用這個對稱加密的金鑰加密了。因為客戶端,中間人,服務端都有了這個對稱加密的金鑰,所以都可以用此解密通訊的內容。(上面的步驟是穿插了https建立握手過程和中間人的作用介紹的,屬於簡潔介紹,明白原理就可以了)。

上面有幾個字「驗證證書的真偽」標為了紅色,其實一般來說這個過程應該是安全的,因為一般的證書都是由作業系統來管理(firefox自己管理)的,所以只要作業系統沒有證書鏈驗證等方面的bug是沒有什麼問題的,但是為了抓包其實我們是在作業系統中匯入了中間人的ca,這樣中間人下發的公鑰證書就可以被認為是合法的,可以通過驗證的(中間人既承擔了辦法了證書,又承擔了驗證證書,能不通過驗證嘛)。

忘了說了,這個抓包是非常全面的,就是可以抓到你請求的引數,返回值都可以看的非常的清楚。

客戶端為了解決這個問題,最好的方式其實就是內嵌證書,比對一下這個證書到底是不是自己真正的「服務端」發來的,而不是中間被替換了。下面就介紹一下解決的步驟吧:

1.問運維要到介面站點的證書(即當初證書機構簽完的那個放到nginx裡的公鑰證書),放到工程裡面就可以,af會自動去查詢

2.afnetworking設定以下**

afsecuritypolicy * policy =[afsecuritypolicy policywithpinningmode:afsslpinningmodecertificate];

_manager.securitypolicy = policy;

af的安全策略會自動的在bundle裡面查詢公鑰證書,建立https的時候進行比對。不一樣直接就失敗了。

ps:順帶介紹一下af的afsslpinningmode的三個級別

afsslpinningmodenone: (預設級別),客戶端無條件信任任何下發的公鑰證書

afsslpinningmodepublickey: 客戶端本地去驗證服務端下發的公鑰證書的 public keys部分。如果正確才通過

afsslpinningmodecertificate: 客戶端本地去驗證服務端下發的公鑰證書的所有部分。如果正確才通過

這樣做了之後,就可以即使手機上安裝了抓包工具的ca,抓包工具也不能抓到包了。因為你的客戶端在驗證「服務端」下發的公鑰證書的真偽的時候就不會通過「中間人」下發的公鑰證書,也就不會建立起來https的連線了。

---------------第一次更新分割線--------------

今天上午的時候突然又想到了乙個方式,那就是工程打包進去證書機構的ca,強制使用這個ca去驗證證書。這樣就可以不必使用公鑰證書的驗證方式了。

但是我還沒有親自實驗這個。

理論上來說這種方式可能有以下優點:

1.移動應用的分發不是實時的,一般申請的公鑰證書都是1到3年的有效期,快到期的時候可能要在工程裡面同時內建兩個公鑰證書。

2.有的情況下,伺服器或者其它的伺服器可能使用的網域名稱是不一樣的,並且這些不同的網域名稱使用的不是同乙個公鑰證書,這樣也會有同時內建多個公鑰證書。如果此時再遇上第一點的情況可能公鑰證書的數量要翻倍了。

3.一般公司大多數情況下可能有很多的網域名稱,但是一般申請證書的時候都去同乙個證書機構申請了,這樣只需要內建乙個這個證書機構的ca就可以了。

4.證書機構的ca有效期一般都好幾十年,有點一勞永逸的傾向。(主要還是懶~~~~~~)

App防止被抓包

1.使用https,可以初步防止一些只抓http包的軟體。2.如果網路框架使用的是okhttp,可以在builder中設定proxy proxy.no proxy 屬性,禁止使用 這樣一般使用中間人的 就使用不了,客戶端是直接訪問伺服器。3.判斷是否使用了 final boolean flag bu...

Fiddle用於移動端抓包

2 除錯本地移動端頁面的測試頁面效果是否有問題。如 頁面的樣式 js 結構等。a 安裝獵豹免費wif,弄乙個本地的wifi b 安裝fiddler,用於抓包 c 手機連線該wifi,設定 配置如下 箭頭所示要相等!埠號要設成8080!完成,如果需要https協議的請完成下面一步 1 安裝fiddle...

AF 配置https證書,防止被抓包

1.afsecuritypolicy customsecuritypolicy 需要伺服器提供乙個crt檔案 把.crt檔案 匯入 鑰匙串中,並匯出.cer證書 把.cer證書 放在 專案目錄下,並作如下操作。把第一段 放在你 網路請求的類中。順便 加上 在網上查到的資料 afsecuritypol...