禁用GPK
它的工作原理通过更换游戏保护DLL。
用途 : - 备份GPKitClt.dll,以防万一。
- 更新过的版本替换当前的GPKitClt.dll。
- 和谐盛大GPK。
文件名: GPKitClt.dll
大小: 3072 B
CRC-32: cc46e781
MD5: 44cfe63d51b766ae5d99bc4964f2040d
SHA-1: fd36ac794bdffae0fc43bc28a288d20c42d24410
#include "stdafx.h"
// Compile with /Zl
EXTERN_C BOOL WINAPI _DllMainCRTStartup(HINSTANCE hInstDll, DWORD fdwReason, LPVOID lpvReserved){
return TRUE
}
/*
dumpbin /exports "D:\游戏\龙之谷\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补丁:未知/未使用的的GPK API函数的调用。这可能会导致一个错误", "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
}
}
|