.NET程序的代码混淆、加壳与脱壳

简介: 通常我们通过代码混淆、加密的形式达到软件保护的目的。在Web开发里我们接触过的可能就是JS代码加密了,可以通过对JS代码进行混淆、加密从而实现对核心JS代码的保护。如果没有接触过的可以在这里简单了解一下,这次我们就不去细说了。

通常我们通过代码混淆、加密的形式达到软件保护的目的。在Web开发里我们接触过的可能就是JS代码加密了,可以通过对JS代码进行混淆、加密从而实现对核心JS代码的保护。如果没有接触过的可以在这里简单了解一下,这次我们就不去细说了。

在以前Win32的软件中,加壳脱壳的技术已经发展的非常成熟,国内有大名鼎鼎的看雪吾爱破解等论坛,三四年前还在上学时,论坛里的大牛一直都是自己的偶像。

而.NET程序因为编译结果不是机器代码语言,而是IL语言,所以加壳脱壳相关的软件还不是很多,我搜索到了一些,如VS自带的DotFuscator、.NET Reactor、xeoncode等,这次我们就简单介绍下手边有的.NET Reactor 。

1.代码混淆

代码混淆主要通过一些名称替换、移位、流程混淆的方式来实现。

先来看一个测试的DEMO程序,很简单的一个Winform程序,实例化窗体时实例化一个User类,点击按钮显示用户名,这样也可以测试加密、加壳后程序是否能够继续运行。

 1  using System;
 2  using System.Windows.Forms;
 3 
 4  namespace CodeObfuscator
 5 {
 6      public  partial  class Form1 : Form
 7     {
 8          private  readonly User _currentUser;
 9          public Form1()
10         {
11             InitializeComponent();
12             _currentUser =  new User
13             {
14                 UserID =  1,
15                 UserName =  " Parry@cnblogs "
16             };
17         }
18 
19          private  void ButtonAlertClick( object sender, EventArgs e)
20         {
21             MessageBox.Show(_currentUser.UserName);
22         }
23     }
24 
25      public  class User
26     {
27          public  int UserID {  getset; }
28          public  string UserName {  getset; }
29     }
30 }

我们使用最常用的反编译工具Reflector对生成的exe反编译查看源码。

下面我们打开.NET Reactor进行代码混淆,载入exe后,在一般设置里可以设置压缩选项,不过设置后程序初始化速度会变慢,是因为需要将代码解压缩后再加载到内存中。

在混淆选项里将Enable设置为启用,混淆公共类型,字符串加密等常用的也设置成启用。其他的选项Tips里都有详细的解释,就不一一讲解。

 

当我们再使用Reflector反编译查看时,发现没有看到混淆后的代码,而是看到了这个结果。

猜想应该是.NET Reactor程序对exe进行处理后打了个包,我们使用查壳工具查看后发现果然是这样,外面套了一层Delphi的东西,这个还不是壳,只是一些额外数据。

关于Overlay相关内容可以查看这里

2.加壳与脱壳

加壳实际上就是一种加密方式,被加壳的程序在运行前要先运行一段附加指令,这段附加的指令完成相关操作后会启动主程序,程序就像被包在一个壳里一样,加壳的技术在病毒编写的时候也被大量使用。

我们使用北斗加壳程序对上面的exe加壳后,再来反编译看一看。

反编译后我们已经找不到之前程序任何相关名称、代码,完全被一个“壳子”包裹了起来,在程序运行时,程序将先运行我们反编译看到的main函数进行一系列的解压、解密动作后将代码加载到内存中运行原始的程序,这样就实现了对程序的保护功能。

脱壳就是对程序进行解压缩、解密,将外面的一层壳脱去后,继续进行逆向工程进行破解。 

而关于脱壳,本人也是略知皮毛,不敢胡乱卖弄,感兴趣的可以去论坛里学习相关知识。

这里介绍的混淆、加壳的方法也只是为了在需要对自己的程序进行保护时的一种方法。

觉得文章还行的话就推荐下吧,哈哈。


作者:Parry
出处:http://www.cnblogs.com/parry/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

相关文章
|
1月前
|
安全 数据安全/隐私保护 开发者
三款.NET 代码混淆工具比较分析:ConfuserEx、Obfuscar 和 Ipa Guard
三款.NET 代码混淆工具比较分析:ConfuserEx、Obfuscar 和 Ipa Guard
|
1月前
|
域名解析 缓存 Linux
如何让你的.NET WebAPI程序支持HTTP3?
如何让你的.NET WebAPI程序支持HTTP3?
60 2
如何让你的.NET WebAPI程序支持HTTP3?
|
8月前
|
安全 Shell 数据库
「学习记录」.NET程序的数据库密码解密
「学习记录」.NET程序的数据库密码解密
|
9月前
|
XML 存储 JSON
使用自定义XML配置文件在.NET桌面程序中保存设置
本文将详细介绍如何在.NET桌面程序中使用自定义的XML配置文件来保存和读取设置。除了XML之外,我们还将探讨其他常见的配置文件格式,如JSON、INI和YAML,以及它们的优缺点和相关的NuGet类库。最后,我们将重点介绍我们为何选择XML作为配置文件格式,并展示一个实用的示例。
103 0
|
1月前
|
XML 开发框架 .NET
LabVIEW中加载.NET 2.0,3.0和3.5程序集
LabVIEW中加载.NET 2.0,3.0和3.5程序集
25 4
|
11天前
|
自然语言处理 C# 图形学
​一款开源的.NET程序集反编译、编辑和调试神器
本文介绍了.NET反编译和调试工具dnSpyEx的使用方法。dnSpyEx是dnSpy的非官方Fork版本,支持.NET Framework、.NET Core和Unity程序集的调试和编辑,具有多种语言界面。主要功能包括:浅色、蓝色和深色主题,调试支持,代码编辑以及多语言支持。用户可以从GitHub下载并直接运行dnSpyEx,无需安装。通过创建测试项目,编译成dll文件,然后使用dnSpyEx进行调试和编辑程序集中的代码和IL指令。此外,文章还提供了项目源码地址和相关优秀项目的链接。
|
1月前
|
开发框架 .NET 开发工具
LabVIEW加载.NET程序集
LabVIEW加载.NET程序集
23 1
|
7月前
|
开发框架 .NET 测试技术
.NET Core 日志记录程序和常用日志记录框架
本文主要内容为.NET Core的日志记录程序和常使用的日志记录框架的简单使用 首先,打开VS2019新建一个ASP.NET Core Web Api项目,项目创建好后会有一个集成好的天气预报的类和控制器,接下来,我们的方法就在天气控制器里完成。
54 0
|
9月前
|
开发框架 .NET C#
如何判断一个 Dot Net 程序是 32 位还是 64 位?
如何判断一个 Dot Net 程序是 32 位还是 64 位?
|
1月前
|
开发框架 前端开发 小程序
分享46个ASP.NET博客程序源码,总有一款适合您
分享46个ASP.NET博客程序源码,总有一款适合您
41 0