Автор: Dr. DOOM <dr_doom@ukr.net>
Купил себе игру Dungeon Siege версии “ФАРГУС”. Установил вынял CD, запускаю, создаю персонажа, нажимаю игра. А она мне “Пожалуйста вставьте диск 1 Dungeon Siege”. Ну вот опять начелось, а так хорошо все началось. Так как CD вставлять впадлень, будем отучать эту игру от CD.
Заключается в том что сообщение “Пожалуйста вставьте диск 1 Dungeon Siege” появляется в игре и мы не знаем где оно берется и не можем отключить. Но знаем, что при вставленном CD игра запускается. Поэтому нам нужно сделать так чтоб игра думала, что мы его вставили диск “ФАРГУСа” и все идет как по маслу!!!
Для того чтоб нам отключить эту игру от CD нам потребуется пару прог:
-Игра Dungeon Siege версии “ФАРГУС”Итак, приступим. Для начало мы узнаем, что хочет найти игра на 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
Материалы находятся на сайте http://cracklab.narod.ru/doc/