问题标签 [createremotethread]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1265 浏览

windows - CreateRemoteThread 如何在幕后工作?

CreateRemoteThread 做什么来实际创建远程线程?

0 投票
1 回答
667 浏览

c# - 从 CreateRemoteThread 运行 DllImport 命令

我有一个名为的函数Msg,它是从名为 .dll 的 dll 导入的tier0.dll。我可以DllImport这样做,但该命令仅在 dll 附加到另一个可以完成 Msg 命令的进程时才有效。使用CreateRemoteThread,有可能我可以Msg使用 C# 调用,同时仍然允许它访问完成命令所需的附加进程的变量?谢谢!

0 投票
1 回答
7134 浏览

c++ - dll注入。使用参数执行 CreateRemoteThread

我编写了运行良好的 dll 注入程序。它将dll加载到远程进程并调用一些函数。现在我想将参数传递给该函数。CreateRemoteThread 为此具有 lpParameter,但是如何在 dll 中获取传递的参数以在函数中使用它?

更新:dll入口点很常见:

Dll 仅包含一个具有以下原型的函数:

调用该函数的代码是:

如您所见,我尝试在 TestFunction 中传递“测试”字符串。但是后来我检查了 TestFunction 中的 ua 参数,它包含一些垃圾。

这是整个项目文件: http:
//pastebin.com/gh4SnhmV
http://pastebin.com/Sq7hpSVx
http://pastebin.com/dvgXpUYz

更新 2
TestFunction 是否应该有一些特定的原型,或者我可以使用任何一个,只要它只有一个 LPVOID 类型的参数?我很困惑。谁能给我一个例子,说明如何用一些参数调用注入的 dll 函数?

0 投票
1 回答
3832 浏览

c++ - 带字符串参数的 CreateRemoteThread 示例

谁能给我一个例子,说明如何使用字符串参数调用注入的 dll 函数?我试图以我知道的方式去做,但得到了错误的结果。我用 分配内存VirtualAllocEx,然后用它写入字符串参数,然后WriteProcessMemory调用CreateRemoteThread将该字符串参数作为参数传递lpParameter。我调用的 DLL 函数具有以下原型:

据我了解,当这个函数被调用时CreateRemoteThreadstr它包含一个指向传递字符串的指针。但事实并非如此;它包含一些垃圾。看起来str参数指向错误的地址。我究竟做错了什么?

这是整个项目文件: http:
//pastebin.com/gh4SnhmV
http://pastebin.com/Sq7hpSVx
http://pastebin.com/dvgXpUYz

0 投票
1 回答
265 浏览

windows - 以内存地址为参数执行远程功能

我正在尝试在正在运行的(旧)Win32 Borland 应用程序中执行一个函数(Window 具有类 OLW_WINDOW)。通过使用 OllyDbg,我发现该函数有一个参数,即内存地址。该函数使用的一个变量/值存储在该地址的偏移量处。我的想法是找到该内存地址(在内存块中处于恒定偏移量),将变量/值更改为我想要的,然后执行该函数。使用 WriteProcessMemory 和 CreateRemoteThread 执行是可以的,但问题是如何找到内存地址/块?在 OllyDbg 中打开“内存映射”时,内存块没有所有者、节或包含。是否可以获得由指定线程创建的内存块列表?或者我可以以某种方式从应用程序中获取它吗?顺便提一句:

0 投票
2 回答
1954 浏览

winapi - ASLR 会导致 DLL 注入地址的摩擦吗?

我正在阅读有关 DLL 注入技术的信息,我想到了这个问题。

假设我们想将一个 DLL 注入到 Windows 7 中的目标进程中,该进程为 kernel32.dll 启用了 ASLR

因此,任何注入代码都不能使用任何 winapi 或任何系统调用,因为假设注入器代码中的 loadLibrary 函数的地址将与目标进程中的地址 loadLibrary 不同,不是吗?

所以这样的调用是CreateRemoteThread行不通的:

如果我在这个推理中错了,请纠正我。

0 投票
2 回答
4270 浏览

c++ - 远程线程调用 LoadLibrary 失败,错误 87

我正在尝试创建一个远程线程,该线程将加载我编写的 DLL,并从中运行一个函数。DLL 工作正常(已检查),但由于某种原因,远程线程失败并且创建它的进程停止响应。

我使用 ollyDebug 尝试查看出了什么问题,我注意到两件事......

  1. 我的字符串(dll 名称和函数名称)正确传递给远程线程
  2. 线程在 LoadLibrary 上失败,最后一个错误代码为 87“ERROR_INVALID_PARAMETER”

我最好的猜测是,远程线程找不到 LoadLibrary (这是因为链接器完成了对我的进程的repspect???,只是猜测......)

我究竟做错了什么?

这是远程功能的代码:

编辑:

这是我将内存分配给远程进程的部分:

编辑:看起来问题是远程线程正在调用“垃圾”地址而不是 LoadLibrary 基地址。是否有可能 Visual Studio 链接远程进程 LoadLibrary 地址错误?

编辑:当我尝试运行与本地线程相同的代码时(我在 CreateRemoteThread 中使用当前进程的句柄),整个事情都运行良好。什么会导致这种情况?

我应该添加调用功能代码吗?它似乎正在完成它的工作,因为代码正在使用正确的参数在远程线程中执行......

代码在VS2010下编译。

data 是一个简单的结构,名称带有 char* 。(因为在代码中明确编写字符串会导致指向我原始进程的指针)。

我究竟做错了什么?

0 投票
6 回答
13394 浏览

winapi - CreateRemoteThread 返回 ERROR_ACCESS_DENIED - Windows 7 DLL 注入

我正在尝试编写一个CreateRemoteThread用于注入 dll 的程序。

问题是 CreateRemoteThread 拒绝工作。GetLastError() 返回 5,即 ERROR_ACCESS_DENIED。我想不通为什么!

我正在观看此视频http://www.youtube.com/watch?v=H3O3hmXkt1I

经过大量的谷歌搜索后,我找不到这不应该工作的原因。

CreateRemoteThread 在 Windows 7 下不起作用吗?如果是这样,我是否犯了任何明显的错误?

0 投票
2 回答
548 浏览

multithreading - 在 Win32 进程中运行的第一个线程是“主线程”吗?需要理解语义

我使用CreateProcess()with创建了一个进程CREATE_SUSPENDED,然后继续在远程进程中创建一小块代码来加载一个 DLL 并调用一个函数(由该 DLL 导出),使用VirtualAllocEx()(with ..., MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE), WriteProcessMemory(),然后调用FlushInstructionCache()该内存块与代码。

之后我调用CreateRemoteThread()调用该代码,为我创建一个hRemoteThread. 我已验证远程代码按预期工作。注意:此代码仅返回,它不调用除LoadLibrary()and之外的任何 API GetProcAddress(),然后调用导出的存根函数,该函数当前仅返回一个值,然后将作为线程的退出状态传递。

现在出现了一个特殊的观察结果:请记住,PROCESS_INFORMATION::hThread仍然是暂停的。当我只是忽略hRemoteThread的退出代码并且也不等待它退出时,一切都“很好”。调用的例程CreateRemoteThread()返回并PROCESS_INFORMATION::hThread恢复,(远程)程序实际上开始运行。

但是,如果我调用WaitForSingleObject(hRemoteThread, INFINITE)或执行以下操作(具有相同的效果):

随后CloseHandle()会导致在恢复hRemoteThread之前完成,PROCESS_INFORMATION::hThread并且该过程只是“消失”。hRemoteThread允许以某种方式完成而不PROCESS_INFORMATION::hThread导致进程终止就足够了。

这看起来有点像竞态条件,因为在某些情况下hRemoteThread可能仍然更快,并且即使我保留代码原样,该过程也可能仍然“消失”。

这是否意味着在进程中运行的第一个线程自动成为主线程并且该主线程有特殊规则?

我一直认为进程在其最后一个线程死亡时结束,而不是在特定线程死亡时结束。

另请注意:这里没有任何调用ExitProcess(),因为hRemoteThread只是返回并且PROCESS_INFORMATION::hThread在我等待hRemoteThread返回时仍然暂停。

这发生在 32 位 Windows XP SP3 上。

编辑:我刚刚尝试了 Sysinternals Process Monitor 来查看发生了什么,我可以验证我之前的观察结果。注入的代码不会崩溃或任何事情,相反,我会看到,如果我不等待线程,它不会在我关闭注入代码的程序之前退出。我在考虑是否CloseHandle(hRemoteThread)应该推迟致电或其他什么...

编辑+1:不是CloseHandle(). 如果我只是为了测试而忽略它,那么在等待线程完成时行为不会改变。

0 投票
1 回答
543 浏览

c++ - CreateRemoteThread:内存管理

我想知道CreateRemoteThread函数的LPVOID lpParameter参数。因为进程不共享内存,远程线程无法访问我们进程中的结构。那么,函数是复制参数并自己管理它,还是我们需要使用VirtualAllocEx分配内存,然后调用WriteProcessMemory将结构实际复制到远程进程中?