我已经研究了很多,无论是在SO还是google-ing到处,但我似乎无法找到关于iPhone / iPad应用程序的代码混淆的直接答案目标C
我的问题是这些:
答案 0 :(得分:57)
Objective-C似乎没有代码混淆器。但我们暂时假设一个确实存在。
只要它没有崩溃,Apple可能不会拒绝混淆的应用程序。主要问题是:混淆的重点是什么?通常,您希望对代码进行模糊处理以保护您的知识,例如,如果您的程序使用复制保护,您希望使潜在的破解者更难,或者如果您使用某些高级算法,则不希望业务竞争对手成为能够反编译它。iOS上已经完成了复制保护。虽然通过越狱可以复制和运行普通应用程序,但我会说实际执行此操作的用户数量相当低(至少比PC和Mac等“普通”计算机低很多)。您是否认为盗版是一个需要混淆的大问题?
如果你确实有重要的知识要保护,那么混淆可能是值得的。混淆有其缺点:您无法再调试混淆的应用程序。崩溃报告将毫无用处。
您可能还想阅读文章Obfuscating Cocoa。
回到事实上似乎没有混淆器:你可以做的就是这个伎俩:说你有这样的标题:
@interface MyClass : NSObject {
}
- (void)myMethod;
你可以这样做一个廉价的混淆:
#ifndef DEBUG
#define MyClass aqwe
#define myMethod oikl
#endif
@interface MyClass : NSObject {
}
- (void)myMethod;
这样你仍然可以在源代码中使用有意义的符号,但编译器会在不编译调试时将其变为“垃圾”。
答案 1 :(得分:33)
答案 2 :(得分:13)
除了早先的答案之外,现在有几个第三方工具可以提供某种程度的混淆和完整性保护,包括: -
它们的功能各不相同,包括: -
所有这些工具都非常昂贵且并非没有问题,所以你真的需要一个需要高度完整性的应用程序才能考虑它们,例如:银行业或DRM非常重要的地方。
对于这些类型的应用程序,您还需要熟练的渗透测试人员,以确保您的应用程序不会以其他方式暴露,因为这些工具通常只能与使用它们的人一样好,并且还有其他操作系统漏洞需要缓解工具没有解决。
答案 3 :(得分:3)
应用程序的可执行文件已由Apple加密,并且应用程序沙箱的可执行代码段不可写,因此您无法执行需要对运行时臂代码进行修改的其他加密。 Objective C / C编译器的优化器传递已经创建了与原始源代码截然不同的东西。使用更多C和更少的Objective C将显示更少的函数名称,因为方法名称嵌入在可见纯文本中,但C函数名称不是。因此,任何商业机密类型代码都应该用普通的C编码,并且在优化器编译的情况下进行编译。您可以混淆应用程序包中嵌入的任何webKit Javascript或任何其他嵌入式VM代码(只要未下载解释的代码)。
答案 4 :(得分:-7)
可能不是因为Objective-C编译出处理器指令而不是被解释或编译成字节代码,因此反编译代码已经产生了相当模糊的结果。当您需要分发代码源(例如JavaScript等解释性语言)时,通常只需要进行模糊处理,以便即使您希望代码保密也可以运行。