Allerlei zu fremden Fenstern
-
Ne, leider nicht, das ist eine selbstständige Applikation, die ohne Vollbildmodus arbeitet.
-
Naja, wenn die keine Childwindows hat dann hat sie eben keine...
Wie gesagt, du kannst versuchen im Speicher des Prozesses rumzuwühlen und so Zeug...
-
Okay. Wo finde ich dazu Informationen?
Weiter oben gibt es ja Links, wie ich eigenen Code reinbringe. Wie ich welchen rauskriege, kriege ich damit wohl nicht raus!?
-
-
Okay, habe mir etwas Beispielcode geangelt. Doch wie finde ich die Startadresse des Prozesses bzw. den gesamten Adressraum?
Laut Martin Richter muss ich Brute Force-mäßig durchgehen? http://www.c-plusplus.net/forum/p1227632
-
Ich push Mal vorsichtig.
Eigentlich müsste man auslesen können, wo ein Prozess anfängt. Spy++ kriegt das ja auch hin.
-
kuck dir mal die folgenden tutorials an.
Tut 1
Tut 2im zweiten teil steht beschrieben wie du an den prozessbereich kommst, bzw. wie du in erfahrung bringst wo der bereich des prozesses endet.
-
Cool, danke, das schau ich mir an.

-
Okay, ich habe jetzt Mal probeweise notepad ausgelesen. Ich habe da eine Textdatei geöffnet. Alles, was der gelesen hat, hab ich eine Textdatei gespeichert und mir die angeschaut. Ist ja sehr kryptisch, klar
Aber ich finde jetzt nur sehr partiell irgendwie Substrings. NIcht komplett. Einer ne Idee, wieso?
-
Quelltext?
-
Der Code vom Tut zum geposteten Link 2 durchsucht alle passenden Speicherbereiche, die zu dem Prozess gehören. Aber ich würde doch erwarten, dass sich irgendwo darin die geladene Textdatei komplett befindet oder nicht? Allein für die GUI-Anzeige müsste das doch irgendwo rumfliegen. Ich finde aber nur Teile der in Notepad geladenen Textdatei, manche Teile aber eben auch gar nicht.
Edit: Oder deine Quelltext-Frage bezieht sich darauf, dass Du gerne meinen Quelltext sehen würdest. Aber da ich nicht sicher bin und hier nicht rumspammen will, warte ich erst auf deine Bestätigung.
-
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.
