.NET下的混淆与反混淆

2020-11-05 / 无评论

代码混淆

代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码。执行代码混淆的程序被称作代码混淆器。目前已经存在许多种功能各异的代码混淆器。

如: PHP中常见的混淆方案

image.png

在.NET中也存在多种混淆方案

较为常见的应该是.NET Reactor

0x01

C#中常见的输出类型分为以下三种

* Windows应用程序
即最常用的桌面应用程序,程序的默认入口为Program.cs 中的 Main 方法

* 控制台应用程序 即DOS程序,同样默认入口为 Program.cs 中的 Main 方法,不过没有可视化界面,只有命令行。

* 类库 即.NET类的库,包括你所定义的大量的类的源代码。在编译后可以让其他程序在引用后进行调用。

可以在解决方案->属性->输出类型中自行更换

image.png

这里先随便写一个类,在将其生成为dll文件。


using System;

namespace dll1
{
    class testDLL
    {
        public string name = "yuanhai";
        public string pwd = "yuanhai123";

        public string Login(string username,string password)
        {
            if(this.name == username && this.pwd == password)
            {
                return "登录成功";
            }
            return "登录失败";
        }
    }
}

在输出类型中选择-》类库

image.png

点击生成

image.png

进入项目所在的文件夹就可以看到相关文件了。

image.png

ConsoleApp10.dll就是生成好的类库,可以直接拖入DnsPy中进行反编译。

image.png

类库为综合性面向对象可重用类型的集合,因此,当我们需要使用类库中的方法以及变量时,就需要引入该类库

如下:

在依赖项中引入刚刚生成的dll文件

image.png

使用using 引入

using dll1;

测试代码:


using System;
using dll1;
namespace dkk
{
    class Program
    {
        static void Main(string[] args)
        {
            testDLL ls = new testDLL();
            Console.WriteLine(ls.name);
            Console.WriteLine(ls.pwd);
        }
    }
}

image.png

在大多数程序的开发过程中,都会选择将其类打包为dll文件。再将其调用。若攻击者拿到dll文件就等同于拿到了程序源代码。

因此,为了保护源代码不被泄露,部分程序员对其源码代码进行了混淆。

常见的混淆方案为NET Reactor

0x02

使用NET Reactor进行混淆

.NET Reactor是一款功能强大的代码保护以及许可授权管理系统软件,主要用于开发人员保护其.NET软件程序,.NET Reactor支持所有支持.NET编译的程序开发语言。

破解版下载地址:

https://www.jb51.net/softs/547521.html

image.png

具体使用说明:

https://blog.csdn.net/gtosky4u/article/details/107180219

1.在Main Assembly中选择要混淆的exe文件或者dll文件

image.png

2.Quick Settings 中选择混淆方法

image.png

一般只需要Anti ILDASM,Obfuscation,String Encryption 即可

3.生成混淆文件

Action——》Protect

image.png

会在dll所在目录中生成_Secure目录,其中包含了已混淆的dll文件。

image.png

尝试再次使用DnsPy进行反编译

image.png

可以看到,相关代码已被进行加密。虽然在格式上没有太大区别。但阅读起来十分困难。

混淆过后的dll文件依旧可以正常使用。

image.png

image.png

0x03

ScanId+de4dot 反混淆

因为此方面的知识涉及逆向,所以本人没有太深入研究(毕竟太菜了)。

还好目前主流的混淆方案都有方法进行反混淆(可自行百度)


[入门级]反混淆

在日常渗透过程中,通过某种手段,得到了程序的bin目录。但因为dll文件进行混淆,导致无法审计。可以使用以下方法快速反混淆。

1.使用ScanID查混淆方案

如:

某Web应用对dll文件进行了混淆

查询混淆方案

image.png

该dll使用了NET Reactor 4.8的混淆方案。

一般来说, NET Reactor 5.x 以下都是可以使用工具反混淆的。

2.使用de4dot进行反混淆

github地址:
https://github.com/de4dot/de4dot

目前支持的反混淆方案:

cmd:

.\de4dot.exe C:\Users\n1Sdkw\Desktop\Web.dll

image.png

会在对应目录下生成*-cleaned.dll

将反混淆后的dll文件进行反编译

image.png

就可以得到源代码,且在其中发现多出SQL注入漏洞

image.png

无回应:“.NET下的混淆与反混淆”

发表评论

电子邮件地址不会被公开。 必填项已用*标注