Writeup: FlareOn 2022: 003 - Magic 8 Ball
1. TLDR
2. Dane wejściowe
Plik z zadaniem znajduje się tutaj. Hasło: flare.
Przedmiotem zadania był plik PE wraz z plikami towarzyszącymi:
Magic8Ball.exe
SDL2.dll
SDL2_image.dll
SDL2_ttf.dll
assets/
libjpeg-9.dll
libpng16-16.dll
libtiff-5.dll
libwebp-7.dll
zlib1.dll
./assets:
DroidSans.ttf
LICENSE.txt
NotoSans_Regular.ttf
OFL.txt
OpenSans_regular.ttf
ball_paint.png
Nazwy plików sugerowały, że program został wytworzony z wykorzystaniem technologii SDL (Simple DirectMedia Layer)
3. Analiza wstępna
Zweryfikowałem typ pliku Magic8Ball.exe
:
$ file Magic8Ball.exe
Magic8Ball.exe: PE32 executable (GUI) Intel 80386, for MS Windows
Program po uruchomieniu prezentował okno jak poniżej:
Następnie załadowałem program do środowiska IDA
4. Analiza kodu
Moją uwagę zwrócił jeden z fragmentów kodu, który odpowiedzialny był za weryfikację kolejności wciśniętych klawiszy:
Oczekiwana kolejność wciśniętych klawiszy została zapisana poniżej:
LLURULDUL
Następnie następowało wywołanie funkcji odpowiadającej za odczytanie flagi:
Zanim to miało jeszcze nastąpić, weryfikowana była poprawność podanego pytania:
gimme flag pls?
5. Odczytanie flagi
Po wprowadzeniu pytania gimme flag pls?
oraz wprowadzeniu sekwencji klawiszy LLURULDUL[ENTER]
była prezentowana flaga:
U_cRackeD_th1$_maG1cBaLL_!!_@flare-on.com
6. Wersja alternatywna
Zaglądając głębiej do funkcji odpowiadającej za odczytanie flagi, można było poznać charkaterystyczne pętle dla algorytmu RC4. Szyfrogramem były wartości dodawane na stos:
Kluczem był oczekiwany ciąg wciśniętych klawiszy
LLURULDUL
Napisałem zatem skrypt w celu odszyfrowania flagi:
from malduck import rc4
encrypted = [b"\x33\x12\x2A\x35",
b"\xB2\x64\x57\x87",
b"\x34\xA6\xEF\x00",
b"\x3E\xDE\xE0\x01",
b"\x40\xEC\x21\x01",
b"\xB0\x69\x1D\x26",
b"\x7B\xB2\x69\xB0",
b"\x06\xEB\x22\x56",
b"\xCB\x5D\xF2\xBE",
b"\x51\x2B\x0F\x79",
b"\x00\x00\x00\x55"]
ciphertext = b''.join([dword[::-1] for dword in encrypted])[0:41]
key = b'LLURULDUL'
plaintext = rc4(key, ciphertext)
print(plaintext)
Po uruchomieniu prezentowa jest flaga:
b'U_cRackeD_th1$_maG1cBaLL_!!_@flare-on.com'