我想了解代码虚拟化概念。在研究时,我发现了 2 个用例:
a) 隐藏代码并避免知识提取
b) 避免操纵
用例 A 是合理的,因为 VM 是一个加重障碍。我的问题针对用例 B。
在我的示例中,如果虚拟化 IsUsageAllowed 为负,则程序将不会继续。
[Virtualize]
bool IsUsageAllowed()
{
return .... ;
}
void Main()
{
if (!IsUsageAllowed()) //detour call
return;
// do something
}
在外部操作的情况下,IsUsageAllowed()将是一个困难的目标,因为我们将不得不攻击函数的 VM。但这不是必需的,因为我们可以挂钩函数。为此,我们通过跳转指令将 IsUsageAllowed 的调用绕道到始终提供真实的东西。=保护被移除。
有没有更好的方法来使用虚拟化功能来避免这种情况?
先感谢您