我正在编写一个应用程序,出于安全考虑,我想混淆静态方法返回的值.调用静态方法的结果ClassA应该是a BOOL但是我想让攻击者尽可能地获得返回的真实值(即我不想返回一个BOOL,我想要返回一些垃圾)看起来很随机,但在某种程度上有意义).
// in ClassA
returnValue = [ClassB staticMethod];
BOOL actaulReturnValue = // some magic to de-obfuscate returnValue
Run Code Online (Sandbox Code Playgroud)
例如:返回1024位大多数随机垃圾,但某处是一个有意义的数字(每次可能是一个不同的位).
另一个例子:返回10个左右看似随机的数字,但如果那些10个数字出现在pi的前1000个数字中那么实际值是TRUE(接受10,000,000,000假阳性率中将有1的事实).
这是我能想到的两个例子,但我将它留给stackoverflow社区来帮助思考其他(可能更好)的方法.如果您还可以提供代码,则可获得奖励积分.
编辑:更难以逆向工程.如果我可以运行cycript并确定游戏结束的秘密.
编辑2:即使攻击者知道我如何模糊返回值,它仍然很难(如果不是不可能)找出实际值(这也是我的第二个例子的问题)
编辑3:我预先形成iOS应用程序的笔测试.我理解记忆中的任何东西都可以被阅读,因为我每天都会为客户做这件事.我也不是要暗示混淆和安全是一回事.话虽这么说,我试图找出一种方法来防止攻击者修补单个API调用始终返回FALSE.
谢谢!
我会诚实地对你说:不要打扰.原因如下:
在某些时候,您需要将未加密的值加载到内存中
假设你制作你的方法来模糊它的返回值 - 当你真正需要使用那个值时会发生什么?你将它解混并将其加载到存储在内存中的变量中.然后你的攻击者只需要检查那个内存位置,这个位置在越狱设备和一些额外的工具上是微不足道的.
你永远不会克服这个问题.做你想做的事绝对没有意义.你基本上注定要失败.如果你有兴趣让你的应用程序更安全,那么O'Reilly出版的一本很棒的书我觉得非常有用.