欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

Cecil学习笔记(1)

Cecil学习笔记(1)

之前曾用微软的Phoenix RDK写过一个简单的流程反混淆工具,功能尚不完善。随着Phoenix库的不断升级,功能也随之增强,但与新版本的.NET有个兼容性问题始终无法解决。于是下决心将平台换到Cecil上来。同时还需要用到一个Cecil的子项目FlowAnalysis。
本文就是一篇Cecil与Cecil.FlowAnalysis的学习笔记,参考的对象主要是利用Cecil编写的工具及两个库本身的源代码。
    利用Cecil编写的工具已经有不少,其中Smart Assembly Explorer(以下简称SAE)算是非常经典的一个,最后更新的版本中还包括了FlowAnalysis库的使用;另一个很有名的是Reflector的插件ReflexIL。本文中使用的代码示例主要来自于SAE,在这里感谢一下其作者WiCKY HU无私地将这些代码分享出来。
1.  Cecil学习
1.1.  Cecil简介
    要说Cecil则不能不提MONO,MONO是一个致力于在 Linux, Solaris, Mac OS X, Windows, and Unix等多个系统上运行.NET程序的平台,而Cecil则是MONO下的一个子项目。简单地说,Cecil库用来修改符合ECMA CIL规范的.NET可执行文件。
    Cecil使用简单却功能强大,提供比.NET本身Reflection更多的操作功能,更重要的是它是开源的,于是深得许多大牛的喜爱。(数年前就有大牛推荐偶学这个库了,可惜当时没有实现。)MONO虽然没有提供Cecil的tut,但是Cecil库本身的代码是self pxplanation的,所以学习起来并不困难,再加上有许多开源的工具,学起来更是方便。Cecil开源项目的网址是:http://groups.google.com/group/mono-cecil/web/projects-using-cecil。
1.2.  Cecil总体结构
    用Reflector载入Cecil.dll并查看其结构,可以发现Cecil主要由七个名称空间构成(有时在Reflector中查看比直接阅读源代码还轻松些,特别是对于这种整体结构的把握),如图1所示。

图1  Reflector中查看Cecil的整体结构
    分别浏览各名称空间,便可了解各空间中代码的主要功能。
1.2.1.  Mono.Cecil空间
主要包含一些:
(1)一些.NET关键概念(或者说元数据表)的定义,如AssemblyDefinition、ModuleDefinition、MethodDefinition、EventDefinition等。这些定义的名称直接代表了相应的元数据概念,都是很好理解的,代表了这些概念的MONO实现(或都说Cecil实现)。
(2)一些关键标志的定义,如AssemblyKind:

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功