首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确使用虚拟化函数进行检查?(虚拟化代码,而不是虚拟访问器)

如何正确使用虚拟化函数进行检查?(虚拟化代码,而不是虚拟访问器)
EN

Stack Overflow用户
提问于 2021-06-09 16:23:13
回答 1查看 177关注 0票数 1

我想了解代码虚拟化的概念。在研究过程中,我发现了两个用例:

a)隐藏代码并避免知识抽取

( b)避免操纵

用例A是可信的,因为VM是一个加重的障碍。我的问题是用例B。

在我的示例中,如果虚拟化的IsUsageAllowed是负的,程序将不会继续。

代码语言:javascript
复制
[Virtualize]
bool IsUsageAllowed()
{
    return .... ;
}
代码语言:javascript
复制
void Main()
{
  if (!IsUsageAllowed()) //detour call
    return;
    
    // do something
}

在外部操作的情况下,IsUsageAllowed()将是一个困难的目标,因为我们必须攻击函数的VM。但这不是必要的,因为我们可以连接函数。为此,我们绕开了IsUsageAllowed的调用,通过跳转指令实现了总是传递真理的东西。=解除保护。

是否有更好的方法来使用虚拟化函数来避免这种情况?

先谢谢你

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-10 14:54:53

为了解决这个问题,虚拟化整个链:

代码语言:javascript
复制
[Virtualize]
bool IsUsageAllowed()
{
    return .... ;
}

[Virtualize]
void Main()
{
  if (!IsUsageAllowed()) //detour call
    return;
   
    // do something
}

在特定的混淆器的情况下,它可能使用一个特殊的机制(又名int-call),它专门针对该场景,使整个链能够抵抗绕行。

Int-调用只是VM内部调用的一个短昵称。它允许避免CLR和VM域之间不必要的转换。

免责声明:我在Eazfuscator.NET混淆器上工作,它确实支持int-调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67908092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档