`
caobihole
  • 浏览: 952421 次
文章分类
社区版块
存档分类
最新评论

揭开.NET程序保护的秘密

 
阅读更多
.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编程的奥秘

    ASP.NET学习大全

    揭开ASP.NET中Cookie编程的奥秘.txt 利用TreeView控件动态生成无限级树.txt 实现一个Asp.net自定义Back控件.txt 使用XML创建Excel文档.txt 鼠标停留在GridView某一行时颜色改变.txt 微软提供的加密方法.txt 无法破解...

    揭开ASP.NET中Cookie编程的奥秘.rar

    揭开ASP.NET中Cookie编程的奥秘.rar

    asp.net学习大全(超全面的资料整合)

    揭开ASP.NET中Cookie编程的奥秘.txt 利用TreeView控件动态生成无限级树.txt 实现一个Asp.net自定义Back控件.txt 使用XML创建Excel文档.txt 鼠标停留在GridView某一行时颜色改变.txt 微软提供的加密方法.txt 无法破解...

    asp.net知识库

    将 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 MVC 2

    《ASP.NET MVC2开发实战》以循序渐进的方式揭开ASP.NET MVC的神秘面纱,帮助开发人员将现有的ASP.NET Web Forms项目转移到ASP.NET MVC架构,引导读者建立正确的开发观念,并搭配visual studio 2010开发工具,带领...

    ASP.NET.MVC.2开发实战

    《ASP.NET MVC 2开发实战》以循序渐进的方式揭开ASP.NET MVC的神秘面纱,帮助开发人员将现有的ASP.NET Web Forms项目转移到ASP.NETMVC架构,引导读者建立正确的开发观念,并搭配Visual Studio 2010开发工具,带顿...

    宝德高性能计算机揭开大熊猫基因秘密

    金秋十月的深圳第十届中国高新技术成果交易会上,宝德科技因其生产的HPC高性能计算机揭开国宝大熊猫基因秘密倍受瞩目。宝德参与大熊猫基因研究的是POWER Cluster8000 HPC计算机系统,宝德POWER Cluster8000 HPC系统...

    保险从业人员_揭开高收入的秘密(保险基本法学习).pptx

    保险从业人员_揭开高收入的秘密(保险基本法学习).pptx

    ASP.NET.MVC.2开发实战_黄保翕

     《ASP.NET MVC2开发实战》以循序渐进的方式揭开ASP.NET MVC的神秘面纱,帮助开发人员将现有的ASP.NET Web Forms项目转移到ASP.NET MVC架构,引导读者建立正确的开发观念,并搭配visual studio 2010开发工具,带领...

    ASP.NET.MVC.2开发实战.pdf

    《ASP.NET MVC 2开发实战》以循序渐进的方式揭开ASP.NET MVC的神秘面纱,帮助开发人员将现有的ASP.NET Web Forms项目转移到ASP.NETMVC架构,引导读者建立正确的开发观念,并搭配Visual Studio 2010开发工具,带顿...

    微软WebCast ASP.NET2.0 入门与提高系列课程下载地址doc.doc

    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大秘密

    揭开电脑的2大秘密

    ASP.NET MVC4开发指南

    ASP.NET MVC4开发指南 本书主要分成三大部分,将以循序渐进的方式,带领读者揭开ASP.NET MVC4的神秘面纱,引导读者创建正确的观念,以及实际体验ASP.NET MVC4的强大魅力。

    不可不知的谎言秘笈:揭开谎言的秘密

    不可不知的谎言秘笈:揭开谎言的秘密谎言无处不在。你可能不会说谎,但千万不能不会识谎,否则下一秒你就有可能被说谎者算计。这是一本让说谎者无比恐惧的书,也是诚实者最好的护身法宝。与其他同类书相比,本书中...

    亚马逊跨境电商运营实战:揭开畅销品与A9算法的秘密.pptx

    亚马逊跨境电商运营实战:揭开畅销品与A9算法的秘密.pptx

    你必须知道的.Net chm格式

    读完大部头的.NET巨著,还意犹未尽,抑或是不知所措。本书给你补充未尽的...基础研究和高级教程之间往往存在着断层,想在基础之上更进一步,本书可以为你提供更多思考和研究的平台,为你揭开CLR的神秘面纱打好基础。

    Java与.NET?到底选择哪个?

    为你揭开java与.net 的本质,到底选择谁,由您决定!!

    双星戏珠——揭开双核心CPU的秘密.pdf

    双星戏珠——揭开双核心CPU的秘密.pdf

Global site tag (gtag.js) - Google Analytics