1、 加殼板熊;
2框全、 砸殼;
3干签、IOS逆向常見的砸殼工具津辩;
1、 加殼;
? ? ? ? 1.1 概念:?利用特殊的算法喘沿,對可執(zhí)行文件的編碼進行改變(比如壓縮闸度、加密),以達到保護程序代碼的目蚜印; IOS系統(tǒng)的APP由App Store進行加殼操作莺禁。
2、 砸殼晒哄;
? ? ? ? 2.1?摘掉殼程序睁宰,將未加密的可執(zhí)行文件還原出來(有些人也稱為“砸殼”);
? ? ? ? 2.2?脫殼主要有2種方法:
? ? ? ? ? ? ① 硬脫殼:通過第三方工具寝凌、直接將程序的“殼”摘除柒傻;IOS逆向采用了“硬脫殼”方式。
????????????② 動態(tài)脫殼:將程序運行到內存中较木,再出內存中導出可執(zhí)行文件红符。
3、IOS逆向常見的砸殼工具伐债;
? ? ? ? 3.1 判斷一個APP可以執(zhí)行文件是否加殼:
? ? ? ? ? ? ① 這里使用了MJ大大寫的一個命令行工具“MJAPPTools”预侯,列舉出當前手機上所有加殼的APP:
? ? ? ? ? ? ② 可以通過MachO工具,查看Load?Commands?->?LC_ENCRYPTION_INFO?->?Crypt?ID的值峰锁,0代表未加密萎馅;
? ? ? ? ? ? ③ 也可以通過otool命令行也可以:otool?-l?可執(zhí)行文件路徑?|?grep?crypt。
????????3.2 使用caluth工具進行脫殼操作:
? ? ? ? ? ? ① 下載caluth文件并拷貝到iPhone的/usr/bin目錄下:
? ? ? ? ? ? ②?如果在iPhone上執(zhí)行Clutch指令虹蒋,權限不夠糜芳,賦予“可執(zhí)行的權限”:
? ? ? ? ? ? ③?列出已安裝的APP:Clutch?-i
? ? ? ? ? ? ④?輸入APP序號或者Bundle?Id進行脫殼操作:Clutch?-d?APP序號或BundleId:
? ? ? ? ? ? ⑤?脫殼成功后會生成一個ipa文件、可以在終端看到起對應的ipa存放路徑:
????????3.3 使用dumpdecrypted工具進行脫殼操作:
? ? ? ? ? ? ①?下載源代碼魄衅,然后在源代碼目錄執(zhí)行make指令進行編譯峭竣,獲得dylib動態(tài)庫文件;
? ? ? ? ? ? ②?將dylib文件拷貝到iPhone上(如果是root用戶晃虫,建議放/var/root目錄):
? ? ? ? ? ? ?③?終端進入dylib所在的目錄皆撩,?使用環(huán)境變量DYLD_INSERT_LIBRARIES將dylib注入到需要脫殼的可執(zhí)行文件(可執(zhí)行文件路徑可以通過ps?-A查看獲取);
????????????DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib??可執(zhí)行文件路徑
? ? ? ? ? ? ?④?.decrypted文件就是脫殼后的可執(zhí)行文件:
(PS : 其中有部分章節(jié)是從前人的文章中搬運過來整理而成哲银,這些文章里已經對部分知識點解釋的很清楚明了了扛吞,我也沒有更好的表達方式,所以站在巨人的肩膀上荆责,我只是一個整理者加了部分自己的理解喻粹。)