`
呼延浩云
  • 浏览: 85015 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
69e5c1d2-1364-320a-a0f2-0de5143310d8
互联网的那点事
浏览量:10994
社区版块
存档分类
最新评论

NET代码保护解决方案

阅读更多

正如你们许多人可能已经知道,NET应用程序不分发的二进制代码,但使用一个专门的格式,称为MSIL’,这是微软中间语言的缩写。MSIL格式背后的想法是提供一个独立于机器的分发格式,促进运行的能力。NET应用程序的跨平台。这是通过CLR(。NET运行时引擎),具体由“只是在时间编译器(又名抖动)。CLR双手抖动,这反过来又原生格式的代码编译MSIL代码。然后,在其原生格式的代码交给CPU执行。不幸的是,这个重要的美德。NET应用程序容易受到恶意逆向工程攻击。事实上,它是如此容易篡改,人们可能会考虑是否使用该框架的优势,是值得的,考虑到涉及的风险暴露潜在的黑客的代码。为了证明它是多么容易篡改的代码,我们会看一个例子。

比方说,你是一个发展中的一个WinForms应用程序称为’MyPreciousApp’。在花费数月时间开发它,你现在准备将它部署。知道,软件盗版等待你,你已经决定使用您最喜爱的许可管理组件,以保护您的应用程序。您的代码可能看起来像这样:

读者可能会觉得奇怪,为了解除这种保护机制,黑客并不需要费心比自己更与您的应用程序搞乱几分钟。事实上,你并不需要成为黑客做到这一点。您只需要两个简单的工具,微软做的工作。首先,你将不得不使用ILDASM工具,这是微软的IL反汇编。该工具暴露了你的程序所使用的IL代码指令。

现在,撤防代码保护,你会通过简单地删除调用“ IsRegisteredUser方法的IL代码编辑这是通过去除一个圆角矩形标记的代码。

要完成的过程中,你将不得不使用ILASM工具,又是一个由微软提供的工具,可让您组装的。NET应用程序从MSIL代码。

 

最后,您的应用程序已被篡改!

打破误解围绕强名称组件

鉴于所示的例子中,我想讨论三种方式,我已经遇到的努力来克服这个问题,一个问题,我想叫’ 篡改的不能承受之轻。NET应用程序 “。

首先,我想讨论强名称组件“。它似乎有很大的混乱,围绕这个问题,我想扫清。该工具允许你给它一个强名称,唯一标识一个程序集。名称实际上是由用于识别的信息,包括集的文本名称,版本号由四部分组成,文化信息(如果提供),公共密钥和数字签名存储在程序集清单。数字签名编译期间所创建内容的装配,并运行它通过某种散列算法,其结果是使用分销商的私有密钥编码,并存储在程序集清单。

一旦组件已经准备好被加载到内存中,验证过程是由CLR启动。CLR获得集,并运行它通过在编译时使用相同的哈希算法。然后将结果相比原始签名的店,同样写在编译阶段。要破译签名,CLR使用的装配的公钥。

“强名称组件的引进确保相同的程序集编译你的程序将被加载到内存中运行。这解决了一个被称为“DLL地狱”,这种情况时产生一个组件被更新的问题,有可能打破依赖于它的其他应用程序。此外,强名称组件构成,可以利用出版商的身份发布的代码访问权限由用户定义。这意味着,例如,用户可能不允许目标发布者,其硬盘上,根据其身份访问文件。

一些开发商都倾向于认为,因为强名称组件的唯一标识程序集,它们可以被用来作为一个代码保护工具。他们简单地相信,如果组件被篡改,它将无法加载CLR的运行时引擎。这一切都是真实的,但,他们没有意识到,强名称组件没有被设计作为一个防篡改设备。因此,并不奇怪,张女士删除一些MSIL指令,可以改变一个强命名程序集,以同样的方式,在上一节所示。

回过头来的’MyPreciousApp例如,我们可以看到,它已被赋予一个强名称。这是显而易见的。公钥属性如下图所示。从MSIL代码删除这个属性和重建使用ILASM工具装配打破集的强名称,实际上它指定为私有程序集。打破所有组件属于上述结果相同的方式描绘在一个程序中的应用程序,是完全处于弱势逆向工程攻击。

混淆和它的缺点

,今天在同行业中是一种流行的代码保护技术,代码混淆。代码混淆器变换成一个应用程序,它的功能是相同的,但更难理解。这是通过有意义的符号名称命名,如变量,字段和方法名非有意义的。代码块重新排列,从而使其更难推断程序逻辑。

虽然代码混淆器理解程序的逻辑,提高了吧,他们有一些重大缺点。首先,他们不重命名的公共方法名称,因为这种方法可以调用其他组件引用混淆组件。这意味着可以很容易地追踪组件间调用时,看着MSIL代码混淆组件,因为原来的方法的名字都在使用。下面的例子说明,正是:

混淆代码清楚地表明,System.Windows.Forms的组件是由外部调用主要方法。由于许多程序依赖于外部库组件来管理授权和认证,此故障是主要的。通过简单的MSIL代码,这些调用可以截获和删除。

第二个缺点是混淆工具引入时使用反射的问题。通过使用反射进行方法调用可能失败,一旦应用程序已经看不到。这种情况发生混淆,但由于该方法已被重新命名呼叫的站点仍然是指方法,其原来的名称。

当然,许多混淆器允许用户来定义,应该不被更名为它的方法,但是这引发的开销研发团队以及QA团队,现在有应付由于混淆代码引入的错误。

第三个缺点是跟踪错误的能力,一旦他们从外地报道。堆栈转储信息的能力恢复通过的System.Exception.StackTrace方法的使用是必不可少的跟踪源的错误,一旦应用程序已部署。试想一下,一个用户向您发送一个bug报告,说他有问题,使用您的应用程序。堆栈转储信息如下:

System.NullReferenceException:对象引用未设置AA object.at()(AB)在AC()广告(AA)的一个实例(对象A_0,EventArgs的A_1)System.Windows.Forms.Control.OnClick (EventArgs五)

 

这告诉知之甚少问题的根源,并且可以使研发在这种情况下,低迷的响应。

基于代码加密解决方案

MSIL的知名度,以限制的窥视,从逆向工程的代码,代码的加密技术是用来防止潜在的黑客。代码加密使用的标准加密算法,密MSIL代码,从而使它完全不可读的人类或反汇编。在这方面,混淆技术功亏一篑相比,代码的加密技术。

ILDASM或其他反汇编的组装不能转储的内容,仅仅是因为它不再包含MSIL指令。你可能会奇怪,现在怎么来的CLR读取装配的内容,并将其编译到本地汇编指令,因为该组件不包含任何MSIL指令?“。

答案很简单,因为CLR引擎无法应付编码版本的代码,它有被破译它之前,它被解释。这就提出了一个重要的问题,许多加密代码保护工具,我一直在努力未能实现。一旦代码被破译,它完全暴露在内存中的一个潜在的黑客窥探,其MSIL形式,因为整个程序集加载到内存中。这构成了安全威胁,因为一旦程序集加载在内存中,它可以被转储到一个文件中,使用标准内存转储工具。

实际上,你可以建立你自己的内存转储工具,使用一些Win32 API函数。首先,你必须获取进程句柄,这是可以做到使用OpenProcess API函数:

HANDLE ph = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processId);

“OpenProcess”过程访问权限和进程ID,返回值作为进程句柄。现在,你有你想的内容转储到一个文件来访问特定的组装。由于过程可能加载多个程序集,我们使用“ EnumProcessModules 'API函数来获取由进程加载的所有图像处理模块。

HMODULE modules[1000];DWORD nModules;
EnumProcessModules(procHndl, (HMODULE*)&modules, 1000*sizeof(HMODULE), &nModules);

然后,你必须确定具体的汇编文件,您感兴趣的' GetModuleFileNameEx '与' GetModuleInformation '可以用来识别该文件,并检索其内存位置。

GetModuleFileNameEx(ph, modules[0], (LPTSTR)&fileName, MAXFILENAME);

所有剩下来完成此过程的是阅读组装内容。要做到这一点,我们使用' ReadProcessMemory ':

ReadProcessMemory(ph, lpAssemblyBaseAddress, destBuffer, dwBytesToRead, &dwBytesRead);

,ReadProcessMemory需要组装基地地址检索使用’ GetModuleInformation和一个缓冲的内存写入。

所描述的过程表明,在任何时候都保持MSIL代码的编码形式是维持一个可靠的防篡改解决方案的关键。从倾销程序集的内容,使用这项技术,我在上面已经说明,这限制了潜在的黑客。在任何时候都保持MSIL代码保护是什么在SecureTeam的家伙已经工作了相当长的一段时间。

分享到:
评论

相关推荐

    NET开发安全解决方案应用编程

    .NET开发安全解决方案应用编程主要关注的是在使用微软的.NET框架进行软件开发时,如何确保代码的安全性和系统的稳定性。本文将深入探讨.NET平台上的安全最佳实践,包括身份验证、授权、加密、异常处理以及代码审核等...

    网页恶意代码的十一大危害及其解决方案 信息技术教学总结.doc

    ### 网页恶意代码的十一大危害及其解决方案 #### 一、注册表被锁定及其解决方案 **危害表现**:当注册表被恶意代码锁定后,普通用户即使具备一定的计算机知识,也无法通过常规方式(如使用`regedit`命令)访问和...

    收藏的。net混淆源代码。

    这对于开发者来说是一个宝贵的资源,特别是那些希望深入学习.NET混淆技术或想要创建自己的混淆解决方案的人。通过下载和研究这些源代码,开发者可以了解混淆算法的工作原理,以及如何在C#项目中实现它们。 【标签】...

    SpringBootXSS攻击过滤插件使用XSS是什么解决方案.docx

    ### Spring Boot XSS 攻击过滤插件使用及解决方案详解 #### XSS概述 XSS(Cross Site Scripting),即跨站脚本攻击,是一种常见的Web安全漏洞。这种攻击方式利用了Web应用未能正确过滤用户提交的数据,导致恶意脚本...

    asp_net组件工具包vb_net web解决方案

    在ASP.NET Web解决方案中,开发者可以利用这些组件工具包来构建高效、可扩展的Web应用。这包括但不限于以下关键知识点: 1. **控件开发**:ASP.NET组件工具包提供多种控件,如按钮、文本框、下拉列表等,这些都是...

    SQL Server 2008商业智能完美解决方案 3/3

    用NET代码建立并实现自定义对象; 在Microsoft Office Excel和Office SharePoint Server中查看报表。 微软公司US-SQL Analysis Services 首席开发经理Donaod Farmer倾力作序 内容提要 ----------------------------...

    SQL Server 2008商业智能完美解决方案 1/3

    用NET代码建立并实现自定义对象; 在Microsoft Office Excel和Office SharePoint Server中查看报表。 微软公司US-SQL Analysis Services 首席开发经理Donaod Farmer倾力作序 内容提要 ----------------------------...

    SQL Server 2008商业智能完美解决方案 2/3

    用NET代码建立并实现自定义对象; 在Microsoft Office Excel和Office SharePoint Server中查看报表。 微软公司US-SQL Analysis Services 首席开发经理Donaod Farmer倾力作序 内容提要 ----------------------------...

    SQL Server 2008 商业智能完美解决方案(3)

    用NET代码建立并实现自定义对象; 在Microsoft Office Excel和Office SharePoint Server中查看报表。 微软公司US-SQL Analysis Services 首席开发经理Donaod Farmer倾力作序 内容提要 -----------------------...

    signalR跨域及解决方案

    总结起来,SignalR 跨域问题的解决方案主要依赖于 CORS 配置,同时可以结合其他技术如 JSONP、代理服务器、IFrame 和 PostMessage,以及 WebSocket 协议,根据实际项目需求选择合适的解决方案。正确配置后,SignalR ...

    oracle远程访问解决方案

    "Oracle远程访问解决方案"主要关注如何从一个远程位置安全、高效地连接到Oracle服务器进行数据库管理和开发工作。这里我们将详细探讨这个主题。 首先,我们需要了解Oracle数据库的网络架构。Oracle数据库使用了...

    DNGuard。Net数据库保护

    DNGuard HVM 一款 .Net 安全产品,它为 .NET 产品 代码、版权保护提供高强度解决方案。它强大的加密功能、混淆功能以及HVM虚拟机保护功能让您的产品同时受到多重保护,更加稳固您的合法利益不受不法份子的侵害。它能...

    ie F12 开发者工具 错误分析

    - **解决方案**:使用与服务器端相同的代码页,以避免此类警告。 - **HTML1113**:“从 [模式] 到 [模式] 的文档模式重新开始” - **描述**:此警告表明网页所需的文档模式与浏览器当前设置的文档模式不符。 - *...

    IntelliLock v1.5.6.0中文特别版(.net加锁混淆授权保护

    IntelliLock 和 .NET Reactor 同属 EZIRIZ 公司出品的 .NET 程序集加密保护系统,相对于.NET Reactor提供的基于源代码保护的授权许可系统不同,IntelliLock选择了以100%托管的方式应用许可与保护功能。以这种方式...

    网吧计费管理系统源代码

    【网吧计费管理系统源代码】是一个专为毕业设计而准备的项目,主要针对那些寻找便捷解决方案的学生群体。这个系统的核心目标是实现对网吧内计算机使用时间的精确计费和管理,确保服务的公平性和网吧运营的效率。在这...

    Android数据库安全解决方案,使用SQLCipher进行加解密.docx

    # Android数据库安全解决方案:使用SQLCipher进行加解密 ## 一、背景介绍与问题提出 随着移动互联网的发展,智能手机已成为人们日常生活中不可或缺的一部分。在众多的移动操作系统中,Android以其开放性和灵活性受...

    罗克韦尔自动化 电子式电机保护系统选型指南(中文).pdf

    这些产品系列覆盖了不同应用需求的电子式电机保护解决方案。 E1Plus系列可能是罗克韦尔自动化的一个早期电机保护产品,提供了基本的保护功能。E3系列以及E3Plus系列,它们在E1Plus的基础上进一步提升了性能和功能,...

    net core 3.1运行java代码,IKVM-8.5.1-bin-netcoreapp3.1

    总结来说,这个压缩包提供的是一套在.NET Core 3.1环境中运行Java代码的解决方案,通过IKVM库实现了.NET和Java生态的互操作性。通过使用IKVM,开发者可以在保持.NET开发效率的同时,利用Java的广泛资源和库。这一...

    VNC 自动登录 源代码 C#

    5. **错误处理**:良好的错误处理机制是必不可少的,当连接失败或出现其他问题时,应有明确的错误提示,并给出可能的解决方案。 6. **安全性考虑**:为了增强安全性,除了加密存储密码外,还可能需要定期更新密码,...

    罗克韦尔自动化 XM机组监测及保护系统简介(中文).pdf

    整体而言,文档提供的信息表明罗克韦尔自动化XM机组监测及保护系统是一套集成了多种工业通讯协议和标准的综合性监测和保护解决方案,能够满足不同工业应用的需求。它的设计和功能支持多种通讯方式,具备国际标准认证...

Global site tag (gtag.js) - Google Analytics