******************************************************************************************
  RODZAJE ZABEZPIECZE UYWANE W ORYGINALNYCH GRACH ORAZ CO ZROBI ABY JE PRZEJ.
******************************************************************************************
                                         CZ II 
******************************************************************************************
				written by #EmEs@ /AAOCG/
******************************************************************************************		
W dzisiejszym odcinku omwi kolejne zabezpieczenia i zaprezentuje sposb obejcia Dummy Files na przykadzie Commandos: Behind Enemy Lines (pierwsza czc Commandosa), oraz zaprezentuje kilka typowych ustawie w programach do wypalania cdekw.
Kolejnymi zabezpieczeniami, ktre omwie s:

- SecuROM - firmy Sony
- Illegal TOC
- Physical Errors

SECUROM
---------
To zabezpieczenie jest dzieem firmy SONY. Rzadziej stosowane.
Po czym mona je pozna: na oryginalnej pycie znajduj si nastpujce pliki:
- CMS16.DLL, CMS_95.DLL, CMS_NT.DLL
- oraz nadruk na powierzchni pytki (DADC)

Przykady gier posiadajcych to zabezpieczenie:
-----------------------------------------------
Forsaken
Incoming
Hexplore
Frankreich 98 
Decent FreeSpace
Heart of Darkness
Max II 
Panzer Commander
Team Apache 
FIFA 99
F.A. Premier League FM 99
Moto Racer 2 
Populous 3
WarGasm
War of the Worlds 
SimCity 3000
South Park 
SuperBike
Silver
Turok 2 
Brain Lara Cricket
Machines 
S.A.G.A: Rage of the Vikings 
Outcast
Orion Burger 
Re-Volt
Shadow Man 

Securom jest technologi, ktra wykorzystuje specjalny mechanizm do rozpoznawania oryginalnej pyty. Zastosowano tu technologi DADC. Podczas procesu masteringu na powierzchni pytki nanoszony jest specjalny odcisk (tzw. fingerprint), przydzielajcy kadej pytce unikatowy numer. Przy przegrywaniu takiej pytki fingerprint jest pomijany przez czytnik co pniej powoduje problemy z uruchomieniem przegranej gry (wyskakuje tak jak zawsze komunikat proszcy o woenie oryginau do CDromu). Jednak tak przegran pytk mona uruchomi wykorzystujc patcha - Generic SecuRom Patch (istnieje kilka wersji - im nowsza tym lepiej ).    


ILLEGAL TOC
-------------
To zabezpieczenie wykorzystuje problem z programami do wypalania pytek. Podczas zgrywania wywala bd informujcy, e nie moemy zgra takowego programu. 


Jak je rozpozna:
Przy przegrywaniu naley spojrze na zawarto pyty. Standardowo zawsze na pierwszym miejscu s umiejscowione dane (data track) i ewentualnie muzyka (audio tracks). Pic polega na tym, e na kocu tak zabezpieczonej pytki dodawana jest dodatkowa sekcja z danymi (czyli dodatkowy data track). Jest to niezgodne ze standardem ISO dlatego te nasze nagrywareczki wymikaj przy tym.

Przykady gier posiadajcych to zabezpieczenie:
------------------------------------------------
Commandos
Gangsters
Nice 2
Tomb Rider 3

Moliwe kombinacje tego zabezpieczenia (data track1 + data track2  lub   data track1 + audio tracks + data track2). Data track1 jest bezporednio powizana z Data track2, dlatego te nie moemy tej drugiej omin przy nagrywaniu. Dzisiejsze programy do wypalania  (np: Nero lub CDRWIN) maj bardzo przydatn opcj -> Ignore Illegal TOC. Jeeli j wykorzystamy to ominiemy to zabezpieczenie i problem z gowy. Jednak moemy te si spotka z podwjnym zabezpieczeniem. Czto dodatkowo dodawane s Dummy Files (olbrzymie pliki ok. 600Mb -> przewanie 4 sztuki), ktre mog utrudni spraw przy zgrywaniu pyty.        


PHYSICAL ERRORS
-----------------
Bardzo sprytne zabezpieczenie :-). Podczas procesu masteringu na powierzchni pytki robiony jest fizyczny bd w postaci przerwy ok. 1mm. Jest to tak zwany "empty ring". Przy zgrywaniu czytnik napotyka na pusty sektor i informuje nas o bdzie (przewanie koczy czytanie pytki nie pozwalajc na dokoczenie). Tylko niektre czytniki potrafi poradzi sobie z tego typu wistwem (np: TEAC -> czas zgrywania od 1 do 6 godzin :-( ). Mona te sprbowa wykorzysta opcje dostpne w programach do wypalania (zaznaczy opcj Ignore Errors).

Przykady gier posiadajcych to zabezpieczenie:
------------------------------------------------
Settlers 3
Chaos Gate

Coraz rzadziej spotykane...:-)

To na tyle mojego gldzenia o protect, przejdmy do praktyki... 

OPIS ZAMANIA DUMMY FILES NA PRZYKADZIE GRY COMMANDOS: BEHIND ENEMY LINES.     
----------------------------------------------------------------------------

Wic do dziea...Kopiujemy gr na twardziela bez plikw z rozszerzeniem *.afp . Jak masz za duo pytek lub nagryware CD-RW to nagraj pytk, zrb full install i zaobserwuj co si stanie po uruchomieniu gry. Zostaniemy poproszeni o woenie oryginalnej pyty. A wic mona wywnioskowa, e pliki te s jednak potrzebne  przy uruchamianiu giery. Bardziej uoglniajc - gdzie w kodzie programu tkwi procedurka odpowiedzialna za sprawdzanie obecnoci Dummy Files. Nie pozostaje nam nic innego tylko znalezienie jej. Wykorzystamy do tego celu Win32Dasm, SoftIce 3.x lub 4.x no i oczywicie jaki Hexeditor (ja uyem Hex Workshopa 2.01). Na samym pocztku skorzystamy z Windasma i zdeassemblujmy plik commandos.exe (menu Disassembler -> Open File to Dissasemble). Zastanwmy si...tak jak wczeniej wspomniaem program wymaga obecnoci Dummy Files aby mg si uruchomi. Wic poszukajmy jaki informacji o nich - najprociej bdzie znale je po rozszerzeniu (*.AFP). Nic prostszego...klikamy na ikonk Find Text (trzecia od lewej) i w okienku poszukiwa wpisujemy AFP. Po chwili WinDasm wywietli  nastpujcy kawaek kodu.  

******************************************************************************************
Jeeli nie posiadasz oryginalnej wersji a masz na stanie scrackowan bez obecnoci plikw *.afp to podpowiem Ci jak mona w prosty sposb przywrci zabezpieczenie. Naley zrobi full install Commandosa, nastpnie wej do Hex edytora (np: Hex Workshop), zaadowa plik commandos.exe i skoczy po offset 4741C (menu Edit -> Goto, wpisujemy 4741C) nastpnie zmieni warto z 90 90 na 74 18 no i oczywicie zatwierdzi zmiany. Nastpnie uruchamiamy giere i co to ? Niemoliwe prosi o pyt :-).
******************************************************************************************

* Possible StringData Ref from Data Obj ->"d:\TBTP.AFP"          <- ooo jeden z naszych spasionych plikw. :-)
                                  |
:0044CB1C 6810266000		push 00602610         <- zapiszmy sobie ten adres, od ktrego zaczyna si procedura sprawdzania obecnoci plikw (0044CB1C - bdzie nam pniej potrzebny) 
:0044CB21 E8EA271800		call 005CF310
:0044CB26 83C408		add esp, 00000008
:0044CB29 8BF0			mov esi, eax
:0044CB2B 85F6			test esi, esi         <- testowanie zawartoci rejestru esi
:0044CB2D 742A			je 0044CB59           <- jeli rwne to skocz
:0044CB2F 8BF8			push 00000000
:0044CB31 85FF			push 2983A000
.
.
.
Z powyszego kodu wynika, e mamy tu do czynienia z procedur sprawdzania obecnoci plikw *.afp. Zamieszczony kawaek kodu odnosi si do pierwszego z nich (TATP.AFP). Przejdmy teraz do linijki zawierajcej skok warunkowy (je 0044CB59 - powinna podwietli si na zielono) i wykonajmy skok pod adres 0044CB59 (klikamy na Jump To - 9 ikonka od lewej). Otrzymamy nastpujcy kawaek kodu.


* Possible StringData Ref from Data Obj ->"rb"       
                  
:0044CB59 85FF			push 2983A000         <- jestemy tutaj

* Possible StringData Ref from Data Obj ->"BBVN.AFP"    <- no prosze nastpny grubasek

:0044CB5E 6820266000		push 00602620
:0044CB63 E818271800		call 005CF310
:0044CB68 83C408		add esp, 00000008
:0044CB6B 8BF0			mov esi, eax
:0044CB6D 85F6			test esi, esi        <- porwnaj zawarto rejestru esi jesli  esi==1  
:0044CB6F 750A			jne 0044CB7B         <- to plik istnieje
:0044CB71 C744241000000000	mov [esp+10], 00000000  <- mov [esp+10],0 = plik nie istnieje
:0044CB79 EB2E			jmp 0044CBA9         <- skocz dalej...

Idc niej napotkamy jeszcze dwa podobne kawaki kodu odnoszce si do pozostaych dwch plikw (ETAO.AFP i  BTBW.AFP). Jak wida cay czas sprawdzana jest obecno tyche plikw...No ale musi by jaki newralgiczny punkt odpowiedzialny za to wszystko...I w tym momencie musimy skorzysta z SoftIca...Oczywicie SoftIce musi by wczeniej zaadowany - to jest chyba oczywiste. Na pocztku wchodzimy do Symbol Loadera (Start -> Programy -> NuMega SoftIce -> Symbol Loader). Z menu File wybieramy opcj Open Module i przechodzimy do katalogu gdzie mamy zainstalowanego Commandosa. Klikamy na plik commandos.exe. Nastpnie z menu Module wybieramy polecenie Load. Wyskoczy nam Error - nic nie szkodzi - zatwierdzamy go i ldujemy w SoftIce. W linijce wydawania komend wpisujemy bpx 0044CB1C (zastawiamy breakpoina na adres 0044CB1C - czyli pocztek procedury sprawdzajcej obecno plikw). Wychodzimy z SoftIca (Ctrl + D) i przechodzimy automatycznie do adowania gry. Po zaadowaniu wybieramy New Game nastpnie Single Player. Znowu ldujemy w Sofice pod adresem 0044CB1C...

015F:0044CB1C 6810266000		push 00602610         <- tu jestemy...
015F:0044CB21 E8EA271800		call 005CF310
015F:0044CB26 83C408			add esp, 00000008
015F:0044CB29 8BF0			mov esi, eax
015F:0044CB2B 85F6			test esi, esi         
015F:0044CB2D 742A			je 0044CB59    

Wciskamy  F10 a dojdziemy do instrukcji skoku (je 0044CB59), ktra przenosi nas pod adres wskazywany przez ni, nastpnie znowu kilka razy F10 i skaczemy pod adres 0044CBA9, dalej F10 i skok pod 0044CBC9 a na kocu pod 0044CC49. Wyldowalimy w kocowej czci kodu. Jak mona byo zauway przechodzilimy kolejno przez operacje sprawdzajce istnienie Dummy files. Wciskamy jeszcze kila razy F10 a dojdziemy do adresu 0044CC60. Pod tym adresem znajduje si instrukcja  ret - powrotu, ktra przeniesie nas pod adres 0044801A. Wyldowalimy w bardzo ciekawym kawaku kodu...mona sprbowa jeszcze kilka razy wcisn F10, ale nie ma to sensu, gdy po ktrym razie zawiesimy program :-( Zajmijmy si poniszym kodem...

  
015F:00448015 E8D64A0000		call 0044CAF0
015F:0044801A 85C0			test eax, eax  <- tu jestemy (operacja AND na rejestrze eax, jeeli eax=0 to poniszy skok bdzie wykonany, a jeeli eax=1 skok nie zostanie wykonany i program przejdzie do wykonywania nastpnej instrukcji)
015F:0044801C 7418			jz  00448036   < - jeeli w eax otrzymamy 0 to flaga zerowa zostanie ustawiona (ZF=1) i nastpi skok) 
015F:0044801E 8D442418			lea eax,[esp+18]


Nastpnym naszym krokiem bdzie przyjrzenie si procedurze wywoywanej przez instrukcje spod adresu 00448015 (call 0044CAF0). Wyprbujemy to bezporednio na grze. Musimy tak ustawi SoftIca aby po wyjciu z niego odnosi si do powyszego wywoania. A wic usuwamy zastawionego wczeniej breakpointa (polecenie bc*) i klikamy dwukrotnie na wywoanie - podwietlio si na zielono. Oki, nastpnie wychodzimy z Softa (Ctrl + D). Pojawia  si plansza informujca o woeniu oryginalnego CDeka. Nie przejmujcie si j - jestemy na dobrej drodze :-). Zatwierdzamy j (Retry) i ldujemy znowu w SoftIce, przy naszym wywoaniu. Czyli procedura zawarta pod adresem 0044CAF0 jest odpowiedzialna za nasz "mi" plansz . Jednak spjrzmy jeszcze raz na kod programu. W dalszej czci kodu jest wykonywana operacja (test eax, eax) - logiczne mnoenie (AND) dwch argumentw w postaci bitowej (krtkie przypomnienie: 0 AND 0 =0, 0 AND 1 = 0, 1 AND 0 = 0, 1 AND 1 =1). Poniszy skok zostanie wykonany gdy wynik w eax=0 - flaga zerowa ustawiona. Jeeli kto prbowa wykona powyszy skok pod adres 00448036 to po krtkiej wdrwce po dalszej czci kodu programu dojdzie do momentu w ktrym powiesi program, a przecie nie o to nam chodzi. Sprawdmy wic co si stanie, gdy powyszy skok nie zostanie wykonany. A wic zatrzymujemy si na adresie 0044801C (czyli naszym skoku). W grnej czci SoftIce mamy wywietlony stan 32 bitowych rejestrw procesora podczas wykonywanych operacji (jeli nie masz to wpisz r) . Chodzi nam dokadnie o rejestr EIP (Instruction Pointer - wskanik instrukcji, wskazuje na aktualnie wykonywan instrukcj) - podwietlony na zielono (EIP=0044801C). Kliknijmy na niego i wpisujemy mu adres kolejnej instrukcji, czyli EIP=0044801E, kliknijmy ponownie na nim. Operacja ta spowoduje przeskoczenie do instrukcji bezporednio za instrukcj skoku. Zobaczmy teraz jak bdzie si zachowywaa gra. Wychodzimy z Softa (Ctrl + D) i co obserwujemy ? Wowww ! Dziaa :-))))). Jak mona wywnioskowa powyszy skok jest odpowiedzialny za cay ten baagan. Wychodzimy z giery. Teraz to ju z grki, spisujemy kod instrukcji skoku (7418) oraz kod wywoania podprogramu (E8D64A0000). Dlaczego spisujemy kod wywoania podprogramu ? Dlatego, e cig (7418) moe kilkakrotnie powtrzy si w programie i przez to moemy zmieni nieodpowiednie bajty. Nastpnie wchodzimy do Hex Workshopa i otwieramy plik commandos.exe (Menu File -> Open), nastpnie z menu Edit wybieramy opcj Find (Alt + F3). Przy opcji Value zaznaczamy Hex, poniewa szukamy kodu w postaci szesnastkowej. Wpisujemy kod instrukcji wywoania (E8D64A0000). Po chwili ldujemy w kodzie programu, dwa pola dalej mamy kod naszego skoku. Zmieniamy go z 74 18 na 90 90 (90 to jak wiadomo kod instrukcji nop - no operation, nie wykonuj nic). Zatwierdzamy naniesione zmiany i sprawdzamy czy gra dzia. Jeli wszystko jest O.K to wystarczy teraz zrzuci instalk na twardziela (oczywicie bez plikw *.afp), stary plik commandos.exe zastpi poprawionym i wypali pytk, ktr pniej bez problemu moemy przegrywa a co najwaniejsze: komunikat "Please insert Commandos CD" - jaki komunikat ??? Taki w ogle by ???. :-). To na tyle mojego rozwodzenia si na temat Dummy Files. Ostatni zauwayem, e odchodzi si od tego typu zabezpiecze. Ale co tu duo gada - warto wiedzie jak z nim walczy :-). Mam nadziej, e nie sprawio wam to wikszych trudnoci. Z tego typu zabezpieczeniami spotkacie si w grach Tomb Rider 3 lu Deathtrap Dungeon. Schemat postpowania jest praktycznie taki sam. A wic nie pozostaje mi nic innego wam yczy tylko owocnej pracy z jake ciekawym tematem jakim s zabezpieczenia.          

...#EmEs@.../AAOCG/...                    e-mail: emes1@iq.pl

-------------------------------------------------------------------------------------------------
WSZELKIE UWAGI I KOREKTY BD MILE WIDZIANE :-) ... WIADOMO JESTEM TYLKO CZOWIEKIEM...NAWET                                     MASZYNY SI MYL :-)
-------------------------------------------------------------------------------------------------
