- 1、本文档共77页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
dotNET程序加解密技术.pdf
单海波
C l i c k t o e d i t c o m p a n y s l o g a n .
主要内容
一、.NET程序加解密技术基础
二、主流的.NET程序加解密技术
三、对.NET加解密技术的一些看法
一、.NET程序加解密技术基础
1、什么是.NET
.NET Framework 是支持生成和运行下一代应
用程序和XML Web Services 的内部Windows
组件。
符合ECMA-335 (欧洲计算机制造商协会)规
定的公共语言基础(CLI )的平台:MONO、
SSCLI等。
.NET的目标:
一个一致的面向对象的编程环境。
一个将软件部署和版本控制冲突最小化的代码
执行环境。
一个可提高代码执行安全性的代码执行环境。
一个可消除脚本环境或解释环境的性能问题的
代码执行环境。
使开发人员的经验在面对类型大不相同的应用
程序时保持一致。
确保基于.NET Framework 的代码可与任何其
他代码集成。
从加解密的角度看,.NET就是构建于操作系
统(Windows )之上的虚拟机。
包含两个部分
CLR (通用语言运行时,也就是.NET程序的执
行环境)
.NET类库
Windows系统上的.NET框架结构
2、加解密所关注的.NET带来的改变
(1)PE结构上的改变
普通PE文件存储x86/x64机器指令
.NET下PE文件(程序集)中保存的是元数据和
MSIL,但不限于此。
.NET下PE文件.text节的典型结构
元数据:描述数据的数据。
在.NET中,元数据:
a) 本身就是一段数据。
b) 描述了一个.NET程序的全部信息。(.NET
程序是自描述的)
程序集的这种自描述性质使得反编译时信息更加丰富,结合
MSIL的特性,使得反编译结果近似原代码。
元数据的基本结构
元数据是以数据流(stream )的形式保存在文
件中,这些流被分别命名,并有各自不同的含
义。在.NET中,保存元数据的流被分为两大类
:堆(heap)和表(table )。因此,流是一个
统称,而堆和表则是流的两种存储形式。
.NET中的六个元数据堆
名称 含义
UTF8格式的字符串堆,包含各种元数据的名称(比如类名、方法名、成员名、参数名等
#Strings 等)。堆的首部总有一个0作为空字符串,各字符串以0表示结尾。CLR 中这些名称的最大长
度是1024。
二进制数据堆,存储程序中的非字符串信息,比如常量值、方法的签名、强名称等。每个
#Blob 数据的长度由该数据的前1至3位决定:0表示长度1字节,10表示长度2字节,110表示长度4
字节。
#GUID 存储所有的全局唯一标识(Global Unique Identifier )。
#US 以Unicode格式存放的IL代码中使用的用户字符串(User String ),比如ldstr调用的字符串。
元数据中最重要的堆,几乎所有的元数据信息都以表的形式保存于此。每个.NET程序都必
#~
须包含。
#- #~ 的未压缩(或称为未优化)存储,不常见。
元数据表
00 – Module 01 – TypeRef 02 - TypeDef
03 – FieldPtr 04 – Field 05 – MethodPtr
06 – MethodDef 07 – ParamPtr 08 - Param
09 – InterfaceImpl 10 – MemberRef 11 - Constant
12 – CustomAttribute 13 – FieldMarshal 14 - D
文档评论(0)