Opis
Ten task jest wieloetapowy, wykorzystuje zarówno metody kryptografii jak i reverse engineering.
Plik WPA000001.pdf zawiera zasłonięty tekst czarnym paskiem jednakże ten PDF nie został spłaszczony przez co można bez problemu wydobyć tekst pod spodem np. kopiując go - realny błąd rządu USA
Plik WPA000002.pdf używa homofonicznego szyfru podstawieniowego
Plik WielkiBrat.zip zawiera plik exe aplikacji winforms, który można zdekompilować praktycznie do natywnego C#
Rozwiązanie
- Zapoznajemy się z prawem z pliku
ThePrawo.pdf - Wyciągamy id czynów zabronionych przestępstwa z pliku
WPA000001.pdf- 3 i 7 - liczymy lata programemWielkiBrat.exe- 58936329 lat - Odszyfrowujemy tekst pliku
WPA000002.pdfza pomocą analizy frekwencyjnej - z tekstu id czynów zabronionych przestępstwa: 1 i 2 -WielkiBrat.exe: 86304100 lat - W plikach od
WPA000003.pdfdoWPA000005.pdfnie znajdują się żadne istotne informacje - zawierają jedynie zabawne obrazki. Dopiero w plikuWPA000006.pdfmożna znaleźć notatkę, z której wynika, że rozpatrywane przestępstwo obejmuje czyny zabronione 2, 3, 6 oraz 7. - Wiemy, że program nie potrafi obliczyć kary dla przestępstwa obejmującego więcej niż dwa czyny zabronione. Konieczne jest więc ustalenie formuły wykorzystywanej przez aplikację do wyznaczania kary dla większej liczby jednoczesnych czynów zabronionych.
- Jeśli posiadamy doświadczenie z platformą .NET, możemy szybko rozpoznać, że aplikacja została napisana w technologii WinForms. Nawet bez takiej wiedzy można łatwo potwierdzić ten fakt przy użyciu narzędzia Binary Ninja. Pozwala to stwierdzić, że mamy do czynienia z aplikacją .NET.
- Skoro wiemy, że aplikacja jest samodzielnym plikiem wykonywalnym opartym na .NET, możemy spróbować wyodrębnić zawarte w niej zasoby i biblioteki. W tym celu używamy narzędzia sfextract, które rozpakowuje plik do wielu komponentów, w tym głównej biblioteki .dll.
- Następnie otwieramy wyodrębnioną bibliotekę .dll w narzędziu DotPeek od JetBrains. Ponieważ kod .NET można stosunkowo łatwo zdekompilować, uzyskujemy dostęp do pełnej logiki aplikacji zapisanej w bliskim do natywnego C#'ie. Analiza tego kodu pozwala odtworzyć formułę wykorzystywaną do obliczania kary.
- Zauważamy, że opiera się na słowniku gdzie kluczem jest id a wartościa treść czynów zabronionych, oraz na obliczaniu sumy wartości ASCII wszystkich znaków z treści tych czynów.
- Wyciągamy formułe
(słownik[id1]+slownik[id2])*(slownik[id1]+slownik[id2])i stosujemy ją na przestępstwie z czterema czynami zabronionymi za pomocą prostego skryptu w pythonie, który wyglądał by mniej więcej tak:
slownik = (skopiowany slownik)
def ascii(n):
suma = 0
for i in n:
suma += ord(i)
return suma
print((ascii(slownik[1])+ascii(slownik[2])+ascii(slownik[6])+ascii(slownik[7]))**2)
- Wychodzi nam z tego - 415385161
- Zatem flaga to: 415385161 * 86304100 * 58936329