我想了解代码虚拟化的概念。在研究过程中,我发现了两个用例:
a)隐藏代码并避免知识抽取
( b)避免操纵
用例A是可信的,因为VM是一个加重的障碍。我的问题是用例B。
在我的示例中,如果虚拟化的IsUsageAllowed是负的,程序将不会继续。
[Virtualize]
bool IsUsageAllowed()
{
return .... ;
}void Main()
{
if (!IsUsageAllowed()) //detour call
return;
// do something
}在外部操作的情况下,IsUsageAllowed()将是一个困难的目标,因为我们必须攻击函数的VM。但这不是必要的,因为我们可以连接函数。为此,我们绕开了IsUsageAllowed的调用,通过跳转指令实现了总是传递真理的东西。=解除保护。
是否有更好的方法来使用虚拟化函数来避免这种情况?
先谢谢你
发布于 2021-06-10 14:54:53
为了解决这个问题,虚拟化整个链:
[Virtualize]
bool IsUsageAllowed()
{
return .... ;
}
[Virtualize]
void Main()
{
if (!IsUsageAllowed()) //detour call
return;
// do something
}在特定的混淆器的情况下,它可能使用一个特殊的机制(又名int-call),它专门针对该场景,使整个链能够抵抗绕行。
Int-调用只是VM内部调用的一个短昵称。它允许避免CLR和VM域之间不必要的转换。
免责声明:我在Eazfuscator.NET混淆器上工作,它确实支持int-调用。
https://stackoverflow.com/questions/67908092
复制相似问题