zoukankan      html  css  js  c++  java
  • 反编译之混淆

    反编译原理是什么?

    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反编译工具破解源码

  • 相关阅读:
    【原创】驱动加载之OpenService
    【原创】驱动加载之CreateService
    【原创】驱动加载之OpenSCManager
    【原创】如何由结构体成员的地址逆算出结构体首地址
    【原创+整理】简述何为调用约定,函数导出名以及extern C
    【整理】WDK 和 DDK异同
    java IO流
    java StringBuffer与StringBuilder
    java集合——进度1
    javaweb——总结
  • 原文地址:https://www.cnblogs.com/threestars/p/9305663.html
Copyright © 2011-2022 走看看