Allerlei zu fremden Fenstern
-
Was erwartest du zu finden, und was findest du? Da ich nicht weiß, wie deine Ergebnisse aussehen, kann ich auch nichts dazu sagen.
-
Achso.
Na ja, ich habe notepad geöffnet und damit irgendeine Textdatei1 geöffnet. Jetzt habe ich mein Programm, das liest alles an Speichern aus, die zu dem Prozess von notepad gehören. Das Ausgelesene speichere ich in einer Textdatei2.
In Textdatei1 stehen dann z.B. einfach irgendwelche Begriffe oder Zahlen. Textdatei2 öffne ich dann mit irgendeinem Texteditor und durchsuche diese nach diesen Begriffen oder Zahlen, da ich davon ausgehe, dass die ja dort zu finden sein müssten, da es für mich Sinn ergibt, dass die irgendwo im Speicher liegen.
Und manche Begriffe und Zahlen finde ich, andere wiederum nicht.
Hoffe, das macht mein Problem klarer. Ich will erstmal an einfachen Beispielen rumprobieren.
-
ich bin jetzt nicht so fitt im speicherdurchforsten, ist ne ganze zeit her das ich mich damit beschäftigt habe. aber wenn ich mich recht entsinne, must du zuerst die speicheradresse (VirtualQueryEx) finden wo der text bereich losgeht diese adresse + die größe des bereiches ist dann der gesammte textinhalt der textdatei.
poste halt mal deinen code. ansonsten ist es hoffnungslos dir dabei zu helfen.
-
Ok:
#include <windows.h> #include <iostream> #include <fstream> using namespace std; typedef unsigned int uint; void GetMemMinMax(void); bool ScanMem(DWORD start, DWORD end); HANDLE hproc; DWORD procid; int main(void) { HWND hWnd; hWnd = FindWindow(0,"log.txt - Editor"); if(!hWnd) return 0; GetWindowThreadProcessId(hWnd, &procid); hproc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procid); GetMemMinMax(); CloseHandle(hproc);//<-- Wichtig! int x; cin >> x; return 0; } void GetMemMinMax(void) { MEMORY_BASIC_INFORMATION mbi; unsigned int adress = 0x400000; do { VirtualQueryEx( hproc, (void*)adress, &mbi, sizeof(MEMORY_BASIC_INFORMATION) ); if((mbi.State == MEM_COMMIT)&& (mbi.Protect == PAGE_READWRITE)&& (mbi.Type == MEM_PRIVATE)) { uint start = (uint)mbi.BaseAddress; uint end = (uint)mbi.BaseAddress+mbi.RegionSize; cout << "Bereich: " << hex << start << " - " << hex << end; if(ScanMem(start,end)) break; } adress += mbi.RegionSize; } while(adress < 0x80000000); } bool ScanMem(DWORD start, DWORD end) { cout << " Bereich wird gescannt... "; ofstream ofs("A:/test.txt", ios::app); DWORD read = 0; bool bla = false; char buffer[1024]; for(start;start<end;start++) { ReadProcessMemory( hproc, (void*)start, &buffer, sizeof(char) * 1024, &read ); ofs << buffer; } return bla; }Ist jetzt halt nur C&P und bissel hinzugefügt, also sorry für die Unschönheiten. Und bla nutze ich gerade auch nicht, aber ändert ja sonst nichts.
Code ist wie gesagt von hier: Tut 2
-
Stimmt denn der Startoffset überhaupt? GetSystemInfo liefert die kleinste mögliche Adresse einer Anwendung (SYSTEM_INFO::lpMinimumApplicationAddress), vielleicht solltest du anfangen zu suchen.
-
Das funktioniert, danke.
