反射器 - 混淆代码

信息安全 应用安全 源代码 。网 混淆
2021-09-01 10:25:16

我运行 Reflector 来反编译一些程序,它似乎被混淆了。

我得到了以下输出,它不是很有用。

任何想法如何反编译混淆代码?

  [CompilerGenerated]
    get
    {
        // This item is obfuscated and can not be translated.
    }
    [CompilerGenerated]
    set
    {
        // This item is obfuscated and can not be translated.
        switch ((1 == 1))
        {
            case true:
                goto Label_0020;
        }
        goto Label_0018;
        if (((0 == 0) ? 0 : 1) != 0)
        {
        }
        this.eval_t = value;
    }
4个回答

从技术上讲,反编译混淆代码与反编译非混淆代码相同。.NET 中混淆的工作方式是通过以非显而易见的方式通过随机命名的类型/方法/属性/等路由调用,从而使遵循代码路径的逻辑变得异常困难。混淆的全部意义在于防止人们通过 Reflector 之类的反编译代码,并了解代码的内部是如何工作的。

没有简单的方法可以摆脱混淆。您几乎无法按原样执行代码。

你试过 ILSpy 吗?

http://wiki.sharpdevelop.net/ILSpy.ashx

我对混淆代码有相当好的运气,由于变量重命名,它仍然看起来像垃圾,但你可以很好地遵循它。

实际上有几种(至少 4 种)非常不同的混淆类型,从简单地将方法和变量名称更改为“匿名”名称,到修改程序逻辑,甚至是运行时去混淆引擎。
这样做的工具范围从免费插件(一些程序员甚至以这种方式编写所有代码:)),到高端、昂贵的商业工具。你应该知道你在处理什么,这取决于答案可能不同。

在您的情况下,您的代码看起来可能是第 2 级,即带有一些代码路径修改,而不仅仅是变量。这意味着,它仍然是完全有效的,具有完全相同的结果,只是难以手动解析。(如果只是变量命名,您可以根据上下文和范围逐步更改名称,并尝试从那里找出答案)。

我没有给你一个简单的解决方案,但问题是 - 你想用它做什么?

  • 如果您想重新编译它,只需进行少量更改 - 应该可以正常工作,不会太复杂,除非您真的需要了解什么是什么。
  • 如果您想手动检查它的缺陷 - 祝您好运,您将需要它。
  • 另一方面,您应该可以毫无问题地将其提供给自动代码扫描仪。高端工具(:-))解析这个应该没有问题(但没有承诺),尽管尝试验证结果或找到原始代码行可能具有挑战性。但是您至少能够对安全级别有所了解。

很难说出使用了什么混淆器,但 de4dot (.NET deobfuscator) 可能能够帮助您:https ://github.com/0xd4d/de4dot