0x23 Objective-C代碼混淆

注:原文---念茜的博客

class-dump可以很方便的導(dǎo)出程序頭文件,不僅讓攻擊者了解了程序結(jié)構(gòu)方便逆向,還讓著急趕進度時寫出的欠完善的程序給同行留下笑柄。

所以,我們迫切的希望混淆自己的代碼。

混淆的常規(guī)思路

混淆分許多思路,比如:

1)花代碼花指令,即隨意往程序中加入迷惑人的代碼指令

2)易讀字符替換

等等

防止class-dump出可讀信息的有效辦法是易讀字符替換。

Objective-C的方法名混淆

混淆的時機

我們希望在開發(fā)時一直保留清晰可讀的程序代碼,方便自己。

同時,希望編譯出來的二進制包含亂七八糟的混淆后的程序代碼,惡心他人。

因此,我們可以在Build Phrase 中設(shè)定在編譯之前進行方法名的字符串替換。

混淆的方法

方法名混淆其實就是字符串替換,有2個方法可以,一個是#define,一個是利用tops。

利用#define的方法有一個好處,就是可以把混淆結(jié)果合并在一個.h中,在工程Prefix.pch的最前面#import這個.h。不導(dǎo)入也可以編譯、導(dǎo)入則實現(xiàn)混淆。

單段的selector,如func: ,可以通過#define func 來實現(xiàn)字符串替換。

多段的selector,如a:b:c: ,可以通過分別#define a 、b、c 來實現(xiàn)字符串替換。

我的混淆工具

我寫了個簡易的混淆腳本,主要思路是把敏感方法名集中寫在一個名叫func.list的文件中,逐一#define成隨機字符,追加寫入.h。

腳本如下:

操作步驟

1.將混淆腳本confuse.sh放到工程目錄下

mv confuse.sh your_proj_path/

2.修改Prefix.pch

打開Xcode,修改XXX-Prefix.ch ,添加混淆頭文件:

3.配置Build Phase

在工程Build Phase中添加執(zhí)行腳本操作,執(zhí)行confuse.sh腳本,如圖:

4.創(chuàng)建函數(shù)名列表func.list,寫入待混淆的函數(shù)名,如:

-(void)sample;

-(void)seg1:(NSString *)string seg2:(NSUInteger)num;

就這樣寫:

sample

seg1

seg2

并將文件放置于與confuse.sh腳本同級

mv func.list your_proj_path/

5.編譯查看結(jié)果

直接build,混淆腳本會在編譯前運行,進行字符隨機替換,并且每次build的隨機字符不同,如圖:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • class-dump 可以很方便的導(dǎo)出程序頭文件,不僅讓攻擊者了解了程序結(jié)構(gòu)方便逆向,還讓著急趕進度時寫出的欠完善...
    無灃閱讀 660評論 1 0
  • ??本文內(nèi)容 一)為什么要進行代碼混淆 二)代碼混淆的兩種方法(①宏替換 ②腳本實現(xiàn)替換)本文github地址,敬請...
    wg689閱讀 5,403評論 17 65
  • 前言 什么!我們的代碼拿去安全掃描啦?什么!還掃描出來問題啦?什么!源碼都別看到啦? 居于上一篇文章iOS簡單逆向...
    甘邦閱讀 18,271評論 24 40
  • 前言: 在iOS移動端開發(fā)中很多時候在考慮安全問題的時候只是單純的請求體加密,但是在一個用戶量級很大的App上就會...
    退役程序猿閱讀 6,328評論 2 17
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139

友情鏈接更多精彩內(nèi)容