Знаете ли вы, почему я не могу запустить программу при подключении одной из функций kernel32? Я пишу анти-чит и хочу оптимизировать его больше, потому что в данный момент он в потоке, но что-то не так …
Там написано OpenProcess, потому что я пытался до этого перехватить и ту же проблему.
typedef HANDLE ( WINAPI * pOpenProcess )( _In_ HANDLE hProcess,
_In_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
_In_ SIZE_T dwStackSize,
_In_ LPTHREAD_START_ROUTINE lpStartAddress,
_In_ LPVOID lpParameter,
_In_ DWORD dwCreationFlags,
_Out_ LPDWORD lpThreadId );
pOpenProcess original;
__declspec(naked) void hOpenProcess()
{
__asm PUSHAD
__asm PUSHFD
//my actions here
__asm POPFD
__asm POPAD
__asm JMP[original]
};
void ZPerformHook()
{
DWORD Address = ( DWORD )GetProcAddress( GetModuleHandle( TEXT( "kernel32.dll" ) ), "CreateRemoteThread" );
original = ( pOpenProcess )DetourFunction( (PBYTE)Address, (PBYTE)hOpenProcess );
}
«// мои действия здесь» было бы интересно, может быть, вы портите стек.
или, возможно, ошибка в вашей функции DetourFunction.
как ваша программа терпит неудачу? может с нарушением доступа?
также вам не нужно использовать голую функцию. Вы можете просто подключиться к функции, которая имеет точно такую же сигнатуру, что и ваша цель.
не требуется ассм.
HANDLE __stdcall hOpenProcess( HANDLE hProcess,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId )
{
// do your stuff here
std::cout << "From hook" << std::endl;
return original( hProcess, lpThreadAttributes, dwStackSize, lpStartAddress, lpParameter, dwCreationFlags, lpThreadId);
}
если это не работает, проверьте возвращаемое значение GetProcAddress, если это правильно, что-то в вашей функции DetourFunction может работать неправильно.
Вы также можете использовать дизассемблер, такой как beaengine, и сбросить целевую функцию после обхода, чтобы проверить, правильно ли был применен хук.
Других решений пока нет …