天天看點

iOS馬甲包混淆方案怎麼做?

如何檢視競争對手馬甲包

首先,由于是從主APP上拉的分之進行開發,是以這個馬甲包的scheme和工程名都沒有變化,于是我們首先從這裡進行開刀。我們把project名稱完全換成了另一個。

API

首先base64加密API肯定不能再使用了,蘋果都說了,加密特征太過明顯。

幸好之前已經把所有自定義的API名稱都加上了ab_字首,使得我們寫腳本很好識别。我們将所有掃描出的API放到一個plist檔案中儲存在本地,然後我們建立了6個數組,每個數組中有6個單詞,每次從每個數組中随機抽取一個單詞。将6個單詞拼接成一段方法名儲存在另一個plist檔案中,當然,在儲存前,先去重,如果這個方法名已經用過了,那我們随機再換,這樣一共可以生成46656種方法名,對于我們的工程已經夠用了。

圖檔

我們利用腳本周遊本地所有png檔案,當然你可以自行添加.jpg格式周遊。根據自己的命名規則将所有圖檔重新命名了一波。另外我們也發現網上有個輪子可以利用shell指令對所有圖檔資源進行超輕量級的壓縮,在不影響圖檔品質的情況下,改變圖檔的hash值。當然我們的馬甲包中圖檔沒有和主界面相似的,是以的這一步我們沒有實踐。

類字首替換

這一步主要是更改檔案名。程式掃描絕對位址下的所有檔案,隻要是帶”XX”開頭的檔案都替換成”AB”這種,另外每次替換一個檔案都要周遊所有檔案,将所有用到這個頭檔案的檔案内容進行更換。

注意

類字首替換有時會有個别沒有替換到,我沒能定位到問題,但很少,可以手動查找替換

生成垃圾代碼

我用plist專門搞了一個垃圾方法名,每四個方法生成一個帶參數名的方法。暫時每個檔案裡隻生成一個垃圾方法。當然可以多運作幾次,就會生成幾個垃圾方法

實作

混淆工程我們使用C+OC的混合程式設計方式。

目前已經實作的功能有:

1、圖檔資源修改名字

2、修改工程名

3、類字首修改,如“GD”修改為“IE”,即修改了檔案名

4、混淆随機添加垃圾代碼、參數

5、修改方法名字首

6、人工修改部分方法名,人工對重要類中的方法進行打亂排序

7、(可選)本地圖檔超輕量級壓縮,打亂hash值,新上的馬甲包建議修改

使用方法

啟動參數配置

先配置啟動參數再運作,如圖

除第一項必選外其他都非必選。另外第一項啟動參數必須放在第一行

參數解釋

1.工程代碼的絕對路徑

2.-modifyProjectName [原工程名]>[新工程名]

3.-modifyClassNamePrefix [xcodeproj檔案的絕對路徑,不是pod安裝後的那個打開檔案] [舊類字首]>[新類字首]

4.-spamCodeOut

5.-ignoreDirNames [需要忽略的檔案夾],[需要忽略的檔案夾] 注意,Pods檔案夾不在混淆範圍内,不需要寫

6.-handleXcassets (混淆圖檔檔案)

7.-deleteComments (删除多餘的空格和注釋)

8.-chageAPIPrefix [舊方法名字首]>[新方法名字首] 注意,字首要有“”才能被識别,如果之前工程中沒有xx下劃線開頭來命名方法的,此項不要勾選

此工程可以選擇混淆機率,修改工程中kPercent數值。

實際測試如下