1

ゲームのアンチチート プログラムからのすべての SSDT フック アドレスを持っています (カーネル ディテクティブから)。しかし、私のコードはアドレスの 16 進数の内容を変更できないようです。助けてください。ありがとう。

フックするアドレス:

Address             : 0x805D2C44
Location            : ntkrnlpa.exe [PAGE]
Len                 : 5
State               : Relative Call :: call 0x8931C5B0
Current Value       : E8 67 99 D4 08 
Original Value      : E8 95 88 FE FF 
Destination Module  : 0x8931C5B0 :: -

コード:

#define NTKRNLPA01 0x805D2C44
...
MemRelace((void *)(NTKRNLPA01), (void *)"\xE8\x95\x88\xFE\xFF", 5)

MemReplace 関数:

bool MemReplace(VOID *lpMem, VOID *lpSrc, DWORD len)
{
  DWORD lpflOldProtect, flNewProtect = PAGE_READWRITE;

  unsigned char *pDst = (unsigned char *)lpMem, 

  *pSrc = (unsigned char *)lpSrc;

  if (VirtualProtect(lpMem,len,flNewProtect,&lpflOldProtect))
  {
      while(len-- >0) *pDst++ = *pSrc++;
      VirtualProtect(lpMem,len, lpflOldProtect,&lpflOldProtect);
      FlushInstructionCache(GetCurrentProcess(), lpMem, len);
      return 1;
  }

  return 0;
}
4

1 に答える 1

0

そのアドレスはカーネルのアドレス空間に存在するため、自分でカーネルランドにいなければアクセスできません (つまり、ring0 ドライバーがなければ、このタスクは実行できません)。

于 2012-07-16T07:00:38.430 に答える