【问题标题】:How to use virtualized functions correctly for checks ? (virtualized code, not virtual accessor)如何正确使用虚拟化功能进行检查? (虚拟化代码,不是虚拟访问器)
【发布时间】:2021-06-09 16:23:13
【问题描述】:

我想了解代码虚拟化概念。 在研究过程中,我发现了 2 个用例:
a) 隐藏代码,避免知识抽取
b) 避免操纵

用例 A 是合理的,因为虚拟机是一个加重障碍。 我的问题针对用例 B。
在我的示例中,如果虚拟化 IsUsageAllowed 为负数,则程序将不会继续。

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

在外部操作的情况下,IsUsageAllowed() 将是一个困难的目标,因为我们必须攻击函数的 VM。 但这不是必需的,因为我们可以挂钩函数。为此,我们通过跳转指令将 IsUsageAllowed 的调用绕道到始终提供真实的东西。 = 保护被移除。

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

提前谢谢你

【问题讨论】:

    标签: c# security virtualization eazfuscator


    【解决方案1】:

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

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

    对于特定的混淆器,它可能会使用一种特殊的机制(又名int-call),专门针对该场景,使整个链能够防止绕道。

    Int-call 只是 VM 内部调用的简称。它可以避免 CLR 和 VM 域之间不必要的转换。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      相关资源
      最近更新 更多