Всем доброго вечера. В общем всё таки решил начать изучать с++. У меня на FASM остался пример хука VMT. Код (Text): macro m2m dst*,src* { pushd src popd dst };ENDM m2m proc HookMethod uses edi, Table:DWORD,Method:DWORD,Hook:DWORD mov ecx,-1 cld mov edi,[Table] mov eax,[Method] repnz scasd m2m dword[edi-4],[Hook] ret endp Реально такое сделать на с++? Или может быть есть какие то стандартные для этого функции. Помогите пожалуйста.. И если можете, скиньте ссылку на материалы по сплайсингу и т д на с++
Реально, и не сложнее чем на асме. Ставите атрибут write, и пишите нужные байты. Хотя к С++ это отношения не имеет.
Код (Text): void SplaisingVMT(void * Table, void * Method, void * Hook) { __asm mov ecx,-1 __asm cld __asm mov edi,Table __asm mov eax,Method __asm repnz scasd __asm push Hook __asm pop edi-4 return; }; Код (Text): HMODULE hEngine = GetModuleHandle("engine.dll"); void * GameGuardReplay = GetProcAddress(hEngine, nGameGuardReplay); void * UNHandlerTable = GetProcAddress(hEngine, nUNHandlerTable); SplaisingVMT(UNHandlerTable,GameGuardReplay,GameGuardReplayHook); не работает =\
VirtualProtect/WriteProcessMemory Разрешите писать в этот участок сделав его WRITE через VirtualProtect, после этого запись можно делать либо вручную, либо через WriteProcessMemory....
извиняюсь что не по теме но всё же... У меня есть список строк. Код (Text): char * BlackName[]= { "L2UnrealWWindowsViewportWindow", "Lineage II", "l2control", "L2NET", "L2Jes ;) 0.1.193" ***и т д*** } Мне надо проверить название окна с этим списком Код (Text): bool __stdcall FindHookByTitle(HWND hWnd, long lParam) { char TitleName[255]; for(int i = 1; i < sizeof(BlackName); i++) { GetWindowText(hWnd, TitleName, 254); if(strstr(TitleName,BlackName[i]) > 0) { MessageBox(0,"обнаружено окно!!!","обнаружено окно!!",MB_ICONSTOP); ***и т д*** } } return false; }; Это правильно?
strstr тебе рекомендовали юзать для случая, когда все имена записаны в одну строку. А для массива строк лучше юзать if (strcmp(..) == 0)
а) for(int i = 1; i < sizeof(BlackName); i++) // i = 0; b) i < sizeof(BlackName)/sizeof(char*) // в случае если char *BlackName[] = {"first str", "second str", ...};