poniedziałek, 3 lutego 2025

picoCTF - Bit-O-Asm 3

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


 
Podobnie jak poprzednio, do zadania został dołączony program 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-0xc],0x9fe1a
  7. <+22>:    mov    DWORD PTR [rbp-0x8],0x4
  8. <+29>:    mov    eax,DWORD PTR [rbp-0xc]
  9. <+32>:    imul   eax,DWORD PTR [rbp-0x8]
  10. <+36>:    add    eax,0x1f5
  11. <+41>:    mov    DWORD PTR [rbp-0x4],eax
  12. <+44>:    mov    eax,DWORD PTR [rbp-0x4]
  13. <+47>:    pop    rbp
  14. <+48>:    ret

I dokłanie jak poprzenio należy znaleść wartość zapisaną w rejestrze eax.

W programie są zdefiniowane deklaracje dwóch wartości, w miejscu [rbp-0xc] wprowadzona wartość 0x9FE1A oraz 0x4 po adresem [rpb-0x8]. Następnie w linii +29 ładowana jest wartość z adresu [rbp-0xc] do rejestru eax. Koleja linia (imul) wykonuje mnożenie wartości [rbp-0x8] (0x4) przez wartość zapisaną w rejestrze eax (0x9FE1A). Linia +36 do wyniku operacji mnożenia dodaje wartość 0x1F5. 

Dalej w linii 41 następuje zapis danych z rejestru eax do [rbp-0x4]. 

Podsumowując, rejestr eax przechowyje wynik następującej operacji: 

  1. (0x9fe1a * 0x4) + 0x1f5 => (654874 * 4) + 501 = 2619997 (DEC)

Wynik należy wkleić w formacie flagi czyli picoCTF{<wartość eax>}.