问题标签 [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.
c++ - 通过 CreateRemoteThread 注入 DLL?
让我们假设远程线程过程如下所示:
然后一切正常,p->MessageBoxW(...)
并按预期显示一个消息框。但是我不想调用GetProcAddress
我在远程线程中使用的每个函数,所以我想我可以在我的模块中创建一个函数导出(创建远程线程的 EXE 文件),以便远程线程只调用LoadLibraryW
加载我的 EXE将文件作为模块放入目标进程的地址空间,并GetProcAddress
获取导出函数的地址以便调用它。
这仍然可以正常工作。但是一旦我将导出的函数更改为
目标进程突然崩溃。不LoadLibrary
解决模块间引用?是否可以将我的模块加载到目标进程的地址空间中,以便可以在不将所有函数地址传递给它的情况下对导出的函数进行编码?
附加信息:对于复制代码的每个人,我必须禁用增量链接,构建为发布并添加模块定义文件以确保Test
导出为Test
而不是导出为_Test@SoMeJuNk
. 由于某种原因,只是前置__declspec(dllexport)
不起作用。模块定义文件如下所示
ThreadData
结构看起来像这样
c++ - C++:DLL注入。为什么 CreateRemoteThread() 在记事本上失败?
我对 DLL 注入很陌生,出于好奇这样做,因为我想在游戏中创建一个覆盖,而不修改他的源代码。
但是现在,我坚持使用基本的 DLL 注入:使用 CreateRemoteThread() 的那个。
我按照本教程(法语,小心):http: //xevia.webege.com/old/atoray/2010/06180.php
我做了什么 :
- 注入在基本程序 Target.exe 上运行良好(参见 Xevia 的链接)
- 我可以看到 EnumProcessModules() 进程加载的 DLL
- 在 Target.exe 中注入后,我可以看到我的“Hook.dll”已经添加。
- [编辑] 检查 exe 版本:记事本和我的注射器都是 32 位的
但是当我在其他进程中注入 dll 时,它似乎不起作用,即使 CreateRemoteThread() 不返回 NULL。
所以我检查了很多帖子,包括这个:如何防止 DLL 注入
还有这个:C++ - CreateRemoteThread DLL Injection [Windows 7] (试过绝对路径,没有成功)
还有许多其他人,无法真正指出问题所在。所以我召唤了神。
1)可能是访问权限问题吗?
2)会不会是我的注射方法,太经典了?我应该尝试哪一个?
3)【主题问题】为什么我的dll没有用CreateRemoteThread注入记事本?
谢谢你的时间。
[对任何语法/公式编辑开放]
c - 使用远程线程进行 DLL 代码注入:将 DLL 文件名/位置存储在目标进程地址空间的什么位置?
这个问题可能没有(有用的)答案,但无论如何。我想通过 DLL 代码注入将代码注入应用程序。计划是:
在目标进程中找到 LoadLibrary 函数的地址。
使用目标进程地址空间中的某处的 WriteProcessMemory() 使用要加载的 DLL 的名称/文件路径编写一个字符串。
使用 CreateRemoteThread() 启动远程线程,LoadLibrary() 的地址作为入口点,指向包含要加载的 DLL 的名称/文件路径的字符串的指针作为 LoadLibrary() 函数的参数。
问题是没有。2. 我将字符串存储在目标进程地址空间的什么位置(不会破坏某些内容)?
如果以前有人问过这个问题,请随时向我指出。
非常感谢您的帮助。
c++ - CreateRemoteThread 不适用于 DLL
我正在尝试注入一个在目标进程中创建 MessageBox 的简单 dll。使用 www 的注射器没有任何问题。但是使用我自己的代码注入根本没有做任何事情(我在notepad.exe上使用它)
我在 VS2017 中将 dll 和此代码编译为 x64 调试。Injector 被创建为 Win32 控制台项目。
代码中的所有阶段都通过了。我得到了进程的句柄,线程句柄也是有效的。但是 GetExitCode 返回 0 所以它一直失败但我不知道为什么?
python - Python (ctypes) CreateRemoteThread 导致进程崩溃
基本上我只是从这个网站复制代码https://www.christophertruncer.com/injecting-shellcode-into-a-remote-process-with-python/ 并将 PID 更改为 Calculator.exe 的 PID。
但是当我运行脚本时,Calculator.exe 崩溃了。我试图注释掉 CreateRemoteThread 行,但没有它,脚本就没有任何意义。
有什么办法可以防止远程进程崩溃?
编辑:打印 GetLastError 函数时,我收到错误消息 87 (ERROR_INVALID_PARAMETER)。
assembly - 为什么使用线程注入注入代码洞穴会使我的目标 win32 EXE 崩溃?
我目前正在尝试将带有线程注入的代码洞穴注入到在我的 win7 (x64) 系统上运行的远程 win32 EXE。为此,我使用 Microsoft VB6,通过它我执行以下操作:
- OpenProcess,获取远程进程的句柄 [OK]
- VirtualAllocEx,在进程内部分配一些空间(以 PAGE_EXECUTE 保护和 MEM_COMMIT 作为参数。lpAddress 设置为 NULL 以便函数确定分配区域的位置)[OK,返回一个有效的偏移量]
- WriteProcessMemory,编写我的 shellcode [好的,实际上正确写入了字节,我已经检查过 CheatEngine/MemoryView]
- CreateRemoteThread,线程注入执行我的代码洞穴
- 我的目标 EXE(刚刚创建的远程线程的主机)此时崩溃(“exename”停止工作)
- WaitForSingleObject / CloseHandle / VirtualFreeEx
为了测试成功的代码注入,我试图注入一个什么都不做的shellcode。我对shellcoding和asm了解不多,但我才刚刚开始学习。
我尝试注入不同的代码,例如: - 只有 NOP(崩溃,但我假设它是正常的):\x90\x90\x90.. - 只有 NULL(与上面相同):\x00\x00\x00.. 但是我不明白的是,RETN 之后的 NOP 也会使我的目标 EXE 崩溃 \x90\x90\x90\xCB。我尝试注入的每个字节序列后跟一个 NULL 字节。
为什么我的目标进程崩溃?我必须注入什么字节序列才能执行不会使我的目标 EXE 崩溃的成功注入(但它什么也没做,只是为了测试注入方案)?
我最终想要做的是向游戏注入一个 PUSH x, CALL 目标函数。但是,如果我的虚拟 shellcode 使我的目标进程崩溃,我假设后一个字节序列也会崩溃。谢谢你的时间。
编辑:我得到的异常是 0xC0000005 [写入时访问冲突]
VB6 代码:只需使用目标 Exe 的 pid 作为参数调用 sub
不过有些奇怪的事情发生了。当我在调用 CreateRemoteThread 之前出于调试目的放置 MsgBox(暂停执行)时,该函数返回一个非 NULL 句柄(但目标 EXE 崩溃)。如果我在调用 CreateRemoteThread 之前没有放置 Msgbox,则会返回一个 NULL 句柄。
c++ - CreateRemoteThread 成功,但某些目标应用的 LoadLibrary 失败
我正在使用 CreateRemoteThread() + LoadLibrary() 方法注入代码。当我在我的 Windows7 64 位操作系统笔记本电脑上运行我的注入器时,一切都很好,并且对于某些目标应用程序,它仍然可以在 Windows Server 2012 R2 64 位中工作。
但是,在这个 Windows Server 2012 环境中,对于某些目标应用程序,它是旧的 MFC 应用程序,CreateRemoteThread 成功但 DllMain 没有被调用,我发现 LoadLibrary() 似乎失败了,通过在创建的远程线程上使用 GetExitCodeThread() .
对于要写入目标进程的内存,我计算了终止的 0 字节。
另外,我已经知道 kernel32.dll 地址对于 Windows 7 和 Windows Server 2012 是相同的,使用下面 URL 答案部分中介绍的方法。
CreateRemoteThread失败,可能是目标进程中的lpBaseAddress无效,是系统分配的?
下面的 GetExitCodeThread() 的退出代码为零。
你知道我接下来应该怀疑什么吗?
总而言之,在下图中,您可以看到唯一的失败是我在 Windows Server 2012 上运行注入器以注入一些旧的 MFC 应用程序。
在下图中,有关于 MFC 应用程序有多旧的信息:
我正在尝试提供足够的信息,如果您需要更多信息,请告诉我。
下面是注入我的 dll 的完整代码:
c - 对于 32 位应用程序,CreateRemoteThread 在 Windows7 64 位上失败
我有一个将 dll 注入进程的代码。执行注入函数的进程始终与注入进程处于相同的架构(x86 或 x64)中。但是由于某种原因,在 Win7 64 位操作系统上,当注入和注入的进程是 x86 架构时,CreateRemoteThread 函数调用失败。令人惊讶的是,当操作系统是 Win10 64bit 时。32 位进程工作正常。该代码也适用于具有 64 位进程的 Win7 64 位,以及具有 32 位进程的 Win7 32 位。
我在互联网上查看了可能的原因,我所能找到的只是在 Win7 中有时会出现进程会话问题。我认为情况并非如此,因为注入和注入进程都是“用户”会话。
运行 GetLastError() 我得到 5 (ERROR_ACCESS_DENIED)
这是我的注入功能:
c++ - 使用 CreateRemoteThread API 时如何修复“LPVOID:未知大小”错误?
我正在尝试创建一个执行工具,DLL-Injection
方法是使用 API 在正在运行的进程的内存中写入 DLL,VirtualAclloc()
然后CreateRemoteThread()
通过将入口点偏移量添加到函数的基地址来找到入口点的偏移量并将其传递给 API VirtualAlloc
。
lpStartAddress
由于在调用时我没有任何需要传递的参数,因此我将其CreateRemoteThread()
初始化lpParameter
为 NULL。
编译代码时出现错误:
LPVOID:未知大小”和消息“表达式必须是指向完整对象类型的指针。
有没有办法可以将值传递lpParameter
为 NULL?
c++ - FreeLibrary 没有解开 DLL
我正在尝试将 DLL 挂接到记事本进程上,然后将其取消挂接。挂钩时,每当用户单击“另存为”时,DLL 应使记事本创建一个隐藏文件(此代码未显示)。脱钩时,情况不应该如此。
但是,由于某种原因,当我收到消息“DLL unhooking from process”时,DLL 仍然没有从记事本进程中解除挂钩,我知道这一点,因为记事本仍然会在不应该这样做的时候创建附加文件。
返回值上没有任何错误消息(至少我不知道),所以我删除了大多数返回值检查。
钩
取消挂钩(在 dll 本身内部)