Code:
#include "header.h"
DWORD Pid;
uint BaseAddress;
HWND hwnd;
bool Fishing=true;
bool run=true;
bool start=false;
enum ObjectManager
{
CurMgrPointer = 0x9BE7E0,
CurMgrOffset = 0x463C,
FirstObject = 0xC0,
NextObject = 0x3C,
LocalGUID = 0xC8,
MouseOverGUID = 0xAD7438,
IsBobbing = 0xD4,
};
enum GameObjectFields
{
OBJECT_FIELD_CREATED_BY = 0x20,
GAMEOBJECT_DISPLAYID = 0x28,
GAMEOBJECT_FLAGS = 0x2C,
};
int main(int argc, char* argv[])
{
Pid = GetPid("Wow.exe");
BaseAddress = GetBase("Wow.exe",Pid);
hwnd = ::FindWindow(NULL,"World of Warcraft");
while(run)
{
if(GetAsyncKeyState(0x70))
{
start=true;
Fishing=false;
}
if(GetAsyncKeyState(0x71))
{
start=false;
}
if(GetAsyncKeyState(0x74))
{
run=false;
}
if(start)
{
Test();
}
}
return 0;
}
void Test()
{
uint ObjectPointer;
ReadProcMem((LPVOID)(BaseAddress + CurMgrPointer),&ObjectPointer,4);
ReadProcMem((LPVOID)(ObjectPointer + CurMgrOffset),&ObjectPointer,4);
UINT64 me;
ReadProcMem((LPVOID)(ObjectPointer + LocalGUID),&me, 8);
ReadProcMem((LPVOID)(ObjectPointer + FirstObject),&ObjectPointer,4);
while (ObjectPointer != 0 && ObjectPointer % 2 == 0)
{
UINT64 gID;
ReadProcMem((LPVOID)(ObjectPointer + 0x30),&gID,8);
uint dsfp;
ReadProcMem((LPVOID)(ObjectPointer + 0xC),&dsfp,4);
UINT64 ofcb;
ReadProcMem((LPVOID)(dsfp + OBJECT_FIELD_CREATED_BY),&ofcb,8);
uint DisplayId;
ReadProcMem((LPVOID)(dsfp + GAMEOBJECT_DISPLAYID),&DisplayId,4);
if(me == ofcb)
{
if(DisplayId == 668)
{
Fishing=true;
uint bb;
ReadProcMem((LPVOID)(ObjectPointer + IsBobbing),&bb,4);
uint Bite = bb;
while(bb == Bite)
{
ReadProcMem((LPVOID)(ObjectPointer + IsBobbing),&bb,4);
Sleep(50);
}
WriteProcMem((LPVOID)(BaseAddress + MouseOverGUID),&gID,8);
Sleep(rand() % 2000 + 1);
::PostMessage(hwnd, WM_KEYDOWN, 0x08 , 0);
::PostMessage(hwnd, WM_KEYUP, 0x08 , 0);
Fishing=false;
Sleep(2000);
}
}
ReadProcMem((LPVOID)(ObjectPointer + NextObject),&ObjectPointer,4);
}
if(!Fishing)
{
::PostMessage(hwnd, WM_KEYDOWN, VkKeyScan('1') , 0);
::PostMessage(hwnd, WM_KEYUP, VkKeyScan('1') , 0);
Sleep(rand() % 5000 + 1);
}
}
void ReadProcMem(void *pAddress, void *pMem, int iSize)
{
HANDLE hProc = OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_WRITE|PROCESS_VM_READ, FALSE, Pid);
DWORD dwOld;
VirtualProtectEx(hProc, pAddress, iSize, PAGE_EXECUTE_READWRITE, &dwOld);
ReadProcessMemory(hProc, pAddress, pMem, iSize, 0);
CloseHandle(hProc);
}
void WriteProcMem(void *pAddress, void *pMem, int iSize)
{
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, Pid);
DWORD dwOld;
VirtualProtectEx(hProc, pAddress, iSize, PAGE_EXECUTE_READWRITE, &dwOld);
WriteProcessMemory(hProc, pAddress, pMem, iSize, 0);
CloseHandle(hProc);
}
unsigned long GetPid(char *procName)
{
PROCESSENTRY32 pe;
HANDLE thSnapshot;
BOOL retval, ProcFound = false;
thSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(thSnapshot == INVALID_HANDLE_VALUE)
{
return false;
}
pe.dwSize = sizeof(PROCESSENTRY32);
retval = Process32First(thSnapshot, &pe);
while(retval)
{
if(strcmp(pe.szExeFile, procName) == 0)
{
ProcFound = true;
break;
}
retval = Process32Next(thSnapshot,&pe);
pe.dwSize = sizeof(PROCESSENTRY32);
}
if (!ProcFound) return 0;
return pe.th32ProcessID;
}
DWORD GetBase(char* DllName, DWORD tPid)
{
HANDLE snapMod;
MODULEENTRY32 me32;
if (tPid == 0) return 0;
snapMod = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, tPid);
me32.dwSize = sizeof(MODULEENTRY32);
if (Module32First(snapMod, &me32))
{
do{
if (strcmp(DllName,me32.szModule) == 0)
{
CloseHandle(snapMod);
return (DWORD) me32.modBaseAddr;
}
}while(Module32Next(snapMod,&me32));
}
CloseHandle(snapMod);
return 0;
}
compile as a COM