Сейчас на форуме: tyns777, zombi-vadim (+4 невидимых) |
eXeL@B —› Программирование —› Перехват CreateThread API |
Посл.ответ | Сообщение |
|
Создано: 27 ноября 2007 15:09 · Поправил: Hill · Личное сообщение · #1 Народ подскажите как сделать сабж? А то чето притомился с ним. Вот собсна код: . . if (EnableDebugPrivilege()) //задаем дебаг привилегии gcnew intercept(CrThrAddress); else . . bool Interception(PROC pfnCurrent) { DWORD bw,Writen; Byte* Buffer,Buff; HANDLE hProcess; intercept^ MyProc; try { hProcess= OpenProcess(PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_VM_OPERATION,fals e, GetCurrentProcessId()); MyProc=gcnew intercept(gcnew Interceptor(),&Interceptor::MyCreateThread); //инициализация структуры перехвата CreateThread //сохраняем старое начало функции ReadProcessMemory(hProcess, pfnCurrent, &Buff, sizeof(Buffer), (SIZE_T *)bw); DWORD dwDummy; //Разрешим запись в эту страницу VirtualProtect(pfnCurrent, sizeof(Buffer), PAGE_EXECUTE_READWRITE, &dwDummy); //записываем новое начало CreateThread if (!WriteProcessMemory(hProcess, pfnCurrent,Buffer,sizeof(Buffer),(SIZE_T*) Writen)) //Interceptor::RunThreads(); return true; } catch (...) { } return false; } уже как только не пытался... погуглил, пересмотрел... а результат один: либо ребут, либо ERROR_NOACCESS P.S. пыпытка остановить все левые потоки приводит к полному зависанию... То ди я где то накосячил то ли это такие особенности 2005 студии и дллок с CLR заголовками... |
|
Создано: 27 ноября 2007 15:56 · Поправил: Rascal · Личное сообщение · #2 //Разрешим запись в эту страницу VirtualProtect(pfnCurrent, sizeof(Buffer), PAGE_EXECUTE_READWRITE, &dwDummy); Если в чужом процессе хочешь открыть доступ для изменения, почему функция не VirtualProtectEx? Если это длл, то зачем ваще WriteProcessMemory с ридом. проще через асм вставку. Синтаксис паленый. Я не уверен, что это компилится в натив код... И так и не понял что ты пишешь через WritePRocessMemory ----- Недостаточно только получить знания:надо найти им приложение |
|
Создано: 27 ноября 2007 16:13 · Личное сообщение · #3 |
|
Создано: 27 ноября 2007 16:21 · Личное сообщение · #4 |
|
Создано: 27 ноября 2007 16:25 · Личное сообщение · #5 |
|
Создано: 27 ноября 2007 16:31 · Поправил: Ice-T · Личное сообщение · #6 |
|
Создано: 27 ноября 2007 16:44 · Личное сообщение · #7 |
|
Создано: 27 ноября 2007 16:56 · Поправил: Hellspawn · Личное сообщение · #8 __ пишет: сомнительное утверждение почему это? раскал как раз прав...
я думаю комментарии излишни з.ы. Билли заботится о вас ----- [nice coder and reverser] |
|
Создано: 27 ноября 2007 17:07 · Личное сообщение · #9 |
|
Создано: 27 ноября 2007 17:59 · Личное сообщение · #10 |
|
Создано: 27 ноября 2007 18:07 · Личное сообщение · #11 |
|
Создано: 27 ноября 2007 18:10 · Личное сообщение · #12 |
|
Создано: 27 ноября 2007 18:24 · Личное сообщение · #13 это чтоб сомнения пропали #include <windows.h> #pragma comment(linker, "/ENTRY:start") #pragma comment(lib, "kernel32.lib") #pragma comment(lib, "user32.lib") void start() { char buff[4096] = {0}; if ( WriteProcessMemory(GetCurrentProcess(), GetModuleHandle(NULL), buff, 4096, NULL) ) MessageBox(NULL, "Done!", NULL, MB_OK | MB_ICONINFORMATION); else MessageBox(NULL, "An error occured", NULL, MB_OK | MB_ICONERROR); ExitProcess(0); } |
|
Создано: 27 ноября 2007 18:34 · Поправил: Rascal · Личное сообщение · #14 |
|
Создано: 27 ноября 2007 23:02 · Личное сообщение · #15 |
|
Создано: 27 ноября 2007 23:59 · Поправил: Error_Log · Личное сообщение · #16 Hill пишет: изменить надо в родном процессе и перехватывать тоже в родном 1) Писать в своем процессе через WriteProcessMemory -- это жесть, для этого есть memcpy. 2) Чтобы задать права на запись -- VirtualProtect 3) В доке по WriteProcessMemory сказанно >>The entire area to be written to must be accessible. Имхо accessible не значит PAGE_READWRITE, насчет VirtualProtect там молчек; правда я сам не проверял, может от DEBUG_PROCESS зависит. 4) Кстати sizeof(Buffer) - это размер указателя если jmp - поставь 5 ----- Research is my purpose |
|
Создано: 28 ноября 2007 07:56 · Личное сообщение · #17 2 Error_Log Да я ошибки нашел почти сразу как только тему написал! Так что исправил... Error_Log пишет: 1) Писать в своем процессе через WriteProcessMemory -- это жесть, для этого есть memcpy. извините мне WriteProcessMemory привычнее, хотя тут ты прав. Error_Log пишет: 4) Кстати sizeof(Buffer) - это размер указателя если jmp - поставь 5 у мну нормально работат... кстати косяк был не тут а тут: if (!WriteProcessMemory(hProcess, pfnCurrent,Buffer,sizeof(Buffer),(SIZE_T*) Writen)) Хохотал долго... |
eXeL@B —› Программирование —› Перехват CreateThread API |