Asm mit Ollydbg lesen



  • guten morgen liebe community,

    Ich programmiere leider kein Assembler, aber ich kann ein bissl die Grundkenntnisse 🙂
    ich hab mir ollydbg runtergeladen und wollte mein simples programm in ollydbg verändern, also mit

    JMP
    

    überspringen.

    std::cout << "First" << std::endl;
    std::cout << "Loeschen" << std::endl;
    std::cout << "Last" << std::endl;
    

    ich hab nach dem String "Loeschen" gesucht, aber keins gefunden.

    Ich möchte,dass das Programm dann nur "First" und "Last" ausgibt(und "Loeschen" soll es überspringen).

    Wie öffne ich das Programm eigentlich, in welchem Modus? Im Attach oder einfach unter "Open", also Öffnen? Ich habs in beiden probiert,bin aber bei keinem zu einem Ergebnis gekommen.

    Mfg



  • Normalerweise oeffnest du deine Programme via "open".
    Deine Strings werden aller Wahrscheinlichkeit nach nicht zwischen den Codes stehen, also musst du schon im korrekten Speicherabschnitt suchen (data).
    Dadurch hast du allerdings direkt noch nichts gewonnen - alles, was du so in Erfahrung bringen kannst, ist die urspruengliche Adresse des Strings.
    Ich weis zwar nicht, was du mit diesem Spielchen letztendlich bezweckst, aber falls du dich auf diese Weise ans Cracken versuchst, zaeumst du das Pferd irgendwo von hinten auf. Spaetestens bei optimierten Programmen kommst du so nicht weiter.
    Deshalb solltest du deine "bissl [...] Grundkenntnisse" besser erstmal ausbauen.



  • Wie Nobuo T schon gesagt hast, werden die Strings bei den Daten sein. Dort musst Du danach suchen.

    Dann kannst Du einen Breakpoint setzen, der aufgerufen wird, wenn auf die Speicherstelle zugegriffen wird. Wenn Du nun das Programm im Debugger ausführst, wirst der Debugger an der Stelle stehen bleiben, wo auf den String zugegriffen wird. Da es aber innerhalb der Methode geschehen wird, wo die Zeichenkette in COUT geschoben wird, wird es Dir erstmal auch nicht helfen 🙂

    Deshalb würde ich an Deiner Stelle dem Debugger sagen, dass er Dir den Programmanfang zeigen soll. Und dann wirst Du nach so etwas suchen müssen:

    push 0x2334..
    push 0xADF0..
    ...
    CALL 0x03488
    push 0x21334..
    push 0xAEF0..
    ...
    CALL 0x03488
    ...
    

    Oder so etwas ähnliches. Das sind die Funktionsaufrufe, und die kannst du Überspringen.
    Dafür solltest Du einen JMP SHORT verwenden und dann die entsprechende Anzahl von Bytes, die Du überspringen willst angeben.

    Naja, und ansonsten würde ich Dir auch erstmal empfehlen, ein paar asm Programme zu schreiben und Dich etwas mehr damit auseinander zusetzen. Sonst machst Du es Dir eventuell zu schwer und kommst nie ans Ziel (ich möchte aber nicht ausschließen, dass es so nicht geht).



  • Ich möchte natürlich nicht ausschließen, dass es so geht und nicht umgekehrt 🙂


Log in to reply