Follow me on GitHub Follow me on Twitter

防止反向工程的方法1(C#)

   

反向工程的简单方法:  

    使用软件:.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++编写
   

  


 
posted @ 2015-03-14 21:59  官文祥  阅读(560)  评论(7编辑  收藏  举报