Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Dungeon Siege версии «ФАРГУС» без CD

Обсудить статью на форуме

Очень удобно, когда все крэкерские инструменты, книги и статьи в одном месте. Используйте сборник от EXELAB - вот тут.

Автор: Dr. DOOM <dr_doom@ukr.net>

Предыстория

Купил себе игру Dungeon Siege версии “ФАРГУС”. Установил вынял CD, запускаю, создаю персонажа, нажимаю игра. А она мне “Пожалуйста вставьте диск 1 Dungeon Siege”. Ну вот опять начелось, а так хорошо все началось. Так как CD вставлять впадлень, будем отучать эту игру от CD.

Сущность проблемы

Заключается в том что сообщение “Пожалуйста вставьте диск 1 Dungeon Siege” появляется в игре и мы не знаем где оно берется и не можем отключить. Но знаем, что при вставленном CD игра запускается. Поэтому нам нужно сделать так чтоб игра думала, что мы его вставили диск “ФАРГУСа” и все идет как по маслу!!!

Что нужно

Для того чтоб нам отключить эту игру от CD нам потребуется пару прог:

-Игра Dungeon Siege версии “ФАРГУС”
(иначе, что ты собрался отключать)
-Filemon for Windows NT/9x/2000/XP
-W32Dasm (8.93)
-Hakview
-Ну конечно еще мозги, и руки из того места.

Взлом:

Итак, приступим. Для начало мы узнаем, что хочет найти игра на CD. Для этого мы запустим программу “Filemon” зайдем в ней в DRIVES сними все метки кроме диска в котором стоит диск с игрой. И нажмем “Ctrl + C” — это очистит список обращений к дискам. Теперь запустим игру фалом “DungeonSiege.exe” Создаем персонажа или загружаемся. Вобщем нужно начать играть. Как только начали играть можете выходить так как наше цель на данный момент не играть а отучить игру от диска. Вышли??? Теперь посмотрите, что нашел “Filemon”. Мне он нашел вот что:

 1    11:55:10	DungeonSiege.ex	IRP_MJ_CREATE			  F:\		SUCCESS	Attributes: Any Options: Open Directory
 2    11:55:10	DungeonSiege.ex	IRP_MJ_QUERY_INFORMATION	  F:\		SUCCESS	FileNameInformation
 3    11:55:10	DungeonSiege.ex	IRP_MJ_QUERY_VOLUME_INFORMATION F:\		SUCCESS	FileFsVolumeInformation
 4    11:55:10	DungeonSiege.ex	IRP_MJ_CLEANUP			  F:\		SUCCESS	
 5    11:55:10	DungeonSiege.ex	IRP_MJ_CLOSE			  F:\		SUCCESS	
 6    11:55:10	DungeonSiege.ex	FASTIO_QUERY_OPEN		  F:\LTDLL.DLL	FAILURE	
 7    11:55:10	DungeonSiege.ex	IRP_MJ_CREATE			  F:\LTDLL.DLL	SUCCESS	Attributes: Any Options: Open
 8    11:55:10	DungeonSiege.ex	FASTIO_QUERY_BASIC_INFO		  F:\LTDLL.DLL	SUCCESS	Attributes: R
 9    11:55:10	DungeonSiege.ex	IRP_MJ_CLEANUP			  F:\LTDLL.DLL	SUCCESS	
 10   11:55:10	DungeonSiege.ex	IRP_MJ_CLOSE			  F:\LTDLL.DLL	SUCCESS	
 11   11:55:10	DungeonSiege.ex	IRP_MJ_CREATE			  F:\LTDLL.DLL	SUCCESS	Attributes: Any Options: Open
 12   11:55:10	DungeonSiege.ex	FASTIO_QUERY_STANDARD_INFO	  F:\LTDLL.DLL	SUCCESS	Size: 69120
 13   11:55:10	DungeonSiege.ex	IRP_MJ_CLEANUP			  F:\LTDLL.DLL	SUCCESS	
 14   11:55:10	DungeonSiege.ex	IRP_MJ_READ*			  F:\LTDLL.DLL	SUCCESS	Offset: 0 Length: 32768
 15   11:55:15	DungeonSiege.ex	FASTIO_QUERY_OPEN		  F:\LTDLL.DLL	FAILURE	
 16   11:55:15	DungeonSiege.ex	IRP_MJ_CREATE			  F:\LTDLL.DLL	SUCCESS	Attributes: Any Options: Open
 17   11:55:15	DungeonSiege.ex	FASTIO_QUERY_BASIC_INFO		  F:\LTDLL.DLL	SUCCESS	Attributes: R
 18   11:55:15	DungeonSiege.ex	IRP_MJ_CLEANUP			  F:\LTDLL.DLL	SUCCESS	
 19   11:55:15	DungeonSiege.ex	IRP_MJ_CLOSE			  F:\LTDLL.DLL	SUCCESS	
 20   11:55:15	DungeonSiege.ex	IRP_MJ_CREATE			  F:\LTDLL.DLL	SUCCESS	Attributes: Any Options: Open
 21   11:55:15	DungeonSiege.ex	FASTIO_QUERY_STANDARD_INFO	  F:\LTDLL.DLL	SUCCESS	Size: 69120
 22   11:55:15	DungeonSiege.ex	IRP_MJ_CLEANUP			  F:\LTDLL.DLL	SUCCESS	
 23   11:55:15	DungeonSiege.ex	IRP_MJ_READ*			  F:\LTDLL.DLL	SUCCESS	Offset: 44544 Length: 5632
 24   11:55:15	DungeonSiege.ex	IRP_MJ_READ*			  F:\LTDLL.DLL	SUCCESS	Offset: 13312 Length: 30720
 25   11:55:15	DungeonSiege.ex	IRP_MJ_READ*			  F:\LTDLL.DLL	SUCCESS	Offset: 50176 Length: 14336
 26   11:55:15	DungeonSiege.ex	IRP_MJ_READ*			  F:\LTDLL.DLL	SUCCESS	Offset: 1024 Length: 8192
 27   11:55:15	DungeonSiege.ex	IRP_MJ_CREATE			  F: DASD	SUCCESS	Attributes: N Options: Open
 28   11:55:15	DungeonSiege.ex	FASTIO_DEVICE_CONTROL		  F: DASD	FAILURE	IOCTL: 0x41018
 29   11:55:15	DungeonSiege.ex	IRP_MJ_DEVICE_CONTROL		  F: DASD	SUCCESS	IOCTL: 0x41018
 30   11:55:16	DungeonSiege.ex	FASTIO_DEVICE_CONTROL		  F: DASD	FAILURE	IOCTL: 0x4100C
 31   11:55:16	DungeonSiege.ex	IRP_MJ_DEVICE_CONTROL		  F: DASD	SUCCESS	IOCTL: 0x4100C
 32   11:55:16	DungeonSiege.ex	IRP_MJ_CLEANUP			  F: DASD	SUCCESS	
 33   11:55:16	DungeonSiege.ex	IRP_MJ_CLOSE			  F: DASD	SUCCESS	
 34   11:55:16	DungeonSiege.ex	FASTIO_QUERY_OPEN		  F:\LTDLL.DLL	FAILURE	
 35   11:55:16	DungeonSiege.ex	IRP_MJ_CREATE			  F:\LTDLL.DLL	SUCCESS	Attributes: Any Options: Open
 36   11:55:16	DungeonSiege.ex	FASTIO_QUERY_BASIC_INFO		  F:\LTDLL.DLL	SUCCESS	Attributes: R
 37   11:55:16	DungeonSiege.ex	IRP_MJ_CLEANUP			  F:\LTDLL.DLL	SUCCESS	
 38   11:55:16	DungeonSiege.ex	IRP_MJ_CLOSE			  F:\LTDLL.DLL	SUCCESS	
 39   11:55:16	DungeonSiege.ex	IRP_MJ_CREATE			  F:\		SUCCESS	Attributes: Any Options: Open Directory
 40   11:55:16	DungeonSiege.ex	IRP_MJ_DIRECTORY_CONTROL	  F:\		SUCCESS	FileBothDirectoryInformation
 41   11:55:16	DungeonSiege.ex	IRP_MJ_CLEANUP			  F:\		SUCCESS	
 42   11:55:16	DungeonSiege.ex	IRP_MJ_CLOSE			  F:\		SUCCESS	
 43   11:55:16	DungeonSiege.ex	IRP_MJ_READ*			  F:\LTDLL.DLL	SUCCESS	Offset: 9216 Length: 4096
 

Теперь разберемся с этим. Объясняю:

В строке с 6 по и 26,с 34 по 38, и на 43 (оно выделены синим у меня листинге), происходит запрос на файл “LTDLL.DLL”. Вот мы уже и нашли что ему нужно на диске. Переписываем это файл в папку с и игрой Dungeon Siege. Но это наверника еще не все!

Теперь нужно сделать так чтоб игра опрашивала не CD-ROM а винчестер. Для этого нам нужно запустить W32Dasm и в нем открыть файл “DungeonSiege.exe” но с начало сделаем копию его и переименуем в “NocD.exe”. Как только вы начнете открывать файл W32Dasm выдаст ошибку “Could Not Allocate PE Exports Memory” не пугайтесь в некоторых файлах такое бывает, поэтому смело наживаем (OK) и W32Dasm начинает процесс открытия. Как только файл откроется нам нужно найди функцию GetDriveTypeA это функция отвечает за опознавания носителя. Начинаем искать её через (Search/Find Text). Вы найдете вот что:

 * Referenced by a (U)nconditional or (C)onditional Jump at Address:
 |:0044А9A4(C)
 |
 :0044А9A8 50                      push eax
 
 * Reference To: KERNEL32.GetDriveTypeA, Ord:013Dh
 |
 :0044А9A9 FF1504626F00	     Call dword ptr [006F6204]
 :0044А9AF 83F801		     cmp eax, 00000001                 - Диск не найден
 :0044А9B2 7431		     je 0044A9E5
 :0044А9B4 7616		     jbe 0044A9CC
 :0044А9B6 83F803		     cmp eax, 00000003                 - Жесткий диск
 :0044А9B9 6A05 		     push 00000005
 :0044А9BB 5E 	 	     pop esi
 :0044А9BC 7610 		     jme 0044A9CE
 :0044А9BE 83F804		     cmp eax, 00000004                 - Сетевой диск
 :0044А9C1 741D		     je 0044A9E0
 :0044А9C3 3BC6 		     cmp eax, esi
 :0044А9C5 7415		     je 0044A9DC
 :0044А9C7 83F806		     cmp eax, 00000006                 - RAM - Диск
 :0044A9CA 7402 		     je 0044A9CE
 
 * Referenced by a (U)nconditional or (C)onditional Jump at Address:
 |:0044А9B4(C), :0044А9E8(C)
 

Но это не оно! Почему ??? Если вы не новичок во взломе то вы заметите что тут есть почти все проверки дисков кроме CD. А она выглядит строкой:

:ХХХХХХХХ 83F806 		     cmp eax, 00000005                 - CD-ROM

Поэтому ищем дальше, и вот что вы найдете.

 * Referenced by a (U)nconditional or (C)onditional Jump at Address:
 |:0046DCF5(C)
 |
 :0046DCFC 50                      push eax
 
 * Reference To: KERNEL32.GetDriveTypeA, Ord:013Dh
 |
 :0046DCFD FF1504626F00		     Call dword ptr [006F6204]
 :0046DD03 83F805			     cmp eax, 00000005                 - CD-ROM
 :0046DD06 0F8582000000 		     jne 0046DD8E
 :0046DD0C 8B06		  	     mov eax, dword ptr [esi]
 :0046DD0E 3BC3 			     cmp eax, ebx
 :0046DD10 7505 		 	     jne 0046DD17
 :0046DD02 8B34746F00		     mov eax, 006F7434
 
 * Referenced by a (U)nconditional or (C)onditional Jump at Address:
 |:0046DD10(C)
 |
 

Вот теперь мы нашли это место где идет проверка. Теперь нужно записать его Offset адрес его можно найти в статус строке, выглядит он вот таким видом “@Offset 0006DD03h” (красным выделено, что нужно записать). Теперь запусти прогу Hakview и откроем в ней файл “NocD.exe”. Прога тут тоже ругнется “Import data No free memory”, И тут вам нужно не обращать на это внимание и просто нажать ENTER, перейдем в решим DECODE нажатием кнопки F4, после нажать F5 и написать адрес который мы записали 0006DD03 это переместит нас на эту строчку. После нажмем F3 и изменим значения 83F805 на 83F803 объясняю зачем. первые 4 цифры мы не изменяем поэтому я и не буду объяснять зачем это. А вот 05 меняем 03 затем чтоб изменить так чтоб игра опрашивала не CD а винчестер:

 Для тех кто не знал и забыл:
 00	-	Невозможно определить тип
 01	-	Диск не найден
 02	-	Гибкий (возможна замена)
 03	-	Жесткий (замена невозможна)
 04	-	Сетевой диск
 05	-	CD-ROM
 06	-	RAM – Диск
 

После этого нажимаем F9 это сохранит изменения в файле и выходим из программы нажатием F10.

Вы думаете что это все??? А вот я не уверен в этом. Не может быть, что это все что нужно сделать уж больно просто вышло, а вить мы отключаем диск фирмы “ФАРГУС” которая неплохо делает защиту в играх.

Ну ладно рискнем. Но не просто запусти а сделаем вот что. Создадим в папке игры файл “start.bat” в котором напишем во что:

subst t: E:\Games\DungeonS

NocD.exe

subst t: /d

Теперь объясню зачем это. Так как мы сказали игре опрашивать винчестер но не сказали игре где находиться игра нам нужно сделать так чтоб игра находилась в корне какого-нибудь диска. Мы пишем

subst t: E:\Games\DungeonS где t: имя виртуального диска (он создается во всех версиях WINDOWS командой SUBST) а за место E:\Games\DungeonS вы должны написать путь где находиться ваша версия игры Dungeon Siege

Внимание игру нельзя устанавливать в путь где встречается ПРОБЕЛ (пример c:\gamrs\ Dungeon Siege) потому что команда SUBST понимает ваши пробелы как параметре команды.

Получится что диск с именем T будет папка с игрой.

Строкой NocD.exe вы запускаете игу с нашим изменением о опросе диска.

И строкой subst t: /d вы удаляете виртуальный диск (обратите внимание что вы не удаляете саму игру а удаляете только ссылку на эту папку). После этого в командной строке напишите subst Х: ПУТЬE где X: имеет значение к примеру диска Т а ПУТЬ вы должны заменить путем где у вас установлена игра

ПРИМЕР у меня это строка выглядит так subst t: E:\Games\DungeonS

И запустите программу “Filemon” зайдите DRIVES и поставьте галочку только на диске T. Теперь запустите файл “start.bat” который запустит игру с вашими изменениями, и попробуйте поиграть. Что выйдет??? Играм вам скажет “Пожалуйста вставьте диск 1 Dungeon Siege”. Выйдите из игры и посмотрите в программу “Filemon” в которой зайдите в Search\Find или F3 и напишите найти LTDLL.DLL. Вы нечего не нашли??? Не удивительно это то о чем я говорил в игре есть еще одна защита. И знаете какая??? Защита МЕТКОЙ диска!!! Как я догадался??? Элементарно если вы не нашли ссылку на файл LTDLL.DLL а помните в начале когда в начале запускали игру программа “Filemon” показывала что с диска читается файл LTDLL.DLL. Вывод напрашивается сам. ЕСТЬ ЗАЩИТА МЕТКОЙ!!! Теперь будем отключать её. Возвратимся в программу W32Dasm и найдите где функцию GetVolumeInformationA. Эта функция отвечает именно за проверку МЕТКИ, в нашем случаи за метку диска с игрой. Найдите где эта функция.

У меня я нашёл вот что:

 * Reference To: KERNEL32.GetVolumeInformationA, Ord:01CAh
                                   |
 :0046DD23 FF1500626F00		    Call dword ptr [006F6200]
 :0046DD29 85C0			    test eax, eax
 :0046DD2B 7461			    je 0046DD8E
 :0046DD2D 6AFF			    push FFFFFFFF
 :0046DD2F 8D4580			    lea eax, dword ptr [ebp-80]
 :0046DD32 6808926F00		    push 006F9208
 :0046DD37 50			    push eax
 :0046DD38 E8B76C0000		    call 004749F4
 :0046DD3D 83C40C		    add esp, 0000000C
 :0046DD40 85C0			    test eax, eax
 :0046DD42 754A			    jne 0046DD8E
 :0046DD44 56			    push esi
 :0046DD45 8D4DB4			    lea ecx, dword ptr [ebp-4C]
 :0046DD48 E892000000		    call 0046DDDF
 :0046DD4D 53			    push ebx
 :0046DD4E 53			    push ebx
 :0046DD4F 8D4DB4			    lea ecx, dword ptr [ebp-4C]
 :0046DD52 E83D9BFAFF		    call 00417894
 :0046DD57 84C0			    test al, al
 :0046DD59 7428			    je 0046DD83
 :0046DD5B 6A01			    push 00000001
 :0046DD5D FF55D0			    call [ebp-30]
 :0046DD60 6685C0			    test ax, ax
 

Вот мы и нашли где живет, эта функция. Теперь рассмотрим где и что нужно менять. Есть строка

:0046DD2B 7461 je 0046DD8E

Но эта не она. Так как это переход если равно а нам нужно найти где переход если не равно вить метки у нас на винчестере нет!!!

:0046DD42 754A jne 0046DD8E

Вот оно. Теперь запишите её адрес, напоминаю он находиться в статус строке программы W32Dasm и выглядит так: @Offset 0006DD42h (красным выделено то что нужно записать). Теперь снова запустим Hakview и откроем файл “NocD.exe”. Прога тут тоже ругнется “Import data No free memory”, И тут вам нужно не обращать на это внимание и просто нажать ENTER, перейдем в решим DECODE нажатием кнопки F4, после нажать F5 и написать адрес который мы записали 0006DD42. это переместит нас на эту строчку. После нажмем F3 и изменим значения 75 4A на 74 4A. Зачем??? Объясняю 75 обозначет переход если значение не равно а 74 обозачет переход если значани равно. Так как на винчестере метки мы не делали (А можно было, но зачаем, нахрен фигней маяться, можно просто изменить проверку этого диска)Ясно??? Поменяли???теперь строка в Hakview у нам выглядит так

:0046DD42 744A je 0046DD8E

нажимаем F9 это сохранит изменения в файле и выходим из программы нажатием F10.

Теперь можно закрыть все приложения и запустить файл “start.bat” который будет запускать файл “NocD.exe” с виртуальным диском так чтоб игра могла лазить по корневому каталогу виртуального диска.

Напоминаю файл “start.bat” выглядит у меня:

 subst t: E:\Games\DungeonS
 NocD.exe
 subst t: /d
 

У вас он должен быть изменет по вашим требованиям.

T: - Заменить на ваш виртуальный диск (какая буква свободна такую и ставите.)

E:\Games\DungeonS – Заменить на путь где у вас установлена игра (игру нельзя ставить в путь с пробелом иначе команда SUBST поймет все что после пробела как параметр.)

Ну что запускайте файл “start.bat” и спокойно играйте игра больше не скажет вам надоевшие слова “Пожалуйста вставьте диск 1 Dungeon Siege”.

Ну что довольны вы только что поломали довольно крутую защиту фирмы “ФАРГУС” и сделали програмеров полных хотя нет не полных но в общем вы их сделали но только на этот раз!!!.

P.S. Подобным методом ломается GTA-3 даже немного легче там нет защиты меткой!

Всю гадость оставьте себе

А все остальное на dr_doom@ukr.net

P.S. Запомните все материалы публикуются только в учебных целях и автор за их использование ответственности не несет!!
P.P.S. Возможно имеют место опечатки, заранее извините!

Послесловие

Запомните если вам нравиться игра, то не должны играть с кодами и тем более вносить свои коррективы в игру. Данная информация написана для фирмы “ФАРГУС” чтоб показать им, насколько не универсальна их система защиты, сколько бы видов защит оно не ставили!

С уважение к сотрудникам фирмы “ФАРГУС”

Dr. DOOM



Обсуждение статьи: Dungeon Siege версии «ФАРГУС» без CD >>>


Комментарии к статье: Dungeon Siege версии «ФАРГУС» без CD


Материалы находятся на сайте https://exelab.ru



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS