强制任何正在运行的进程崩溃

我想崩溃一个正在运行的程序(例如,notepad ++,becrypt,word)来进行软件testing

我知道如何BSOD,我知道如何导致我编写的程序崩溃,我知道如何结束进程 – 但如何崩溃现有的进程我不!

任何帮助?

那么,在远程进程上使用CreateRemoteThread并调用可靠地使进程崩溃的东西 [1]。 我不确定是否CreateRemoteThread防止空指针,但您可以将空地址传递给它,并让远程进程执行该地址。

[1]空指针或空页访问,被零除,调用一个特权指令, int3


例:

 #include <stdio.h> #include <tchar.h> #include <Windows.h> BOOL setCurrentPrivilege(BOOL bEnable, LPCTSTR lpszPrivilege) { HANDLE hToken = 0; if(::OpenThreadToken(::GetCurrentThread(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, FALSE, &hToken) || ::OpenProcessToken(::GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) { TOKEN_PRIVILEGES tp; LUID luid; if(!::LookupPrivilegeValue( NULL, // lookup privilege on local system lpszPrivilege, // privilege to lookup &luid ) ) // receives LUID of privilege { ::CloseHandle(hToken); return FALSE; } tp.PrivilegeCount = 1; tp.Privileges[0].Luid = luid; tp.Privileges[0].Attributes = (bEnable) ? SE_PRIVILEGE_ENABLED : 0; // Enable the privilege or disable all privileges. if(!::AdjustTokenPrivileges( hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL, (PDWORD) NULL) ) { CloseHandle(hToken); return FALSE; } ::CloseHandle(hToken); } return TRUE; } int killProcess(DWORD processID) { HANDLE hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, processID); if(hProcess) { if(!setCurrentPrivilege(TRUE, SE_DEBUG_NAME)) { _tprintf(TEXT("Could not enable debug privilege\n")); } HANDLE hThread = ::CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)1, NULL, 0, NULL); if(hThread) { ::CloseHandle(hThread); } else { _tprintf(TEXT("Error: %d\n"), GetLastError()); ::CloseHandle(hProcess); return 1; } ::CloseHandle(hProcess); } return 0; } int __cdecl _tmain(int argc, _TCHAR *argv[]) { killProcess(3016); } 

当然你要调整killProcess调用PID。 用WNET DDK编译并在2003 R2上测试。

这里的要点是我们告诉远程进程在地址为0x1( (LPTHREAD_START_ROUTINE)1 )的地方执行代码,该代码位于空白页面内,但不是空指针(如果存在对此的检查)。 围绕函数的问题,特别是setCurrentPrivilege被用来获得完全的调试权限,所以我们可以做我们的恶行。

您可以使用DLL注入技术将代码注入到另一个进程中。 然后在你的注入代码中做一些简单的事情,比如放弃()或零除。

需要两步机制:

  1. 注入进程崩溃(使用注入库,使用Detours ,使用挂钩安装等)。 你选择什么取决于你所拥有的时间和知识以及其他的先决条件(如凭证,防注射保护,你想留下的脚印的大小..)
  2. 在注入的进程中执行无效操作(如int 2Eh,除以null等)。