- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从 Kernel32.dll Hook OpenProcess 以防止所谓的“injector”程序注入(inject)其他 dll进入我的过程:
// -------------------------------------------------------------------
HANDLE WINAPI myOpenProcess(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId)
{
//
if (dwDesiredAccess == PROCESS_ALL_ACCESS || dwDesiredAccess == PROCESS_VM_OPERATION ||
dwDesiredAccess == PROCESS_VM_READ || dwDesiredAccess == PROCESS_VM_WRITE)
{
printf("Blcoked Process ID : %d , DesiredAccess : %d ", dwProcessId, dwDesiredAccess);
return false;
}
//
return dOpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId);
}
如果有人打开“注入(inject)”进程,我需要添加什么才能“检测”?我不想“预防”,我希望“检测”注入(inject)并决定做什么。
最佳答案
该图描述了注入(inject)器通常执行的将 dll 注入(inject)另一个进程的步骤。你的程序应该进行行为分析来决定它是否正在注入(inject)。您需要挂接其他 API,例如 VirtualAlloc
\WriteProcessMemory
、CreateRemoteThread
等
Below shows the approach to follow to analyse the injector flow and block the execution when needed. Injector uses many techniques to inject a dll, the below won't be sufficient to all methods.
//
//HookOpenProcess keep track of opened process handle
//
HANDLE process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procID);
/*
HookVirtualAlloc Check whether the first param is openprocess handle :: Make the suspicion level 3
*/
LPVOID arg = (LPVOID)VirtualAllocEx(process, NULL, ...);
/*
HookWriteProcessMemory Check whether the first param is openprocess handle :: Make the suspicion level 2
*/
int n = WriteProcessMemory(process, .....);
/*
HookCreateRemoteThread Check whether the first param is openprocess handle :: Make the suspicion level 1 and block it from execution
*/
HANDLE threadID = CreateRemoteThread(process, .........);
关于C++ Hooking kernel32.dll OpenProcess 走弯路,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33561251/
是否有 OpenProcess 函数的内核模式版本? 基本上我想从进程 ID 获取进程句柄。具体来说,我想获取系统进程ID的句柄。 谢谢! 最佳答案 如果您位于任意系统线程中,则可以使用 ZwCurr
我正在开发一个应用程序,它可以创建多个桌面并让用户能够在他当前使用的桌面下启动他想要的任何应用程序。 当该桌面关闭时(使用组合键)我想关闭在该桌面下打开的所有应用程序。为此,我使用 EnumProce
我对 win32 api 的 OpenProcess 函数有这个问题。程序旨在通过用户输入从给定程序 PID 和整数地址的程序中读取整数。 int main() { DWORD pidz; int
为了保护我的程序,我想进行检查以检测任何使用我的 PID 执行 OpenProcess 的程序?我想防止其他程序可以轻松获取我的程序的句柄。 我有哪些选择? (WinAPI 等)一旦另一个程序使用 O
在我的 manager.exe 中,我试图更改由我的 service.exe 启动的 worker.exe 的 CPU 使用率。 Service.exe 在系统帐户下运行,而 manager.exe
我有一个应用程序打开另一个非系统 32 位进程,并尝试使用 EnumProcessModulesEx 获取其加载模块的列表,并使用 GetModuleFileNameEx 获取每个模块的路径.它在我的
我正在尝试编写一个程序,该程序从当前目录中的 MinGW 发行版执行 make.exe,并使用其 STDOUT 数据和退出代码。我有一个处理 STDOUT 的句柄,我从中获取数据,使用 CreateP
当我运行我的程序时发生了一些奇怪的事情。当我在 VS 2010 中使用“不调试启动”选项运行它时,OpenProcess 照常返回进程句柄,但是当我在 Windows 资源管理器中运行我的程序时,Op
我正在尝试使用 Visual Studio 2012、c++ 控制台应用程序打开进程并收到 87 错误: #include #include #include #define EXTERN_DL
我制作了这个简单的类来打开一个进程并从中读取内存:问题是当我使用任何内存地址 ReadProcessMemory 调用 ReadDWORD 时失败,错误代码为 6:ERROR_INVALID_HAND
此程序枚举所有句柄并获取它们的名称。 对于 pID 4,OpenProcess 使用 SeDebugPrivilege 获得错误 5。 UAC 关闭。从管理员运行。 启用 SeDebugPrivile
在 Windows 中,我可以通过 CreateProcess() 获取 PROCESS_INFORMATION。但是,是否可以通过 OpenProcess() 获取 PROCESS_INFORMAT
我使用 Windows Hook 向我的应用程序发送消息,系统上的每个应用程序都会通知该应用程序有关 Windows 事件。 为了执行消息参数的编码,我使用了共享内存。外部进程调用 Duplicate
我在实现读取外部进程内存的算法时遇到了一些问题。这是主要代码: System.Diagnostics.Process.EnterDebugMode();
我一直在阅读 Hoglund 的一些书,我想我会在他的“简单调试器”上“开始”... 反正我一直在尝试用线 hProcess = OpenProcess(PROCESS_ALL_ACCESS | PR
根据微软文档,dwDesiredAccess 参数可以是一个或多个进程访问权限。 我想在调用 openProcess 函数时传递两个不同的 dwDesiredAccess(PROCESS_QUERY_
我在 Windows 平台上运行以下代码。目的是了解特定进程 ID 是否引用现有进程。 BOOL bProcessExists = FALSE; HANDLE hProcHandle = ::Open
我正在尝试从 Kernel32.dll Hook OpenProcess 以防止所谓的“injector”程序注入(inject)其他 dll进入我的过程: // ------------------
我正在努力枚举所有用户的 iexplore.exe 实例。我能够获得机器上匹配进程的列表,但要识别用户,我需要使用 OpenProcess。这适用于我自己的实例,但即使以管理员身份运行和 Enable
这些 Windows 函数的等效 API 是什么?如果您不熟悉 Windows 函数,它们所做的只是打开一个进程,访问(读取和写入)它的内存并关闭它的句柄。 这也可以只用系统调用来完成吗? 最佳答案
我是一名优秀的程序员,十分优秀!