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.
- 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.
- der phase5+82 -> phase5+65 (eine Schleife?) Welche Werte bin ich versucht zu starten, mit so ecx(rcx) übergeben kann, der der Letzte Vergleich?
- mov 0x402600(,%rax,4),%eax <- was bedeutet diese Zeile genau? Die leere wirft mich aus, leer = 0?
-
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...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Code übersetzt dies:
Zur Beantwortung Ihrer spezifischen Punkte:
cltq wird verwendet, um klar die 4 most significant bytes von rax, um nicht zu stören die Adresse, die Berechnung in der folgenden Anleitung. Es hat keinen Einfluss auf die Berechnung.
Ja, das ist nur mov dword eax, [0x402600 + 0 + rax * 4]
Sobald du das C-äquivalent es ist einfach, herauszufinden, eine Lösung zu finden.