Как запустить приложение без диска
Как запустить игру без физического носителя, то есть диска, или интернета – актуальный вопрос не только для любителей пиратских сборок, но и для владельцев лицензионных игр, которые хотят упростить процесс запуска.
Запуск игры без диска
Из-за попыток разработчиков защитить свой продукт от пиратства, многие игры при запуске требуют вставить лицензионный диск, а без него не запускаются. Если вы устанавливали игру, одолжив диск, или просто хотите избежать механических повреждений от частого использования, вам может пригодиться данная инструкция.
Она актуальна не только для владельцев лицензионного диска, но и в качестве решения распространенной ошибки с невозможностью запуска скачанной игры из-за отсутствия диска в приводе.
Использование образа диска
Существует много способов, как запустить игру без диска. Самый распространенный из них – с использованием образа, смонтированного в программах DAEMON Tools или Alcohol. Данные программы создают виртуальную копию вашего диска, а затем – монтируют ее на виртуальный CD-привод, убеждая таким образом систему в том, что требуемый диск на месте.
Для этого способа понадобится диск с игрой или же скачанный из интернета образ.
- Скачайте DAEMON Tools или Alcohol из проверенного источника, просканируйте дистрибутив с помощью антивируса (на всякий случай), затем отключите его и установите программу.
- Вы можете создать образ самостоятельно или скачать его из интернета. Образы дисков имеют расширение *.iso. Для того, чтобы записать образ диска, выбери функцию «Создать образ» в одной из этих программ, а затем следуйте инструкциям мастера.
- Теперь, когда у вас есть образ нужного диска, необходимо его монтировать. Откройте образ с помощью программы, а затем – монтируйте его, создав виртуальный привод.
- Запустите игру – все должно работать!
Если этот способ не работает, и вы создавали образ сами, то возможно диск имеет защиту от записи, и вам необходимо будет использовать другую программу для работы с образами дисков. Для копирования и создания образов защищенных игровых дисков часто используется Clone CD.
Вам может понадобиться программа Game Jackal, созданная для работы с защищенными дисками.
- Скачайте и установите ее, запустите и выберите «Создать профиль игры». Если у вас есть диск, его нужно пока что извлечь, а виртуальный привод – отключить.
- Выберите автоматический тип защиты диска.
- Введите имя профиля игры: можно использовать название игры, или что угодно еще.
- Укажите прямой путь до установленной игры. Он должен выглядеть так:
- Снимите первую галочку и вставьте диск или активируйте привод.
- Через какое-то время запустится игра, но ее стоит закрыть. Это необходимо для того, чтобы программа завершила создание профиля. Когда этот процесс будет завершен, вы сможете создать значок игры прямо из программы и играть без диска.
NoCD/NoDVD
Можно также найти в интернете моды или No-DVD crack, но будьте осторожны и скачивайте такие программы только из проверенных источников!
- перед установкой обязательно сделайте бекап основных файлов игры, которые, как правило, указаны в инструкции по установке;
- не рекомендуется применять этот способ для лицензионных игр, если вы планируете в дальнейшем запускать их через Steam или Origin.
Запуск игры без подключения к сети
Часто игры, скачанные через Steam, не запускаются без самой программы и не желают работать без подключения к интернету. Кроме того, если вы попытаетесь запустить через Steam или Origin пиратскую игру, то она не запустится, а вы рискуете получить пожизненную блокировку в сервисе.
Лицензионные игры, как правило, не запускаются до прохождения проверки через систему, но после этого не требуют подключения к сети. В случае с пиратскими играми Steam или Origin всегда должны быть переведены в автономный режим для того, чтобы не возникало проблем.
Запустить игру в Steam или Origin без интернета легко. Для этого:
- Необходимо отключить автоматическое обновление сервиса;
- Заранее перевести Steam или Origin в автономный режим.
После этого проблем с запуском этих программ без интернета возникнуть не должно.
Теперь вы знаете, как запустить игру без диска и интернета. Если рекомендации из статьи вам не помогли, вы можете попробовать найти решение своей проблемы в других статьях на нашем сайте.
Как играть без диска?
Абсолютное большинство компьютерных игр на CD и DVD, разрабатываются таким образом, что в момент запуска игры, а чаще – в процессе, они требуют в приводе наличие диска.
Мотивы ясны. Создателям и продавцам этих игр намного выгоднее, чтобы Ваши друзья и знакомые покупали собственные копии, ежели Вы будете давать свой диск поиграть всем подряд. Тем не менее, создатели такой защиты совсем не подумали, что и у пользователей есть свои права. Диск от постоянного использования довольно быстро покрывается царапинами, что преждевременно приводит его в совершенную негодность, делая невозможным запуск игры. Более того, процесс виртуальной гонки или битвы, омрачит невозможность слушать любимые мелодии из-за постоянно торчащего в DVD-роме диска с игрой.
Вполне понятно и то, что многие пользователи, которые приобрели ту или иную игру вполне легально, желают играть в неё без диска.
Вот несколько способов сделать это:
Используется специальная программа – эмулятор диска. Среди нескольких существующих программ наиболее популярными считаются Alcohol, а также Daemon Tools, принцип действия которых довольно прост. Для начала, конечно же, программу надо будет установить на компьютер. Этот несложный процесс отнимет у Вас всего несколько минут. Вы просто загружаете дистрибутив программы с сайта, ему соответствующего; устанавливаете и запускаете её. Далее следует установить диск игры в дисковод и создать, с помощью установленной программы, его образ. После смонтирования образа, тот будет определяться операционной системой как дополнительный DVD-привод с установленным игровым диском. Настоящий диск из реального привода затем можно будет извлечь и убрать подальше в надёжное место. Там его случайно не поцарапают, не сломают и не зальют чаем или кофе, а игра будет уверена, что диск находится в приводе.
Второй способ основан на поиске так называемых патчей (NoCD или NoDVD). Патч – это такая небольшая программка, которая способна доходчиво объяснить установленной на компьютере игре, что ей нет необходимости искать компакт-диск для работы. Специфичность такого патча для каждой игры подразумевает, что в каждом случае придётся отдельно искать свой патч. Зато совершенно отпадает необходимость установки дополнительных программ, на которые у операционный системы может просто не хватить мощности, а так хочется играть в любимую игру без диска.
Файлы ISO являются одним из форматов образов или, другими словами, точных копий дисков. Они используются для распространения установщиков операционных систем, программного обеспечения, игр, медиаконтента. ISO‑файл можно записать на физический носитель или просмотреть его содержимое, минуя этот шаг.
По большому счёту, ISO — это архив со структурированными файлами. Их можно открыть средствами операционной системы или с помощью подходящего приложения.
1. Как открыть файл ISO средствами ОС
Все современные ОС умеют работать с ISO‑файлами, они монтируют их к файловой системе и позволяют взаимодействовать с содержимым. Помимо просмотра, можно также записать образ на физический носитель.
Windows
Начиная с Windows 8 в системе реализована поддержка ISO, поэтому для работы с образом нужно лишь найти его в проводнике и открыть двойным щелчком. Через пару секунд образ диска появится в разделе съёмных носителей в «Моём компьютере». Для записи следует вызвать контекстное меню и выбрать «Записать образ диска».
Если у вас Windows 7 — воспользуйтесь другими вариантами, описанными ниже.
macOS
Операционная система Apple также умеет монтировать файлы ISO и делает это с помощью встроенной утилиты DiskImageMounter. Она запускается автоматически, если попытаться получить доступ к образу в Finder или через пункт контекстного меню «Открыть».
Linux
Все популярные Linux‑дистрибутивы легко открывают ISO‑файлы собственными средствами без какого‑либо дополнительного ПО. Нужно лишь сделать правый клик на файле и выбрать «Подключить архив» или «Открыть с помощью…» → «Менеджер архивов». В первом случае ISO‑образ смонтируется, во втором — станет доступным для просмотра.
Кроме того, можно записать образ на диск, если выбрать в меню «Открыть с помощью…» → Disk Image Writer.
2. Как открыть файл ISO с помощью архиватора
Поскольку ISO‑образ по сути является архивом — его легко открыть в любом архиваторе. Например, WinRAR, 7‑Zip и других. Достаточно вызвать контекстное меню и выбрать соответствующую команду.
3. Как открыть файл ISO с помощью специализированного ПО
Такие приложения понадобятся, когда необходимо не просто просмотреть содержимое образа, а эмулировать его подключение к виртуальному приводу для установки игры или воспроизведения в проигрывателе Blu‑ray. Подобные программы имитируют работу дисковода и заставляют систему думать, что в компьютер вставлен физический диск, даже если отсутствует сам привод.
Существует множество утилит для эмуляции дисковода и работы с образами. Рассмотрим, как открыть ISO‑файл в двух наиболее популярных.
Daemon Tools Lite
Самая известная программа для работы с образами дисков. Она платная, но имеет бесплатную Lite‑редакцию с базовыми возможностями, которых будет более чем достаточно, чтобы открыть ISO‑файл.
Скачайте Daemon Tools Lite по ссылке и установите, следуя подсказкам мастера. Для получения бесплатной версии выберите вариант «Бесплатная лицензия с рекламой».
Запустите утилиту и нажмите на кнопку «Быстрое монтирование». Укажите файл ISO‑образа и щёлкните «Открыть». После этого диск появится в проводнике, а если в нём есть меню автозапуска — оно тут же будет предложено.
UltraISO
Как и предыдущее, это приложение позволяет монтировать, редактировать, конвертировать и записывать образы, а также создавать загрузочные носители. UltraISO предлагается на платной основе, однако имеет бессрочный пробный период с ограничением в 300 МБ на редактирование образов и напоминанием о покупке. К счастью, на монтирование дисков это не распространяется.
Скачайте UltraISO по ссылке и установите его. Откройте приложение, выбрав в окне запуска «Пробный период».
Перейдите в меню «Сервис» → «Смонтировать на виртуальный диск…».
Щёлкните по кнопке с тремя точками, выберите ISO‑файл и нажмите «Смонтировать». Образ появится в проводнике, и можно будет просмотреть его содержимое или выполнить автозапуск.
4. Как открыть файл ISO на Android
Довольно редкий сценарий, но тоже вполне реальный. Открыть образ на смартфоне можно с помощью архиватора с поддержкой ISO. Например, RAR или ZArchiver. Просто установите приложение, запустите его и извлеките файлы из нужного образа.
В пятой части нашей серии статей мы показали, как можно использовать прерывания BIOS'а после перехода в защищенный режим, и в качестве примера определили размер оперативной памяти. Сегодня мы разовьем этот успех и реализуем полноценную поддержку работы с дисками с файловой системой FAT16 и FAT32. Работу с файлами на диске можно разбить на 2 части: работа с файловой системой и работа с диском на уровне чтения/записи секторов. Можно сказать, что для этого нам нужно написать «драйвер» файловой системы и «драйвер» диска.
Работа с диском на уровне чтения/записи секторов
Для начала научимся работать с диском.
Итак, мы можем вызывать прерывания BIOS'а. Помимо прочих возможностей, BIOS предоставляет интерфейс для работы с диском, а именно — прерывание int 0x13. Со списком сервисов, предоставляемых прерыванием, можно ознакомиться на википедии. Нас интересуют сервисы чтения и записи дисков.
Существует два способа адресации сектора на диске, с которыми работает BIOS – CHS(cylinder-head-sector) и LBA(logical block addressing). Адресация CHS основана на использовании геометрии диска, и адресом сектора является совокупность трех координат: цилиндр, головка, сектор. Способ позволяет адресовать до 8Гб. Прерывание int0x13 предоставляет возможность читать и писать на диск с использованием этой адресации.
Понятно, что 8Гб — это очень мало, и данный способ адресации является устаревшим, а все современные (и не очень) контроллеры жестких дисков поддерживают адресацию LBA. Адресация LBA абстрагируется от геометрии диска и присваивает каждому сектору собственный номер. Нумерация секторов начинается с нуля. LBA для задания номера блока использует 48 бит, что позволяет адресовать 128 ПиБ, с учетом размера сектора в 512 байт. Прерывание int0x13 предоставляет два сервиса для чтения и записи секторов на диск с использованием LBA. Их мы и будем использовать. Для чтения сектора прерывание in0x13 ожидает следующие параметры:
Прерывание возвращает следующие значения:
Один из параметров – номер диска. Нужно как-то узнать номер диска, с которым мы собрались работать. Нумерация происходит следующим образом: флоппи-диски (fdd), и все, что эмулируется как флоппи, нумеруются с нуля, а жесткие диски (hdd), и все, что эмулируется как они(usb-флешки, например), нумеруются с 0x80. Этот номер никак не связан с последовательностью загрузки в настройках BIOS’а. В нашем случае, диск, с которым мы собираемся работать, является тем диском, с которого мы загрузились.
Когда BIOS передает управление MBR, он загружает его по адресу 0000h:7C00h, а в регистре DL передает нужный нам номер загрузочного устройства. Это является частью интерфейса взаимодействия между BIOS и MBR. Таким образом, этот номер попадает в GRUB, где далее используется для работы с диском. GRUB, в свою очередь, передает этот номер ОС как часть структуры Multiboot information.
Сразу после передачи управления от GRUB’а к ОС в регистре EBX находится указатель на эту структуру. Первое поле структуры – это flags, и если в нем выставлен 2-й бит, то поле boot_device корректно. Это поле так же принадлежит структуре Multiboot information и в его старшем байте (размер поля – 4 байта) хранится нужный нам номер диска, который понимает прерывание int0x13. Таким образом, используя GRUB, мы получили недостающий параметр для чтения/записи секторов на диск.
Мы научились читать и писать сектора на диск, это, безусловно, важно. Но файловая система привязана не к целому диску, а только к его части – разделу. Для работы с файловой системой нужно найти сектор, с которого начинается раздел, на котором она располагается. Информация об имеющихся на диске секторах хранится в первом секторе диска, там же, где располагается MBR. Существует много различных форматов MBR, но для всех них верна следующая структура:
Информация о разделах хранится в таблице разделов. На диске может быть только 4 первичных раздела, с которых можно загрузиться. На запись о разделе приходится 8 байт. Первый байт — это флаги, если его значение 0x80, то раздел загрузочный. Код MBR в процессе своей работы пробегает по этим 4-м разделам в поиске загрузочного раздела. После его обнаружения, MBR копирует содержимое первого сектора этого раздела на адрес 0000h:7C00h и передает туда управление. Нас интересует LBA адрес первого сектора загрузочного раздела, так как именно на нем располагается наше ядро, и присутствует файловая система, которую мы собираемся читать. Для того чтобы получить этот адрес, нужно прочитать первый сектор диска, найти на нем таблицу разделов, в таблице разделов найти загрузочный раздел, а из его записи прочитать нужное поле.
Итак, у нас есть механизм для чтения сектора с диска и знание о расположении нужного нам раздела на диске. Осталось научиться работать с файловой системой на этом разделе.
Работа с файловой системой
Для работы с файловой системой мы будем использовать библиотеку fat_io_lib. Библиотека доступна под лицензией GPL. Она предоставляет интерфейс для работы с файлами и директориями, аналогичный имеющемуся в libc. Реализованы такие функции, как fopen(), fgets(), fputc(), fread(), fwrite() и т.д. Библиотека для своей работы требует всего лишь две функции: записать сектор и прочитать сектор, причем первая является необязательной. Функции имеют следующий прототип:
Библиотека написана на чистом С, что опять-таки нам на руку. Для использования в своей мини-ОС нам не придется менять в ней ни строчки. Библиотека ожидает, что чтение секторов происходит в рамках раздела с файловой системой.
Итак, у нас есть функции чтения/записи сектора на раздел и есть библиотека для работы с FAT16/32, которая использует эти функции. Осталось собрать все воедино и продемонстрировать результат. Но прежде чем перейти к коду, хотелось бы показать, что подход, который мы собираемся использовать, вполне применим в реальной жизни. Ниже представлена небольшая часть VBR windows 7, в которой происходит чтение сектора диска посредством прерывания int0x13. Этот код многократно вызывается в процессе загрузки системы, вплоть до момента отрисовки загрузочной анимации.
Для вызова этого кода, Windows 7, подобно тому, как это делаем мы, переходит из защищенного режима в реальный, и обратно. Это несложно проверить, запустив Windows 7 в QEMU. QEMU должен ожидать подключения отладчика. После подключения отладчика (gdb) ставим breakpoint на адрес (0x7c00 + 0x11d). Срабатывание breakpoint’а будет означать вызов этой функции. Кстати в Windows XP этот механизм отсутствует, для вызова прерываний BIOS'а там переходят в режим VM86.
! ВАЖНО! Все дальнейшие действия могут успешно осуществляться только после успешного прохождения всех шагов из пятой части нашей серии статей
Шаг 1. Изменим основную логику в kernel.c
1. Добавим в файле kernel.c следующие объявления:
Код, печатающий размер оперативной памяти
заменим на следующий код:
Память под переменные mbd и magic зарезервирована в файле loader.s, так что их можно использовать аналогично глобальным переменным из кода на С. Переменная magic содержит сигнатуру, подтверждающую, что для загрузки использовался стандарт Multiboot, эталонной реализацией которого является GRUB. Переменная mbd указывает на структуру multiboot_info_t, которая объявлена в multiboot.h. Номер загрузочного диска определяется следующим выражением — p_multiboot_info->boot_device >> 24. Функция InitBootMedia запоминает номер диска и ищет первый сектор файловой системы, чтобы затем все смещения считать от него.
Библиотека fat_io_lib для инициализации требует вызова двух функций: fl_init и fl_attach_media. Первая функция обнуляет внутренние структуры библиотеки, а вторая получает в качестве параметров функции чтения и записи секторов на диск, которые затем используются для обращения к файлам. Далее идет демонстрация работы с библиотекой: выводится список файлов в папке /boot/grub и распечатывается содержимое файла menu.lst.
2. Добавляем файл multiboot.h в папку include. Содержимое файла берем с сайта спецификации предыдущей версии.
Шаг 2. Добавим функции для работы с диском
1. В файл include\callrealmode.h добавим прототипы следующих функций:
2. В файле include\callrealmode_asm.h добавим в enum callrealmode_Func новое значение так, чтобы получилось следующее:
Добавим в union внутри структуры callrealmode_Data только что объявленную структуру callrealmode_read_disk. Должно получиться следующее:
3. В файл include\string.h добавим функции strncmp и strncpy, используемые в библиотеке fat_io_lib.
4. Добавим в файл callrealmode.c следующие объявления:
И несколько функций:
Функции ReadBootMedia и WriteBootMedia используются библиотекой fat_io_lib для чтения/записи секторов. Функция WriteBootMedia не обязательная и является заглушкой, так как в данном примере нет записи на диск. Ее реализация выглядела бы аналогично функции ReadBootMedia. Функция ReadBootMedia похожа на функцию GetRamsize из прошлой статьи с точностью до типа param.func, а вместо param.getsysmemmap используется param.readdisk. Функция InitBootMedia должна быть вызвана раньше двух остальных, так как она инициализирует значения g_BootPartitionStart и g_BootDeviceInt13Num.
5. Изменим callrealmode_asm.s. Добавим еще один тип CALLREALMODE_FUNC_READ_DISK вызываемых функций, должно получиться следующее:
Далее добавим еще одну проверку на тип функции и непосредственно код, читающий с диска. Должно получиться следующее:
Метка readdisk указывает на код, который формирует структуру DAP из структуры callrealmode_Data и вызывает int0x13. В коде после метки callrealmode_switch добавилось 2 инструкции, проверяющие, не нужно ли вызывать readdisk.
6. Добавим файл include\mbr.h, содержащий определения для работы с MBR. Его содержимое:
Структура MBRSector используется в функции InitBootMedia.
Шаг 3. Добавим библиотеку fat_io_lib и запустим
1. Скачаем архив fat_io_lib.zip и распакуем его в папку fat_io_lib в корне проекта.
2. Добавим пустые файлы assert.h и stdlib.h в папку include. Они нужны, что бы библиотека скомпилировалась.
3. Исправим Makefile. Добавим файлы из библиотеки в список целей для компиляции. Должно получиться следующее:
Теперь размер образа равен 10Mb. Это делается для того, чтобы команда mkdosfs отформатировала раздел в FAT16 вместо FAT12. FAT12 не поддерживается библиотекой fat_io_lib.
С этим дефайном библиотека не будет включать stdio.h, но будет использовать готовый прототип функции printf, который совпадает с нашим, и который уже реализован.
4. Пересоберем проект
sudo make image
Должно получиться следующее:
Как и в предыдущих частях, можно сделать dd образа hdd.img на флешку и проверить код на реальном железе, загрузившись с нее.
В результате мы реализовали работу с файловыми системами FAT16 и FAT32. Мы немного схитрили, использовав готовую библиотеку, но разбираться в устройстве FAT'а было бы менее интересно, да и вряд ли бы мы тогда уложились в 1 статью. Надеюсь, вам было интересно читать. Пишите в комментариях, если у вас возникнут проблемы в прохождении описанных шагов!
Читайте также: