案例游戏下载

首先在网上下载个游戏案例,我就以Captain Molly游戏为例

这个游戏玩家默认生命值有5点,咱们通过dll注入修改为10点。

Unity游戏C# dll注入_Hack

dnSpy

我使用dnSpy来查看Unity游戏生成的dll代码,当然你们也可以使用其他工具。

Unity游戏脚本代码最终是生成在Assembly-CSharp.dll里面,我们通过dnSpy打开Assembly-CSharp.dll进行查看。

首先可以看到使用的运行库

Unity游戏C# dll注入_c#_02

我们找到玩家生命值代码

Unity游戏C# dll注入_c#_03

通过代码可以发现,我们可以在其它dll里面调用RestoreHealth来修改玩家的生命值

(当然也可以直接修改这里的代码,这次主要演示dll注入修改)。

Unity游戏C# dll注入_c#_04

HKBH.dll

新建一个C# 类库,Framework就选择和前面一致的4。

Unity游戏C# dll注入_unity_05

添加引用

Unity游戏C# dll注入_Assembly_06

把Assembly-CSharp.dll和UnityEngine开头的dll都添加进来。

Unity游戏C# dll注入_游戏_07

HKBHClass

新建一个HKBHClass类。

using UnityEngine;

namespace HKBH
{
    public class HKBHClass
    {
        public static void Init()
        {
            HKBHClass.HKBHClassInstance = new GameObject();
            HKBHClass.HKBHClassInstance.AddComponent<Hack>();
            UnityEngine.GameObject.DontDestroyOnLoad(HKBHClassInstance);
        }

        public static void OnDestroy()
        {
            GameObject.Destroy(HKBHClassInstance);
        }

        private static GameObject HKBHClassInstance;
    }
}

Hack

新建一个Hack类。

using UnityEngine;
using ChatonShotgun;
namespace HKBH
{
    class Hack : MonoBehaviour
    {
        PlayerHealth playerHealth = FindObjectOfType<PlayerHealth>();

        private void Update()
        {
            playerHealth.RestoreHealth(10);

            if (Input.GetKeyDown(KeyCode.L))
            {
                HKBH.HKBHClass.OnDestroy();
            }
        }
    }
}

代码写完以后就可以生成dll了。

Unity游戏C# dll注入_Hack_08

SharpMonoInjector

我们使用SharpMonoInjector工具来注入dll,当然你也可以使用其他的或者自己写一个。

测试

前面所有东西都准备好以后,打开游戏,然后使用SharpMonoInjector命令行版本来注入。

管理员身份打开cmd

使用教程

Unity游戏C# dll注入_Hack_09

案例

Unity游戏C# dll注入_Assembly_10

结果

Unity游戏C# dll注入_unity_11

Unity游戏C# dll注入_Hack_12