首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从注入的DLL中向现有线程添加工作负载

从注入的DLL中向现有线程添加工作负载
EN

Stack Overflow用户
提问于 2020-06-23 16:36:33
回答 1查看 230关注 0票数 0

在我的项目中,我将一个DLL(64位Windows 10)注入到一个外部进程中,其中包含了手动映射和线程劫持,我在其中做了一些事情。

在当前状态下,我使用"RtlCreateUserThread“来创建一个新线程,并在其中执行一些额外的工作负载来分发它以获得更好的性能。

我现在的问题是..。是否可以访问当前进程中的其他线程(劫持它)并在其中添加您自己的工作负载/代码。而不创建一个新线程?

我在互联网上还没有发现任何有用的东西,我使用和修改的线程劫持代码似乎只适用于DLL文件。因为我是C++的新手,所以我仍然在学习,我已经感谢你的帮助了。

(如果您想查看注入器GHInjector的源代码,可以在github上找到库。)

EN

回答 1

Stack Overflow用户

发布于 2020-07-07 10:59:11

这是可能的,但如此复杂,不一定在所有情况下都有效。您需要拼接现有线程的机器代码,因此需要对代码页内存进行写访问。逻辑:

  1. 查找线程id和线程句柄,然后使用SuspendThread WINAPI调用
  2. 挂起的线程现在可以处于等待状态或处于系统DLL调用状态,因此需要分析当前的执行堆栈,对其进行回溯,并从应用程序空间查找执行地址。在某些情况下,您需要API函数StackWalk和PDB文件。它还依赖于运行的体系结构(x86,amd64,.)。遍历堆栈,直到您的EIP/RIP不会在应用程序内存地址空间
  3. 解码机器指令(它将是‘调用’)和连接下一个指令到您的函数调用。您需要使用instructions.
  4. ResumeThread

(裸的)声明函数或执行代码并替换__declspec的__declspec实现函数。

此方法只能工作一次,因为不能保证在循环中执行应用程序代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62539608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档