反编译Objective-C预处理器语句

反编译Objective-C预处理器语句,objective-c,ios,obfuscation,Objective C,Ios,Obfuscation,如果这是一个明显的问题或有任何错误,请原谅我。我对Objective-C非常陌生,有点被扔到了最深处 我正在研究Objective-C混淆。我发现了一个简单的方法,就是使用预处理器将方法名更改为胡言乱语。我的问题是反编译器是否能够识别预处理器语句,从而能够将源代码反编译回原始方法名。上述问题的示例如下: #ifndef DEBUG #define MyClass aqwe #define myMethod oikl #endif @interface MyClass : NSObject {

如果这是一个明显的问题或有任何错误,请原谅我。我对Objective-C非常陌生,有点被扔到了最深处

我正在研究Objective-C混淆。我发现了一个简单的方法,就是使用预处理器将方法名更改为胡言乱语。我的问题是反编译器是否能够识别预处理器语句,从而能够将源代码反编译回原始方法名。上述问题的示例如下:

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

@interface MyClass : NSObject {
}

- (void)myMethod;
当没有编译以进行调试时,是否可能将此代码反编译回除

@interface aqwe : NSObject {
}

- (void)oikl;
你绝对无法解开这个谜团。预处理器在编译器对代码进行处理之前运行,因此就好像您手动检查并将所有出现的
MyClass
替换为
aqwe
,等等

不过,你应该问问自己为什么要这样做。记住,这只是混淆,而不是保护代码的任何内容。人们仍然可以看到每个方法所包含的代码。您只是在更改符号的名称。

您绝对无法消除混淆。预处理器在编译器对代码进行处理之前运行,因此就好像您手动检查并将所有出现的
MyClass
替换为
aqwe
,等等


不过,你应该问问自己为什么要这样做。记住,这只是混淆,而不是保护代码的任何内容。人们仍然可以看到每个方法所包含的代码。您只是在更改符号的名称。

如果您选择使用现有的众多模糊器中的一个,而不是尝试重新发明轮子,您将节省大量时间、痛苦和麻烦

看看这个帖子,你会发现很多有用的入门信息:


如果您选择使用现有的众多模糊器中的一个,而不是尝试重新发明轮子,您将节省大量时间、痛苦和麻烦

看看这个帖子,你会发现很多有用的入门信息:


是的,您只需通过C预处理器运行源文件即可获得输出(一旦去掉了包含文件)。@特洛伊木马因此我很清楚,如果编译后的代码部署时未包含源代码(未编译以进行调试时仅包含编译后的二进制文件)仍然有可能从中获取原始源代码?我想我误解了你的问题-我假设你想将源文件提供给某人,但事实并非如此。实际上,在分发源代码时,最常用的方法是考虑模糊处理。如果你想保护你的二进制文件,难道你就不能去除符号吗?是的,你可以简单地通过C预处理器运行源文件来获得输出(一旦你去除了包含文件)。@特洛伊木马所以我很清楚,如果编译的代码部署时没有包含源代码(未编译以进行调试时,仅编译的二进制文件)仍然有可能从中获取原始源代码?我想我误解了你的问题-我假设你想将源文件提供给某人,但事实并非如此。实际上,在分发源代码时,最常使用的是模糊处理。如果你想保护二进制文件,你就不能
剥离吗符号?