DRM w systemie operacyjnym CROOK-5: Różnice pomiędzy wersjami

Przejdź do nawigacji Przejdź do wyszukiwania
Linia 245: Linia 245:


Zachowanie to jest o tyle ciekawe, że identyfikator systemu nie jest informacją dostępną dla programu użytkowego wprost. Narzędzie używa sztuczki korzystającej z faktu, że system operacyjny w trakcie ładowania zabezpieczonego programu zapisuje pod '''SECRET_M''' różnicę między numerem systemu zapisanym w programie, a znanym sobie, uprzednio wymieszanym numerem procesora. '''UZDAT''' jest „zabezpieczonym” programem - zawiera strukturę danych go identyfikującą, ale w polu '''SYSID''' wpisane ma '''0'''. '''SECRET_M''' jest więc po uruchomieniu programu ustawione przez system operacyjny na '''SYSID''' wymieszane funkcją '''GEN()'''. Ponieważ funkcja ta jest odwracalna i programowi znane są wartości '''C''', '''A3''' i '''A2''', '''UZDAT''' może z '''SYSID''' obliczyć faktyczny numer procesora.
Zachowanie to jest o tyle ciekawe, że identyfikator systemu nie jest informacją dostępną dla programu użytkowego wprost. Narzędzie używa sztuczki korzystającej z faktu, że system operacyjny w trakcie ładowania zabezpieczonego programu zapisuje pod '''SECRET_M''' różnicę między numerem systemu zapisanym w programie, a znanym sobie, uprzednio wymieszanym numerem procesora. '''UZDAT''' jest „zabezpieczonym” programem - zawiera strukturę danych go identyfikującą, ale w polu '''SYSID''' wpisane ma '''0'''. '''SECRET_M''' jest więc po uruchomieniu programu ustawione przez system operacyjny na '''SYSID''' wymieszane funkcją '''GEN()'''. Ponieważ funkcja ta jest odwracalna i programowi znane są wartości '''C''', '''A3''' i '''A2''', '''UZDAT''' może z '''SYSID''' obliczyć faktyczny numer procesora.
Pozostaje jeszcze pytanie dlaczego CROOK-5 nie niszczy '''UZDAT''', skoro ten ma wpisany niepoprawny, zerowy identyfikator systemu? Autor narzędzia, znając oczywiście zachowanie CROOK-a, zabezpieczył się przed jego niszczycielskimi zapędami używając do czytania danych wyłącznie ekstrakodów transmisji blokowych, które nie wyzwalają procedury nadpisującej zawartość pamięci procesu.


Podobne użycie odwrotności funkcji '''GEN()''' ma miejsce w kolejnym zastosowaniu narzędzia. Podając jako parametr nazwę zbioru z zabezpieczonym programem można sprawdzić, dla jakiej maszyny został on autoryzowany:
Podobne użycie odwrotności funkcji '''GEN()''' ma miejsce w kolejnym zastosowaniu narzędzia. Podając jako parametr nazwę zbioru z zabezpieczonym programem można sprawdzić, dla jakiej maszyny został on autoryzowany:

Menu nawigacyjne