czwartek, 23 stycznia 2025

picoCTF - Bit-O-Asm-1

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:

  1. <+0>:     endbr64
  2. <+4>:     push   rbp
  3. <+5>:     mov    rbp,rsp
  4. <+8>:     mov    DWORD PTR [rbp-0x4],edi
  5. <+11>:    mov    QWORD PTR [rbp-0x10],rsi
  6. <+15>:    mov    eax,0x30
  7. <+20>:    pop    rbp
  8. <+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}.