Rating:

## sharpturn (forensics, 400p, 110 solves)

> I think my SATA controller is dying.
>
> sharpturn.tar.xz-46753a684d909244e7d916cfb5271a95

### PL Version
`for ENG version scroll down`

Dostajemy zip z czymś co może być tylko zawartością folderu `.git`. Wypakowywujemy więc sobie z niego dane (zrobiliśmy to za pomocą pythona, import zlib i zlib.decompress, ale po zastanowieniu w sumie wystarczyłby pewnie git checkout ;) ).

Po chwili zauważamy że coś się nie zgadza - hash pliku sharp.cpp jest inny niż powinien. Patrzymy więc na rewizje po kolei - [rewizja pierwsza](sharp_v1_efda_efda) ma dobry hash. [Rewizja druga](sharp_v2_354e_8675)... już nie. Napisaliśmy więc [sprytny skrypt w pythonie](flipuj.py), flipujący losowe bity (domyślamy się że o to chodzi, skoro w treści zadania jest coś o umierającym kontrolerze SATA) i próbujący odkryć te które sie nie zgadzają.

W ten sposób dochodzimy do [poprawnej wersji rewizji drugiej](sharp_v2_354e_354e). Niestety hash [rewizji trzeciej](sharp_v3_d961_7564) również się nie zgadza, ale poprawiamy i jego naszym bitflipperem i mamy [poprawną rewizję trzecią](sharp_v3_d961_7564). I to samo robimy przy czwartej - [plik ze złym hashem](sharp_v4_f8d0_8096) zamieniamy na [plik z dobrym hashem](sharp_v4_f8d0_f8d0).

W tym momencie mamy wszystko czego potrzebujemy - faktoryzujemy sobie jeszcze liczbę jak wymaga program, i idziemy:

Part1: Enter flag:
flag
Part2: Input 31337:
31337
Part3: Watch this: https://www.youtube.com/watch?v=PBwAxmrE194
ok
Part4: C.R.E.A.M. Get da _____:
money
Part5: Input the two prime factors of the number 272031727027.
31357 8675311
flag{3b532e0a187006879d262141e16fa5f05f2e6752}

(Warto zauważyć poczucie humoru autorów zadania, gdzie "enter flag" wymaga podania dosłownie "flag").

Flaga którą otrzymujemy jest przyjmowana przez system, więc jesteśmy kolejne 400 punktów do przodu.

### ENG Version

We get a zip file with something that can only be the contents of `.git` directory. We extract the data (we did this with python, import zlib and zlib.decompress, but most likely we could have simply used git checkout ;) ).

After a while we realise that something is wrong - hash of sharp.cpp file is incorrect. We check the sequence of revisions one by one - [first revision](sharp_v1_efda_efda) has a correct hash. [Second revision](sharp_v2_354e_8675)... does not. We wrote a [clever python script](flipuj.py) which flips random bits (we guess that this is the case, since the task decription mentions a broken SATA controller) and tries to figure out which are incorrect.

This was we finally get to [correct version of second revision](sharp_v2_354e_354e). Unfortunately, hash of the [third revision](sharp_v3_d961_7564) is also incorrect, but we fix it with our bitflipper and we get a [correct third revision](sharp_v3_d961_7564). We do the same with fourth revision - [file with incorrect hash](sharp_v4_f8d0_8096) we turn into [file with correct hash](sharp_v4_f8d0_f8d0).

Now we have almost everything we need - we also need to factor a given number, and we proceed:

Part1: Enter flag:
flag
Part2: Input 31337:
31337
Part3: Watch this: https://www.youtube.com/watch?v=PBwAxmrE194
ok
Part4: C.R.E.A.M. Get da _____:
money
Part5: Input the two prime factors of the number 272031727027.
31357 8675311
flag{3b532e0a187006879d262141e16fa5f05f2e6752}

(Author's sense of humour is worth noting here - we were supposed to put "flag" string as an answer for a prompt "enter flag").
The flag we get is accepted so we are 400 points up.

Original writeup (https://github.com/p4-team/ctf/tree/master/2015-09-16-csaw/forensics_400_sharpturn#eng-version).