【发布时间】:2011-07-30 05:38:58
【问题描述】:
我已经研究了很多,包括 SO,以及到处搜索,但我似乎无法找到关于 iPhone/iPad 应用程序代码混淆的直截了当的答案Objective-C。
我的问题是:
- 有办法吗?如果有,怎么做?
- 值得吗?
- 当应用程序提交给他们时,Apple 是否允许这样做,或者有问题?
【问题讨论】:
标签: iphone ipad obfuscation store
我已经研究了很多,包括 SO,以及到处搜索,但我似乎无法找到关于 iPhone/iPad 应用程序代码混淆的直截了当的答案Objective-C。
我的问题是:
【问题讨论】:
标签: iphone ipad obfuscation store
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;
这样您仍然可以在源代码中使用有意义的符号,但编译器会在不编译调试时将其变成“垃圾”。
【讨论】:
myMethod 存在于多个类中,它可能会产生一些真正有趣的编译错误。这是一个聪明的主意,我喜欢它的简单性,但我无法想象它在任何实际系统中都值得。
【讨论】:
除了先前的答案之外,现在还有几个 3rd 方工具可以提供一定程度的混淆和完整性保护,包括:-
它们的功能各不相同,包括:-
所有这些工具都非常昂贵,而且并非没有问题,因此您确实需要一个需要高度完整性的应用程序才能考虑它们,例如银行业务或 DRM 非常重要的地方。
对于这些类型的应用,您还需要熟练的渗透测试人员来确保您的应用不会以其他方式暴露出来,因为这些工具通常与使用它们的人一样好,而且还有其他操作系统漏洞需要缓解工具没有解决的问题。
【讨论】:
应用程序的可执行文件已经被 Apple 加密,应用程序沙盒的可执行代码段不可写,因此您无法进行需要修改运行时 arm 代码的额外加密。 Objective C/C 编译器的优化器通道已经创建了与原始源代码非常不同的东西。使用更多的 C 和更少的 Objective C 将显示更少的函数名称,因为方法名称嵌入在可见的纯文本中,但 C 函数名称不是。因此,任何商业机密类型的代码都应该用纯 C 编码,并使用优化器一路向上编译。您可以混淆应用程序包中嵌入的任何 webKit Javascript,或任何其他嵌入式 VM 代码(只要未下载解释代码)。
【讨论】:
可能不是因为 Objective-C 编译为处理器指令而不是被解释或编译为字节码,所以反编译代码已经产生了相当模糊的结果。混淆通常只在您必须分发代码源时才需要,例如在 JavaScript 等解释型语言中,以便即使您希望代码保密也能运行。
【讨论】: