Найти тему
Vautour

Warspear Online 2024 | Много окон

MMO RPG 2D игра. Старая и потасканная проверенная временем.
Не вижу смысла особо про нее рассказывать. Кто знает, тот молодец, а кто нет, тому оно не надо. Тем не менее, раз уж вы здесь, предлагаю ознакомиться с инфой ниже, возможно пригодится в чем то другом.

Если поискать способы в интернете, напорешься на туеву хучу разных вариантов, кто на что горазд. От самых простых, до еще более простых, и тд... Некоторые из них работают и по сей день.
Я опишу свой подход.

Приступим
Чаще всего в подобных межпроцессовых делах используют мьютекс.
Надо найти эту дрянь... Для такого случая подойдет
hiew32. Великолепная программка с отличным функционалом. Если вы у мамы кодер, обязательно сохраните ее себе.

После того как скачали, для удобства добавьте ее в переменные среды.
Это гораздо лучше, чем каждый раз жонглировать приложениями.

Перед модификацией сделайте резервную копию исполняемого файла!

Для начала откройте исполняемый файл warspear.exe в hiew32.

Hiew32
Hiew32

Нужно перейти в HEX или Decode. Для этого нажмите Enter, или F4 затем F3.

Теперь необходимо открыть список импорта. Нажмите F8 затем F7.
Должно появиться такое окно:

Список импорта
Список импорта

Нужно найти в списке CreateMutexW.
Начните набирать ее имя на клавиатуре и она покажется.
После чего нажмите Enter и ждите.

В итоге появится участок кода где она используется:

Функция CreateMutexW в коде приложения
Функция CreateMutexW в коде приложения

Избавится от него можно перепрыгнув.
С первого push-а этой функции до push-а сразу после вызова call esi.

Устанавите курсор в начало кода первого push-а функции CreateMutexW.
Нажмите F3
Запишите туда:
EB3F
Чтоб сохранить изменения, нажмите F9.

Реализованный скип участка кода
Реализованный скип участка кода

Участок кода который был пропущен содержит создание мютекса и стандартную проверку кода ошибки. Если одноименный объект мютекса уже создан, процесс, в итоге, перейдет к завершению.

Проверяем дальше, есть ли еще обращение к адресу этой функции в коде программы.
Нажимаем SHIFT + F7.
Наблюдаем следующую картину:

-6

Тем кто через Process Explorer гасил объекты мютекса, я передаю привет.
Разрабы запихнули аналогичный блок кода в цикл обработки сообщений.
Теперь необходимо упразднить и этот блок когда, а точнее проверку дескриптора мютекса функцией
WaitForSingleObject.

Один ньюанс:
При получении GetMessage WM_QUIT, устанавливается байт в сигнальную ячейку. Управление передается началу цикла обработки сообщений только после проверки статуса последней. На эту финальную проверку ссылается условный переход функции WaitForSingleObject. Чтобы сократить кол-во поправок, скип должен указывать именно сюда.

Проще всего изменить условный переход функции WaitForSingleObject на безусловный. Но я не хочу чтобы лишний раз она выполнялась.

Действуем по старой схеме:

-7

Устанавите курсор в начало кода первого push-а функции WaitForSingleObject.
Нажмите F3
Запишите туда :
EB57
Сохраните все клавишей F9.

Выполняем поиск далее. Необходимо дойти до конца, пока hiew32 не скажет что больше ничего не найдено.
Оставшиеся два результата почти одинаковы, выглядят так:

Результат 1
Результат 1

Результат 2
Результат 2

Я проверил ссылки на эти процедуры, и не одной не обнаружил. Проведя полную отладку, я так же не обнаружил исполнение кода этих процедур. Подобное означает что это скорее всего рудименты.
Смело забиваем на них и наслаждаемся бесконечным кол-вом окон.

После обновления игры, чтобы долго не возиться, используйте
сигнатуры поиска и опкоды для HEX редакторов:
Первая сигнатура: EC 8D 85 84 FC FF FF Опкод: EB3F
Вторая сигнатура: 50 FF 15 98 A3 AD 00 Опкод: EB57

Вписывайте опкод сразу после сигнатуры!

-10