[c++]MemoryRead/Stringsearching

01/08/2010 18:03 Elite*Ruler#1
Hi, ich habe im grunde ne recht simple frage:
wie kann man mit C++ IN PROZESSEN( prozess = x.exe)
nach Strings suchen, z.b. 'hallo' und diese dann ändern.
Folgene situation:
ich will explorer.exe öffnen und alle im ram befindlichen
strings mit dem inhalt 'hallo' will ich in den inhalt lmit '/signed' ändern.

Auch autoit ansätze sind erwünscht( falls das damit überhaupt geht)
01/08/2010 18:13 tim66613#2
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.