iOS客戶端的安全問題

原文鏈接

總的來說,還是要看開發者比較在意哪方面的安全,才好考慮如何防護:

1、想要保證程序中的信息不被截取

幾乎是不可能的,因為即使再加密,密文也總要變成明文供業務邏輯來使用,攻擊者只要盯住這個點就能達到目標;

2、想保護服務器的資源

客戶端在相當程度上只是一個UI展現,即使被破解也不是那么重要的,真正重要的是服務器端的資源,那么就要在網絡層進行防護了。現在大家都比較喜歡用http,而且都集中喜歡使用AF、ASI等幾個開源庫,逆向者只要盯住這幾個口,就能把來往的request+response全部獲取,進而可以仿制一個客戶端,此時服務器的資源也就全面開放了。同樣的,使用AsyncSocket也是一回事。

此時有3種防護措施:

1)服務器控制,不允許同一IP/客戶端頻繁抓取數據;

2)對url加上token、timestamp,甚至url編碼,雖然碰上高手還是不能100%安全,但是破解者想要達到目的,就需要考慮付出的精力是不是值得了;

3)傳輸數據加密,并且將加解密的代碼層級加深,尤其是放到C或block函數中,這樣又將安全等級提高了一級。

3、想保護程序不被偽造或克隆

克隆/偽造其實是件非常容易的事,甚至都不需要太多逆向工作,只要能把網絡請求搞定,剩下的就是代碼量、以及是否比被仿者做的更好的問題了。

總的來說,客戶端沒太多可保護的空間,它應該就是個業務展現和數據解析的工具,與其花精力想防這個防那個,不如把精力放在網絡接口的保護上,尤其是加解密代碼提取到C或block中。

以上只是筆者個人的一些經驗,希望大家能多多補充。

附:微信的安全防護措施,筆者認為是比較值得學習的,他們的步驟是:

1、不在業務表現上做太多無用功

除了代碼結構比較龐大之外,微信沒有做特別的動作;

2、服務器控制

所有的決斷性的動作由服務器控制,幾乎不可能靠通過篡改客戶端的代碼來獲取更大的權限。筆者曾經針對每天20個漂流瓶的限制嘗試擴大權限,但是即使把本地代碼邏輯放開,在超過20個瓶子之后,再撈回來的永遠是海星,顯然是服務器控制住了。

當然,本地LBS坐標是無法被服務器控制的,這也就是坐標穿越插件能起作用的根本原因。

3、網絡數據加密

通過對網絡接口的攔截,雖然能得到socket收取的二進制數據,首先是無法直接解密,其次是從那許多代碼中找解密代碼非常費勁,縱然加解密都能搞定,想偽造也十分麻煩,packet中包羅了相當多的信息,我估計就是把他們的代碼開放給開發者,想理清這一部分都不是一件輕松的事情。

4、登錄唯一性

即使能夠偽造微信的請求,一旦登錄獲取數據,原賬號就會被踢下線并且得到通知,這本身就是一個安全警告,說起來也算是服務器控制。

如果開發者對于安全性的設計都能達到微信這一級別,安全級別就是比較值得信賴的了,但是這也不表示就解不出來,只要逆向者的水平達到熟練程度以上(自然是越高越好),并且愿意投入大量精力在某個他們認為值得的app上,幾乎都能攻的下來。

作者:Exia_L

鏈接:http://www.lxweimin.com/p/c3b41c3f6692

來源:簡書

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,969評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,446評論 25 708
  • 網絡安全是指網絡系統的硬件、軟件及其系統中的數據受到保護,不因偶然的或者惡意的原因而遭受到破壞、更改、泄露,系統連...
    不吃土豆的洋芋閱讀 3,261評論 0 42
  • 互聯網的通信安全,建立在SSL/TLS協議之上。 本文簡要介紹SSL/TLS協議的運行機制。文章的重點是設計思想和...
    拉肚閱讀 2,684評論 0 6
  • 夜茶色褪聞人語,紛亂五光侵澀眉。 淡墨隱約山頂樹,淺愁偶爾手中杯。 憑窗邀盡風相見,就火燃來煙自飛。 舊壁方寸懸寶...
    ChocOne閱讀 221評論 0 1