反向工程的简单方法:
使用软件:.NET Reflector 。
如图,随便打开一个DLL或者是EXE
所有代码,包括实现细节可以很清楚的看到,该软件还提供了人性化的导出代码功能,软件使用者无需手动复制代码即可获取所有源码。
原因:
基于.Net的编程语言一般都运行在CLR环境上,为了生成可运行在CLR下的DLL,或EXE。需要做一些前期处理:
将各个语言文件编译成为托管模块。 托管模块由元数据与IL构成。
托管模块由如下几个部分构成,通过元数据可以找到代码的引用关系,通过IL可以拿到所有源码。
与C/C++等非托管语言生成的指令不同,为了达到良好的兼容性,IL是不直接操作寄存器的,由CLR解析生成相应的操作寄存器的机器语言,故:IL是一种较易反向的机器语言。
每一个DLL/EXE都是由一个或多个托管模块构成的,导致与非托管语言相比,.NET生成的DLL/EXE较易反向。
基本解决方案:
1.使用代码混淆器 如:Dotfuscator,xeoncode,foxit,.NET Reactor
2.在1的基础上,核心代码使用C/C++编写