zoukankan      html  css  js  c++  java
  • 代码混淆、加密

    通常我们通过代码混淆、加密的形式达到软件保护的目的。在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设置为启用,混淆公共类型,字符串加密等常用的也设置成启用。其他的选项都有详细的解释,就不一一讲解。

     

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

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

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

    2.加壳与脱壳

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

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

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

    而关于脱壳,本人也是略知皮毛,不敢胡乱卖弄,且也不是一两篇文章就能讲清楚的,感兴趣的可以去论坛里学习相关知识。

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

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


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

    分类: 03.Sugars04..NET
    标签: .NET 安全
  • 相关阅读:
    DNS-PreFetch 技术及其他前端优化加载技术
    Windows10 睡死
    Dns Over Https(DoH) --- Windows10 预览版 19645
    原生JavaScript(JS)修改添加CSS样式表 (更好的性能)
    技术的本质
    工程设计
    文件分配表 FAT -WIKI
    博客皮肤修复: 行号和搜索引擎快照(基于 Cnblogs-Theme-SimpleMemory v1.3.3)
    java-知识点学习和补充
    红黑树01--[红黑树简介&添加修复]
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2770360.html
Copyright © 2011-2022 走看看