W tym poście chciałbym opisać rozwiązania zadania Bit-O-Asm 1 z działu Reverse Engeering picoCTF.
Do zadania dostajemy plik z instrukcjami z assemblera:
- <+0>: endbr64
- <+4>: push rbp
- <+5>: mov rbp,rsp
- <+8>: mov DWORD PTR [rbp-0x4],edi
- <+11>: mov QWORD PTR [rbp-0x10],rsi
- <+15>: mov eax,0x30
- <+20>: pop rbp
- <+21>: ret
Zadanie polega na znalezieniu flagi. Która jest zapisana w rejestrze EAX. Wartość która się tam znajduje musi zostać wprowadzona w formie flagi picoCTF{<wartość EAX dziesiętnie>}. Dla powyższego kodu assemblera rozwiązanie zadania jest dosyć proste, ponieważ nie dzieje się w tym pliku zawiele. Jednak przejdę przez wszystkie instrukcje.
<+4> - zapisanie wartości rejestru rbp (Base Pointer) na stosie.
<+5> - ustawienie wartości rejestru rbp na wartość rejestru rsp.
<+8> - zapisanie danych wartości rejestru edi, na stosie w zmiennej przesuniętej o -0x4 względem rejestru rbp.
<+11> - zapisanie danych wartości rejestru rsi, na stosie w zmiennej przesuniętej o -0x10 względem rejestru rbp.
<+15> - zapisanie wartości 0x30 w rejestrze eax.
<+20> - przywrócenie poprzedniej wartości rejestru rbp
<+21> - powrót do funcki wywołującej.
Czyli najbardziej istona linijka, ta dotycząca flagi, to linia 15. Wprowadzana jest tam wartości 0x30 (48 dziesiętnie) do rejestru eax.
Flaga ma postać picoCTF{48}.