反编译之混淆

て烟熏妆下的殇ゞ 提交于 2020-11-04 06:04:16

反编译原理是什么?

C++C语言一般不能反编译为源代码,只能反编译为asm(汇编)语言,因为C较为底层,编译之后不保留任何元信息,而计算机运行的二进制实际上就代表了汇编指令,所以反编译为汇编是较为简单的。

C#Java这类高级语言,尤其是需要运行环境的语言,如果没有混淆,非常容易反编译。原因很简单,这类语言只会编译为中间语言(C#MSIL 微软中间语言,JavaBytecode 字节码),而中间语言与原语言本身较为相似,加上保留的元信息(记录类名、成员函数等信息)就可以反向生成源代码,注意是由反编译器生成,不会与源码完全相同,但可以编译通过。这些特性本身是为反射技术准备的,却被反编译器利用,现在的C#反编译器IL Spy甚至可以反向工程。

 

二、C#  反编译破解工具

 

常用两种:.NET Reflector ILSyp 工具。

 

三、C# 反编译防范措施:

① 设置项目代码反汇编属性(弊大于利,不推荐使用,具体用法:https://www.cnblogs.com/caokai520/p/7711136.html)

② 混淆(重点讲解)

混淆代码对比

未使用混淆工具,反编译出的源码:

使用混淆工具,反编译出的源码:

优点:效果很明显,C#代码通过混淆工具生成后,增加了很多转换过程。这使得反编译工具无法很直观看到源码真正逻辑。

缺点:但源码代码过多转换会使软件本身运行效率降低,甚至会出现报错情况。

、总结

通过与源码对比得出混淆的.dll .exe程序可以通过IL Spy反编译工具获得部分源码而被混淆的.dll .exe程序不能被IL Spy反编译工具破解源码

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!