• 反编译之混淆


    反编译原理是什么?

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

  • 相关阅读:
    【转】一句话设计模式
    【转】Bad Smell(代码的坏味道)
    【转】[重构]Primitive Obsession
    【转】22种代码的坏味道,一句话概括
    【转】C#中的implicit 和 explicit
    【转】100本最棒的英文侦探小说
    [转]Visual Studio调试之符号文件
    【转】简要分析unity3d中剪不断理还乱的yield
    apache https配置步骤
    apache https配置步骤
  • 原文地址:https://www.cnblogs.com/threestars/p/9305663.html
Copyright © 2020-2023  润新知