![]() |
Добро пожаловать, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Siberian GRemlin |
![]()
Сообщение
#1
|
![]() Advanced Member ![]() ![]() ![]() Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) ![]() |
Кто-нибудь знает как работают программы запуска, присутствующие в некоторых играх?
Обычно есть game.exe и launcher.exe, где первый это сама игра, а второй это оболочка с настройками и прочим, из которой можно запустить игру, и зачастую нужно только из неё запускать, так как запуск game.exe ни к чему не приводит. Это вызывает трудности, когда нужно изменить строки в тексте игры по такому принципу, то есть в памяти, а не в самом файле, так как может проверяться его целостность. |
-=CHE@TER=- |
![]()
Сообщение
#2
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,360 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 313 раз(а) ![]() |
Из того, что я видел - по степени убывания частоты использования:
1) Зачастую launcher передаёт game определённый параметр командной строки. Ловится очень просто - заменяешь game свой программой, которая сообщает с какими ключами её запустили. 2) Пару раз видел как launcher создавал ключ в реестре, запускал game, та проверяла ключ, если он есть - запускалась, если нет - выходила. Уже не помню подробностей, кто именно удалял ключ после запуска - game или launcher. Ловится такое дело через RegMon. 3) Ещё было - создавался/изменялся файл настроек с определённым значением. Это можно отследить через FileMon. 4) Какая-то программа была, которая запускала свой основной модуль в спящем режиме, что-то там расшифровывала в уже загруженном в памяти процессе, и только потом делала ResumeThread(). При обычном запуске там то ли точка входа другая была, то ли команды по адресу точки входа были обычным завершением работы, так что без launcher сама game тупо без всяких сообщений сразу выходила. 5) Также попадалось совсем дикое, но это под DOS - launcher перехватывал прерывания, на них садились сервисные функции игры, а уже потом запускался game, который проверял есть ли на этих прерываниях нужный сервис. Может, что-то ещё забыл, но это основное. Спасибо сказали:
|
-=CHE@TER=- |
![]()
Сообщение
#3
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,360 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 313 раз(а) ![]() |
В копилку: попросили поглядеть TMNT (2007) и там было такое - игра говорила запустите через запускалку, а запускала не давала запустить игру из-за того не могла определить тип процессора (слишком новый). Глянул код главного исполняемого файла - он пытался создать Mutex с именем "TMNTLauncher" (вроде так, пишу по памяти) и, если он успешно создавался (т.е. запускалка не запущена и его ещё не создала, ибо два мутекса с одинаковым именем в системе нельзя сделать), то программа выходила. Как оказалось достаточно было запустить и оставить запускалку в покое, после чего можно было стартовать игру напрямую.
|
![]() ![]() |
Упрощённая версия | Сейчас: 12th September 2024 - 09:14 |