.NET下的混淆与反混淆
代码混淆
代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码。执行代码混淆的程序被称作代码混淆器。目前已经存在许多种功能各异的代码混淆器。
如: PHP中常见的混淆方案
在.NET中也存在多种混淆方案
较为常见的应该是.NET Reactor
0x01
C#中常见的输出类型分为以下三种
* Windows应用程序
即最常用的桌面应用程序,程序的默认入口为Program.cs 中的 Main 方法
* 控制台应用程序 即DOS程序,同样默认入口为 Program.cs 中的 Main 方法,不过没有可视化界面,只有命令行。
* 类库 即.NET类的库,包括你所定义的大量的类的源代码。在编译后可以让其他程序在引用后进行调用。
可以在解决方案->属性->输出类型中自行更换
这里先随便写一个类,在将其生成为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 "登录失败";
}
}
}
在输出类型中选择-》类库
点击生成
进入项目所在的文件夹就可以看到相关文件了。
ConsoleApp10.dll
就是生成好的类库,可以直接拖入DnsPy中进行反编译。
类库为综合性面向对象可重用类型的集合,因此,当我们需要使用类库中的方法以及变量时,就需要引入该类库
如下:
在依赖项中引入刚刚生成的dll文件
使用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);
}
}
}
在大多数程序的开发过程中,都会选择将其类打包为dll文件。再将其调用。若攻击者拿到dll文件就等同于拿到了程序源代码。
因此,为了保护源代码不被泄露,部分程序员对其源码代码进行了混淆。
常见的混淆方案为NET Reactor
0x02
使用NET Reactor进行混淆
.NET Reactor是一款功能强大的代码保护以及许可授权管理系统软件,主要用于开发人员保护其.NET软件程序,.NET Reactor支持所有支持.NET编译的程序开发语言。
破解版下载地址:
https://www.jb51.net/softs/547521.html
具体使用说明:
https://blog.csdn.net/gtosky4u/article/details/107180219
1.在Main Assembly中选择要混淆的exe文件或者dll文件
2.Quick Settings 中选择混淆方法
一般只需要Anti ILDASM
,Obfuscation
,String Encryption
即可
3.生成混淆文件
Action——》Protect
会在dll所在目录中生成_Secure
目录,其中包含了已混淆的dll文件。
尝试再次使用DnsPy进行反编译
可以看到,相关代码已被进行加密。虽然在格式上没有太大区别。但阅读起来十分困难。
混淆过后的dll文件依旧可以正常使用。
0x03
ScanId+de4dot 反混淆
因为此方面的知识涉及逆向,所以本人没有太深入研究(毕竟太菜了)。
还好目前主流的混淆方案都有方法进行反混淆(可自行百度)
[入门级]反混淆
在日常渗透过程中,通过某种手段,得到了程序的bin目录。但因为dll文件进行混淆,导致无法审计。可以使用以下方法快速反混淆。
1.使用ScanID查混淆方案
如:
某Web应用对dll文件进行了混淆
查询混淆方案
该dll使用了NET Reactor 4.8的混淆方案。
一般来说, NET Reactor 5.x 以下都是可以使用工具反混淆的。
2.使用de4dot进行反混淆
github地址:
https://github.com/de4dot/de4dot
目前支持的反混淆方案:
- Agile.NET (aka CliSecure)
- Babel.NET
- CodeFort
- CodeVeil
- CodeWall
- CryptoObfuscator
- DeepSea Obfuscator
- Dotfuscator
- .NET Reactor
- Eazfuscator.NET
- Goliath.NET
- ILProtector
- MaxtoCode
- MPRESS
- Rummage
- Skater.NET
- SmartAssembly
- Spices.Net
- Xenocode
cmd:
.\de4dot.exe C:\Users\n1Sdkw\Desktop\Web.dll
会在对应目录下生成*-cleaned.dll
将反混淆后的dll文件进行反编译
就可以得到源代码,且在其中发现多出SQL注入漏洞