问题标签 [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.
python - CreateRemoteThread() 未按预期运行
我正在阅读 Gray Hat Python 这本书,并且在使用上述注入技术时遇到了麻烦。
DLL 注入代码成功运行,但 dll 中的代码似乎没有执行,也没有创建消息框。
代码注入声称执行成功,但终止进程的shellcode没有正确执行,接收注入的进程立即停止工作。
这些问题是因为 Windows 7 和这本书有点过时吗?或者会不会有其他问题?我正在运行 Windows 7 Ultimate 64 位。
无论如何,这里是代码:
dll_inject.py
code_inject.py
注入的.dll
browser - 互联网浏览器,谷歌浏览器注入
我编写了在 Internet Explorer/Chrome 中注入函数的代码,但它不适用于这些进程。基本上,它用我的函数需要的所有 API、字符串和其他数据填充一个大结构,然后它打开一个进程来获取句柄,virtualallocex
分配足够的内存来存储函数和结构,然后编写函数和分配的内存中的结构。然后它在createremotethread
那里运行,函数作为起始地址,结构作为参数。
它适用于 calc/notepad/winamp 进程,但浏览器注入有问题。
我想知道它可能是什么,我正在使用这些 API。
是因为浏览器现在受到保护并且它们以最低权限运行吗?
detection - 停止或检测 dll 注入加载库
我想检测 dll 注入器。下面的代码作为 dll 注入器工作。我需要你在 c# 源代码中的帮助,它可以帮助我检测然后我将关闭我的应用程序。我在 google.com 中搜索了很多但很累得到解决方案。请帮助并给我 C# 中的源代码
}
c++ - 访问外部进程的内存
我一直在阅读网站并在谷歌上搜索试图找到我想要做的事情的最终答案,但我没有找到一个能回答我所有问题的答案。
我有两个过程。一个有一个整数变量,我想通过第二个过程来改变它。我知道如何读取/写入特定的内存位置,但我只知道如何在本机进程地址上执行此操作。
我不明白createremotethread。有没有可能我得到最干净、最简单的操作内存的例子,而不是正在运行的程序本机的进程?当然,假设两个程序都在运行。
提前致谢
编辑:我从其他来源得到了一些关于我的问题的答案。我只想了解如何将变量写入内存位置,例如:
WriteProcessMemory(phandle,(void*)address,val,sizeof(val),NULL);
假设 val 是布尔值,这似乎没有效果:
总是显示 0。为什么?
c - 为什么 CreateRemoteThread 在这里工作?
我正在尝试将一个线程注入另一个进程,让该进程加载一个外部 dll。
这是我在互联网上找到的代码,它有效。
但据我了解,返回的地址GetProcAddress
存在于当前进程的内存空间中,而不是目标进程。
那么它为什么起作用呢?
在 Windows 7 上测试
c# - 将托管 dll 注入本机进程
我正在尝试将托管 c# dll 注入本机可执行文件。我将以下代码注入可执行文件以加载 CLR。
我知道注入有效,因为当我将代码注入 cmd.exe 时,它会正确输出。我知道CLRCreateInstance、pMetaHost->GetRuntime、pRuntimeInfo->GetInterface都返回 S_OK,但pClrRuntimeHost->Start()返回 E_FAIL。
这只发生在我将 dll 注入远程进程时。如果我在自己的进程中加载 dll 并从那里调用 Main,所有调用都返回 S_OK 并且托管代码运行良好。
更新:我尝试将代码注入其他进程,如 notepad.exe 和 explorer.exe。它在那些运行良好。我仍然很好奇它为什么不在 cmd.exe 中运行,但我只是将它用于测试目的,所以它不再是问题了。
GetLastError 返回“试图引用不存在的令牌”
windbg - RtlUserThreadStart 之前的 0xC0000022
我正在注入一些代码来挂钩进程中的 api,但在 chrome.exe 等某些应用程序中存在一些问题
我的测试应用程序启动一个暂停的进程,进行注入和 api 挂钩,然后恢复它。
挂钩 CreateProcessW 是为了能够挂钩子进程。如果调用了CreateProcessW,则强制创建挂起,hook子并恢复。
注入的代码仅依赖于 ntdll api,因此,虽然挂钩进程尚未完全初始化,但 ntdll.dll 始终存在。
使用带有 CREATE_SUSPENDED 标志的 CreateRemoteThread 或 NtCreateThreadEx 使用辅助线程注入代码。(不管哪一个,问题依然存在)
在此介绍之后,问题是在某些进程(如某些 chrome 子进程)中,CreateRemoteThread 返回 TRUE,但是当我恢复注入器线程时,它以代码 0xC0000022 退出并且进程也退出。
如果我将 WinDbg 附加到暂停的 chrome.exe 子进程,在我做任何事情之前,它也会失败并且 chrome.exe 以相同的行为结束。
似乎在 RtlUserThreadStart 之前执行的操作系统代码会生成错误,但我不知道如何调试它。
如何调试在 RtlUserThreadStart 之前运行的代码?是否有允许我这样做的调试器或 windbg 选项?
编辑:
从这里的最后一篇文章之后,我可以检索到这个信息:
该进程是使用受限令牌创建的,主线程继承它,但我的注入器线程不受限制,因为它是由我的应用程序创建的。
我可以假设 ntdll 的 api 还没有被 chrome 钩住(在这种情况下),因为注入发生在 CreateProcess 返回到 chrome 之前。
我的线程中的非限制令牌可能会以某种方式与进程令牌冲突吗?
c# - 如何将非成员函数的地址存储在 DWORD (c++) 中
我想这样做的原因是:我有 ac#winforms 应用程序和一个将被注入另一个进程的 c++ DLL。从 c# 应用程序中,我想使用远程进程地址空间内的非成员函数的地址调用 CreateRemoteThread()。我设置了一个 MemoryMappedFile 以允许 DLL 和应用程序共享一个包含我想要的任何变量的结构,目前它只包含:
如果 DWORD 不是在这里使用的最佳类型,那么我可以使用不同的类型,我只是想确保变量中有足够的空间来保存指针,结构的 C# 版本包含相同的变量,除了它的类型是 IntPtr。远程进程是一个 32 位进程,但如果我可以免费获得 64 位支持,那也很好。我试着做:
但这不起作用。我尝试使用它和一些类型转换无济于事。我所做的所有搜索都是人们希望做同样的事情,但我收集到的成员函数是不可能的,因为您需要对象实例和函数的地址。我觉得这很简单,而且我遗漏了一些明显的东西,我对 c++ 很陌生,虽然我已经使用 .Net 很长时间了,但我几乎从未使用过指针。总而言之,当从 C# 中的 MMF 读取时,我需要 structs 数据类型中的变量能够自动解释为 IntPtr,并且我需要该变量的内容是远程进程地址中 DLL 函数的地址空间。
感谢您的阅读,感谢任何和所有建设性的帮助!
dll-injection - DLL注入在暂停进程中不起作用
我正在使用 CreateRemoteThread api 将 dll 注入进程。这在进程处于运行状态时有效。但是,如果我使用 CreateProcess api 启动处于挂起状态的进程并尝试将 dll 注入其中,则 dll 注入不起作用。但是如果我使用没有挂起标志的 createprocess,那么我可以注入 dll。谁能告诉我这个问题的解决方案?
c# - CreateRemoteThread 说文件不存在,但它确实存在
我正在尝试通过使用互操作将 .dll 注入另一个进程的内存。
这是我的 C# 代码:
该函数的代码Inject
是这样的(注意注释return -6
):
我认为我得到的错误可能具有误导性,因为该文件确实存在于该文件夹中。我还认为错误可能是因为LoadLibraryA
ASCII 的,甚至尝试使用LoadLibraryW
,但我仍然遇到同样的问题。
如果有人知道可能出了什么问题,你能给我提供正确的方向吗?