【发布时间】:2013-06-18 00:21:57
【问题描述】:
我不确定术语是否正确,您可以使用哪些代码实践来使某人难以修改二进制/程序集以绕过检查:
例如在源代码中。
bool verificationResult = verify();
if (verificationResult){
allow_Something();
}else{
prevent_Something();
}
如果查看上述代码的反汇编版本的人可以修改'jump opcodes(?)'以运行allow_Something,即使验证结果为假。
这里有类似的内容 http://www.codeproject.com/Articles/18961/Tamper-Aware-and-Self-Healing-Code#pre0
注意,我正在 C++ 中创建二进制文件,以便在 Android 上通过 NDK 使用它。
【问题讨论】:
-
如果您使用了一些确定性的通用/通用代码最佳实践,那么它可能很容易被检测和击败,并且总是调用 allow_something()
-
您能否详细说明什么是“确定性通用/通用代码最佳实践”?
-
您可以在加载前检查
.so库的加密哈希值。但是接下来要比较什么值,是否可以保证该值的安全成为下一个问题。 -
这只是一个题外话:为什么不将您的程序或许可证数据放在应用程序服务器上并对其进行检查?
-
Vasily - 购买服务器和为其创建应用程序的开销太大。我只是想知道是否有编码技术使修改跳转代码变得困难。我已经搜索了互联网,但没有找到。
标签: android android-ndk disassembly patch