通过注入的 DLL 绕过成员函数

2023-12-08

原帖:


经过几个小时的搜索并尝试找到解决方案后,我想出了这个不错的小解决方案:

#include <windows.h>
#include <detours.h>

typedef void (__thiscall * CClassFunction_t)(void *__this, unsigned int unk1);
CClassFunction_t Real_CClassFunction;

void __fastcall Mine_CClassFunction(void *__this, int edx, unsigned int unk1)
{
    Real_CClassFunction(__this, unk1);
}

template<typename T>
void HookFunction(const char *module, char *signature, T &fn_real, PVOID fn_mine)
{
    HookFunction<T>(DetourFindFunction(module, signature), fn_real, fn_mine);
}

template<typename T>
void HookFunction(DWORD address, T &fn_real, PVOID fn_mine)
{
    HookFunction<T>(reinterpret_cast<PVOID>(address), fn_real, fn_mine);
}

template<typename T>
void HookFunction(PVOID target, T &fn_real, PVOID fn_mine)
{
    fn_real = reinterpret_cast<T>(target);

    HookFunction<T>(fn_real, fn_mine);
}

template<typename T>
void HookFunction(T &fn_real, PVOID fn_mine)
{
    DetourAttach(&(PVOID&)fn_real, fn_mine);
}


void ApplyHooks()
{
    DetourTransactionBegin();
    DetourUpdateThread(GetCurrentThread());

    DWORD function_address = 0x12345678;

    HookFunction<CClassFunction_t>(address, Real_CClassFunction, Mine_CClassFunction);

    DetourTransactionCommit();
}

BOOL APIENTRY DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
    switch (dwReason)
    {
        case DLL_PROCESS_ATTACH:
        case DLL_THREAD_ATTACH:
        {
            DisableThreadLibraryCalls(hInstance);

            CreateThread(0, 0, (LPTHREAD_START_ROUTINE)ApplyHooks, 0, 0, 0);

            break;
        }
    }

    return TRUE;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过注入的 DLL 绕过成员函数 的相关文章

随机推荐

  • Hbase 错误“错误:KeeperErrorCode = NoNode for /hbase/master”

    在 hbase shell 中执行任何命令时 我在 hbase shell 中收到以下错误 ERROR KeeperErrorCode NoNode for hbase master 启动HBASE HOSTCHND hbase 2 0 0
  • 实现可以将提示视为实际语句吗?

    在C中 register存储限定符是hint对于实现来说 应该尽可能快地访问此类标识符 例如 存储在 CPU 寄存器中 6 7 1具有存储类说明符寄存器的对象的标识符声明表明对该对象的访问应尽可能快 这些建议的有效程度取决于实施情况 and
  • FTP从服务器直接下载文件到客户端

    我尝试将文件从 FTP 服务器下载到客户端 如果我使用ftp get 文件被下载到PHP服务器 PHP服务器可以将输出写入浏览器 所以下载过程是 FTP server gt PHP server gt client 这会使流量加倍 这对于下
  • 如何在服务方法中完全运行后台进程?

    您好 任何人都可以告诉我如何在没有活动的情况下在服务中运行此代码 我已经在活动中完成了此代码 但我不希望它成为一个应用程序 我需要它在服务中只是为了在服务上显示它 谢谢我已尝试过 但我的活动每 30 分钟显示一次 这是我的代码 public
  • SwiftUI:使用切换删除单元格时索引超出范围

    我在删除包含切换的单元格时遇到问题 我的模型看起来像这样 class Model ObservableObject Published var items Item init items Item self items items stru
  • relativelayout正在全屏显示wrap_content

    Why does FOOBARZ get layed out all the way at the bottom when no elements are layout height fill parent in other words a
  • javascript 代码在 JSF xhtml 页面中不起作用

    这是运行代码fiddle您将看到它在这里工作得很好 但是当我在 xhtml 页面中使用 glassfish server 3 2 1 在 eclipse 中运行此代码时 它会给出此错误 javax servlet ServletExcept
  • 在 Web 视图中重复使用 MSAL 的访问令牌

    在我的 iOS 应用程序中 我目前正在通过MSAL iOS SDK并且运行良好 在应用程序的某个位置 我还需要显示一个网站 通过 UIWebView 打开 该网站也需要相同的 Azure AD 身份验证 由于我已经通过 SDK 进行了身份验
  • 将 OpenMP 与 Windows SDK 结合使用

    我知道 VC2010 Express Edition 不包含 OpenMP 支持 因此会报告 omp h 文件丢失 因此 我在Windows中安装了Windows SDK v7 1 64位版本 然而 即使我跑了 set DISTUTIL U
  • 检查字符串中的特殊字符(/*-+_@&$#%)?

    如何检查字符串以确保它仅包含数字 字母或空格 在 C 中这很简单 private bool HasSpecialChars string yourString return yourString Any ch gt char IsLette
  • Prolog:为什么我的谓词返回 false?

    所以我写了一个谓词来计算一个元素在列表列表中出现的次数 count 0 base case count Elem Rest OtherLists Elem Count Elem is the head of sublist count Re
  • grep for String 并在相应行打开

    我在通过以下方式获得的几行中的多个文件中多次出现特定字符串grep grep rn include cpp mystring lib mlib actionbuttonrule cpp 300 mystring Foobar lib mli
  • 如何更改 pdb 文件的链名称?

    我想将 PDB 文件的链重命名为 6gch https www rcsb org struct 6GCH 我检查了Biopython手册 似乎找不到任何东西 任何输入都会有很大帮助 你确实可以改变id链元素的属性 之后您可以使用PDBIO保
  • 使用 Node 和 Express 4 进行基本 HTTP 身份验证

    看起来使用 Express v3 实现基本的 HTTP 身份验证很简单 app use express basicAuth username password 版本 4 我使用的是 4 2 删除了basicAuth不过 中间件 所以我有点卡
  • 如何相对于图像定位背景图像上的 UI 元素

    我之前在这里问过问题如何在ScrollView中制作全屏背景图像并保持宽高比并从 eks crypto 得到非常好的答案 再次感谢您 我的图像上有带有文本的按钮 1 2 3 4 5 等 之前我使用硬编码的 X 和 Y 坐标在背景图像上定位
  • 在jsf页面中使用ckeditor

    如何在 jsf 页面中使用自定义 CKEditor 我在尝试实现它时遇到了很多麻烦 我做了什么 我用以下命令制作了一个自定义 CKEditorckEditor构建器 下载并将其放在我的 webcontent 文件夹中 test xhtml页
  • 如何在 R 中向量化 for 循环

    我正在尝试清理这段代码 并且想知道是否有人对如何在 R 中运行它而无需循环有任何建议 我有一个名为 data 的数据集 包含 100 个变量和 200 000 个观察值 我想要做的本质上是通过将每个观察值乘以特定标量来扩展数据集 然后将数据
  • 将框架中的一组小部件居中对齐

    如果框架的行中有一个小部件 我可以将其与任何一侧对齐sticky 或通过省略居中对齐sticky 但是 当一行中有多个列时 其中的对象最终会左对齐 而我希望它们留在中心 同时保持大小 代码摘录 from Tkinter import N W
  • 获取我的机器人发送的消息的消息 ID

    我需要获取我的不和谐机器人发送的消息的消息 ID 它发送丰富的嵌入 Thanks 当你使用TextChannel send 或任何其他类型的 send在 Discord js 中 它返回一个Promise这将通过您刚刚发送的消息来解决 要处
  • 通过注入的 DLL 绕过成员函数

    原帖 经过几个小时的搜索并尝试找到解决方案后 我想出了这个不错的小解决方案 include