微软.NET程序的加密与解密(11.5日 china-pub 软件安全峰会现场首发)
基本信息
编辑推荐
软件安全主题网站——看雪学院《加密与解密》软件安全系列丛书的第三本。.
介绍代码保护与加密解密技术在微软.NET框架中的应用。...
内容简介回到顶部↑
本书是软件安全主题网站——看雪学院《加密与解密》软件安全系列丛书的第三本,主要介绍代码保护与加密解密技术在微软.NET框架中的应用。全书分为基础篇、分析篇、保护篇和扩展篇四大部分,内容涉及.NET框架基础、元数据与MSIL、.NET程序与内核调试、主流代码保护及其逆向技术、非托管API应用、64位.NET程序调试等。本书的层次循序渐进,难度深入浅出,且注重实例分析,是软件开发人员了解.NET内核及加密解密技术不可多得的参考书,适合.NET开发人员及加密与解密爱好者阅读。
目录回到顶部↑
第一部分 基础篇
第1章 微软.net框架基本原理
1.1 什么是.net
1.2 编写第一个.net程序
1.2.1 .net开发环境
1.2.2 程序的编译
1.3 逆向第一个.net程序
1.3.1 用ildasm反编译.net程序
1.3.2 反编译的结果:msil与元数据
1.3.3 用ilasm进行再编译
1.4 程序的运行:clr与jit
1.5 小结
第2章 msil中间语言
2.1 msil语言基础
2.1.1 il程序基本结构
2.1.2 2.0版il支持的新特性
2.1.3 一个完整的代码示例
2.2 msil的运行机制:堆栈机
2.3 msil指令
2.3.1 流程控制指令
第1章 微软.net框架基本原理
1.1 什么是.net
1.2 编写第一个.net程序
1.2.1 .net开发环境
1.2.2 程序的编译
1.3 逆向第一个.net程序
1.3.1 用ildasm反编译.net程序
1.3.2 反编译的结果:msil与元数据
1.3.3 用ilasm进行再编译
1.4 程序的运行:clr与jit
1.5 小结
第2章 msil中间语言
2.1 msil语言基础
2.1.1 il程序基本结构
2.1.2 2.0版il支持的新特性
2.1.3 一个完整的代码示例
2.2 msil的运行机制:堆栈机
2.3 msil指令
2.3.1 流程控制指令
前言回到顶部↑
自微软2000年6月宣布其.NET战略以来的八年时间内,.NET技术得到了迅猛发展。越来越多的程序员选择在.NET框架上开发程序,越来越多的企业选择.NET作为自己产品的平台。有商业化的产品,就必然有对其进行保护的需求,于是加密与解密的战场再一次从传统的Win32平台扩展至.NET。可以说,.NET发展的这几年,也是.NET程序加密解密技术飞速成长的几年,其间出现了诸多很有特点的保护技术与逆向技术。但也许是受英语语言的限制及缺少资料的影响,国内许多企业和程序员对目前国内外最新的加密解密技术了解甚少,于是在选择适合自己产品的保护方式时往往无从下手;而加密与解密爱好者在学习.NET逆向技术时,也感到缺乏这方面的资料。于是,我认为很有必要写一本专注于.NET程序加密解密与内核调试的书,希望和读者互相交流,共同提高。.
本书的由来
在调试程序时经常会有这种体会:分析一个保护方式的最好方法就是了解它的历史。因此,先来谈谈本书的诞生。
2004年经朋友介绍我知道了软件安全主题网站——看雪学院,看着前辈高手们在其论坛(看雪论坛)上发表的一篇篇精华文章,实有相见恨晚之感。此时,.NET框架诞生已近4年,但自己对.NET可谓一无所知,国内对这方面的讨论也很少。偶尔的机会,接触到了.NET程序,并在CodeProject网站上搜索到一篇关于去除强名称的文章,这也成了我步入该领域的入门指南。零零星星地,我开始在看雪论坛里发表一些关于.NET程序加密解密的文章,也认识了一些有着同样兴趣的朋友。
2006年,看雪论坛中关于.NET的讨论渐成气候,大家明显感觉到国内在这方面与国外的差距很大,于是经看雪学院支持,将其论坛里在.NET程序加密解密上起步较早的朋友们集合起来,组成“.NET逆向小组”。小组成立以后,大家畅所欲言,互相交流,这段时间也成为小组每个成员成长进步最快的阶段,谈论的话题也已从简单的MSIL修改与编译的“高层次”深入到.NET内核的挂钩与元数据结构的“低层次”上了。
也就是在这一年,看雪学院组织的《加密与解密》第三版的编写启动了实质性工作,并计划在其中加入一个章节讨论.NET程序的加密与解密。正在西藏支边的我,空闲时间相对较多,于是毛遂自荐,希望负责该章节的编写。想不到看雪学院很爽快地答应下来,这也给了我很大的鼓励。写作过程从开始到结束并不长,原因是这些年已经积累了一些.NET程序加密解密方面的资料,再加上国内外尚没有专门讨论该话题的书籍出现,因此写起来倒也算轻松。唯一遗憾的是,看雪学院只给了50页的版面,因此有许多内容被忍痛割爱、再三精简,还有一些知识点根本没有写进去。2007年,在《加密与解密》第三版一书的.NET章节——.NET平台加解密完稿交付的同时,我就决定:单独写一本讨论.NET软件加密与解密问题的书。
本书从开始编写到出版,前后共经历近两年的时间。这段时间恰是.NET保护技术飞速发展的两年,因此在写作过程中,我不断地修改内容,力争将.NET保护的最新发展囊括进来。一个人的力量总是有限的,于是我又积极地寻求小组成员的帮助,多亏他们无私地将自己的成果奉献出来,才使我得以将精力专注于书籍本身而不是无休止地进行程序分析与调试。所以,读者手中的这本书,内容全面、深浅适宜,是国内众多.NET好手智慧的结晶。
本书的特点
我对这本书的整体结构及包含的内容是下了一番工夫琢磨的。首先,我想书在难度上要由浅入深,既让初次接触.NET的读者有耐心和信心读下去,又要让熟悉.NET高层开发的读者能了解相当底层的知识,总体难度为中等偏上。其次,我非常注意可操作性,这是加密解密书籍的重要特点,读者跟着书中的示例及说明进行操作,便可更加牢固和深入掌握知识点。其三是知识点的完备性,本书基本涵盖了目前.NET程序加密与解密领域的所有知识点并能突出重点,因此既可顺序阅读,也可作为手册随时查阅。..
关于加密解密的学习要注意两点:一是知识点的掌握,二是方法的掌握,且后者更重要。读者在阅读本书时,一定要注意体会书中的操作技巧,学会举一反三,方能以不变应万变。
某位大牛说过,技巧与技术是不同的。而本书介绍的都是技巧,因此如何将这些技巧转换为技术,则要靠各位读者自己不懈的努力了。
对读者的要求
本书是针对有一定Win 32和.NET编程和加密解密经验的读者而写的。其中,Win32加密解密的基础知识可以从看雪学院的《加密与解密》第三版中获得,而.NET程序设计的书籍市面上比比皆是,读者可自行选择。
.NET是跨层次的平台,因此对读者的语言要求比较特殊。高层次平台中,读者应熟悉C#或VB.NET等面向.NET的托管程序设计语言;底层调试中,又要求读者熟悉C++、ASM等Win 32编程语言。如果有余力,可以再学习C++/CLI,它是托管与非托管混合编程的语言,对理解.NET平台的底层运行是非常有帮助的。
本书适合以下读者:
希望通过学习.NET框架底层知识,提高自身软件开发水平的.NET程序员;
希望了解.NET加密解密基本原理,以选择合适的.NET保护程序的程序员或公司;
对软件加密与解密感兴趣,并希望了解.NET程序逆向分析技术的读者。
最后,英语虽不是必需,但在这些年的实践中,我深深感到语言的差异严重影响了知识的普及,而且很好地掌握英语会让读者在成长路上如虎添翼,因此建议每一名读者要学好计算机英语。
关于配套下载文件
本书的由来
在调试程序时经常会有这种体会:分析一个保护方式的最好方法就是了解它的历史。因此,先来谈谈本书的诞生。
2004年经朋友介绍我知道了软件安全主题网站——看雪学院,看着前辈高手们在其论坛(看雪论坛)上发表的一篇篇精华文章,实有相见恨晚之感。此时,.NET框架诞生已近4年,但自己对.NET可谓一无所知,国内对这方面的讨论也很少。偶尔的机会,接触到了.NET程序,并在CodeProject网站上搜索到一篇关于去除强名称的文章,这也成了我步入该领域的入门指南。零零星星地,我开始在看雪论坛里发表一些关于.NET程序加密解密的文章,也认识了一些有着同样兴趣的朋友。
2006年,看雪论坛中关于.NET的讨论渐成气候,大家明显感觉到国内在这方面与国外的差距很大,于是经看雪学院支持,将其论坛里在.NET程序加密解密上起步较早的朋友们集合起来,组成“.NET逆向小组”。小组成立以后,大家畅所欲言,互相交流,这段时间也成为小组每个成员成长进步最快的阶段,谈论的话题也已从简单的MSIL修改与编译的“高层次”深入到.NET内核的挂钩与元数据结构的“低层次”上了。
也就是在这一年,看雪学院组织的《加密与解密》第三版的编写启动了实质性工作,并计划在其中加入一个章节讨论.NET程序的加密与解密。正在西藏支边的我,空闲时间相对较多,于是毛遂自荐,希望负责该章节的编写。想不到看雪学院很爽快地答应下来,这也给了我很大的鼓励。写作过程从开始到结束并不长,原因是这些年已经积累了一些.NET程序加密解密方面的资料,再加上国内外尚没有专门讨论该话题的书籍出现,因此写起来倒也算轻松。唯一遗憾的是,看雪学院只给了50页的版面,因此有许多内容被忍痛割爱、再三精简,还有一些知识点根本没有写进去。2007年,在《加密与解密》第三版一书的.NET章节——.NET平台加解密完稿交付的同时,我就决定:单独写一本讨论.NET软件加密与解密问题的书。
本书从开始编写到出版,前后共经历近两年的时间。这段时间恰是.NET保护技术飞速发展的两年,因此在写作过程中,我不断地修改内容,力争将.NET保护的最新发展囊括进来。一个人的力量总是有限的,于是我又积极地寻求小组成员的帮助,多亏他们无私地将自己的成果奉献出来,才使我得以将精力专注于书籍本身而不是无休止地进行程序分析与调试。所以,读者手中的这本书,内容全面、深浅适宜,是国内众多.NET好手智慧的结晶。
本书的特点
我对这本书的整体结构及包含的内容是下了一番工夫琢磨的。首先,我想书在难度上要由浅入深,既让初次接触.NET的读者有耐心和信心读下去,又要让熟悉.NET高层开发的读者能了解相当底层的知识,总体难度为中等偏上。其次,我非常注意可操作性,这是加密解密书籍的重要特点,读者跟着书中的示例及说明进行操作,便可更加牢固和深入掌握知识点。其三是知识点的完备性,本书基本涵盖了目前.NET程序加密与解密领域的所有知识点并能突出重点,因此既可顺序阅读,也可作为手册随时查阅。..
关于加密解密的学习要注意两点:一是知识点的掌握,二是方法的掌握,且后者更重要。读者在阅读本书时,一定要注意体会书中的操作技巧,学会举一反三,方能以不变应万变。
某位大牛说过,技巧与技术是不同的。而本书介绍的都是技巧,因此如何将这些技巧转换为技术,则要靠各位读者自己不懈的努力了。
对读者的要求
本书是针对有一定Win 32和.NET编程和加密解密经验的读者而写的。其中,Win32加密解密的基础知识可以从看雪学院的《加密与解密》第三版中获得,而.NET程序设计的书籍市面上比比皆是,读者可自行选择。
.NET是跨层次的平台,因此对读者的语言要求比较特殊。高层次平台中,读者应熟悉C#或VB.NET等面向.NET的托管程序设计语言;底层调试中,又要求读者熟悉C++、ASM等Win 32编程语言。如果有余力,可以再学习C++/CLI,它是托管与非托管混合编程的语言,对理解.NET平台的底层运行是非常有帮助的。
本书适合以下读者:
希望通过学习.NET框架底层知识,提高自身软件开发水平的.NET程序员;
希望了解.NET加密解密基本原理,以选择合适的.NET保护程序的程序员或公司;
对软件加密与解密感兴趣,并希望了解.NET程序逆向分析技术的读者。
最后,英语虽不是必需,但在这些年的实践中,我深深感到语言的差异严重影响了知识的普及,而且很好地掌握英语会让读者在成长路上如虎添翼,因此建议每一名读者要学好计算机英语。
关于配套下载文件
书摘回到顶部↑
第一部分 基础篇
第1章微软.N ET框架基本原理
了解.NET框架的程序运行原理及代码编写方法是学习.NET加密与解密的基础。本章不去长篇大论“什么是.NET”,因为大多数编程书籍已将这个问题解释得很清楚了,从加密与解密的角度帮助读者了解.NET框架才是本章的核心内容。
接下来的内容将以四步走的形式介绍:通过编译第一个.NET程序,学习SDK的基本使用,对.NET程序的运行有感性认识;通过反编译,学习ildasm的使用,掌握.NET逆向的初步技巧;通过修改IL代码并再次编译,对MSIL语言和元数据有初步认识;最后,在以上三步的基础上,理解.NET框架最重要的两个概念:CLR与JIT。
1.1什么是.NET
.NET是架构于操作系统之上的平台,它是一套虚拟机,其核心功能由一系列运行在用户层(ring3层)的DLL文件实现。相对于读者已经非常熟悉的Win32平台,或是尚未普及的、Win64平台,.NET是既有联系又有区别。联系是指,.NET框架构建在Win32/64平台之上,它的核心程序是一系列运行于用户层的DLL,这就决定了.NET的内核实现仍是基于win32/64;区别是指,传统用户层DLL(如Kernel32.dU、User32.dll等)的主要功能是提供API,而同样是由DLL实现的,NET功能要强大得多,它提供了一套完整的程序开发框架,包括新的编程语言、新的程序运行方式、新的服务等,这些都远远超过API涵盖的范围。从上述区别方面来说,可以将.NET当作一个全新的平台来学习。
如果读者熟悉Java或者虚拟机的概念,那么理解.NET会非常容易。如果读者是个新手,也不用担心,只要把握住以下三个.NET最重要的特性。
(1)统一了编程语言。过去,不同编程语言间的协作总有着或多或少的兼容性问题,使用比较麻烦。.NET则统一了编程语言:无论程序是用c#,还是c++,或是VB编写,最终都被编译为.NET中间语言MSIL(简称IL)。这种统一对程序开发的贡献不言而喻,但同时也方便了软件逆向:无须再分别为每一种语言单独编写反编译器。
……
第1章微软.N ET框架基本原理
了解.NET框架的程序运行原理及代码编写方法是学习.NET加密与解密的基础。本章不去长篇大论“什么是.NET”,因为大多数编程书籍已将这个问题解释得很清楚了,从加密与解密的角度帮助读者了解.NET框架才是本章的核心内容。
接下来的内容将以四步走的形式介绍:通过编译第一个.NET程序,学习SDK的基本使用,对.NET程序的运行有感性认识;通过反编译,学习ildasm的使用,掌握.NET逆向的初步技巧;通过修改IL代码并再次编译,对MSIL语言和元数据有初步认识;最后,在以上三步的基础上,理解.NET框架最重要的两个概念:CLR与JIT。
1.1什么是.NET
.NET是架构于操作系统之上的平台,它是一套虚拟机,其核心功能由一系列运行在用户层(ring3层)的DLL文件实现。相对于读者已经非常熟悉的Win32平台,或是尚未普及的、Win64平台,.NET是既有联系又有区别。联系是指,.NET框架构建在Win32/64平台之上,它的核心程序是一系列运行于用户层的DLL,这就决定了.NET的内核实现仍是基于win32/64;区别是指,传统用户层DLL(如Kernel32.dU、User32.dll等)的主要功能是提供API,而同样是由DLL实现的,NET功能要强大得多,它提供了一套完整的程序开发框架,包括新的编程语言、新的程序运行方式、新的服务等,这些都远远超过API涵盖的范围。从上述区别方面来说,可以将.NET当作一个全新的平台来学习。
如果读者熟悉Java或者虚拟机的概念,那么理解.NET会非常容易。如果读者是个新手,也不用担心,只要把握住以下三个.NET最重要的特性。
(1)统一了编程语言。过去,不同编程语言间的协作总有着或多或少的兼容性问题,使用比较麻烦。.NET则统一了编程语言:无论程序是用c#,还是c++,或是VB编写,最终都被编译为.NET中间语言MSIL(简称IL)。这种统一对程序开发的贡献不言而喻,但同时也方便了软件逆向:无须再分别为每一种语言单独编写反编译器。
……


点击看大图






加载中...
