It works by replacing the Game Protect Kit DLL.
I wrote it and thought I'd share it in case anyone is interested.
Advantages over game executable patch:
Game .exe does not need to be repatched after updates.
(GPK can be disabled easily by patching the game executable, but I thought this is a nicer way and a longer term solution. Seems this DLL doesn't get updated so often.)
Usage:
- Make a backup of your GPKitClt.dll just in case.
- Replace the current GPKitClt.dll with my patched version.
- Enjoy the game without GPK.
Note: You would probably also want to remove the GPK driver. This patch only prevents it from being used.
Code:
File: GPKitClt.dll Size: 3072 B CRC-32: cc46e781 MD5: 44cfe63d51b766ae5d99bc4964f2040d SHA-1: fd36ac794bdffae0fc43bc28a288d20c42d24410
Code:
Detection ratio: 0 / 42 Analysis date: 2012-02-15 13:34:24 UTC
Source:
Code:
#include "stdafx.h" // Compile with /Zl EXTERN_C BOOL WINAPI _DllMainCRTStartup(HINSTANCE hInstDll, DWORD fdwReason, LPVOID lpvReserved){ return TRUE; } /* dumpbin /exports "c:\Games\Dragon Nest\GPKitClt.dll" File Type: DLL Section contains the following exports for GPKitClt.dll 00000000 characteristics 4B0E44B2 time date stamp Thu Nov 26 10:04:50 2009 0.00 version 1 ordinal base 2 number of functions 0 number of names ordinal hint RVA name 1 000010F0 [NONAME] 2 00001020 [NONAME] Summary 5000 .data 4000 .data0 C000 .data1 A7000 .data2 13000 .rdata 1000 .reloc 90000 .rsrc 4A000 .text */ __declspec(dllexport) void API_init(); __declspec(dllexport) void API_unused(); void func3arg(); void func1arg(); typedef struct{ void* link; void* func3a; void* unknown; void* func3b; void* func1; } data; data d; data *dp; __declspec(naked dllexport) void API_init() { __asm{ pop eax add esp, 8 push eax } dp = &d; d.link = &(d.func3a); d.func3a = func3arg; d.func3b = func3arg; d.func1 = func1arg; //MessageBoxA(NULL, "API init", "GKP Patch", MB_OK); __asm{ mov eax, dp retn } } __declspec(naked dllexport) void API_unused() { __asm{ pop eax //add esp, 12 push eax } //MessageBoxA(NULL, "GPK patch: An unknown/unused GPK API function was called. This will probably cause an error.", "GKP Patch", MB_OK); __asm{ mov eax, 1 retn } } __declspec(naked) void func3arg() { __asm{ pop eax add esp, 12 push eax mov eax, 1 retn } } __declspec(naked) void func1arg() { __asm{ pop eax add esp, 4 push eax mov eax, 1 retn } }
Offtopic:
This game still disables all hot keys while it is focused (like the winkey, global hotkeys set in other applications, etc).
Any tips on how to disable that? I'd like to control my music player while playing the game. :P
//;