Afro Опубликовано 8 июля, 2015 Поделиться Опубликовано 8 июля, 2015 Пример использования функции SetThreadContext(Windows.h) для закрытия процесса. Программа завершает процесс путём замены адреса в регистре EIP, адресом "ExitProcess" из библиотеки kernel32.dll Спойлер #include <iostream> #include <Windows.h> #include <tlhelp32.h> using namespace std; int main() { DWORD PID = NULL; HANDLE hPESnap; HANDLE hTHSnap; THREADENTRY32 te32; PROCESSENTRY32 pe32; CONTEXT ctx; ctx.ContextFlags = CONTEXT_CONTROL; HMODULE kernel = GetModuleHandle("kernel32"); te32.dwSize = sizeof(THREADENTRY32); pe32.dwSize = sizeof(PROCESSENTRY32); hPESnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (!Process32First(hPESnap, & pe32)) return 2; do { if (stricmp(pe32.szExeFile, "uTorrent.exe") == 0) { PID = pe32.th32ProcessID; break; } } while (Process32Next(hPESnap, & pe32)); hTHSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); while (Thread32Next(hTHSnap, & te32)) { if (PID == te32.th32OwnerProcessID) { cout << "Opening thread handle Thread ID:" << te32.th32ThreadID; HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, false, te32.th32ThreadID); cout << "Setting thread context\n\n"; SuspendThread(hThread); GetThreadContext(hThread, & ctx); ctx.Eip = (DWORD) GetProcAddress(kernel, "ExitProcess"); SetThreadContext(hThread, & ctx); ResumeThread(hThread); CloseHandle(hThread); } } CloseHandle(hTHSnap); CloseHandle(hPESnap); return 0; } 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
AngrySchoolBoy Опубликовано 8 июля, 2015 Поделиться Опубликовано 8 июля, 2015 + Можно осуществить иньекцию кода и заставить приложение своим же потоком его выполнить, дабы не создавать отдельный поток. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 9 июля, 2015 Поделиться Опубликовано 9 июля, 2015 + Можешь просто вызывать RtlRemoteCall Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения