C#hook代码如下

using Celeste;
using HarmonyLib;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using static System.Net.WebRequestMethods;namespace ClassLibrary1
{public class Class1{public static int EntryPoint(string arg){//加载hook libSystem.IO.File.AppendAllText("E:\\Celeste\\log.txt", "----------------start log----------------\r\n");var harmony = new Harmony("com.example.patch");harmony.PatchAll();return 0;}//hook 发送数据的类和方法[HarmonyPatch(typeof(Steamworks.InteropHelp))]  //类[HarmonyPatch("TestIfAvailableClient")]  //方法,防止写错尽量用nameof()class Patch01{//Prefix返回一个bool,如果false,则不执行后续Prefix,不执行原始方法[HarmonyPrefix]static bool Prefix(){System.IO.File.AppendAllText("E:\\Celeste\\log.txt", "TestIfAvailableClient\r\n");return false;}Postfix永远执行//[HarmonyPostfix]//static void Postfix(ref int __result)  //__result表示Hook方法的返回值//{//    __result = 0;//}}//hook 发送数据的类和方法[HarmonyPatch(typeof(Steamworks.SteamUserStats))]  //类[HarmonyPatch("RequestCurrentStats")]  //方法,防止写错尽量用nameof()class Patch02{//Prefix返回一个bool,如果false,则不执行后续Prefix,不执行原始方法[HarmonyPrefix]static bool Prefix(){//Achievements.Register(Achievement.PICO8);System.IO.File.AppendAllText("E:\\Celeste\\log.txt", "RequestCurrentStats\r\n");return false;}//Postfix永远执行[HarmonyPostfix]static void Postfix(ref bool __result)  //__result表示Hook方法的返回值{__result = false;}}//hook 发送数据的类和方法[HarmonyPatch(typeof(Steamworks.SteamUserStats))]  //类[HarmonyPatch("RequestGlobalStats")]  //方法,防止写错尽量用nameof()class Patch03{//Prefix返回一个bool,如果false,则不执行后续Prefix,不执行原始方法[HarmonyPrefix]static bool Prefix(){System.IO.File.AppendAllText("E:\\Celeste\\log.txt", "RequestGlobalStats\r\n");return false;}}//hook 发送数据的类和方法[HarmonyPatch(typeof(Steamworks.SteamUserStats))]  //类[HarmonyPatch("GetAchievement")]  //方法,防止写错尽量用nameof()class Patch04{//Prefix返回一个bool,如果false,则不执行后续Prefix,不执行原始方法[HarmonyPrefix]static bool Prefix(){System.IO.File.AppendAllText("E:\\Celeste\\log.txt", "GetAchievement\r\n");return false;}//Postfix永远执行[HarmonyPostfix]static void Postfix(ref bool __result)  //__result表示Hook方法的返回值{__result = false;}}//hook 发送数据的类和方法[HarmonyPatch(typeof(Steamworks.SteamUserStats))]  //类[HarmonyPatch("SetAchievement")]  //方法,防止写错尽量用nameof()class Patch05{//Prefix返回一个bool,如果false,则不执行后续Prefix,不执行原始方法[HarmonyPrefix]static bool Prefix(){System.IO.File.AppendAllText("E:\\Celeste\\log.txt", "SetAchievement\r\n");return false;}}//不知道为什么这个不能进行hookhook 发送数据的类和方法//[HarmonyPatch(typeof(Celeste.Achievements))]  //类//[HarmonyPatch("Has")]  //方法,防止写错尽量用nameof()//class Patch06//{//    //Prefix返回一个bool,如果false,则不执行后续Prefix,不执行原始方法//    [HarmonyPrefix]//    static bool Prefix()//    {//        System.IO.File.AppendAllText("E:\\Celeste\\log.txt", "Has\r\n");//        return false;//    }//    //Postfix永远执行//    [HarmonyPostfix]//    static void Postfix(ref bool __result)  //__result表示Hook方法的返回值//    {//        __result = true;//    }//}}
}

注入代码如下


#include <Windows.h>
#include <stdio.h>
#include <iostream>
#include <mscoree.h>
#include <metahost.h>
#include <assert.h>#define BUFFER_SIZE 500
typedef long (__stdcall *CLRCreateInstance_Des)(REFCLSID clsid, REFIID riid, /*iid_is(riid)*/ LPVOID* ppInterface);static CLRCreateInstance_Des CLRCreateInstance_Fun;void StartTheDotNetRuntime(LPCWSTR runtimeVersion, LPCWSTR dllPath, LPCWSTR startClass, LPCWSTR startMethod, LPCWSTR startArgument)
{ICLRMetaHost* pMetaHost = NULL;ICLRMetaHostPolicy* pMetaHostPolicy = NULL;ICLRDebugging* pCLRDebugging = NULL;CLRCreateInstance_Fun(CLSID_CLRMetaHost, IID_ICLRMetaHost, (LPVOID*)&pMetaHost);CLRCreateInstance_Fun(CLSID_CLRMetaHostPolicy, IID_ICLRMetaHostPolicy, (LPVOID*)&pMetaHostPolicy);CLRCreateInstance_Fun(CLSID_CLRDebugging, IID_ICLRDebugging, (LPVOID*)&pCLRDebugging);DWORD dwVersion = 0;DWORD dwImageVersion = 0;ICLRRuntimeInfo* pRuntimeInfo;HRESULT result;result = pMetaHost->GetRuntime(runtimeVersion, IID_ICLRRuntimeInfo, (LPVOID*)&pRuntimeInfo);assert(SUCCEEDED(result));ICLRRuntimeHost* pRuntimeHost = NULL;result = pRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (LPVOID*)&pRuntimeHost);assert(SUCCEEDED(result));result = pRuntimeHost->Start();assert(SUCCEEDED(result));DWORD dwRetCode = 0;result = pRuntimeHost->ExecuteInDefaultAppDomain(dllPath, startClass, startMethod, startArgument, &dwRetCode);assert(SUCCEEDED(result));pRuntimeHost->Stop();pRuntimeHost->Release();pRuntimeInfo->Release();pCLRDebugging->Release();pMetaHostPolicy->Release();pMetaHost->Release();
}extern "C" void Loader()
{HMODULE hValve = LoadLibrary(L"mscoree.dll");if (hValve!=NULL) {CLRCreateInstance_Fun = (CLRCreateInstance_Des)GetProcAddress((HMODULE)hValve, "CLRCreateInstance");if (CLRCreateInstance_Fun != nullptr) {StartTheDotNetRuntime(L"v4.0.30319", L"ClassLibrary1.dll", L"ClassLibrary1.Class1", L"EntryPoint", L"");}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/858316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大型企业网络DHCP服务器配置安装实践@FreeBSD

企业需求 需要为企业里的机器配置一台DHCP服务器。因为光猫提供DHCP服务的能力很差&#xff0c;多机器dhcp多机器NAT拓扑方式机器一多就卡顿。使用一台路由器来进行子网络的dhcp和NAT服务&#xff0c;分担光猫负载&#xff0c;但是还有一部分机器需要放到光猫网络&#xff0c;…

torchinfo这个包中的summary真的很好用

1.安装直接使用 pip 进行安装即可&#xff1a; pip install torchinfo 2.导入该模块 from torchinfo import summary 3.使用模块 summary(model)#这里的model是你自己的model&#xff0c;可以添加参数进去 4.效果图&#xff1a; 第一个图片是直接打印model吗&#xff0c;…

SpringBoot+ENC实现密钥加密及使用原理

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; SpringBootENC实现密钥加密及使用原理 ⏱️ 创作时间&#xff1a; 202…

Biconsumer和Function的区别

在Java中&#xff0c;Function和BiConsumer都是函数式接口&#xff0c;它们是Java 8引入的新特性&#xff0c;旨在支持函数式编程风格和Lambda表达式的使用。这些接口位于java.util.function包下。 Function<T, R> Function<T, R>接口表示一个接受一个类型为T的输…

K8s部署高可用Jenkins

小伙伴们大家好呀&#xff01;断更了近一个月&#xff0c;XiXi去学习了一下K8s和Jenkins的相关技术。学习内容有些庞杂&#xff0c;近一个月的时间里我只学会了一些皮毛&#xff0c;更多的内容还需要后面不断学习&#xff0c;不断积累。最主要的是云主机真得很贵&#xff0c;为…

Go 编码建议——安全篇

文章目录 1.内存管理1.切片长度校验2.指针判空3.整数安全 1.内存管理 1.切片长度校验 在对 slice 进行操作时&#xff0c;必须判断长度是否合法&#xff0c;防止程序 panic。 // bad: slice bounds out of range func foo(slice []int){fmt.Println(slice[:10]) }// good: c…

注意 llamaIndex 中 Chroma 的坑!

llamaIndex 做索引是默认存在内存中&#xff0c;由于索引需要通过网络调用 API&#xff0c;而且索引是比较耗时的操作&#xff0c;为了避免每次都进行索引&#xff0c;使用向量数据库进行 Embedding 存储以提高效率。首先将 Document 解析成 Node&#xff0c;索引时调用 Embedd…

一、系统学习微服务遇到的问题集合

1、启动了nacos服务&#xff0c;没有在注册列表 应该是版本问题 Alibaba-nacos版本 nacos-文档 Spring Cloud Alibaba-中文 Spring-Cloud-Alibaba-英文 Spring-Cloud-Gateway 写的很好的一篇文章 在Spring initial上面配置 start.aliyun.com 重新下载 < 2、 No Feign…

力扣SQL50 求关注者的数量 分组计数

Problem: 1729. 求关注者的数量 Code select user_id, count(1) followers_count from Followers group by user_id order by user_id;

运算放大器(运放)低通滤波反相放大器电路和积分器电路

低通滤波反相放大器电路 运放积分器电路请访问下行链接 运算放大器(运放)积分器电路 设计目标 输入ViMin输入ViMax输出VoMin输出VoMaxBW&#xff1a;fp电源Vee电源Vcc–0.1V0.1V–2V2V2kHz–2.5V2.5V 设计说明 这款可调式低通反相放大器电路可将信号电平放大 26dB 或 20V/…

全面理解-Flutter(万字长文,深度解析)

1、Web 性能差&#xff0c;跟原生 App 存在肉眼可见的差距&#xff1b; 2、React Native 跟 Web 相比&#xff0c;支持的能力非常有限&#xff0c;特定长场景问题&#xff0c;需要三端团队一个一个处理&#xff1b; 3、Web 浏览器的安卓碎片化严重&#xff08;感谢 X5&#x…

ScheduledExecutor使用之——重复创建停止周期性任务

一、背景 在Java中&#xff0c;ScheduledExecutorService是一个用于处理需要定时或周期性执行的任务的强大工具。如果你想要重复地创建和停止周期性任务&#xff0c;你可以使用ScheduledExecutorService的scheduleAtFixedRate或scheduleWithFixedDelay方法&#xff0c;并且结合…

【Android面试八股文】在 Android 的 View 分发机制中有哪些反向制约的方法?

文章目录 一、在 Android 的 View 分发机制中有哪些反向制约的方法?1.1 `requestDisallowInterceptTouchEvent` 方法1.1.1 源码分析1.2 事件回调方法中干预父 View 的行为1.2.1 示例代码1.3 总结一、在 Android 的 View 分发机制中有哪些反向制约的方法? 在 Android 的 View…

【C++算法】——高精度(加,减,乘,除)

前言 高精度算法就是为了去解决一些比较大的数&#xff0c;这些数大到long long都存不下。&#xff0c;这里的主要思想就是用字符串来存。 下面的内容有很多用到c的容器&#xff0c;不明白的可以先去学习stl。 一 高精度加法 首先第一步就是去模拟我们自己写的加法&#xff…

Nikto一键扫描Web服务器(KALI工具系列三十)

目录 1、KALI LINUX 简介 2、Nikto工具简介 3、信息收集 3.1 目标IP&#xff08;服务器) 3.2kali的IP 4、操作实例 4.1 基本扫描 4.2 扫描特定端口 4.3 保存扫描结果 4.4 指定保存格式 4.5 连接尝试 4.6 仅扫描文件上传 5、总结 1、KALI LINUX 简介 Kali Linux 是一…

2024最新版:C++用Vcpkg搭配VS2022安装matplotlib-cpp库

matplotlib-cpp是一个用于在C中使用matplotlib绘图库的头文件库。它提供了一个简单的接口&#xff0c;使得在C中创建和显示图形变得更加容易。这个库的灵感来自于Python的matplotlib库&#xff0c;它使得在C中进行数据可视化变得更加便捷。 matplotlib-cpp允许在C中使用类似Py…

vue3第五阶段开发文档,后台管理系统

1 5.1 案例——后台管理系统 5.1.1 准备工作 1. 创建项目 打开命令行工具&#xff0c;切换到 D:\vue\chapter05 目录&#xff0c;使用 npm 包管理工具创建一个名称 为 manage-system 的项目&#xff0c;具体命令如下。 npm create vite4.1.0 manage-system -- -…

CTFHUB-SSRF-端口扫描

已经提示我们需要扫描8000~9000的端口 ?urlhttp://127.0.0.1:8000/flag.php 访问用burp抓包爆破 通过Burp扫描8000-9000端口开放的web服务&#xff0c;发现8718开放web服务

QML 列表,图片展示(一)

文章目录 1.QML 列表&#xff0c;图片展示效果图2.项目基本说明3.项目详解3.1界面显示部分3.2 网络部分 4.源代码5.flickr图片查询链接&#xff0c;后面我们将调整代码&#xff0c;获取更多图片 1.QML 列表&#xff0c;图片展示效果图 2.项目基本说明 该项目来自Qt示例程序 Ph…