Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Piractwo kiedyś i dziś: rozwój techniki łamania zabezpieczeń

Z powodów technicznych musiałem schować artykuł planowany na ten miesiąc do szuflady. Ale już za tydzień wraca do mnie spora góra wywiezionego sprzętu i będę mógł wrócić do wpisu obiecanego jeszcze na HotZlocie. Tymczasem, dzięki komentarzom do mojego wpisu o Red Hatach, przypomniałem sobie o innym temacie, czyli crackerze KMS. Zanurkowanie w kolekcji abandonware skłoniło mnie do rozszerzenia tego zagadnienia, natknąłem się bowiem na obrazy dyskietek „zabezpieczonych przed kopiowaniem”. So, here goes.

Crack me up

Każdy z nas miał do czynienia z crackami. Nawet, jeżeli cracka nie używał (a przecież tutaj wszyscy używamy oryginalnego oprogramowania), to dostał „do naprawy” laptopa z bardzo ważnym softem, często w całości lewym, naszpikowanym dziwnymi dodatkami w katalogach wykluczonych ze skanowania antywirusowego. Cracka zawsze łatwo poznać – nie jest to ładny program z estetycznym interfejsem, tylko mroczne okienko z trupią czaszką i grającą w tle chiptune’ową muzyką, splatającą się w kakofoniczną jedność z odgłosami alarmów, wzniecanych przez antywirusy. Obowiązkowym elementem każdego cracka jest nazwa grupy lub nick twórcy-wynalazcy mechanizmu omijającego zabezpieczenie. Mimo wielu zmian w metodach tworzenia i dostarczania oprogramowania, jakie nastąpiły przez ostatnie 40 lat, wszystkie narzędzia do łamania licencji miały szereg cech wspólnych: unikatową estetykę, silnie promocyjny „branding” oraz graniczący z geniuszem pomysł na crack, zaszyty w kodzie. Dekady rozwoju informatyki poświęcono na doskonalenie mechanizmów „copy protection”, z których żaden nie okazał się skuteczny, a kunszt piratów niejednokrotnie sugerował, że mały zespół entuzjastów ma o wiele więcej talentu i umiejętności, niż cały dział programistów w wielkiej korporacji.

Obrazy dysków

Na początek, jak zwykle, dygresja. Wszyscy znamy pliki ISO, czyli obrazy struktury dysków optycznych. Wypalenie takiego obrazu, jakkolwiek wybitnie proste, jest przeprawą dla każdego, kto robi to po raz pierwszy. Niech rękę podniesie każdy, kto stworzył w swojej karierze płytę CD-R z jednym plikiem, w postaci 700MB-owego pliku ISO właśnie. To typowy i powszechny efekt pierwszej próby nagrania obrazu na płytę. Później robi się ciekawiej: nagrywamy dwa obrazy ISO na pendrive’a tym samym sposobem, a jeden pendrive stał się boot’owalny, a drugi nie. Jeden przedstawia się jako FAT32, a drugi dzielnie informuje system, że jest płytą i totalnie ma format ISO9660. W końcu używamy dedykowanych narzędzi, które magicznie rozwiązują problem, pendrive stał się bootowalny, ale nie wiemy dlaczego. W dodatku dd mówi, że oba są identyczne. Po miesiącu wracamy do problemu, robimy nowego pendrive’a…. a ten działa i startuje od razu. A poprzednio nie chciał. Czas, jaki trzeba poświęcić na nagranie i przetestowanie jednego takie urządzenia sprawia, że szybko odchodzi ochota na zbadanie problemu i zrozumienie, od czego to wszystko zależy. Wreszcie zapominamy, co jest na którym pendrivie i usiłujemy je przywrócić do żywych, ale Zarządzanie Dyskami mówi nam, że to niewykonalne, więc musimy odpalić Linuksa i wspomóc się programem GParted. Wszystkie te problemy wynikają z leniwego założenia, że „storage” i wszelkie nośniki pamięci masowej można traktować w sposób ciągły. Nie jest to zgodne z prawdą. Nawet w czasach pendrivów USB sformatowanych tysięczną wersją systemu NTFS, nie jesteśmy w stanie uniknąć uwarunkowań historycznych, z czasów, gdy wszystko było po prostu dziesięć razy trudniejsze.

r   e   k   l   a   m   a

Dyskietki

Oczywistym wtedy staje się, że płyt optycznych oraz dysków twardych nie możemy rozpatrywać jako magazynu ciągłego. Zapomniane meandry formatów LBA i STANDARD, ograniczenie pojemności do 30MB i 127GB, oraz konieczność definiowania geometrii dysków za pomocą zapisu CHS (cylindry, głowice, sektory, talerze) to nieskończenie frustrujące problemy, ale nośnikiem o wiele bardziej niewdzięcznym i, w praktyce, źródłem wszystkich naszych obecnych problemów, jest nośnik, który na szczęście już wymarł, czyli dyskietka magnetyczna.

Dyskietek było dużo. Bardzo dużo. I to, że któraś pasowała do szczeliny w napędzie, absolutnie nie oznaczało jeszcze, że napęd będzie umiał ją odczytać (i jej nie zepsuje!). Być może niektórzy pamiętają jeszcze dyskietki 3.5 cala, oraz ich poprzedników 5.25 cala. Oba formaty wymagały różnych napędów, ale nie był to koniec podziałów. Dyskietka mogła mieć dwie strony (jak kaseta magnetofonowa!). Mogła też mieć „wysoką” albo „podwójną” gęstość (pojedynczej nie, bo nie). Wreszcie, mogła mieć 8, 9, 15 albo 18 sektorów. I wszystko to musieliśmy wiedzieć, zanim wdusiliśmy dyskietkę do napędu! W zależności od tego, z jakim dyskiem mieliśmy do czynienia, mógł on mieć pojemność 160KB (5.25 cala, podwójna gęstość, 8 sektorów, jedna strona) lub 1440KB (wysoka gęstość, 2 strony, 15 sektorów)… Tego typu różnice sprawiały problemy nie tylko podczas odczytu. Utrudnione było również kopiowanie.

Multi-Tool Word rocznik 1983

I tutaj wracamy do głównego tematu. Kilka lat temu na cyfrową powierzchnię „wypłynęły” dyski instalacyjne historycznej wersji programu Microsoft Word, w wersji 1.15. Było to wydanie o dużym znaczeniu dla sceny abandonware, ponieważ poszlaki każą zakładać, że paradygmat sterowania przepływem pracy (mniej mądrze: „pomysł na GUI”) w owym produkcie był łudząco podobny do pierwszych projektów środowiska Windows, z czasów, gdy Okienka nosiły jeszcze mało wzruszającą nazwę „Interface Manager”, a tak stare wersje Windows obecnie uznaje się za zaginione. Ponieważ dyskietki magnetyczne to wrażliwy i awaryjny nośnik, priorytetem było utworzenie kopii zapasowych, a to nie lada wyczyn zrobić kopię zapasową dyskietki 5.25 w XXI wieku.

Kopiowanie nośnika

Intuicja zakłada, że dla celów historycznych, najlepiej nie kopiować plików z tej dyskietki, a wykonać „surowy obraz dysku”, taki „ISO dla dyskietek”. Mamy jednak do czynienia z dyskietką, otrzymanie surowego obrazu jest nietrywialne. Dlaczego? Przedyskutujmy, jak działa uniksowe narzędzie dd, służące do robienia obrazów dysku. Otóż program dd czyta urządzenie blokowe w trybie ciągłym i zapisuje jako jeden „blob binarny” bajt po bajcie. Ustaliliśmy jednak, że nie da się urządzeń pamięci masowej czytać jako źródła ciągłego (mimo, że Unix, bardzo intuicyjnie, za wszelką cenę usiłuje nam to tak przedstawić, co ma w sobie wiele technicznej elegancji!), konieczne są jakieś założenia. Dlatego surowy obraz dyskietki nigdy nie jest „tak po prostu” zamianą nośnika magnetycznego na cyferki. Taki obraz zawsze jest obrazem „jakiejś” dyskietki, a więc dyskietki sformatowanej na konkretny sposób. W przypadku moich dysków z TAGiem były to obrazy 1440KB, czytane sektor po sektorze. Otwierając je w Notatniku, można było wyszukiwać po słowach, które znajdowały się w podręczniku użytkownika, dołączonym do instalatora. W przypadku Worda, były to dyskietki 360KB. Skoro więc wiemy, jak sformatowana jest dyskietka, to jak dopadniemy odpowiedni napęd, to już nie będzie problemu ze zrobieniem obrazów 1:1…. Prawda?

Kopiowanie zabronione i utrudnione

Otóż nie. Znajomość formatu pozwala zrobić wierny obraz idąc sektor po sektorze… ale pod warunkiem, że te sektory są poprawne! A często nie były, celowo. Umyślnie źle sformatowane dyskietki to najpowszechniejsza metoda zabezpieczenia przed kopiowaniem. Danych z błędnego obszaru nie da się skopiować metodami systemowymi, nie da się również stworzyć obrazu surowego. A programy na takiej dyskietce zazwyczaj polegają na tym, czy na nośniku znajdują się owe „złe dane”. Jeżeli nie, to znaczy, że ktoś próbował skopiować dyskietkę „po normalnemu”. Wtedy oczywiście otrzymujemy radosny komunikat, że nasza kopia jest kradziona, my będziemy smażyć się w piekle, a w drodze do naszego domu jest Mossad, brygada antyterrorystyczna i pluton egzekucyjny.
Pamiętajmy, że dyskietki to bardzo awaryjne medium. Nie dokopałem się do statystyk mówiących, ile dyskietek było fabrycznie wadliwych, zapewne z racji tego, że nie było dla nich alternatywy, nie prowadzono jawnie takich badań. Dobrym zwyczajem w tamtych czasach było jednak na wszelki wypadek robić kopie zapasowe wszystkich dyskietek. W przypadku Worda było to niemożliwe. Microsoft „rozwiązał ten kłopot” poprzez dostarczenie dyskietki z kopią zapasową programu, udając, że nie rozumie problemu. Ponadto, dyskietki były jednorazowe – instalacja nadpisywała nośniki, czyniąc je bezużytecznymi. Samodzielne zrobienie kopii zapasowej, czy wręcz reinstalacja programu na tym samym komputerze z tych samych nośników, były niemożliwe.

Totalitarne zapędy

Tego typu copy protection był sprzedawany jako „funkcja” programu, jakkolwiek uniwersalnie niepożądana. Przydatność tych rozwiązań była zerowa, czy wręcz ujemna, z racji problemów, jakie generowały. Szczególnie oburzająca jest treść zawarta na błędnie sformatowanych sektorach. Toasty Tech przytacza ją w całości:

Tens of thousands of man-hours have been spent to make this product possible, so that you, the user, can use high quality programs. If you steal this software, then we will not receive the fruits of our labor. Stealing software is not just a crime, it is also morally wrong. We have worked hard to produce this program, but we cannot keep working if we are not paid. If criminals force us out of business, then we will no longer be able to produce programs that people can use. If criminals stop stealing our software, then we wibe able to write more programs, make them more advanced, and sell them at a lower price. Think about it. We will prosecute anyone we find stealing our software. If you are caught, it is unlikely that you will ever be able to get a job with any company in this field. Don't risk it. If you are not honest, we will not have mercy on you.

Dzisiejszy dział marketingu dowolnej firmy musiałby się gęsto tłumaczyć z takiego straszenia gniewem tysiąca słońc. Zaś druga funkcja, w postaci niszczenia nośnika przy wykryciu piractwa, byłaby zapewne źródłem wielu pozwów. Arogancja bijąca od takiego podejścia jest doprawdy oszałamiająca. Wracając jednak do tematu – ktoś jednak zrobił kopie zapasowe tych dyskietek. Przyjrzyjmy się im.

Dawne narzędzia do kopiowania

Jest to cała kolekcjia obrazów, w różnych formatach. Najpierw oczywiście są obrazy surowe. Nie da się na ich podstawie odtworzyć dyskietek, z których dałoby się przeprowadzić instalację. Podłączenie obrazów do emulatora/wirtualizatora również nie działa. Nawet nie trzeba tego sprawdzać: wystarczy spróbować wyszukać w obrazie wyżej przytoczony komunikat z błędnych sektorów. Nie znajdziemy go. W drugiej kolejności są magiczne obrazy w formatach TC i IMD. Również nas nie interesują, są chore. Wreszcie docieramy do obrazów stworzonych przez program „Copy II PC”. One zawierają już powyższą przydługą megalomańską tyradę, więc udało się odwzorować strukturę dysku w pełni, dokładniej nawet, niż obraz surowy („raw”).

Copy II PC

Zbliżamy się powoli do meritum :) Czym jest program Copy II PC? Otóż jest to odpowiedź rynku na problemy użytkowników z kopiowaniem zabezpieczonych dyskietek. Copy II PC umiał odwoływać się bezpośrednio do kontrolera FDD i znał wiele sztuczek związanych z nieprawidłowym formatowaniem, między innymi takim, jak sztuczka z Wordem. Gdy pojawiał się nowy pomysł na „zabezpieczanie” dyskietek, mistrzowie z firmy Central Point Software (obecnie dział korporacji Symantec) wydawali nową wersję swojej kopiarki. Program był dobry. Był tak dobry, że zaczęto wywierać naciski na autorów, żeby zubożyli swój produkt, a najlepiej zaniechali jego tworzenia. Dlatego z programu usunięto funkcję zapisu dyskietki do obrazu plikowego, celem dalszej cyfrowej obróbki. Możliwe było jedynie wykonanie kopii dyskietki na inną dyskietkę, ale na pewno nie dyskietki na dysk albo do obrazu. Program dokonywał jednak czarnej magii, odczytując złośliwie sformatowane nośniki. Jak się jednak okazuje, był on wykorzystany do zrobienia obrazów plikowych, i to już w 1983 roku. Wylądowały one następnie na pirackich BBSach. Jak tego dokonano?
Otóż sztuka ta udała się dzięki wykorzystaniu genialnej myśli pirackiej. Nieprzeciętny intelekt, stojący za narzędziami crackerskimi jest cechą szczególną piratów i przypadek programu CopyIIPC jest doskonałym przykładem na to, że psychologiczna strona piractwa nie zmieniła się znacząco od czasów pierwszych crackerów. Tę tezę postaram się udowodnić w niniejszym tekście :)

Porywacze dyskietek

Program CopyIIPC został „porwany” przez inny program, o nazwie Snatch It! Jedenastokilobajtowy wytrych patchował kopiarkę w locie, manipulując jej obrazem w pamięci RAM. Pracowici programiści firmy Central Point Software implementowali samodzielnie rozgryzione, w pocie czoła i bólu, algorytmy zabezpieczeń, a panowie z grupy „Software Pirates Incorporated” (chciałbym tu żartować z tą nazwą, ale oni tak na serio) wymyślili jak zmusić ten kawał ciężkiej pracy do tańcowania, jak mu zagrają. Jest to dokładnie ten typ zuchwałości, którym charakteryzują się wszystkie programy do łamania zabezpieczeń. Napisanie narzędzia do kopiowania Worda byłoby zdecydowanie mniej „awesome”, niż nakłonienie całego kradzionego programu do kradzieży drugiego programu. That’s two jokes at once!

Prawdziwa własność intelektualna

To nie koniec buty i arogancji twórców Snatch It. Podobnie, jak Word, który usuwa się, gdy wykryje piractwo, lub podpięcie debugera, ich porywacz kopiarek również ma wbudowane zabezpieczenie! I tym razem naprawdę chroni ono „własność intelektualną”, podczas, gdy to z Worda ma jedynie sprawiać takie pozory. Twórcy programu SNATCHIT nie widzieli żadnego problemu w tym, żeby dowolnie kopiować ich program. Jendakże, zadbali bardzo mocno o to, by nikt nie dowiedział się, jak ów program napisali. I to jest prawdziwa własność intelektualna! Word martwi się tylko o pieniądze. W jakiś sposób, logika ludzi z Software Pirates przemawia do mnie bardziej, niż metody ochrony stosowane w Wordzie 1.15.

Złap nas, jeśli potrafisz

Plik wykonywalny SNATCHIT jest skompresowany i zaszyfrowany. Widać to bardzo wyraźnie, gdy zajrzy się do środka, nie trzeba nawet włączać debugera. Żaden przyjazny program nigdy nie wygląda w ten sposób. To, co ukazał mi edytor XVI32 przypomina raczej wirusa. W ogóle, nie ufam żadnej binarce, która zaczyna się od „ą”, z założenia. Programem SNATCHIT bawił się nieoceniony Trixter, i najwyraźniej nieco się z nim namęczył. Program nafaszerowany jest hasłami w tonie „próbuj dalej, i tak nas nie rozgryziesz”. Efekt jest taki, że zabezpieczenia Worda złamano, z nawiązką, niemal od razu. Zaś sztuczek SNATCHIT nie rozgryziono przez 20 lat, aż wreszcie pojawiły się debugery emulujące, które pozwoliły rozwiązać ten problem „na chama”.

Tu byłem

Jedyny niezaszyfrowany łańcuch tekstu w SNATCHIT to podpis: (C) Copyright 1986-1991 Software Pirates, INC. All Rights Reserved. Wspomniana grupa istniała naprawdę, aż do połowy lat 90tych. Niestety, były to czasy przedinternetowe. Znalezienie historii tej grupy, a nie tylko pozostałości po ich wielkich dziełach lat minionych, jest trudne. Nie pomaga również zaskakująco mało odkrywcza nazwa. Zapewne wtedy nie był to problem. Pamiętajmy, że określenie „pirat komputerowy” kiedyś było ekscytujące.
Po przeprawach ze SNATCHIT, sam Word 1.15 wydał mi się znacząco mniej ciekawy. Zafascynował mnie bowiem potencjał intelektualny crackerów, podobny na swój sposób do metod działania twórców wirusów. Duma z własnych osiągnięć, cyberpunkowa estetyka, rzucanie wyzwania światu i zuchwałe podejście do rozwiązywania problemów są połączeniem, które widać w crackach i teraz. Zależy mi na tym, by to pokazać.

Powrót do przyszłości

Przez 30 lat metody rozprowadzania oprogramowania zmieniły się nie do poznania. Zabezpieczenie fizycznych nośników przed kopiowaniem nie ma już sensu (zresztą zaniechano tego procederu jeszcze w latach 90tych, gdy powszechnie uświadomiono sobie, jak nierówną walkę się toczy), bo nikt nie używa fizycznych nośników. Programy są rozpowszechniane za pomocą online’owych instalatorów (ESD), do lamusa odchodzą już nawet obrazy dysków. Program wędruje nie z osobistym komputerem, a z kontem użytkownika, do którego przypisana jest subskrypcja. Po wylogowaniu lub wygaśnięciu subskrypcji, program znika z komputera niemal bez śladu. Tak dziś działają usługi Adobe Creative Cloud oraz Office 365. Model subskrypcyjny ciężko oszukać, ale dopóki świat stoi, zawsze będą dostępne „instalatory korporacyjne” w postaci plików MSI i zawsze znajdzie się Polak, Rumun lub Rosjanin, który je scrackuje. Offline’owe instalatory, po usunięciu ograniczeń w kopiowaniu samych nośników, próbowały się „bronić”, najpierw poprzez klucz produktu (nice try!), a następnie przez usługi aktywacji, wiążące ze sprzętem. Następnym krokiem było wprowadzenie czasowej aktywacji, co 180 dni. Raz na pół roku oprogramowanie łączy się z serwerem kluczy Key Management Service (KMS) i pobiera bilet aktywacyjny, na podstawie licencji na serwerze KMS. Zgłoszenia do KMS są inwentaryzowane, liczba aktywacji, użytkowników oraz komputerów jest ustalona i kontrolowana. W ten sposób działa Office 2010 i 2013. Miało to ukrócić powszechne piractwo wersji 2007, którą wystarczyło spatchować jednym plikiem REG. Oczywiście, absolutnie nic to nie dało i rozwiązanie zostało ominięte jeszcze przed premierą. Podobnie zresztą szybko uwinięto się z Creative Cloud.

Aktywacja

Faktem jest, że sztywne rozwiązanie, w postaci jednorazowej edycji rejestru przestało działać i nie powstała żadna nowa alternatywa, która działałaby trwale, bez degradacji funkcjonalności. Nie udało się złamać algorytmu aktywacji Windows i Office, komunikacja jest szyfrowana, udało się jedynie „wmówić” oprogramowaniu, że jest aktywowane. Dlatego też piraci zaczęli szukać innego podejścia. W ten sposób powstała aplikacja KMS Micro, będąca rozwiązaniem tymczasowym, przed opracowaniem trwałego aktywatora. Mimo drastycznie odmiennej technologii, w programie KMS Micro można odkryć tę samą zuchwałość, jaką odznacza się programik SNATCHIT.

Duży czerwony przycisk

KMS Micro udaje firmowy serwer zarządzania kluczami i zmienia systemowe ustawienia sieci, by polecenie aktywacji produktu wyglądało na wysłane przez sieć. Ale jak to robi! Mimo, że interfejs graficzny to (jakże crackerski) jeden wielki czerwony przycisk, pod spodem dzieje się znacznie więcej ciekawych rzeczy. Cały aktywator zajmuje około dwustu megabajtów. Podejrzane, prawda? Analiza nazw plików pozwala zrozumieć, skąd taki rozmiar. W pakiecie z KMS Micro znajduje się środowisko QEMU oraz tajemniczy „ROM”, będący sercem cracka. Owe pliki sumują się na tak duży rozmiar. Uruchomienie aktywatora nagle pożera około gigabajta pamięci operacyjnej. Aby zrozumieć powód, należy nieco zmodyfikować proces i wyjść poza wielki czerwony przycisk. Dzięki temu możemy zobaczyć uruchamiające się QEMU, bowiem big red button uruchamia je w trybie bezokienkowym. A po co to QEMU? Aby załadować… agresywnie okrojoną wersję systemu Windows Server 2008 z uruchomionym serwerem KMS! To on wysyła polecenia aktywacji dla pakietu Office.

Armatą w komara

Mimo, że KMS Micro jest niezaszyfrowany (dzięki temu widać, że napisano go w .NET 4.0 i że jest naszpikowany cyrylicą) i da się sprawdzić, jak działa, pomysł z QEMU jest fascynujący. Twórcy aktywatora KMS zapewne uznaliby metodę z KMS Micro za „niemożliwą”, a wielu innych stwierdziłoby, że pomysł zwirtualizowania całego serwera aktywacji lokalnie po to, by odbezpieczyć (stąd „slmgr rearm”) pakiet biurowy na prywatnym laptopie jest zwyczajnie szalony, przesadzony, megalomański i absurdalnie pracochłonny. Cóż – jeżeli nie udało się złamać komunikacji KMS, konieczne były bardziej widowiskowe metody. Kilka miesięcy później udało się zreplikować komunikację między pakietem Office, a serwerami aktywacji, zatem potrzeba brutalnego stawiania całego serwera zniknęła. W ten sposób powstał dwumegabajtowy program KMS Pico. Podczas prac nad miniaturyzacją cracka powstało również narzędzie KMS Nano. Dzięki temu nazewnictwu, nazwa „KMS” została skażona i najpierw przywodzi na myśl cracka, a nie serwer aktywacji ;)

Podsumowanie

Stworzenie programu KMS Micro zdecydowanie wymagało mniej „skilla”, niż opracowanie porywacza SNATCHIT, ale istnieje silne podobieństwo między oboma projektami – czy może raczej między umysłami twórców obu programów. Niestandardowe myślenie, zwane „out of box”, upór w dążeniu do celu i cyfrowa zuchwałość, w obu przypadkach doprowadziły do fascynujących (i skutecznych) efektów. Opisywane narzędzia dzieli 30 lat rozwoju techniki i rynku komputerowego. Przez ten czas nie zabrakło ludzi, którzy w oszałamiający i przebojowy sposób dowodzili, że tworzenie zabezpieczeń przed kopiowaniem na zawsze pozostanie nierówną walką, skazaną na klęskę. Fundamentalne różnice w pojmowaniu rzeczywistości u hakerów i „prezesów” sprawiają zaś, że wyścig między nimi nigdy się nie skończy. Patrząc na to zjawisko spoza ram czasu, stosując nieco bardziej historiograficzne podejście, nie sposób uniknąć wrażenia, że jest to na swój sposób urocze.

Dla jasności. Nie jestem zwolennikiem piractwa. Twierdzę jedynie, pragmatycznie, że wprowadzanie zabezpieczeń, czy to subskrypcji, czy DRM, czy wszelkiego copy protection jest po prostu bezcelowe i z definicji nieskuteczne, a właściciele i twórcy produktów padających łupem piratów powinni dochodzić swych praw w inny sposób i na inną skalę. Dodam też, że jestem wielkim fanem pakietu Office i mam pudełkowe kopie wersji 2000, 2007, 2010 i 2013.

Jestem naprawdę ciekaw, czy Czytelnicy podzielą moją fascynację złożonością cracków i bogatą wyobraźnią ich twórców. Zapraszam do dyskusji :)
 

oprogramowanie programowanie hobby

Komentarze