混淆代碼是為了防止別人反編譯代碼之后,根據函數(shù)名或者變量名來窺探你的app,從而了解app的內部實現(xiàn)。
在代碼混淆之前,使用class-dump進行逆向,可以看出逆向出了所有的屬性和方法,如圖:

混淆的原理
這里使用的混淆的原理是,用一串隨機生成的字符串來替換相應的函數(shù)名和變量名
如何實現(xiàn)混淆?
以下混淆方式通用于OC和swift,純OC的項目可以使用已經封裝好的ios-class-guard https://github.com/Polidea/ios-class-guard
第一步:在相應的項目工程下新建一個confuse.sh 和 func.list文件
$ cd?/Users/cafei/Desktop/SwiftTest?
$?touch confuse.sh
$?touch func.list
第二步:將新建的兩個文件拖到項目工程中

第三步:將以下腳本拷貝到剛新建的confuse.sh文件中
(此腳本源頭來源于https://blog.csdn.net/yiyaaixuexi/article/details/29201699)
以下是代碼截圖,復制黏貼confuse.sh文本請見http://m.itdecent.cn/writer#/notebooks/13159521/notes/31357519

以上是代碼截圖,復制黏貼confuse.sh文本請見http://m.itdecent.cn/writer#/notebooks/13159521/notes/31357519
第四步:新建一個.pch文件并添加相應的配置(如果項目中已經存在pch文件則不需要再新建,直接使用即可)


第五步:添加Run Script,并寫入腳本?$PROJECT_DIR/confuse.sh

第六步:給confuse.sh文件添加權限
$ cd?/Users/cafei/Desktop/SwiftTest?
$?chmod 755 confuse.sh
此時build項目工程,如果報錯"CodeObfuscation.h" file not found
解決方案:
(1)將pch文件中剛添加的頭文件注釋掉,如圖

(2)再次build項目工程,發(fā)現(xiàn)可以編譯成功了
(3)將pch文件中剛注釋掉的頭文件再打開,再次build,就可以編譯成功了
第五步:在func.plist文件中配置需要混淆的函數(shù)名和變量名
假設我現(xiàn)在需要混淆LoginViewController文件中的部分函數(shù)名和變量名,如圖配置即可


第六步:編譯項目工程看混淆結果

如上圖所示,混淆成功,函數(shù)名和變量名都已經變成了隨機生成的字符串,并且在symbols中可以查找到兩者之間的對應關系,方便后續(xù)查找bug等
二次更新:如何查看symbols中的內容
$ cd /Users/cafei/Desktop/SwiftTest
$ sqlite3 symbols.sqlite3
$?.databases
$?select * from symbols;
這時混淆前后的函數(shù)名和變量名對應關系就出現(xiàn)在你眼前啦
