#include "StdAfx.h" #include "HxCrc.h" static LPCTSTR name2="*crc"; static LPCTSTR desc2="CRC bypass (Maple)"; static LPCTSTR vers2="1.20b44"; static LPCTSTR srchCrc = "00 8B 45 10 56 57"; static DWORD hashBeg=0; static DWORD hashEnd=0; static DWORD crcOffset=0; static DWORD rtnCrc=0; DWORD getAsmBuffCrc(); bool CHxCrc::disable() { if (_myIo->debugMode()>3) return CBaseHack::disable(); _myIo->lprintf(MYIO_DEFAULT,"%s cannot be disabled.\r\n", _id); return false; } CHxCrc::CHxCrc() : CBaseHack(name2,vers2,desc2) { if (_valid) return; DWORD tmpAddy; if (!(tmpAddy = _gMem->findAob(_id,"srchCrc",srchCrc))) return; regHook( "Crc",tmpAddy, 5)->makeJmp(getAsmBuffCrc(), rtnCrc); DWORD hashSize =_gMem->hashSize; hashBeg= _gMem->hashBeg; hashEnd= hashBeg + hashSize; crcOffset = (DWORD) _gMem->getOwnHash() - hashBeg; _valid=TRUE; //enable(); } static __declspec( naked ) DWORD getAsmBuffCrc() { __asm { mov eax, offset buffer_begin ; Get address of first instruction in assembly ret buffer_begin: cmp ecx, hashBeg jb orig cmp ecx, hashEnd ja orig add ecx, crcOffset orig: mov eax, dword ptr[ebp+10h] push esi push edi jmp rtnCrc buffer_end: } }