Verständnis/Decodierung obskuren Assembler-code

Wie meine Vorherige Frage, es handelt sich um eine Zuordnung, wo eine Methode aufgerufen wird, die erfordert ein gewisses Passwort, der code ist verborgen, und wir müssen folgern, dass das Passwort aus dem Assembler-code (ich möchte vermeiden, schlagen . Ich habe gerade ein paar Phasen so weit und ich bin immer besser zu verstehen, aber diese phase hat ein paar Aspekte, die ich bin Probleme mit. So weit ich weiß, das Passwort an diese phase wird von zwei ganzen zahlen. Backtracing ist mein goto-Methode für einige von diesen, ist aber nicht sehr hilfreich für diese phase.

  1. Ich verstehe cltq erweitert eax(rax) bis 4 Wörter, aber ich bin mir nicht sicher, wie diese auf die Berechnungen, und auch unsicher, was passiert wenn die line ist, drücken Sie mehrere Male.
  2. der phase5+82 -> phase5+65 (eine Schleife?) Welche Werte bin ich versucht zu starten, mit so ecx(rcx) übergeben kann, der der Letzte Vergleich?
  3. mov 0x402600(,%rax,4),%eax <- was bedeutet diese Zeile genau? Die leere wirft mich aus, leer = 0?
  4. Anderen helfen, zu verstehen, was Los ist und wie sollte ich Vorgehen herauszufinden, das input wäre hilfreich, ich habe versucht, konvertieren diese wieder in C-code, wie schon in früheren Phasen

    0x00000000004010b4 <phase_5+0>:         sub    $0x18,%rsp
    0x00000000004010b8 <phase_5+4>:         lea    0x10(%rsp),%rcx
    0x00000000004010bd <phase_5+9>:         lea    0x14(%rsp),%rdx
    0x00000000004010c2 <phase_5+14>:        mov    $0x4026aa,%esi
    0x00000000004010c7 <phase_5+19>:        mov    $0x0,%eax
    0x00000000004010cc <phase_5+24>:        callq  0x400b80<sscanf@plt>
    0x00000000004010d1 <phase_5+29>:        cmp    $0x1,%eax
    0x00000000004010d4 <phase_5+32>:        jg     0x4010db<phase_5+39>
    0x00000000004010d6 <phase_5+34>:        callq  0x401421(explode_bomb)
    0x00000000004010db <phase_5+39>:        mov    0x14(%rsp),%eax
    0x00000000004010df <phase_5+43>:        and    $0xf,%eax
    0x00000000004010e2 <phase_5+46>:        mov    %eax,0x14(%rsp)
    0x00000000004010e6 <phase_5+50>:        cmp    $0xf,%eax
    0x00000000004010e9 <phase_5+53>:        je     0x40111b <phase_5+103>
    0x00000000004010eb <phase_5+55>:        mov    $0x0,%edx
    0x00000000004010f0 <phase_5+60>:        mov    $0x0,%ecx
    0x00000000004010f5 <phase_5+65>:        add    $0x1,%edx
    0x00000000004010f8 <phase_5+68>:        cltq   
    0x00000000004010fa <phase_5+70>:        mov    0x402600(,%rax,4),%eax
    0x0000000000401101 <phase_5+77>:        add    %eax,%ecx
    0x0000000000401103 <phase_5+79>:        cmp    $0xf,%eax
    0x0000000000401106 <phase_5+82>:        jne    0x4010f5 <phase_5+65>
    0x0000000000401108 <phase_5+84>:        movl   $0xf,0x14(%rsp)
    0x0000000000401110 <phase_5+92>:        cmp    $0xf,%edx
    0x0000000000401113 <phase_5+95>:        jne    0x40111b <phase_5+103>
    0x0000000000401115 <phase_5+97>:        cmp    %ecx,0x10(%rsp)
    0x0000000000401119 <phase_5+101>:       je     0x401120 <phase_5+108>
    0x000000000040111b <phase_5+103>:       callq  0x401421 <explode_bomb>
    0x0000000000401120 <phase_5+108>:       add    $0x18,%rsp
    0x0000000000401124 <phase_5+112>:       retq   
  • Ich war in der Lage, das problem zu lösen, vor allem durch raten und überprüfen. Eine Eingabe von 5 für die erste Ganzzahl gab mir die benötigten 15 in %edx an phase_5+92, die zweite Zahl ist nur zur phase_5+97, in %ecx mit einer 5 als erste Eingabe habe ich festgestellt, das es benötigt, um sein 115. Aber was genau passiert in dem code ist noch ein Rätsel für mich...
InformationsquelleAutor Gadesxion | 2012-02-15
Schreibe einen Kommentar