Das Programm liefert immer -1 zurück. Die Sig stimmt (per DLL geht es),
aber extern will es nicht ganz. Kann mir einer erklären warum er fehlschlägt?
Habe es auch mit SetDebugPrivileges() probiert.
Danke im vorraus. Gruß, Tom
Code:
// INCLUDES //
#include <iostream>
#include <Windows.h>
// NAMESPACE //
using namespace std;
// Debug permissions
bool SetDebugPrivileges()
{
HANDLE hToken;
TOKEN_PRIVILEGES tokenPriv;
tokenPriv.PrivilegeCount = 1;
if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
return false;
if(!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tokenPriv.Privileges[0].Luid))
return false;
tokenPriv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if(!AdjustTokenPrivileges(hToken, false, &tokenPriv, sizeof(TOKEN_PRIVILEGES), NULL, NULL))
return false;
return true;
}
// Credits to Patrick, Dominik, Wav, GD and UC
bool VerifyAddress( HANDLE hProcess, DWORD dwAddress, PBYTE bMask, char *szMask )
{
PBYTE *pTemp = { 0 };
for ( int i = 0; *szMask; ++szMask, ++bMask, ++i )
{
if ( !ReadProcessMemory( hProcess, reinterpret_cast<LPCVOID>(dwAddress + i), &pTemp, 2048, 0 ) )
return false;
if ( *szMask == 'x' && reinterpret_cast<char*>(pTemp) != reinterpret_cast<char*>(*bMask))
return false;
}
return true;
}
DWORD ForzaExternalFindPattern( HANDLE hProcess, PBYTE bMask, char *szMask )
{
for ( DWORD dwCurrentAddress = 0x401000; dwCurrentAddress < 0x196000; dwCurrentAddress++ )
if ( VerifyAddress( hProcess, dwCurrentAddress, bMask, szMask ) )
return (unsigned long)dwCurrentAddress;
return -1;
}
// MAIN FUNCTION //
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// set permissions
// SetDebugPrivileges ();
// vars
HANDLE hProcess;
DWORD pID; HWND hWnd;
unsigned long Address; char buffer [255];
hWnd = FindWindow(NULL, "ByteShooter");
GetWindowThreadProcessId(hWnd, &pID);
hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, pID);
Address = ForzaExternalFindPattern (hProcess, (PBYTE)"\x4E\x4F\x52\x45\x41\x44\x00\x00", "xxxxxxxx");
sprintf (buffer, "%ld", Address);
MessageBoxA (NULL, buffer ,"", MB_OK);
// END OF APP
return 0;
}






