Версия для печати темы

Нажмите сюда для просмотра этой темы в оригинальном формате

CTPAX-X _ Программы _ Программы запуска

Автор: Siberian GRemlin May 28 2018, 09:14

Кто-нибудь знает как работают программы запуска, присутствующие в некоторых играх?

Обычно есть game.exe и launcher.exe, где первый это сама игра, а второй это оболочка с настройками и прочим, из которой можно запустить игру, и зачастую нужно только из неё запускать, так как запуск game.exe ни к чему не приводит. Это вызывает трудности, когда нужно изменить строки в тексте игры http://www.forum.ctpax-x.org/index.php?showtopic=288, то есть в памяти, а не в самом файле, так как может проверяться его целостность.

Автор: -=CHE@TER=- May 28 2018, 10:16

Из того, что я видел - по степени убывания частоты использования:
1) Зачастую launcher передаёт game определённый параметр командной строки. Ловится очень просто - заменяешь game свой программой, которая сообщает с какими ключами её запустили.
2) Пару раз видел как launcher создавал ключ в реестре, запускал game, та проверяла ключ, если он есть - запускалась, если нет - выходила. Уже не помню подробностей, кто именно удалял ключ после запуска - game или launcher. Ловится такое дело через RegMon.
3) Ещё было - создавался/изменялся файл настроек с определённым значением. Это можно отследить через FileMon.
4) Какая-то программа была, которая запускала свой основной модуль в спящем режиме, что-то там расшифровывала в уже загруженном в памяти процессе, и только потом делала ResumeThread(). При обычном запуске там то ли точка входа другая была, то ли команды по адресу точки входа были обычным завершением работы, так что без launcher сама game тупо без всяких сообщений сразу выходила.
5) Также попадалось совсем дикое, но это под DOS - launcher перехватывал прерывания, на них садились сервисные функции игры, а уже потом запускался game, который проверял есть ли на этих прерываниях нужный сервис.
Может, что-то ещё забыл, но это основное.

Автор: -=CHE@TER=- Jan 11 2022, 20:49

В копилку: попросили поглядеть TMNT (2007) и там было такое - игра говорила запустите через запускалку, а запускала не давала запустить игру из-за того не могла определить тип процессора (слишком новый). Глянул код главного исполняемого файла - он пытался создать Mutex с именем "TMNTLauncher" (вроде так, пишу по памяти) и, если он успешно создавался (т.е. запускалка не запущена и его ещё не создала, ибо два мутекса с одинаковым именем в системе нельзя сделать), то программа выходила. Как оказалось достаточно было запустить и оставить запускалку в покое, после чего можно было стартовать игру напрямую.