Writeup: FlareOn 2022: 002 - Pixel Poker
1. TLDR
2. Dane wejściowe
Plik z zadaniem znajduje się tutaj. Hasło: flare.
Przedmiotem zadania był plik PE:
PixelPoker.exe
readme.txt
Przed przystąpieniem do analizy odczytałem zawartość pliku tekstowego:
Welcome to PixelPoker ^_^, the pixel game that's sweeping the nation!
Your goal is simple: find the correct pixel and click it
Good luck!
3. Analiza wstępna
Zweryfikowałem typ pliku PixelPoker.exe
:
$ file PixelPoker.exe
PixelPoker.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
W wyniku analizy kodu wskazałem miejsce w kodzie, które warunkowało wyświetlenie flagi:
Były to dwie instrukcje warunkowe:
if ( pixel_x == var_ralf % (unsigned int)rect_width )
if ( pixel_y == var_n0E % (unsigned int)rect_height )
Szerokość i wysokość okna były stałe i wynosiły odpowiednio 0x2E5 i 0x281. Wystarczyło zatem obliczyć oczekiwany piksel i go wskazać:
>>> import struct
>>> struct.unpack(">I", b"RALF")[0] % 0x2E5
95
>>> struct.unpack(">I", b"nO-E")[0] % 0x281
313
Współrzędne piksela to (x,y)=(95,313)
5. Odczytanie flagi
Flaga została wyświetlona po wskazaniu właściwego piksela:
w1nN3r_W!NneR_cHick3n_d1nNer@flare-on.com