iOS app可以“有條件”地被反編譯
脫掉App Store給“二級制文件”穿上的外衣
如何利用工具去反編譯
在感興趣的地方生成偽代碼
如何預防反編譯
首先,告訴大家一個不幸的消息,上架至App Store的app诊赊,被apple加密了。所以標題才是“有條件”才能進行反編譯棚潦,令人欣喜的是,在debug下產(chǎn)生的ipa或者是release下的ipa包或者是渠道包(各種應(yīng)用市場能下的ipa包)都能直接反編譯乱灵。
當然硫朦,引言已經(jīng)說了溯饵,道高一尺魔高一丈侵俗,就算是被apple加密的ipa,其實也是可以反編譯的丰刊,只不過相對麻煩罷了隘谣。
來來來,給你們幾個工具啄巧,就可以解掉apple的加密了寻歧。
clutch
dumpdecrypted
gdb
AppCrackr
由于AppCrackr被很多開發(fā)者吐槽,這個傻瓜式的解密會嚴重導致盜版泛濫秩仆,所以這個工具已經(jīng)很不好用了码泛。
這里就不展示demo了,感覺如果把App Store上的東西反編譯出來發(fā)到網(wǎng)上去澄耍,我感覺我的程序員生涯可能就要到頭了弟晚。
這里會介紹兩個工具class-dump和Hopper Disassembler忘衍。
首先逾苫,先擼一個最簡單的app來做小白鼠卿城。下載地址(包含二進制文件&dump結(jié)果)
看圖,就是這樣铅搓,我只改了ViewController這個類瑟押。
由代碼可以看出,我就寫了兩個方法testClassDump和testHideClassDump星掰,后者沒有聲明在.h中(ps:我想試驗這樣能不能被反編譯到)多望。
ok,前戲都做完了氢烘,可以開始干活了怀偷。
我們run一下工程,然后打開Products文件夾下的DecompilingTest.app所在目錄播玖,顯示包內(nèi)容椎工,拿到二進制文件
然后我是復制到桌面,然后執(zhí)行下述命令蜀踏,即可拿到工程中的.h文件维蒙。
OK,得到下述結(jié)果果覆,我們看看拿到的ViewController.h里面颅痊,能拿到什么方法
事實證明,沒有聲明的方法也被dump出來了局待。
下一步我們要做的就是看看能不能拿到這兩個方法的具體實現(xiàn)了斑响,接下來我們用Hopper Disassembler來試試。
Hopper Disassembler的用法很簡單钳榨,只要將二進制文件拖進去就行了舰罚。看看拖進去之后的結(jié)果重绷。
此時心中一萬頭草泥馬飛奔而過沸停,what’s the fk!昭卓!一堆匯編語言寶寶看不懂啊愤钾。(當然那個ret應(yīng)該是return的意思我猜)
Don’t worry!點右上角的if(b)f(x);按鈕候醒,我們能看到這個方法的偽代碼能颁,大部分的時候我們能從偽代碼中看出我們需要的信息。
結(jié)果如下:
至此倒淫,兩個方法都被反編譯出來了;锞铡!
這里需要注意,就算方法沒有聲明在.h中镜硕,也能被dump运翼,之后就能被反編譯了。
如何預防反編譯
說了這么多兴枯,我們預防呢血淌,是不是需要像Java的一樣加上各種復雜的混淆呢。
其實我覺得大可不必财剖,本身反編譯成本就很大悠夯,代碼這么多,一個個反編譯過來是在蛋疼躺坟,就算有偽代碼也需要理解沦补,而且有些代碼就算有偽代碼也很難理解。
只要做好核心代碼咪橙,做好混淆就行了夕膀,比如涉及到密碼,核心算法匣摘。
總結(jié):
沒有絕對安全的系統(tǒng)店诗,也沒有黑客破不掉的系統(tǒng),所有需要的只是時間而已音榜。