2012-02-22 77 views
2

請原諒我,如果這是一個明顯的問題或者是否有任何錯誤。我對Objective-C非常陌生,並且已經深陷其中。反編譯Objective-C預處理器語句

我正在研究Objective-C混淆。關於這個簡單的方法,我發現here是用戶預處理器將方法名稱更改爲亂碼。我的問題是反編譯器是否可以識別預處理器語句,以便它能夠將源反編譯回原始方法名稱。從上面提到的問題的例子如下:

#ifndef DEBUG 
#define MyClass aqwe 
#define myMethod oikl 
#endif 

@interface MyClass : NSObject { 
} 

- (void)myMethod; 

是否有可能,如果調試不編譯,這個代碼可以反編譯回以外的任何其他

@interface aqwe : NSObject { 
} 

- (void)oikl; 
+0

是的,你可以簡單地運行通過C預處理器的源文件,以獲取輸出(一旦你刪除了包含文件)。 – trojanfoe 2012-02-22 16:21:33

+0

@trojanfoe,所以我很清楚,如果編譯後的代碼部署時沒有包含源代碼(只是編譯後的二進制文件,當沒有編譯進行調試時),仍然有可能獲得原始源代碼? – ewok 2012-02-22 16:24:02

+0

我想我誤解了你的問題 - 我假設你想將源文件給予某人,但事實並非如此。 – trojanfoe 2012-02-22 16:34:37

回答

3

,你可以絕對 un-obfuscate那。預處理程序運行編譯得到的代碼的油膩的爪子之前,所以它就像您手動經歷了,取而代之的MyClass所有出現的aqwe

雖然,你應該問自己,爲什麼你想要做的這個。這只是混淆記住,而不是實際上保護你的代碼的任何東西。人們仍然可以看看每種方法所包含的代碼。你只是改變符號的名字。