0

我正在处理一些代码,我有 2 个选项:

要么:使用方法

[对象 doSomethingWithOffset:0x12345];

或者:使用函数doSomething(0x12345);

因为我正在处理实际上没有人应该看到的偏移量,所以我需要对它们进行混淆。使用__attribute__((visibility("hidden")))我可以隐藏方法/函数的名称。

但是在反汇编二进制输出文件时,您会看到如下内容:

LDR     R2, =0xOFFSET
LDR     R3, =0xDATA

因此可以找到我作为 PARAMETER 放置的偏移量。

有没有一种方便的方法来隐藏函数/方法调用的参数?

感谢您的帮助。

杰克

4

2 回答 2

0

我不确定我是否理解您为什么认为这是必要的;“隐藏”您不想被普遍访问的方法的正常方法是使它们成为类私有的(在 Objective-C 中,这意味着不在接口中声明原型并且方法仅存在于实现中)。试图隐藏或混淆方法调用本身只会让任何未来的调试器(可能包括你自己;即使这是一个个人项目,不要认为你不必担心未来的可维护性)的事情变得更加困难。

话虽如此,您可能可以使用一些 LLVM IR 转换来进行一些混淆,但我仍然不推荐它,因为它可能会导致代码效率降低,因为编译器更难优化(或者编译器无论如何都会优化混淆)。

于 2013-06-10T12:53:43.383 回答
0

如果您试图向有人反汇编您的代码隐藏一些东西,那么您不能。您可以将事情混淆到足以让那个人感到困惑的程度,但这并不是真正的安全性。

如果你确实选择了混淆,最好的办法是把你的方法用一个虚假的名字嵌入到一堆其他名称相似的方法中,这些方法完全有用和必要但无聊的事情。

如果“那个人”知道正在传递的方法调用是什么,那么隐藏数据真的没有什么好方法。您可以使用操作组合“构建”这个秘密值,但如果它看起来不适合应用程序,那么它实际上可能会引起注意。

(但是,如果我要尝试隐藏这样的计算,我可能会尝试使其看起来像 GUI 中的偏移量计算,并将其隐藏在真正的此类计算中。甚至可能将值的一部分存储为偏移量一个隐藏的标签或类似的东西。)

于 2013-09-24T20:13:52.633 回答