iOS開發-代碼混淆
iOS表面上看來是比android安全的多的,在網路上針對android的加密保護也比iOS多得多,但是這並不意味著iOS就是很安全的,如果在正常的設備上還好,但是在越獄的設備上,我們的代碼信息就會暴露的一乾二淨,不僅可以被別人看到我們的方法是如何調用的,就連我們那些寫的很垃圾的代碼也會被人看的一清二楚,想想就是很丟人的事情。
我這個菜雞對iOS安全了解的也並不是很多,這篇文章也就僅根據念茜女神的博客對iOS中的代碼混淆做一些初步的處理,如果你是稍微知道一點點iOS安全的東西,這時候就可以cmd+w拜拜了。
好了,開始正文。
class-dump
This is a command-line utility for examining the Objective-C runtime information stored in Mach-O files. It generates declarations for the classes, categories and protocols. This is the same information provided by using 『otool -ov』, but presented as normal Objective-C declarations, so it is much more compact and readable.
以上是class-dump的簡介,他可以利用OC的runtime屬性,把存儲在mach-O文件中的@interface和@protocol信息提取出來,並生成對應的.h文件。說白了他就是可以把你的代碼中.h頭文件里的所有方法和參數挖掘出來,那他具體要怎麼樣來使用呢?
下載安裝包
首先是下載地址,我下載的是3.5.dmg的版本。
然後打開終端輸入:open /usr/local/bin。
然後把dmg文件中的class-dump文件複製到剛剛打開的文件夾中。
然後修改許可權在終端輸入:sudo chmod 777 /usr/local/bin/class-dump。
到此為止就完成了class-dump的安裝,具體的使用方法可以使用class-dump --help查看。
使用方法
首先我們要獲取到我們要解析的.app文件,這裡需要注意一點,直接從App Store下載下來的應用是沒辦法解析的,因為蘋果對他們進行了一層加密,需要砸殼之後才能解析。
這裡我們就直接用Demo中打包出來的ipa進行示例。
首先修改ipa文件的後綴為.zip;
然後解壓.zip文件,解壓出Payload文件夾,這裡邊的.app文件就是我們需要的目標文件;
在終端使用命令class-dump -H[.app文件路徑] -o [輸出文件夾路徑];就會生成我們需要解析的文件中的.h文件了。
可以看到我們在代碼里寫的方法名,參數名都被解析出來了。
真的是很可怕,有了這些方法名,壞人們就很容易利用他們來做壞事了。那接下來我們就來看看怎麼樣進行代碼混淆,讓我們的代碼不是那麼容易被解析出來吧。
代碼混淆
創建準備文件
這裡生成混淆代碼的方法我們通過shell腳本來實現,同時我們需要一個文檔來寫入我們需要進行混淆的方法名或是變數名。
打開終端,cd到文件所在目錄,使用
然後將這兩個文件加入到項目中。
寫入shell腳本
接下來我們在confuse.sh中寫入腳本
添加run script命令
接下來打開Targets -> Bulid Phases -> + -> New Run Script Phase
然後添加$PROJECT_DIR/ConfusionDemo/confuse.sh,讓應用每次啟動時去跑一下我們的腳本。
給腳本授權
接下來還是在我們項目的文件夾下,給我們的腳本賦予最高許可權
這裡有人說用 755 ,但是用755好像還是不行,乾脆給最高許可權,用777。
添加預編譯文件PCH
接下來再添加一個PCH文件,實現整個項目的替換。
然後配置一下PCH文件。
添加$PROJECT_DIR/ConfusionDemo/PrefixHeader.pch
生成CodeObfuscation.h文件
這時候我們編譯一下代碼,會發現項目中多出了一個CodeObfuscation.h文件。這個文件就是替換方法名的文件,我們在PCH文件中引入他。
在func中添加準備替換的方法名
ok,到了最後一步了,這時候我們只需要打開func.list文件,寫入我們想要混淆的方法名。就大功告成了。
結果
OK,該做的已經做完了,接下來我們再打一個包,看一下結果。
編譯之後我們就可以看到,CodeObfuscation.h文件中就發生了變化。
可以看到,原來的代碼都變成了一些亂七八糟的代碼,混淆成功了。
最後
到此,今天的內容就基本結束了,這只是iOS安防的最基本最初級的工作,而且用的方法也是念茜女神很久以前提出的一個方案。並且這裡有幾點需要注意!!!
不可以混淆iOS中的系統方法;
不可以混淆iOS中init等初始化方法;
不可以混淆xib的文件,會導致找不到對應文件;
不可以混淆storyboard中用到的類名;
混淆有風險,有可能會被App Store以2.1大禮包拒掉。
以上文章有什麼不對的地方還請大佬多多指教和批評。
參考文檔
作者:張囧瑞
鏈接:https://www.jianshu.com/p/864ce7dc9c25
TAG:Cocoa開發者社區 |