iOS應用加固為什麼也那麼重要?

網易易盾發表於2019-11-08

​​一、iOS的安全問題


世所公認,iOS系統安全性非常高,很少出現漏洞,幾乎不會中毒的情況。然而隨著各種iOS安全隱患的頻頻出現,人們逐漸認識到,iOS跟Android一樣也面臨嚴重的安全問題。蘋果宣稱所有的iPhone都很安全,不會被惡意軟體攻擊,其實這只不過蘋果封閉式的系統管理能夠及時處理漏洞罷了。

我們已經習慣,每個新的iOS系統出來沒多久,就會有大牛找到越獄的方法。比較有名的越獄團隊如iH8Sn0w、Geohot、Comex等,以及國內的盤古團隊。就像最新iOS 10.1.1版本,剛出來一個星期,安全研究員Luca Todesco就在推特上曬圖自曝越獄成功,iH8Sn0w和盤古團隊也取得了不錯的進展。只要越獄了,iPhone手機就處於完全裸奔狀態,很多平時不能做的事情就可以做了,比如破解分析APP、大範圍洩露使用者隱私資料等。

其中,跟我們iOS開發者息息相關的問題,主要就是被破解、分析。APP被破解分析進而刷單作弊,或者APP被山寨以次充好等。APP一直以來存在的“山寨”現象,引起越來越多開發者的不滿,山寨氾濫的後果將是劣幣驅逐良幣,打擊創新者的積極性,造成惡性迴圈。

下面舉幾個例子:

1.山寨APP

iOS應用加固為什麼也那麼重要?

比如上面的《神廟逃亡》應用,左邊是合法的,右邊是山寨的,山寨的APP就把圖示的背景色以及區域性做了一些修改,看起來和正品是如此的相似。

2.微信多開

iOS應用加固為什麼也那麼重要?

這類APP在淘寶上都有銷售。正常情況,一個手機只能有一個微信賬號線上,但是微信分身版讓使用者可以在同一個手機上同時登入多個微訊號,這樣可以滿足一些使用者的不同需求,比如進行公眾號營銷、用不同的微訊號聯絡不同的人等。同時這些破解後的微信還有一鍵轉發小視訊、一鍵評論、一鍵點贊等強大的功能。

3.自動搶紅包


下面是一款紅包神器的執行頁面:


iOS應用加固為什麼也那麼重要?

開啟這款神器後再登入微信,如果微信群裡有人發出紅包,它就會第一時間幫你搶到紅包了,從此“發家致富,迎娶白富美,走上人生巔峰”,哈哈!

4.遊戲外掛

遊戲外掛是指通過修改遊戲資料,為玩家謀取利益的作弊程式或軟體。它利用一定技術針對App進行非原設操作,篡改遊戲原本正常的設定和規則,大幅增強遊戲角色的技能和超越常規的能力,從而達到輕鬆獲取勝利、獎勵和快感的好處。它會嚴重影響遊戲平衡性,損害玩家以及產品的利益。

比如常見的一些遊戲輔助:遊戲蜂窩、觸動精靈、觸控精靈等。

iOS應用加固為什麼也那麼重要?

iOS同樣也存在雲真機,跟Android中一樣,可以在雲端玩遊戲。這時使用外掛、輔助就更方便了。

iOS應用加固為什麼也那麼重要?

另外就是一些修改器、加速器,這些危害比較大。比如常見的有八門神器、IGG、GameGem、DLGMemor等修改器;燒餅、Speed Intensifier、xx等加速器。

iOS應用加固為什麼也那麼重要?

GameGemiOS直接修改遊戲中的資料,比如攻擊力、血量等。

iOS應用加固為什麼也那麼重要?

Speed Intensifier可以直接選擇不同的加速倍速,換來全新的遊戲體驗。

下面是一個遊戲中的一個外掛,功能是:全域性全屏攻擊,並且攻擊力超高,相當於秒殺。

iOS應用加固為什麼也那麼重要?

外掛效果如下:滿屏都是攻擊球,輕鬆13殺。

iOS應用加固為什麼也那麼重要?


二、iOS保護方案


既然iOS應用也有那麼多的破解、外掛問題,那麼我們如何才能更好地保護我們的應用,確保安全呢?

從逆向分析來看,我們可以從以下幾個方面來保護我們的APP:

1.字串混淆:對應用程式中使用到的字串進行加密,保證原始碼被逆向後不能看出字串的直觀含義。
2.類名、方法名混淆:對應用程式的方法名和方法體進行混淆,保證原始碼被逆向後很難明白它的真正功能。
3.程式結構混淆加密:對應用程式邏輯結構進行打亂混排,保證原始碼可讀性降到最低。
4.完整性校驗:防止出現盜版的情形
5.反除錯、反注入等一些主動保護策略:這是一些主動保護策略,增大破解者除錯、分析APP的門檻。

下面我們來一一解讀:

2.1 字串加密

字串會暴露APP的很多關鍵資訊,攻擊者可以根據介面顯示的字串,快速找到相關邏輯的處理函式,從而進行分析破解。加密字串可以增加攻擊者閱讀程式碼的難度以及根據字串靜態搜尋的難度。如下:

iOS應用加固為什麼也那麼重要?


2.2 符號混淆

符號混淆的中心思想是將類名、方法名、變數名替換為無意義符號,提高應用安全性;防止敏感符號被class-dump工具提取,防止IDA Pro等工具反編譯後分析業務程式碼。
比如一款混淆後的APP,用IDA等工具開啟,如下圖所示:

iOS應用加固為什麼也那麼重要?

“Labels”欄裡,顯示的這些符號,不管是類名還是方法名,誰也看不出來到底什麼意思,這個函式到底是什麼功能,就有點丈二和尚摸不著頭腦的感覺,這就大大增加了破解者分析APP的難度。

2.3 程式碼邏輯混淆

程式碼邏輯混淆有以下幾個方面的含義:
1、對方法體進行混淆,保證原始碼被逆向後該部分的程式碼有很大的迷惑性,因為有一些垃圾程式碼的存在;

2、對應用程式邏輯結構進行打亂混排,保證原始碼可讀性降到最低,這很容易把破解者帶到溝裡去;

3、它擁有和原始的程式碼一樣的功能,這是最最關鍵的。


混淆前後的對比如下(左邊是原始結構,右邊是混淆後的結構):


iOS應用加固為什麼也那麼重要?


2.4 URL編碼加密
對程式中出現的URL進行編碼加密,防止URL被靜態分析。
2.5 網路傳輸資料加密
對客戶端傳輸資料提供加密方案,防止通過網路介面的攔截獲取資料。
2.6 完整性校驗
對App的完整性做校驗,防止盜版應用的泛濫。
2.7 主動保護策略
除了上面的一些被動保護方法,我們還可以加入一些主動的防護機制,比如反除錯、反注入、反hook、反tweak等。
2.8 防禦外掛
通過技術手段,打擊外掛,給大家建立一個和諧的遊戲環境。


三、結束語


總之,新增以上的一些保護措施後,iOS應用的安全性會獲得很大的增強,大大提高了破解者破解的難度。對於iOS開發者來說,有必要了解這些措施,特別是針對一些金融、證券、遊戲類APP的開發,保護方面的需求就更加必要。


點選免費體驗網易易盾iOS加固服務,更好地保護您的iOS應用。​​​​

相關文章