.NET程序保护主要有如下几种形式
1.混淆
2.编译到本地代码
3.把代码隐藏在资源中
1.混淆
这部分的保护软件以Dotfuscator和XenoCode为代表。Dotfuscator是比较初级的混淆器,采取的主要策略是名字混淆,通过把类名、方法名、变量名改成很短的形式,目的是破坏有意义的变量命名。
WebCombo.NET2.0,采用Dotfuscator进行变量名混淆
名字混淆的缺点在于
a.名字长度虽短,但是依然容易进行代码分析。对于熟悉汇编语言的逆向工程师,改成短的变量名对阅读代码基本不存在任何难度。
b.在应用反射(Reflector)机制的程序中不能很好的工作。
XenoCode是稍微高级的混淆器,它采用的技术除了变量名字混淆外,还加入流程混淆。目的是阻止.NETReflector对其直接进行反编译。大部分采用了混淆器的.NET软件都是使用该混淆器进行保护。
尽管.NETReflector不能直接反编译为c#,但是我们在语言栏把它切换到IL,依然可以看到中间语言!
.NETReflector之所以不能反编译,是因为XenoCode把中间语言拆成若干段,每段用br或者br.s(相当于jmp)衔接起来。至于为什么.NETReflector不会解释成goto,我也不太清楚,估计是因为与一条完整的C#语句等价的IL程序段被拆开两半。(哪位大侠知道请指教一下)。反混淆的方法也非常直接,把代码段重新排序就可以了,反混淆的结果如图:
用idapro分析的流程图,未进行反混淆处理前:
反混淆处理后:
对一个几M甚至几十M的il源文件进行反混淆不是一件轻松的事情,因此写了一个用于重新排序的小程序,正式做法类似编译原理的语句优化步骤,先把每个method分块,每个块的第一个语句是入口点,最后一个语句必须是无条件的控制转移语句(br、leave、ret等)。然后把转跳点合并。这里遇到一个问题,遇到入口被method内部多处引用时,只能随机选择一个。因此部分函数还需要人手调整。但毕竟顺序结构还是占绝大多数,所以人手调整的比例还是很少的。我在转换一个几百个类的dll时,需要调整的类也只有10多个,是可以接受的。
显然,如果在有辅助工具的帮助下,XenoCode流程混淆下的程序也不难做到反混淆。加上Reflector的FileDisassembler插件,完全可以把整个assembly的源码导出到本地目录下,再用IDE环境把项目源码导入后进行分析。
2.编译到本地代码
保护软件以RemoteSoftProtector为代表,应用该保护方法的软件较少,因为正版的RemoteSoftProtector需要几千美金。其中代表软件为WebGrid.NET3.5。在发布的dll里面包括.NETassembly以及一个名为rscoree.dll的一般Win32PE文件。查看rscoree.dll可以发现导出表仅有_RSDllMain,_RSEEStartup,_RSEEUpdate,_RSExeMain四项,用Ollydbg打开发现并没加密。用Reflector打开.NETassembly,无论是用C#语言查看还是直接查看IL,所有method都只看到空的函数体。只有发现<PrivateImplementationDetails>中存在对rscoree.dll的引用信息。
.classprivateautoansi<PrivateImplementationDetails>
extendsobject
{
.methodassemblyhidebysigstaticvoid$$method-1()cilmanagednoinlining
{
}
.methodassemblyhidebysigstaticvoid$$method-2()cilmanagednoinlining
{
}
.methodprivatestaticpinvokeimpl("rscoree.dll"ansinomangle)void_RSEEStartup(int32A_0)cilforwardrefmanaged
{
}
.methodprivatestaticpinvokeimpl("rscoree.dll"ansinomangle)void_RSEEUpdate(nativeintA_0)cilforwardrefmanaged
{
}
.fieldprivatestaticbool$$started-1
.fieldprivatestaticbool$$started-2
}
另外听说有一款国产的保护软件MaxtoCode,分普及版和专业版,普及版可以免费使用。看软件的介绍信息疑也是采用类似技术。缺点是代码编译成了naïvecode,所以只能在windows平台运行。逆向人员需要同时懂得.NET虚拟机的知识和Win32汇编,要求较高。
3.这是一种很另类的保护方法(也许是我孤陋寡闻),目前只知道Reflector本身是采用这种方法来保护自身的核心代码库。暂时还没时间去研究具体的实现方法。
分享到:
相关推荐
揭开ASP.NET中Cookie编程的奥秘揭开ASP.NET中Cookie编程的奥秘揭开ASP.NET中Cookie编程的奥秘
揭开ASP.NET中Cookie编程的奥秘.txt 利用TreeView控件动态生成无限级树.txt 实现一个Asp.net自定义Back控件.txt 使用XML创建Excel文档.txt 鼠标停留在GridView某一行时颜色改变.txt 微软提供的加密方法.txt 无法破解...
揭开ASP.NET中Cookie编程的奥秘.rar
揭开ASP.NET中Cookie编程的奥秘.txt 利用TreeView控件动态生成无限级树.txt 实现一个Asp.net自定义Back控件.txt 使用XML创建Excel文档.txt 鼠标停留在GridView某一行时颜色改变.txt 微软提供的加密方法.txt 无法破解...
将 ASP.NET 2.0 应用程序服务配置为使用 SQL Server 2000 或 SQL Server 2005 ASP.NET 2.0 中的数据源控件 使用 ASP.NET 2.0 ObjectDataSource 控件 ASP.NET 2.0 的内部变化 使用SQL Cache Dependency 代替 ...
《ASP.NET MVC2开发实战》以循序渐进的方式揭开ASP.NET MVC的神秘面纱,帮助开发人员将现有的ASP.NET Web Forms项目转移到ASP.NET MVC架构,引导读者建立正确的开发观念,并搭配visual studio 2010开发工具,带领...
《ASP.NET MVC 2开发实战》以循序渐进的方式揭开ASP.NET MVC的神秘面纱,帮助开发人员将现有的ASP.NET Web Forms项目转移到ASP.NETMVC架构,引导读者建立正确的开发观念,并搭配Visual Studio 2010开发工具,带顿...
金秋十月的深圳第十届中国高新技术成果交易会上,宝德科技因其生产的HPC高性能计算机揭开国宝大熊猫基因秘密倍受瞩目。宝德参与大熊猫基因研究的是POWER Cluster8000 HPC计算机系统,宝德POWER Cluster8000 HPC系统...
保险从业人员_揭开高收入的秘密(保险基本法学习).pptx
《ASP.NET MVC2开发实战》以循序渐进的方式揭开ASP.NET MVC的神秘面纱,帮助开发人员将现有的ASP.NET Web Forms项目转移到ASP.NET MVC架构,引导读者建立正确的开发观念,并搭配visual studio 2010开发工具,带领...
《ASP.NET MVC 2开发实战》以循序渐进的方式揭开ASP.NET MVC的神秘面纱,帮助开发人员将现有的ASP.NET Web Forms项目转移到ASP.NETMVC架构,引导读者建立正确的开发观念,并搭配Visual Studio 2010开发工具,带顿...
ASP.NET 2.0入门与提高系列课程 下载地址 ASP.NET 2.0入门与提高系列课程(1):揭开Orcas神秘的面纱 (Level 200) ASP.NET 2.0入门与提高系列课程(2):ASP.NET 2.0入门与探索 (Level 200) ASP.NET 2.0...
揭开电脑的2大秘密
ASP.NET MVC4开发指南 本书主要分成三大部分,将以循序渐进的方式,带领读者揭开ASP.NET MVC4的神秘面纱,引导读者创建正确的观念,以及实际体验ASP.NET MVC4的强大魅力。
不可不知的谎言秘笈:揭开谎言的秘密谎言无处不在。你可能不会说谎,但千万不能不会识谎,否则下一秒你就有可能被说谎者算计。这是一本让说谎者无比恐惧的书,也是诚实者最好的护身法宝。与其他同类书相比,本书中...
亚马逊跨境电商运营实战:揭开畅销品与A9算法的秘密.pptx
读完大部头的.NET巨著,还意犹未尽,抑或是不知所措。本书给你补充未尽的...基础研究和高级教程之间往往存在着断层,想在基础之上更进一步,本书可以为你提供更多思考和研究的平台,为你揭开CLR的神秘面纱打好基础。
为你揭开java与.net 的本质,到底选择谁,由您决定!!
双星戏珠——揭开双核心CPU的秘密.pdf