piątek, 31 stycznia 2025

picoCTF - Bit-O-Asm-2

W tym poście chciałbym opisać rozwiązania zadania Bit-O-Asm-2 z działu Reverse Engeering picoCTF. 


Do zadania został dołączony kod programu w assemblerze:

  1. <+0>:     endbr64
  2. <+4>:     push   rbp
  3. <+5>:     mov    rbp,rsp
  4. <+8>:     mov    DWORD PTR [rbp-0x14],edi
  5. <+11>:    mov    QWORD PTR [rbp-0x20],rsi
  6. <+15>:    mov    DWORD PTR [rbp-0x4],0x9fe1a
  7. <+22>:    mov    eax,DWORD PTR [rbp-0x4]
  8. <+25>:    pop    rbp
  9. <+26>:    ret

Przejdę teraz po poszczególnych liniach. W zadaniu poprzednim wartość w rejestrze eax była widoczna odrazu bez konieczności głębszej analizy kodu programu. Tutaj jest to delikatnie bardziej utrudnione. 

Program powyżej nie wykonuje wielu operacji. Jedynie kilka na rejestrach oraz na stosie. 

Do odczytu wartości, należy przyjrzeć się programowi od linii 15. Zapisywana jest wartość 0x9FE1A do pamięci pod adresem [rbp-0x4]. W kolejnej instrukcji ładowana jest wartość z adresu [rbp-0x4] do rejestru eax. Następnie przywraca wartość rejestru rbp, po czym następuje zakończenie wykonywania funkcji.

Oznacza to, że szukaną flagą jest wartość 0x9FE1A przetworzona z zapisu szesnastkowego na dziesiętny. Należy jeszcze tą wartość wstawić w picoCTF{ }.