Code:
void Inject(HANDLE phandle,DWORD Addr,string Var)
{
unsigned char* Sarray = NULL;
int size;
string_to_bytearray(Var,Sarray,size);
cout<<"Size: "<<size<<endl;
WriteProcessMemory(phandle,(LPVOID *)Addr,(LPVOID)Sarray,size,NULL);
delete [] Sarray;
}
int main()
{
//cout<<intToOpcode(1801309710-5)<<endl;
SetDebuggPrivilege();
HWND WowHwnd = WinGetProcess("World of Warcraft");
DWORD WowPid = GetProcessId(WowHwnd);
HANDLE WowHandle = MemoryOpenByPid(WowPid);
DWORD WowBase = GetModuleBaseAddress(WowPid,"Wow.exe");
cout<<"WowHwnd: "<<WowHwnd<<" WowPid: "<<WowPid<<" WowHandle "<<WowHandle<<" WowBase: "<<WowBase<<endl;
DWORD Direct3D9__Device = 0xA7E20C;
DWORD Direct3D9__Device__OffsetA = 0x27E8;
DWORD Direct3D9__Device__OffsetB = 0xA8;
DWORD EndScene = ReadDword(WowHandle,ReadDword(WowHandle,ReadDword(WowHandle,ReadDword(WowHandle,WowBase +Direct3D9__Device)+Direct3D9__Device__OffsetA))+Direct3D9__Device__OffsetB);
cout<<hex<<EndScene<<endl;
void * CodeCave = VirtualAllocEx(WowHandle, 0, 2048, MEM_COMMIT,PAGE_EXECUTE_READWRITE);
void * injectionAddress = VirtualAllocEx(WowHandle, 0, 0x4, MEM_COMMIT,PAGE_EXECUTE_READWRITE);
WriteInt(WowHandle,(DWORD)injectionAddress,0);
void * returnAddress = VirtualAllocEx(WowHandle, 0, 0x4, MEM_COMMIT,PAGE_EXECUTE_READWRITE);
WriteInt(WowHandle,(DWORD)returnAddress,0);
string EndSceneHook = "89FF5589E59C60A1"+intToOpcode((DWORD)injectionAddress)+"85C07418A1"+intToOpcode((DWORD)injectionAddress)+"FFD0A3"+intToOpcode((DWORD)returnAddress)+"BA"+intToOpcode((DWORD)injectionAddress)+"B900000000890A";
Inject(WowHandle,(DWORD)CodeCave,EndSceneHook);
int sizeJumpBack = 5;
cout<<"Endscene: "<<hex<<EndScene+sizeJumpBack<<endl;
string JumpBackStub = "E9"+intToOpcode(EndScene);
Inject(WowHandle,(DWORD)CodeCave + 40,JumpBackStub);
string HookJump = "E9"+intToOpcode((DWORD)CodeCave-5);// CRASHES HERE!
Inject(WowHandle,EndScene,HookJump);
DWORD FrameScript__Execute = WowBase + 0x425A30;
string command = "print(\"Hello World!\")";
int nSize = command.length() + 0x100;
void * LuaCode = VirtualAllocEx(WowHandle, 0, nSize, MEM_COMMIT | MEM_RESERVE,PAGE_EXECUTE_READWRITE);
WriteString(WowHandle,(DWORD)LuaCode, command.c_str());
string LuaDoString = "B8"+intToOpcode((DWORD)LuaCode)+"6A005050B8"+intToOpcode(FrameScript__Execute)+"FFD083C40CC3";
cout<<LuaDoString<<endl;
void * injectionAsm_Codecave = VirtualAllocEx(WowHandle, 0, LuaDoString.length(), MEM_COMMIT | MEM_RESERVE,PAGE_EXECUTE_READWRITE);
Inject(WowHandle,(DWORD)injectionAsm_Codecave,LuaDoString.c_str());
WriteDword(WowHandle,(DWORD)injectionAddress, (int)injectionAsm_Codecave);
Sleep(5000);
string DisposeHook = "89FF5589E5";
Inject(WowHandle,EndScene,DisposeHook.c_str());
cout<<"DONE!"<<endl;
system("pause");
}
Is my Inject Funktion Ok?