揭开.NET程序保护的秘密

转载 2007年09月19日 11:51:00
.NET程序保护主要有如下几种形式
1.  混淆
2.  编译到本地代码
3.  把代码隐藏在资源中

1.  混淆
这部分的保护软件以Dotfuscator和XenoCode为代表。Dotfuscator是比较初级的混淆器,采取的主要策略是名字混淆,通过把类名、方法名、变量名改成很短的形式,目的是破坏有意义的变量命名。

 
WebCombo.NET 2.0,采用Dotfuscator进行变量名混淆

名字混淆的缺点在于
a. 名字长度虽短,但是依然容易进行代码分析。对于熟悉汇编语言的逆向工程师,改成短的变量名对阅读代码基本不存在任何难度。
b. 在应用反射(Reflector)机制的程序中不能很好的工作。

XenoCode是稍微高级的混淆器,它采用的技术除了变量名字混淆外,还加入流程混淆。目的是阻止.NET Reflector对其直接进行反编译。大部分采用了混淆器的.NET软件都是使用该混淆器进行保护。

尽管.NET Reflector不能直接反编译为c#,但是我们在语言栏把它切换到IL,依然可以看到中间语言!

.NET Reflector之所以不能反编译,是因为XenoCode把中间语言拆成若干段,每段用br或者br.s(相当于jmp)衔接起来。至于为什么.NET Reflector不会解释成goto,我也不太清楚,估计是因为与一条完整的C#语句等价的IL程序段被拆开两半。(哪位大侠知道请指教一下)。反混淆的方法也非常直接,把代码段重新排序就可以了,反混淆的结果如图:

用ida pro分析的流程图,未进行反混淆处理前:

反混淆处理后:

对一个几M甚至几十M的il源文件进行反混淆不是一件轻松的事情,因此写了一个用于重新排序的小程序,正式做法类似编译原理的语句优化步骤,先把每个method分块,每个块的第一个语句是入口点,最后一个语句必须是无条件的控制转移语句(br、leave、ret等)。然后把转跳点合并。这里遇到一个问题,遇到入口被method内部多处引用时,只能随机选择一个。因此部分函数还需要人手调整。但毕竟顺序结构还是占绝大多数,所以人手调整的比例还是很少的。我在转换一个几百个类的dll时,需要调整的类也只有10多个,是可以接受的。

显然,如果在有辅助工具的帮助下,XenoCode流程混淆下的程序也不难做到反混淆。加上Reflector的FileDisassembler插件,完全可以把整个assembly的源码导出到本地目录下,再用IDE环境把项目源码导入后进行分析。

2.编译到本地代码
保护软件以RemoteSoft Protector为代表,应用该保护方法的软件较少,因为正版的RemoteSoft Protector需要几千美金。其中代表软件为WebGrid.NET 3.5。在发布的dll里面包括.NET assembly以及一个名为rscoree.dll的一般Win32 PE文件。查看rscoree.dll可以发现导出表仅有_RSDllMain, _RSEEStartup, _RSEEUpdate, _RSExeMain四项,用Ollydbg打开发现并没加密。用Reflector打开.NET assembly,无论是用C#语言查看还是直接查看IL,所有method都只看到空的函数体。只有发现<PrivateImplementationDetails>中存在对rscoree.dll的引用信息。
.class private auto ansi <PrivateImplementationDetails>
      extends object
{
      .method assembly hidebysig static void $$method-1() cil managed noinlining
      {
      }

      .method assembly hidebysig static void $$method-2() cil managed noinlining
      {
      }

      .method private static pinvokeimpl("rscoree.dll" ansi nomangle) void _RSEEStartup(int32 A_0) cil forwardref managed
      {
      }

      .method private static pinvokeimpl("rscoree.dll" ansi nomangle) void _RSEEUpdate(native int A_0) cil forwardref managed
      {
      }


      .field private static bool $$started-1

      .field private static bool $$started-2

}
另外听说有一款国产的保护软件MaxtoCode,分普及版和专业版,普及版可以免费使用。看软件的介绍信息疑也是采用类似技术。缺点是代码编译成了naïve code,所以只能在windows平台运行。逆向人员需要同时懂得.NET虚拟机的知识和Win32汇编,要求较高。

3.这是一种很另类的保护方法(也许是我孤陋寡闻),目前只知道Reflector本身是采用这种方法来保护自身的核心代码库。暂时还没时间去研究具体的实现方法。

[C#防止反编译].NET 产品版权保护方案 (.NET源码加密保护)

说 明:你希望自己用.net辛辛苦苦做出来的软件被人轻易破解吗?你希望自己花了大量人力物力用.net开发出来的产品被竞争对手轻易获取核心代码吗?这是 一篇比较详尽地介绍如何保护自己的.net源代码的文...
  • asd8464
  • asd8464
  • 2017年05月02日 23:27
  • 613

[C#防止反编译].NET 产品版权保护方案 (.NET源码加密保护)

C#防止反编译
  • dadoneo
  • dadoneo
  • 2011年03月24日 21:06
  • 42599

.NET 产品版权保护方案 (.NET源码加密保护)

说明:你希望自己用.net辛辛苦苦做出来的软件被人轻易破解吗?你希望自己花了大量人力物力用.net开发出来的产品被竞争对手轻易获取核心代码吗?这是一篇比较详尽地介绍如何保护自己的.net源代码的文章,...
  • zhoufoxcn
  • zhoufoxcn
  • 2007年09月22日 11:43
  • 9617

.Net应用程序反编译与保护

我等菜鸟们辛辛苦苦写了一个小应用程序发出去给身份的朋友或者能用到的朋友们使用,当然不希望被别人反编译。对于一个程序员来说,别人偷偷的看你的代码就感觉像是在偷窥你一样,所以给程序加个“干扰”还是有必要的...
  • bruce135lee
  • bruce135lee
  • 2017年12月05日 09:06
  • 92

几个.NET 程序保护工具

以下是网址,不是破解版,不是下载地址,只是这些工具的网站  LSW-IL-Obfuscator Demeanor for .NET Salamander .NET Obfuscator Sal...
  • sxycgxj
  • sxycgxj
  • 2011年12月06日 11:22
  • 683

【混淆工具】保护Net程序代码安全

说明: 本次介绍2款保护工具.NET Reactor 4.9.7 混淆工具 和 Shielden 2.3 加壳工具。 使用介绍: 1.(NET Reactor 4.9.7 混淆工具)...
  • yw1688
  • yw1688
  • 2016年09月19日 11:03
  • 169

.NET DLL 保护措施详解(非混淆加密加壳)

为什么要保护DLL,我就不多说了,各人有各人的理由。总的来说,就是不想核心逻辑泄露及授权验证被破解两大方面的因素。   首先,我来介绍一下发布出去的DLL所面临的风险: 一、直接引用 二、反编译 三、...
  • qwsf01115
  • qwsf01115
  • 2016年08月10日 11:10
  • 4082

如何使用Microsoft .NET保护应用程序和数据的安全

如何使用Microsoft .NET保护应用程序和数据的安全 身份验证 l         使用Credential来唯一标明一个用户l         可以使用Microsoft Windows的集...
  • lne818
  • lne818
  • 2006年09月07日 19:50
  • 1122

保护你的.NET代码之混淆器——Eazfuscator.NET

由于.NET代码需编译成中间代码的特性,导致.NET程序很容易被反编译,微软官方也给出了查看源码的相关工具(ildasm.exe);混淆是常用的保护手段,即对编译生成的MSIL中间代码进行模糊处理,最...
  • gulingeagle
  • gulingeagle
  • 2010年12月20日 13:07
  • 4431

.NET代码的保护

1没有绝对的保护 加密和破解都相对的2用vs2002/2003/开发的代码 删除.cs/.vb文件只留 .dll和.aspx可以达到加密若要加密.aspx 可以把.aspx代码写入.csvs2005 ...
  • 21aspnet
  • 21aspnet
  • 2004年10月25日 00:55
  • 2049
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:揭开.NET程序保护的秘密
举报原因:
原因补充:

(最多只允许输入30个字)