Entweder du schreibst ne DLL und injectest die, oder du benutzt ReadProcessMemory() WriteProcessMemory().
Ich würde das erste bevorzugen.
Dann musste nur noch jedes byte von einer Start-Adresse ab(z.B.: 0x0)
bis zur End-Addresse(z.B.: 0x02000000) nach deinem String durchsuchen.
Code:
/**
* Returns the address where @a bytes was found.
*/
void* SearchMemoryFor(const unsigned char* bytes, unsigned long len)
{
SYSTEM_INFO SystemInfo;
MEMORY_BASIC_INFORMATION mib;
GetSystemInfo(&SystemInfo);
void* start = (void*)0;
void* end = SystemInfo.lpMaximumApplicationAddress;
void* addr = start;
while(true) {
size_t ret = VirtualQuery(addr, &mib, sizeof(MEMORY_BASIC_INFORMATION));
if(ret == 0)
break;
addr = (void*)((intptr_t)mib.BaseAddress + mib.RegionSize);
if (addr >= end)
break;
if(mib.State & MEM_COMMIT) {
uint32_t restlen = mib.RegionSize;
for(void* i = mib.BaseAddress; i < addr && restlen >= len; i = (void*)((intptr_t)i + 1)) {
if(memcmp(i, bytes, len) == 0)
return i;
}
}
}
}
MfG tim.