📄 hookinj.cpp
字号:
#include "stdafx.h"
#include "HookInj.h"
/*#define KPlayer_Base_Addr 0x0082AD34 // 0x0083440C
#define KPlayer_Size 0x0000B304 // 0x0000B2FC
#define NPC_Base_Addr 0x00E172F0 // 0x00E209C8
#define NPC_Size 0x000082F8 // 0x000082F8
#define NPC_SitOffset 0x000000E4 // 0x000000E4
#define NPC_RideHorseOffset 0x00001760 // 0x00001760
#define KPlayer_Sell_Addr 0x11404 // 113FC
#define Func_Spec_Addr 0x004B8B60 // 4B8E30
#define Sell_Func_Param 0x006247B8 // 0x0062DE20
#define DoScript_Addr 0x004A2F80 // 0x004A3350
#define KPlayer_Money1 0x00004D9C // 0x00004D9C
#define KPlayer_Money2 0x00004DB8 // 0x00004DB8
#define Item_Base_Addr 0x00EF3220 // 0x00EFC8F8
#define Item_Size 0x00000538
#define Item_Index_Offset 0x0000B3F8
#define MapOffset 0x0085D1F4 // 0x008668CC-96D8
#define Char_X_Offset 0x0082AD60 // 0x00834438-96D8
#define Char_Y_Offset 0x0082AD64 // 0x0083443C-96D8*/
#define ServerNameOffset 0x00631304
#define PlayerNameAddr 0x00631388
#define MapOffset 0x00869204
#define Expire_Time_Addr 0x00630F80
#define Expire_Date_Addr 0x00630F7C
#define Game_Connection_State 0x00630C10
#define CharList_Char1 0x00630C1C
#define CharList_Char2 0x00630C1C
#define CharList_Char3 0x00630C40
#define Game_Text_Offset 0x00630C64
#define Char_X_Offset 0x00836D70
#define Char_Y_Offset 0x00836D74
#define KPlayer_Base_Addr 0x00836D44
#define KPlayer_Size 0x0000B304
#define KPlayer_Sit_Addr 0xB300
#define KPlayer_Money1 0x00004D9C
#define KPlayer_Money2 0x00004DB8
#define Player_Index_Offset 0x0000B3B4
#define KPlayer_Sell_Addr 0x11404
#define NPC_Base_Addr 0x00E23300
#define NPC_Size 0x000082F8
#define NPC_RideHorseOffset 0x00001760
#define NPC_Trade_State 0x000024C4
#define NPC_Name 0x000012C5
#define Item_Base_Addr 0x00EFF230
#define Item_Size 0x00000538
#define Item_Index_Offset 0x0000B3F8
#define CommFuncOffset 0x004B8BE0
#define CommFuncParam 0x006307C8
#define DoScript_Addr 0x004A2990
#define Do_Use_Item_Offset 0x004EB4E0
const UINT WM_HOOK_WRITE = RegisterWindowMessage("WM_HOOK_WRITE");
const UINT WM_HOOKEX = RegisterWindowMessage("WM_HOOKEX_RK");
const UINT WM_ADVERSTING = RegisterWindowMessage("Adversting");
const UINT WM_ADVERST_TYPE = RegisterWindowMessage("AdverstingType");
const UINT WM_AUTOREPLY = RegisterWindowMessage("AutoReply");
const UINT WM_SELL = RegisterWindowMessage("Sell");
const UINT WM_WORLDTIME = RegisterWindowMessage("WorldTime");
const UINT WM_CITYTIME = RegisterWindowMessage("CityTime");
const UINT WM_GETCHAT = RegisterWindowMessage("GetChat");
const UINT WM_PARENT = RegisterWindowMessage("ParentHWND");
#define WM_GETCHAT1 (WM_USER + 2)
#define SYS_TIMER 1000
#define WM_FEEDBACK WM_USER + 100
#define SHIFTED 0x8000
int AdverstingType = 0;
char Adversting[201] = "";
char AutoReply[201] = "";
bool IsAutoReply = false;
int IsSell = 0;
int WorldTime;
int CityTime;
int CurrentWorldTime = 0;
int CurrentCityTime = 0;
bool GetChat;
HWND ParentHWnd;
HWND vlhwnd;
DWORD OldDebugLogFunc;
HINSTANCE hDll;
WNDPROC OldWndProc = NULL;
LRESULT CALLBACK NewWndProc(HWND,UINT,WPARAM,LPARAM);
VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
UINT_PTR nTimerID = 0;
BOOL bHooked = 0;
void Bin2Hex(unsigned char* source,unsigned char* dest, size_t length) {
static const char *hex = "0123456789ABCDEF";
unsigned char chHexA;
unsigned char chHexB;
size_t i;
for (i=0;i<length;i++) {
chHexA = hex[((unsigned char)(source[i]) >> 4) & 0x0f];
chHexB = hex[(unsigned char)(source[i]) & 0x0f];
dest[i*2] = chHexA;
dest[i*2+1] = chHexB;
}
dest[i*2] = 0;
}
bool IsDebuging;
void DebugLog() {
_asm {
CALL OldDebugLogFunc
}
IsDebuging = true;
DWORD DataSegment ;
byte NetCode = 0;
char adv[300];
char adv1[300];
_asm {
PUSH ECX
MOV DataSegment, ESI
POP ECX
}
DWORD dwProcessID;
HANDLE m_hProcess;
unsigned char advlength;
GetWindowThreadProcessId(vlhwnd, &dwProcessID);
m_hProcess = OpenProcess(PROCESS_VM_READ, FALSE, dwProcessID);
if (!m_hProcess)
return;
ReadProcessMemory(m_hProcess, (LPVOID)(DataSegment), &NetCode, 1, NULL);
if ((NetCode == 0xFB) && GetChat) {
sprintf_s(adv,10,"%d",dwProcessID);
DataSegment = DataSegment+10;
ReadProcessMemory(m_hProcess, (LPVOID)(DataSegment), &adv[6], 32, NULL);
DataSegment = DataSegment+36;
ReadProcessMemory(m_hProcess, (LPVOID)(DataSegment), &advlength, 1, NULL);
DataSegment = DataSegment+1;
size_t ulen = strlen(&adv[6]) + 6;
adv[ulen] = ' ';
adv[ulen+1] = ':';
adv[ulen+2] = ' ';
ReadProcessMemory(m_hProcess, (LPVOID)(DataSegment), &adv[ulen+3], advlength, NULL);
adv[ulen+3+advlength] = 0;
Bin2Hex((unsigned char*)adv,(unsigned char*)adv1,ulen+3+advlength);
WPARAM wParam = GlobalAddAtom(adv1);
SendMessage(ParentHWnd,WM_GETCHAT1, wParam, NULL);
}
IsDebuging = false;
CloseHandle(m_hProcess);
}
void DoScript(char* s)
{
long addr = DoScript_Addr;
__asm {
push eax;
mov eax, s;
push eax;
mov eax, addr;
call eax;
add esp, 4;
pop eax;
pop eax;
}
}
byte IsHorse (){
byte RideHorse;
_asm {
MOV ECX,DWORD PTR DS:[KPlayer_Base_Addr]
MOV EAX,DWORD PTR DS:[NPC_Base_Addr]
MOV EDX,DWORD PTR DS:[ECX+0x0000B3AC]
IMUL EDX,EDX,NPC_Size
MOV EAX,DWORD PTR DS:[EDX+EAX+NPC_RideHorseOffset]
CMP EAX,0
JE JumpOut;
MOV RideHorse,1
JumpOut:
}
return RideHorse;
}
int IsSelling() {
int i;
_asm {
MOV EAX, DWORD PTR DS:[KPlayer_Base_Addr]
MOV ECX, DWORD PTR DS:[EAX + KPlayer_Sell_Addr]
MOV i, ECX
}
return i;
}
void Sell()
{
__asm
{
push eax;
mov ecx,[CommFuncParam];
push 00000000h;
push 00000000h;
push 00000045h;
mov eax, CommFuncOffset;
call eax;
pop eax;
}
}
void SwitchHorse()
{
__asm
{
push eax;
mov ecx,[CommFuncParam];
push 00000000h;
push 00000001h;
push 00000035h;
mov eax, CommFuncOffset;
call eax;
pop eax;
}
}
BOOL APIENTRY DllMain(HANDLE hModule, DWORD uReason, LPVOID lpReserved)
{
if(uReason == DLL_PROCESS_ATTACH)
{
hDll = (HINSTANCE) hModule;
DisableThreadLibraryCalls(hDll);
}
return TRUE;
}
#define pCW ((CWPSTRUCT*)lParam)
/*bool IsBadWord(char * strData) {
bool IsBad = false;
int l = 0;
char StrToCheck[201];
char old = 32;
if (strstr(strData,"c芻")) IsBad = true;
if (strstr(strData,"k芻")) IsBad = true;
if (strstr(strData,"l錸")) IsBad = true;
if (strstr(strData,"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -