如何从注入同一程序的另一个 .dll 调用函数?

2023-12-07

我的问题确实在上面,但是我将在下面提供更多信息:

我有一个程序,它首先获取我的“假”d3d9.dll,然后将该DLL加载到我正在进行逆向工程的游戏中。一段时间后,.dll 被加载,以及所有其他游戏依赖项,我想注入我的 DLL,它将完成逆向工程的所有肮脏工作。

我想我可以使用 LoadLibrary 将此 DLL 加载到程序中,但是当我使用 DLL 时,我注入了运行主要的逆向工程代码。是否有一个函数可以用来调用 d3d9.dll 中的某些内容?

这是因为我仍然需要访问 d3d9 库来渲染我可能想要使用注入的 .dll 添加到屏幕上的内容。我也不想只使用 d3d9.dll,因为这会导致加载时间和内存更改点出现问题。

我也不打算在 DLL 中使用 DllMain,这意味着我还需要从 d3d9.dll 调用远程函数到注入的 DLL,以确保进程安全启动。

抱歉,如果这是一个愚蠢的问题,但是感谢您的回答。


回到过去,我们使用 CreateRemoteThread 并使用 LoadLibraryA 作为 lpStartAddress 的地址(该地址在所有进程中恰好相同)。诀窍是分配您要注入的 DLL 名称VirtualAllocEx并将其用作lpParameter。实际上,您的线程使用您要注入的 DLL 名称调用 LoadLibraryA。当 Dll 加载时,Dllmain 被调用,并且您可以在附加 DLL (DLL_PROCESS_ATTACH) 期间在 Dllmain 中运行代码。

This link有一些关于这样做的非常好的信息。然而,该技术依赖于 Dllmain 函数。如果你可以使用 Dllmain 那么这个机制可能会起作用。该文章中的步骤摘要提供了概述:

现在,我们可以通过以下步骤总结该技术:

Retrieve a HANDLE to the remote process (OpenProces).
Allocate memory in the remote process's address space for injected data (VirtualAllocEx).
Write a copy of the initialised INJDATA structure to the allocated memory (WriteProcessMemory).
Allocate memory in the remote process's address space for injected code.
Write a copy of ThreadFunc to the allocated memory.
Start the remote copy of ThreadFunc via CreateRemoteThread.
Wait until the remote thread terminates (WaitForSingleObject).
Retrieve the result from the remote process (ReadProcessMemory or GetExitCodeThread).
Free the memory allocated in Steps #2 and #4 (VirtualFreeEx).
Close the handles retrieved in Steps #6 and #1 (CloseHandle).

我看到你的评论信息太多了。不确定我是否完全理解。然而 Dllmain 有一些限制,比如大多数 Win32 API 调用不能使用。有一些例外,其中之一是 CreateThread。您是否考虑过分离线程来完成工作?如果您在 Dllmain 中使用 CreateThread,它实际上会被阻塞,直到 Dllmain 退出。因此,一旦 Dllmain 返回,线程就会执行。

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

如何从注入同一程序的另一个 .dll 调用函数? 的相关文章

  • C++ 中的软(不是:弱)引用 - 这可能吗?有实施吗?

    在 C 中我正在使用boost shared ptr and boost weak ptr自动删除不再需要的对象 我知道这些与引用计数一起工作 在 Java 中 内存由垃圾收集器管理 它将内置对象引用视为strong WeakReferen
  • 添加对共享类的多个 WCF 服务的服务引用

    我正在尝试将我的 WCF Web 服务拆分为几个服务 而不是一个巨大的服务 但是 Visual Studio Silverlight 客户端 复制了两个服务共享的公共类 这是一个简单的例子来说明我的问题 在此示例中 有两个服务 两者都返回类
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • 在 C++11 中省略返回类型

    我最近发现自己在 C 11 模式下的 gcc 4 5 中使用了以下宏 define RETURN x gt decltype x return x 并编写这样的函数 template
  • ASP .NET MVC,创建类似路由配置的永久链接

    我需要帮助在 MVC 网站中创建类似 URL 路由的永久链接 Slug 已设置为 www xyz com profile slug 代码为 routes MapRoute name Profile url profile slug defa
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • try-catch 中未处理的异常

    try list from XElement e in d Descendants wix File where e Attribute Name Value Contains temp Name e Parent Parent Attri
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • 获取从属性构造函数内部应用到哪个属性的成员?

    我有一个自定义属性 在自定义属性的构造函数内 我想将属性的属性值设置为属性所应用到的属性的类型 是否有某种方式可以访问该属性所应用到的成员从我的属性类内部 可以从 NET 4 5 using CallerMemberName Somethi
  • 在Windows 7上安装curl后缺少libcurl-4.dll

    按照这个人的安装curl后指示 https stackoverflow com a 28757477 1186038 除了第 2 步 已安装Win64 OpenSSL v1 0 1u 轻型相反 因为下载页面中缺少版本 k http slpr
  • Xamarin Android:获取内存中的所有进程

    有没有办法读取所有进程 而不仅仅是正在运行的进程 如果我对 Android 的理解正确的话 一次只有一个进程在运行 其他所有进程都被冻结 后台进程被忽略 您可以使用以下代码片段获取当前正在运行的所有 Android 应用程序进程 Activ
  • gdb 在 docker 上立即退出“进程已完成,退出代码 1”或 lldb“数据包返回错误 8”。另外:如何在 docker 中允许进行 C++ 调试

    这花了我一整天的时间才找到 所以我将其发布以供将来参考 我正在 docker 镜像上开发 C 我正在使用克利翁 我的代码是在调试模式下编译的 并且在运行模式下运行良好 但是当尝试调试时 进程会立即退出 并显示非常丰富的信息 Process
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • std::bind 重载解析

    下面的代码工作正常 include
  • 从匿名类型获取值

    我有一个方法如下 public void MyMethod object obj implement 我这样称呼它 MyMethod new myparam waoww 那么我该如何实施MyMethod 获取 myparam 值 Edit
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • 为什么我使用google'smtp'无法发送电子邮件?

    我有以下程序使用 smtp gmail com 587 发送电子邮件 namespace TestMailServer class Program static void Main string args MailMessage mail
  • WPF/数据集:如何通过 XAML 将相关表中的数据绑定到数据网格列中?

    我正在使用 WPF DataSet 连接到 SQL Server Express XAML 和 C Visual Studio 2013 Express 我从名为 BankNoteBook 的现有 SQL Server Express 数据

随机推荐

  • SQL 注入 DROP TABLE 不起作用

    我需要使用 PHP MySQL 演示 SQL 注入 我想在登录表单中注入 DROP TABLE 查询 但它永远不起作用 TRUNCATE 表工作正常 OTOH 我输入后 drop table users 作为字段输入 查询结果是 SELEC
  • 按函数对 python 列表进行排序

    我有一个函数 它接受一个对象作为参数并给我一个数字 我希望使用这个数字作为对我的列表进行排序的键 如果我要迭代该列表 我会执行以下操作 sorted list for object in my list of objects i my nu
  • python 中的实例

    我创建了以下示例来理解 python 中的实例 import time class test mytime time time def init self self mytime time time time sleep 1 pass fr
  • 如何使用自签名 OpenSSL 证书在 HTTPS 上测试 PWA?

    我可以使用 localhost 通过 http 测试 serviceworkers 但我想在移动浏览器上测试 因为它是一个单独的设备 所以我无法使用本地主机 所以我使用 PC 的名称 所以现在我需要使用 https 这会在我的服务工作线程中
  • 如何正确序列化和反序列化 CSV?

    我一直在尝试将对象序列化为 CSVString但该对象包含一个List and JsonUnwrapped不起作用List对象 预期样本输出 color part name n red gearbox n red door n red bu
  • 纯 Javascript 图像处理库(二进制形式,不通过 DOM)

    Since File API将允许访问content对于本地文件 现在可以在上传之前调整图像大小 这是一项相当常见的任务 而无需任何其他技术 例如 Flash 或 Silverlight 除了我找不到任何能够处理二进制形式图像的 Javas
  • 调用未定义的函数 mime_content_type(),无法更改服务器设置

    我在标题中发现了错误 调用未定义的函数mime content type 我读过有关重新编译 PHP 以及使用finfo open FILEINFO MIME TYPE 后者的问题是我的PHP版本是5 2 15 太旧了 不支持finfo 所
  • OSGI 发布时暴露“ClassNotFoundException: org.w3c.dom.***”错误

    我只在Activator start 函数中写了以下代码 public void start BundleContext bundleContext throws Exception Activator context bundleCont
  • 尽管 C++ 迭代器不是指针,但为什么它可以被取消引用?

    我正在阅读 C Primer 5th 遇到如下代码 string s some string if s begin s end auto it s begin it toupper it it从迭代器接收一个值到字符串中的第一个字符s 然后
  • 如何根据对象名称重新绑定矩阵?

    我有几个想要的矩阵rbind在一个总结中 它们是不同功能的对象产品 并且它们的名称具有相同的模式 我想做的是告诉 R 查找具有该共同模式的所有对象 然后rbind them 假设这些矩阵存在 commonname N1 lt matrix
  • 如何在 WebStorm 中调试角度量角器测试

    有一种方法可以在 WebStorm 中运行和调试量角器 Web 测试 我只是想分享this在这里回答 获取节点路径 类型which node在你的终端中 在 WebStorm 中 单击 编辑配置 左侧的下拉菜单Run 按钮 绿色箭头就像 播
  • 什么是 IO 流缓冲?

    我无法找到 IO 流缓冲的基本概念及其含义 任何教程和链接都会有所帮助 缓冲是处理输入和输出的软件的基本部分 由于硬件和软件以不同的速度运行 因此缓冲区保存软件接口和硬件接口之间的数据 产生数据的组件可以将其放入缓冲区 然后通过将收集到的数
  • 是否可以使用javascript从目录中读取文件?

    我想读取一个目录并用这些文件的名称填充列表 是否可以使用 javascript 来完成此任务 不 出于安全原因 您也许可以通过调用 ActiveX 或 Flash 并让用户同意允许从这些插件访问文件系统来实现此目的 但请不要这样做 编辑10
  • 如何显示固定的 Vuetify v-date-picker 范围?

    我正在尝试显示 Vuetify 日期range具有特定行为的选择器 用户只能选择日历上的开始日期 该范围有固定的持续时间 所以如果这个持续时间设置为4天 当你点击11月4日时 它会显示从4日到8日的范围 是否可以覆盖 v date pick
  • 如何在pandas中仅在一个级别创建组

    我在 excel 文件中导入下面的 df3 数据框 并希望仅按名称分组 其余重复数据应如下所示 注意 每月数据将按月添加 Df3 pd read Excel Data print df3 Name ID Month Shift Jon 1
  • 为什么 iPad 上的 AES 加密和 PHP 解密会失败?

    我有一个 iPad 应用程序 可以将加密信息传输到基于 PHP 的网站 但我在正确解密此信息时遇到困难 我使用以下代码进行PHP端解密 Decryption function function mc decrypt decrypt key
  • 将 None 转换为空字符串的最惯用方法? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 执行以下操作最惯用的方法是什么 def xstr s if s is None return else return s s xstr a xstr b update 我采纳了 Trypt
  • 在 PHP 中用如此命名的变量替换括号内的文本

    我想替换方括号中的所有字符串 以及从名为该字符串的数组中随机选择的项目 它非常类似于这个问题 但有一点不同 因为我想用名为该数组的字符串替换不同括号的内容 一个例子应该会让这一点更清楚一些 所以说我已经拿到了字符串 This is a ve
  • 获取同一html中隐藏字段的值? [复制]

    这个问题在这里已经有答案了 我想得到的值hidden我的 html 中的字段
  • 如何从注入同一程序的另一个 .dll 调用函数?

    我的问题确实在上面 但是我将在下面提供更多信息 我有一个程序 它首先获取我的 假 d3d9 dll 然后将该DLL加载到我正在进行逆向工程的游戏中 一段时间后 dll 被加载 以及所有其他游戏依赖项 我想注入我的 DLL 它将完成逆向工程的