Writeup: FlareOn 2022: 002 - Pixel Poker

Task description

1. TLDR

TLDR graph

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:

main window

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:

main window

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:

flag

w1nN3r_W!NneR_cHick3n_d1nNer@flare-on.com