Quartet Labs

Rozmaite ciekawostki z laboratorium grupy Quartet. Rzeczy i tajemnice, które ujrzały lub nigdy nie ujrzały swiatła dziennego. Pomysły, które nie zostały z braku czasu i zacięcia wdrożone.

11-02-2014

W wielu naszych demkach na początku widać napis QUARTET PROTECTOR.


Widać, że komputer coś robi po czym odpala się demko.

Zapewne wielu dociekliwych scenowiczów patrzyło co to jest. Pewnie wielu udało się złamać to zabezpieczenie, bo tak to jest zabezpieczenie.


A dlaczego to stosowaliśmy?

Otóż w czasach giełdy Bajtka i wszelkich mistrzów freezerów spotkaliśmy się 

z niefajną modą na zwykłe kradzenie demek.

Nie było wielką trudnością po rozpakowaniu demka zablokować jego uruchomienie. Potem wystarczyło podmienić teksty i już.


Postanowiliśmy nieco się przed tym zabezpieczyć. Nieco, bo całkowicie się nie da. Nie ma zabezpieczeń nie do złamania co wielokrotnie udowodnialiśmy wypuszczając cracki i trainery do wielu gier.


Postanowiłem napisać program który miał na celu dwie rzeczy. Zaszyfrowanie kodu i ukrycie adresu startowego. Tak aby geniusz freezera nie mógł w łatwy sposób po zdepakowaniu podmienić tekstów.


Szyfrowanie nie musiało być skomplikowane. Chodziło tylko o to aby w pamięci nie było widać jawnie wpisanych tekstów i kod nie dawał się łatwo podejrzeć monitorem języka maszynowego. Do tego celu najłatwiej jest użyć rozkazu XOR który łatwo daje się zaimplementować w prostej pętli.

Nota bene takiej samej metody użyłem w innym programie który był pierwszą znaną mi implementacją szyfrowania programów. O tym w innym artykule.

Szyfrowanie było tylko pierwszym krokiem. Drugim miało być ukrycie adresu startowego tak aby potencjalnym hakier nie potrafił demka ponownie spakować.


Wtedy wynalazłem coś co obecnie nazywa się Code Obfuscation. Po polsku - zaciemnianie kodu.

Chodziło o to aby rozkazy wykonywane przez komputer nie dawały się w prosty sposób analizować monitorem języka maszynowego. Aby prowadziły kogoś kto analizuje kod w miejsca gdzie tego kodu nie ma.


Dzisiaj zaciemnianie kodu to całkiem spora dziedzina wiedzy. Wtedy byłem pionierem ;) Pionierem, zwłaszcza, że były to czasy bez internetu. Co więcej były to czasy bez literatury.

Jeśli więc ktoś wynalazł to wcześniej to ja nic o tym nie wiedziałem ;)


Mała dygresja aby zrozumieć jakie to były czasy...

W bodajże 84 roku kiedy jeszcze byłem zatwardziałym spectrumowcem jakimś cudem udało mi się zdobyć powieloną na ksero listę rozkazów Z80. Pamiętam jak jechałem tramwajem przez całe miasto do jedynego w mieście punktu ksero aby ten skarb skopiować. 

A jak pisałem programy? Mając listę rozkazów pisałem na kartce program. Następnie tłumaczyłem go na drugiej kartce na kod maszynowy. Ręcznie obliczałem skoki względne. Ręcznie przeliczałem skoki bezwzględne.

Potem taki program wpisywałem do napisanego specjalnie w tym celu w Basicu loadera który umieszczał go w pamięci i robił RANDOMIZE USR.... Wystarczył jeden błąd aby komputer się zresetował i zabawę trzeba było zaczynać od początku.

Wydajność nie należała do najwyższych... ;)


Wracając do C64. Co prawda miałem już wtedy listę rozkazów procesora ale proste przeglądnięcie wszystkich kodów rozkazów powiedziało mi, że są nieopisane kody. Powstało pytanie - co jeśli zmuszę procesor do wykonania rozkazu który nie istnieje? Uruchomiłem monitor języka maszynowego, wyświetliłem flagi i zacząłem testować.

I tak po wielu nieprzespanych nocach i nieodbytych randkach zrobiłem kompletną listę instrukcji niepublikowanych.

Wraz z flagami na które rozkazy wpływały, liczbą cykli które procesor potrzebował do ich wykonania...

Całkiem niezły reverse engeenering :)


Z taką wiedzą zaciemnienie kodu nie było już wielkim problemem. Quartet Protector używa właśnie takich niepublikowanych kodów procesora. W tamtych czasach nie było monitorów które potrafiły by je pokazać. Potencjalny hakier odpadał na samym początku analizy kodu :)


Minęło już 25 lat od napisania tego programu. Nie jestem w stanie podać Wam dokładnie co robi ani jakich rozkazów używałem. Już nie pamiętam :)

Ale może są scenowicze którzy zmierzyli się z tym kawałkiem kodu? Może ktoś będzie miał chęć opisać jego złamanie?



Hi-Man / QUARTET