Unity - 使用Reflector-Reflexil反编译游戏

Unity - 使用Reflector-Reflexil反编译游戏

Reflector与Reflexil

Reflector是.NET开发中必备的反编译工具,是一个收费工具,既有桌面版也有VS的插件版本。Reflexil则是桌面版Reflector的一个开源插件。破解安装教程网上有很多。为什么要用Reflexil,单纯使用Reflector进行整个代码项目的导出,然后在VS中就可以反编译、修改了,但是对于大型项目,比如Unity开发的游戏,Reflector反编译出来的结果会出很多错误,改起来特别麻烦。而开源的Reflexil实现了一个完整的指令编辑器,可以直接在Reflector中注入C#代码,实现修改程序集。

Unity Assembly-CSharp.dll

Unity中的自定义脚本都会打包到这个DLL中。

例子

Unity脚本如下,运行时屏幕右上角打印“Test”。

using UnityEngine;
namespace Test
{
    public class MonoBehaviourTest : MonoBehaviour
    {
        string abc;
        void Start()
        {
            abc = "Test";
        }

        private void OnGUI()
        {
            GUI.Label(new Rect(10, 10, 200, 50), abc);
        }
    }
}

Unity - 使用Reflector-Reflexil反编译游戏_第1张图片

选择Mono模式打包,在打包目录下找到Assembly-CSharp.dll,放到Reflector中即可查看源码。在修改之前,右键Assembly-CSharp -> Reflexil -> Save as,先把Assembly-CSharp.dll另存一份。

Unity - 使用Reflector-Reflexil反编译游戏_第2张图片
在脚本上右键可以注入变量、属性、方法等等:

Unity - 使用Reflector-Reflexil反编译游戏_第3张图片

Tools -> Reflexil,打开Reflexil后,选择方法,选择Edit可以直接修改方法的IL代码,也可以选择Replace all with code,即用C#代码替代这个方法,一般用这个。

Unity - 使用Reflector-Reflexil反编译游戏_第4张图片

修改后保存一下,重启一下Reflector即可看到修改后的代码。

Unity - 使用Reflector-Reflexil反编译游戏_第5张图片

最后将这个另存的修改后的Assembly-CSharp.dll,替换原本的,运行打包后的游戏。结果:
Unity - 使用Reflector-Reflexil反编译游戏_第6张图片

后记

为什么要学反编译?上述过程略过了很多细节,但是可以很清楚的看到,未加密的游戏破解是很容易的,所以游戏加密也是开发过程中的重中之重。当然学会了反编译,可以学习好游戏的代码是怎么写的。


链接:
Reflexil:https://github.com/sailro/Reflexil/releases
Reflector:https://www.red-gate.com/products/dotnet-development/reflector/

你可能感兴趣的:(Unity破解与反破解)