Mit Assembler fremden Speicherbereich lesen



  • Hallo allerseits!
    Ich habe ein Problem und zwar möchte ich unter Linux den Wert unter einer bestimmten Adresse eines Programms auslesen. Ich habe es mit C versucht einem Pointer diese Adresse zuzuweisen und mit cout den Wert auszugeben jedoch kam nur die Ausgabe "Speicherzugriffsfehler". Nach dem ich mich etwas informiert habe habe ich gelesen das man mit Assembler die Werte vom fremden Speicher auslesen kann. Stimmt das und wenn ja kann mir einer ein Beispielcode geben?
    Danke!



  • Wie wärs mit einem Debugger?

    PyDBG ist ganz gut, und gibt es glaub ich auch unter Linux.



  • Danke hab mir gerade den DGB heruntergeladen 😉
    Nun habe ich noch eine Frage ist es möglich auch in einen fremden Speicherbereich zu schreiben?



  • Klar!

    Die Frage ist nur in welcher Sprache du es machen willst.

    Ich nehme dazu Python mit dem C Bibliotheken.



  • Kannst du mir dafür vielleicht einen Beispielcode geben?



  • Unterschiedliche Prozesse haben unterschiedliche Speicherbereiche. Die Trennung stellt das Betriebssystem sicher und ist von aussen nicht zu beinflussen.



  • Naja, so einfach ist das nicht mit einem Beispielcode.

    Dazu braucht man erstmal mehr Informationen.

    Aber wenn es dich wirklich interessiert, dann würde ich dir dieses Buch empfehlen:

    Hacking mit Python | ISBN: 9783898646338

    Geht zwar eigentlich nur um Windows Debugger, Fuzzer usw., aber wenn man es versteht kann man es auch unter Linux nutzen.



  • Ich habe für Windows folgenden Code gefunden der auch funktioniert. Ich bräuchte das nur für Linux

    int main(void)
    {
        HWND hWnd;
        HANDLE hproc;
        DWORD procid;
        DWORD rw = 0;
    
        unsigned adress = 0x00409040;
        int buffer = 0;
    
        hWnd = FindWindow(0,"Opfer");
        if(!hWnd)
            return 0;
    
        GetWindowThreadProcessId(hWnd, &procid);
    
        hproc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procid);
    
        if(ReadProcessMemory(hproc,(LPCVOID)adress,&buffer,
                        sizeof(buffer),&rw))
        {
            cout << "Lesen erfolgreich\n";
            cout << buffer << endl;
        }
        buffer++;
    
        if(WriteProcessMemory(hproc,(LPVOID)adress,&buffer,
                        sizeof(buffer),&rw))
        {
            cout << "Schreiben erfolgreich\n";
        }
    
        CloseHandle(hproc);//<-- Wichtig!
        return 0;
    }
    


  • Was hat das jetzt konkret noch mit Assembler zu tun?
    Sonst verschiebe ich dich mal nach Linux - da kriegst du wahrscheinlich eher hilfreiche Antworten.


Anmelden zum Antworten