当前位置: 首页 > news >正文

注入Unity mono游戏过程详解

注入Unity mono游戏过程详解

AppNinja

(8条消息) 注入Unity mono游戏过程详解_AppNinja的博客-CSDN博客

1、用 dnspy 查看 Assembly-CSharp.dll 使用的.net框架版本。

如图为.NET4

2、用 vs2010编译.net4的C# 类库工程,编译后生成 UnityPluginDemo.dll

Cheat.cs代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace UnityPluginDemo
{
    public class Cheat
    {
        static void WriteLog(string content)
        {
            string path = "D:/unityplugin.txt";
            FileStream fs = null;
            if (File.Exists(path))
            {
                fs = new FileStream(path, FileMode.Append, FileAccess.Write);
            }
            else
            {
                fs = new FileStream(path, FileMode.Create, FileAccess.Write);
            }
            StreamWriter sw = new StreamWriter(fs);
            sw.WriteLine(content);
            sw.Close();
            fs.Close();
        }
        public static void Entry()
        {
            WriteLog("FirstUnityPlugin Enter!");
        }
    }
}

3、使用 SharpMonoInjector.Gui,输入类库信息,注入到目标。查看日志 D:/unityplugin.txt 。

4、调用游戏逻辑类

在UnityPluginDemo工程添加游戏的3个引用:Assembly-CSharp.dll、UnityEngine.CoreModule.dll、UnityEngine.dll。

在Cheat.cs中引用头文件:using UnityEngine;

添加获取游戏对象的代码,查看游戏自己的日志输出。

        public static void Entry()
        {
            WriteLog("FirstUnityPlugin Enter!");

            //GameObject player = 
            PlayerManager.WriteLog("FirstUnityPlugin hook call PlayerManager");

        }

5、使用 MelonLoader install和将UnityExplorer插件放入Mods文件夹查看GameObjects列表。

工具:MelonLoader.Installer.exe、MelonLoader.x86.zip、UnityExplorer.MelonLoader.Mono

6、枚举GameObjects,在GameObjectLabel,实现透视游戏对象。

加载 UnityEngine.IMGUIModule,在OnGUI中实现代码:

        public void OnGUI()
        {
            GUI.Label(new Rect(0, 0, 200, 20), "Hello");

            GameObject[] Objs = GameObject.FindObjectsOfType<GameObject>();
            foreach (GameObject curObj in Objs)
            {
                // 3D坐标转变为屏幕坐标
                Vector3 pos = curObj.transform.position;
                Camera camera = Camera.main;
// 获取屏幕坐标系
                Vector3 screenPos = camera.WorldToScreenPoint(pos); 
// z是负数,在摄像机的后面,就不需要画了。
                if (screenPos.z >= 0) 
                {
                    // UGUI坐标系[0,0]在左上角,屏幕坐标系[0,0]在左下角,所以Unity的Y,需要屏幕高-pos.Y
                    GUI.Label(new Rect(screenPos.x, Screen.height - screenPos.y, 500, 500), curObj.name + ",ScreenH="+Screen.height.ToString() + ",Y=" + screenPos.y.ToString());
                }

            }

        }

7、使用dnSpy调试游戏

dnSpy/dnSpy-Unity-mono: Fork of Unity mono that's used to compile mono.dll with debugging support enabled (github.com)

相关文章:

  • Spring源码问题
  • GO语言的错误处理
  • 一篇文章带你了解——大数据和数据分析有什么区别和联系
  • 软件工程测试与度量课程学习---基本测试过程----线性模型
  • 如何在功能、特点、价格和性能方面选择PDF编辑器?
  • 【Java牛客刷题】入门篇(01)
  • ABAP内表操作
  • php图片素材网毕业设计源码110907
  • RPA前景、要求和学习方向
  • 一些国内镜像 快速源
  • day14网络编程
  • A40I工控主板(SBC-X40I)串口通信测试
  • ue4中Pak文件中挂载的资源名称获取
  • 相信中国杂交水稻技术 国稻种芯:中菲农业创繁荣发展时代
  • 【云原生】基于Kubernetes开发的阿里云ACK之网络管理
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • JavaScript设计模式与开发实践系列之策略模式
  • Sass Day-01
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 分布式任务队列Celery
  • 前端工程化(Gulp、Webpack)-webpack
  • 优化 Vue 项目编译文件大小
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • k8s使用glusterfs实现动态持久化存储
  • 通过调用文摘列表API获取文摘
  • ​【已解决】npm install​卡主不动的情况
  • ​linux启动进程的方式
  • $refs 、$nextTic、动态组件、name的使用
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (39)STM32——FLASH闪存
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (二)JAVA使用POI操作excel
  • (三)c52学习之旅-点亮LED灯
  • (四)库存超卖案例实战——优化redis分布式锁
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转)nsfocus-绿盟科技笔试题目
  • .NET 8.0 中有哪些新的变化?
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET 中的轻量级线程安全
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .NET命名规范和开发约定
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • @在php中起什么作用?
  • [ 数据结构 - C++] AVL树原理及实现
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [1]-基于图搜索的路径规划基础
  • [BZOJ4566][HAOI2016]找相同字符(SAM)
  • [C#]C# OpenVINO部署yolov8图像分类模型
  • [c]扫雷
  • [docker] Docker的数据卷、数据卷容器,容器互联
  • [flume$2]记录一个写自定义Flume拦截器遇到的错误