Programista nr 50: Artykuł Confidence CTF 2016 - Blackbox

Odpowiedz Nowy wątek
2016-09-25 11:23
0

Poszukuję binarnego pliku programu na fikcyjną architekturę który został przedstawiony w artykule. Czy ktoś ma może link ? Chcę się pobawić samodzielnie - powtórzyć to co autorzy zrobili w artykule.

Szkoda że nie ma tego pliku w materiałach do artykułu na stronie programisty - w ogóle nie ma żadnych materiałów do wydania na stronie. Dlaczego ?

Pozostało 580 znaków

2016-09-25 12:32
0

Załączam oryginalny plik. Miłej zabawy ;)

Pozostało 580 znaków

2016-09-25 13:54
0

Dziękuje

Pozostało 580 znaków

2016-09-27 14:26
0

Zainspirowany artykułem napisałem emulator w C. Muszę przyznać że bez artykułu nie dałbym rady. Nie jest to trywialne zadanie, nawet z pomocą artykułu musiałem się domyślić paru rzeczy.
Program nie sprawdza wszystkich błędów i w wielu miejscach poszedłem na skróty, dodatkowo mnóstwo zaszytych w nim magic numbers.

W artykule napisaliście że "łamanie" programu poprzez szukanie pinu trwało kilka godzin, dlaczego tak długo? Mój program na sprawdzenie wszystkich 9000 kombinacji potrzebuje kilka sekund. Niestety, otrzymana przeze mnie flaga różni się od Waszej:

Well done, Now �o find Redford, he m�y have a beer for you;] oh and a flag is: DrgnS{CustomVMSarePhunReversingWithoutCoDeI�EvenFunnier}

I przez tę pare znaczków niedrukowalnych (nie wiem skąd pochodzą) moja funkcja automatycznego łamania głupieje :/

W moim programie musi być jakiś błąd, niestety niestety nie wiem jaki. W załączniku źródła i makefile do kompilacji (program dla systemu linux).
Zapraszam do zapoznania się z moim programem, ewentualnie znalezieniem błędu.

Aby skompilować program trzeba ściągnąć zipa, rozpakować go do jednego folderu i wpisać make.

  • cpu.zip (0 MB) - ściągnięć: 25
edytowany 1x, ostatnio: sibislaw, 2016-09-27 14:27

Pozostało 580 znaków

2016-09-28 01:37
1

Materiał do artykułu został dodany w "Panelu Prenumeratora" i w dziale "Download", przepraszamy za to przeoczenie :)

W kwestiach merytorycznych na pewno pomocny będzie @MSM.


Pozostało 580 znaków

2016-09-28 17:35
msm
1

Cześć,

cieszę się że Ci się zadanie (i artykuł) podobało. Jeśli chodzi o

Program nie sprawdza wszystkich błędów i w wielu miejscach poszedłem na skróty, dodatkowo mnóstwo zaszytych w nim magic numbers.

To i tak Twój program jest dużo ładniejszy od naszego (ale pisałeś go pod mniejszą presją :P).

A odnośnie:

Nie jest to trywialne zadanie, nawet z pomocą artykułu musiałem się domyślić paru rzeczy.

To mogłeś pisać, chętnie bym pomógł (artykuł był trochę skrótowy, bo jak na strefę CTF i dak długi artykuł nam wyszedł).

A wracając do głównego pytania - spojrzę dokładnie później, ale to chyba coś związanego ze złym stanem początkowym aplikacji:

> u
hello cruel world, how are you?
gib pin pls?
5129
Well done, Now �o find Redford, he m�y have a beer for you;] oh and a flag is: DrgnS{CustomVMSarePhunReversingWithoutCoDeI�EvenFunnier}
> 
> u
gib pin pls?
5444
��p�e����b�'z+[����D}J�����xIp�{#����Ulb        o�xyFx��o��/ ����Auk��� /W�g0.<u�3C�H
                                                                                     Փ��*)��q   H \Ju���x�?
                                                                                                           &�!k�Ls#Z�z��E����o4t.�[�8��v > 
> u
gib pin pls?
5129
Well done, Now go find Redf1rd, he may have a beer for you;] oh and a flag is: DrgnS{CustomVMSarePhunReversingWithoutCoDeI�EvenFunnier}

To drugie wygląda prawie jak poprawne dane, poza tym że jest Redf1rd zamiast Redford. Natomiast jeśli chodzi o "krzak" w "CoDeIsEven", to... nie jestem pewien, bo u nas wyskoczyło tak samo - być może drobny błąd w ciphertexcie, bo dziwne żeby wszystko działało dobrze poza tym jednym znakiem.

W artykule napisaliście że "łamanie" programu poprzez szukanie pinu trwało kilka godzin, dlaczego tak długo? Mój program na sprawdzenie wszystkich 9000 kombinacji potrzebuje kilka sekund. Niestety, otrzymana przeze mnie flaga różni się od Waszej:

Z tymi kilkoma godzinami to trochę przesadziliśmy (poszliśmy spać po uruchomieniu, więc pewni nie jesteśmy). Ale nasz program działał dużo wolniej z dwóch powodów:

  • za każdym razem uruchamialiśmy VM od początku (więc dla kazdego pinu tworzyliśmy nowy proces pythona)
  • python sam z siebie też demonem szybkości nie jest.

Pozostało 580 znaków

2016-09-28 19:02
0

Dziękuje za odpowiedź i miłe słowo :) wiem że pisaliście pod presją, i tak chylę czoła. Artykuł bardzo ciekawy i dobrze napisany, był motywacją do czegoś co zawsze chciałem zrobić: stworzenie fikcyjnej architektury, napisanie asemblera/interpretera (chociaż nie napisałem asemblera w tym wypadku). Rzeczywiście za 2 uruchomieniem programu wyniki z tym samym pinem są nieco inne. Może znaki niedrukowalne mają tu wpływ, choć większa szansa że stan programu nie jest poprawnie zerowany. Obstawiałem też błąd zadeklarowania int jak uint lub odwrotnie, zła wielkość czegoś (w przypadku instrukcji LOAD i STORE program działa tylko wtedy, kiedy operują one na bajtach). Jak będę miał chwilę to może wrócę do tego programiku :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0