理论上来说,没有不能破解的程序,因为程序最终都要部署到目标机器上,在目标机器上运行,当然有的程序反编译后只能得到汇编源码,但有了汇编源码就还原了功能。反反编译的手段,主要是提高反编译的难度和门槛。
尤其像C#和java这类语言很容易反编译,因为这类语言编写的程序,都首先会被翻译成一种在.net或java虚拟机平台上运行的“中间语言”IL,只有在程序运行时,运行时编译器(JITter)才将IL代码编译成机器语言。这种IL以dll的形式存在,很容易通过反射、ILDASM和ILASM等方式将代码识别出来。为了保护这类源码,通常是通过混淆器的方式。
下面以C#源码为例,介绍下反反编译的手段。
方法一:在项目文件中增加SuppressIIdasm属性
该方法通过防止IIdasm.exe(MSIL的反编译程序)反编译源码,设置很简单,在属性的程序集配置文件中添加assembly:SuppressIldasm属性即可: