Прекращена работа программы dmcr

To Fix (problem with ‘dmcr.exe’ Cossacks problem) error you need to follow the steps below:

Совместимость : Windows 10, 8.1, 8, 7, Vista, XP
Загрузить размер : 6MB
Требования : Процессор 300 МГц, 256 MB Ram, 22 MB HDD

Limitations: This download is a free evaluation version. Full repairs starting at $19.95.

problem with ‘dmcr.exe’ Cossacks problem обычно вызвано неверно настроенными системными настройками или нерегулярными записями в реестре Windows. Эта ошибка может быть исправлена ​​специальным программным обеспечением, которое восстанавливает реестр и настраивает системные настройки для восстановления стабильности

If you have problem with ‘dmcr.exe’ Cossacks problem then we strongly recommend that you Download (problem with ‘dmcr.exe’ Cossacks problem) Repair Tool .

This article contains information that shows you how to fix problem with ‘dmcr.exe’ Cossacks problem both (manually) and (automatically) , In addition, this article will help you troubleshoot some common error messages related to problem with ‘dmcr.exe’ Cossacks problem that you may receive.

Прекращена работа программы «Oblivion» Возникшая проблема привела к прекращению работы программы.

Примечание: Эта статья была обновлено на 2023-06-20 и ранее опубликованный под WIKI_Q210794

Meaning of problem with ‘dmcr.exe’ Cossacks problem?

Ошибки EXE происходят по ряду причин, но в основном из-за проблем с исполняемыми файлами или EXE-файлами. EXE — это расширение приложения в Windows. Подобно другим типам файлов, встроенных в вашу компьютерную систему, EXE-файлы могут время от времени входить в ошибки. Некоторые ошибки являются общими, но некоторые из них трудно устранить и устранить.

Программное обеспечение, которое вы используете, и приложения, необходимые для работы операционной системой, используют EXE-файлы для выполнения своих задач. В этой записке ПК содержит много EXE-файлов, возможно, тысячи, что позволяет с большой вероятностью иметь место ошибка. Иногда ошибки EXE могут повлиять на вашу компьютерную систему. Программы могут перестать работать, или ваш компьютер может замедлить работу. Хуже того, EXE-ошибка может помешать вам получить доступ к вашему компьютеру и войти в него.

Некоторые проблемы, которые могут вызвать ошибки EXE:

  • Вирусы, вредоносные программы и программы-шпионы
  • Неверные, поврежденные, поврежденные или устаревшие файлы или драйверы
  • Конфликт записей в системном реестре Windows
  • Конфликты приложений

Causes of problem with ‘dmcr.exe’ Cossacks problem?

Обычно, если тип Ошибка EXE происходит часто, вам нужно выполнить только одно, прежде чем делать что-либо еще — очистить системный реестр. Скорее всего, ваш реестр Windows имеет некоторые поврежденные файлы, которые требуют очистки или ремонта. Одна вещь, чтобы избежать таких типов ошибок EXE, — это использовать антивирусные или подобные инструменты. Это ваше лучшее оружие для борьбы с ошибками EXE, вызванными вредоносными заражениями.

Прекращена работа программы Windows 10

Итак, как вы исправляете ошибку EXE и избегаете будущих сбоев?

  1. Всегда защищайте свой компьютер с помощью антивирусной программы.
  2. Регулярно запускайте средство очистки реестра, чтобы удалить и восстановить поврежденные записи реестра Windows.
  3. Обновите драйверы вашего ПК.
  4. Обязательно используйте хорошее интернет-соединение для загрузки программ из Интернета, чтобы убедиться, что они загружены без изменений и не повреждены.
  5. Избегайте доступа к подозрительным веб-сайтам и открытия электронных писем из неизвестных источников.

More info on problem with ‘dmcr.exe’ Cossacks problem

Some say that service pack 2 doesnt let it run, people. Thanks. patches and still nothing. Any

Its definatly NOT coming up in the add/remove comp lately and it doesnt let me play. Hi suggestions? Ive tried different programs window even with the show updates box ticked. that ‘theres a problem with the file dmcr.exe and it needs to be closed’.

Ive checked as many forums as I can find but cant find any useful tips. I tried installing cossacks european wars on my so I tried uninstalling it but it wont let me. I get an error message shortly after the game briefly boots up telling me dmcr.exe problem

to run the game, trainz 2006 runs fine on the same system.

Oh and it is pc compatable, and l have enough «power» and «real estate»

this please let me know. If you know answear to a windows Vista. I have

Any body any suggestions PLEASE son driving me crazy

Your son isn’t the only one having this problem click here
Been in to the cossack folder and changed video to video 1 but now screen starts with multicoloured lines and canot watch . Tried uninstalling /screen resolution / quality settings .
Hi my son is having problems playing cossacks anthology keeps getting message saying dmcr.exe problem need to close.

try changing the video directory to it then, do yuo have any suggestions? It keeps telling me that dmcr stopped working and as I recall on this computer, it has vista though.

Hi i was trying to play cossacks video1 and see if that helps

I do not remember how I fixed it did the same thing for me on xp a few years back.

I have tried to install both Cossaks 1 C The First Decade.

I get direct draw init failed (88760245) message when i try to play cossacks Try installing the latest DirectX from Microsoft:http://www.microsoft.com/download/e.

Я был очень популярен с продуктом. Несколько месяцев, но менеджер о ваших портах USB?

то проблема с проблемой o с учетом моих проблем ниже.

привет, Леновое сообщество, я купил

I think levono techinians shuld give us firmaware update for thisany one who switch on adapter) it gets started automatically problem #4 sometime my laptop shutdowns abruptly rather it restarts. Does it say anything in device my laptop last year in jan. Not of lenove original and after that when i put my latop on charge(when i knows sol, problem #3my orginal charging adpater was broken ..so i bought another one .

Its value is ‘0’.MSI (s) (9C:A4) Its value is ‘C:Program FilesIntelIntel(R) Rapid Storage TechnologyLangfi-FI’.MSI when I was using W520. Then I selected show desk top only (s) (9C:A4) [12:44:04:930]: PROPERTY CHANGE: Adding dir8F9CB900EBF9D08B668580C0A1C31C89 property. Its value is ‘C:Program FilesIntelIntel(R) Rapid Storage Technologynl-NL’.MSI

Its value is ‘C:Program FilesIntelIntel(R) Rapid Storage TechnologyLangfr-FR’.MSI Its value is ‘C:Program FilesIntelIntel(R) Rapid Storage TechnologyLangzh-TW’.MSI back to duplicate the displays. Also, I miss the days [12:44:03:606]: PROPERTY CHANGE: Adding MSICLIENTUSESEXTERNALUI property. [12:44:03:606]: PROPERTY CHANGE: Adding IIF_HASBATTERY property.

Action start 12:44:04: CostFinalize.MSI (s) (9C:A4) [12:44:04:937]: Doing action: InstallValidateMSI (s) (s) (9C:A4) [12:44:04:930]: PROPERTY CHANGE: Adding MUILANG_skSK property. Its value is ‘C:Program FilesIntelIntel(R) Rapid Storage Technologypt-BR’.MSI (s) (9C:A4) [12:44:04:930]: PROPERTY CHANGE: Adding MUILANG_itIT property. Its value is ‘C:WindowsInstallerd39018b.msi’.MSI (s) (9C:A4) (s) (9C:A4) [12:44:04:930]: PROPERTY CHANGE: Adding MUILANG_ptPT property. Its value is ‘C:Program FilesIntelIntel(R) Rapid Storage Technologynb-NO’.MSI same issues with a Skylake Lenovo system.

‘C:Program FilesIntelIntel(R) Rapid Storage Technology’. Its valu.

Читайте также:
Программа которая запоминает все нажатия клавиш на компьютере

Похоже, что Norton разобрался, и у Symantec webapage нет решения, я полностью смущен, так как все это программа unistall для roxio burn engine)) и tntlvr.dll тоже поврежден. Я имею adaware и регулярно использую его, и убираю этот единственный workd. В любом случае поврежденные файлы — uneng.exe (который я узнал, используя старую версию, поэтому я разместил здесь файл журнала.

Я загружаю свою машину в обычном режиме, и антивирус norton не может загружаться при запуске, потому что он говорит, что у меня есть поврежденные или отсутствующие файлы ccimscan.dll и defalert.dll. Спасибо моей графической карте tnt2 . но она не показывает никаких проблем. Я выполнил скандиск и все это дерьмо и на этой программе в окнах, где на днях произошло синее. в adavance.

it tells you if you need to replace files ( can’t remember its name). Don’t know what this tnt thing is but i am assuming which also has coincided with my roxio cd buring version 5 basic.

Неважно, отключите службу, и все возвращается к нормальной жизни.

Error message reads need to restart to get there error message to clarify. I used without deleting user settings. Internet accessed «Receiving reported error (0x80040900).

Сначала — сеть MSO
(12.0.6425.1000) — Will not login to server. Disk Cleanup, restarted in Safe Mode to run Defrag, but it would not run. I uninstalled and reinstalled start and searched for «home» in Safe Mode. AVG ver. 8.5.409, virus DB 270.13.83/2353 hung up, but I’ll and «fixed» it.

Highhunter, это ответ на мой предыдущий пост .
Обновления Windows из 9 / 9 / 2009

KB973768
KB905866
KB968816
KB967723
KB973514
KB971961
KB970710
KB890830

Things I’ve done today: Created new back-up of user files, ran «Diagnose» and «Repair». This did advance!

. and page status says «Done».

Журнал событий не восстанавливает Firefox. Область просмотра страницы остается пустой проблемой, которая препятствует доступу в Интернет. Спасибо после этого. Введенное вами имя сервера не может быть найдено в сети. (возможно, это связано с тем, что его компьютерные проблемы были исправлены.

*****
Надеюсь, я включил всю соответствующую информацию.

временно). Убедитесь, что вы находитесь в сети и что имя сервера верное. В-третьих — пробная версия 2007 для Outlook 12.0.6504.5000 (2) SPXNUMX, связанная с проблемой Outlook. Решил, что пришло время попробовать технический форум, который мой муж обманул. Хотя я не был в сети, Firefox сделал

When I click «Don’t Send» on other problem I have is with Windows Live Messenger (MSN). This messenger allows you I click anything in windows movie maker, it freezes. My Problems are:

1) Я использую mozilla firefox для рисования в разговоре.

I don’t exactly know how to do that.

2) Но это трудно объяснить. Спасибо.

with a few difference softwares. They have tells me to exit Adobe Acrobat/Reader. Please exit and try again.»
Это сообщение

У меня есть несколько проблем, которые помогают мне в решении любых проблем. Спасибо, что взяли, и у меня проблема с открытием PDF-файлов. время для чтения.

I know this is confusing why this is happening. So basically, while drawing something, I can’t see it but when i send it,

Здравствуй! Я не уверен со всеми проблемами, кроме открытия нескольких разных потоков. Версия Adobe Acrobet / Reader 8

I thought it would be best open on thread or 9 is required. I can’t even ignore the message because when a handwriting tool. error message.( I am sure you are familiar with the error message yourself). It would be great if you could the error message, WMM closes down.

3) The third problem I have is with windows movie maker. When I open this software, I get the «send» and «Don’t send»

Источник: ru.fileerrors.com

программа dmcr не работает — как исправить?

В игре Cossacks не работает программа dmcr. Ответ. Аналогичный вопрос лучше задать в саппорт производителя игры или на форумах этой игры. Быстрый поиск в Интернете предлагает: 1. Обновить (или установить с диска) DirectX. 2. Установить какой-нибудь патч. 3. Запускаем Казакова в режиме совместимости. Я не сумасшедший.

Мама меня проверила.

Добавить комментарий

Что такое 100 минут в МНР на тарифе «Смарт» от МТС?

Для пересечения границ Российской Федерации необходимо объединить соответствующие услуги с существующими тарифами. Для простоты использования .

Консультант онлайн

При копировании материалов активная ссылка на сайт обязательна

Мы используем файлы «cookie», чтобы обеспечить максимальное удобство пользователям
Manage consent

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies.

But opting out of some of these cookies may affect your browsing experience.

Always Enabled
Necessary cookies are absolutely essential for the website to function properly. These cookies ensure basic functionalities and security features of the website, anonymously.

CookieDurationDescription
cookielawinfo-checkbox-analytics 11 months This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category «Analytics».
cookielawinfo-checkbox-functional 11 months The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category «Functional».
cookielawinfo-checkbox-necessary 11 months This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category «Necessary».
cookielawinfo-checkbox-others 11 months This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category «Other.
cookielawinfo-checkbox-performance 11 months This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category «Performance».
viewed_cookie_policy 11 months The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data.

Functional

Functional cookies help to perform certain functionalities like sharing the content of the website on social media platforms, collect feedbacks, and other third-party features.

Performance

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics the number of visitors, bounce rate, traffic source, etc.

Advertisement

Advertisement cookies are used to provide visitors with relevant ads and marketing campaigns. These cookies track visitors across websites and collect information to provide customized ads.

Читайте также:
Как установить программу с торрента на ПК

Other uncategorized cookies are those that are being analyzed and have not been classified into a category as yet.

Источник: ctroim-vce.ru

Реверс-инжиниринг «Казаков», часть последняя: второе дыхание

После нескольких месяцев работы над исходным кодом игры «Казаки: Снова война» я наконец-то могу умыть руки и представить результат своих трудов. В этой статье мне хотелось бы поделиться с вами опытом рефакторинга этого незаурядного проекта, в частности кодовыми курьёзами. Всем любителям некро-программирования посвящается…

Начало

Первое и одно из самых неприятных препятствий было не в коде, а в самих проектах. Всего их четыре:

  • статическая библиотека CommCore.lib (сетевой протокол GSCp на базе UDP)
  • динамическая библиотека IntExplorer.dll (игровое лобби на сервере)
  • динамическая библиотека IChat.dll (чат в игровом лобби)
  • исполняемый файл dmcr.exe

Стартуем

Так, с проектами разобрались, теперь можно браться за дело. Компилятор рад за нас и приветствует множеством ошибок C2065: необъявленный идентификатор. Смотрим код и видим повсюду такую картину:

for (int i = 0; i < max1; i++) < /* Цикл №1 */ >for (i = 0; i < max2; i++) < /* C2065 */ >//Или такую: for (int i = 0; i < max arr[i] != value; i++); /* Пустой цикл для поиска индекса */ if (i < max) < /* Есть совпадение в массиве. И C2065 тоже есть */ >

Конечно, можно было бы выставить /Zc:forScope- и забыть об этом, но мы же не кочегары и не плотники. Правим ручками больше сотни таких отрезков кода, продолжаем.

Следующее препятствие заключалось в графическом элементе, точнее в DirectDraw 7. Он активно использует механизм замены системной палитры. И если ранее это было повсеместной практикой, то начиная с Windows Vista такие фокусы больше не проходят. Дело в том, что DWM вместе с Windows Aero вплотную работают с палитрой и не терпят конкуренции. В итоге множество старых игр страдают от искажения цветов.

Не являясь экспертом по DirectX, я стал искать готовое решение и нашёл его в версии «Казаков», опубликованной на Steam в 2010 году. Помимо самой библиотеки ddraw.dll в папке с игрой присутствует дополнительная библиотека mdraw.dll, которая экспортирует функцию инициализации DirectDrawCreate(). Скажу честно – я не знаю, что именно ребята из GSC написали в их библиотеке DDemu DirectDraw Emulator в 2008 году, но она прекрасно справляется со своей задачей. Недолго думая я добавил соответствующую обёртку в Ddini.cpp и забыл об этой проблеме.

Затем встал вопрос об отладке полноэкранного приложения. Здесь мне снова повезло – в коде был предусмотрен отладочный режим, в котором игра запускалась в углу экрана в безрамном окне с фиксированным размером. Мне требовалось лишь довести его до ума, добавить смену разрешения, обработать захват и возврат курсора в зависимости от того, в меню ли игрок или в активной игре и добавить соответствующие параметры при старте. Теперь можно было удобно запускать игру в отладчике с ключом /window.

Небольшое отступление

Далее представлены странные, проблемные и ошибочные участки кода игры «Казаки: Снова Война», с которыми я столкнулся во время работы. Прошу учесть, что целью данной статьи ни в коем случае не является критика или высмеивание разработчиков данной игры. Я считаю, что «Казаки: Снова Война» представляют собой исключительный результат усердной роботы и кропотливой оптимизации небольшой команды разработчиков, которые очень высоко подняли планку производительности и размаха битв для игр жанра RTS. Спасибо вам, GSC!

Весёлая арифметика

Одной из моих целей было добавление настроек для многопользовательских игр, например, возможность отключать дипломатический центр и рынок или ограничивать доступные корабли в верфи. Расширив интерфейс игровой комнаты и добавив нужные ветки в коде, я увеличил массив PlayerInfo.UserParam[], в котором хранятся эти настройки, с семи до десяти элементов. Вот только протестировать новые опции никак не получалось — при старте игры ИИ начинал распоряжаться моими крестьянами вместо своих и играть за меня, при этом его крестьяне стояли неподвижно. Весело, но так не пойдёт.

Причина такого поведения ИИ крылась в следующем финте ушами при копировании настроек от хоста игры в буфер обмена:

//PlayerInfo PINFO[8]; //byte* BUFB = (byte*) ( BUF + 10 + 8 + 32 — 10 ); memcpy( BUFB, PINFO[HostID].MapName + 44 + 16, 16 );

А вот так декларирована структура PlayerInfo:

#pragma pack(1) struct PlayerInfo < char name[32]; DPID1 PlayerID; byte NationID; byte ColorID; byte GroupID; char MapName[36 + 8]; int ProfileID; DWORD Game_GUID; byte UserParam[7]; byte Rank; word COMPINFO[8]; //… (ещё 12 элементов) >

Как видим, по смещению MapName + 60 находится COMPINFO[8]. Соответственно, при увеличении массива UserParam[7] вызов memcpy() промахивается, и в буфер попадают неверные данные о том, за каких игроков должен играть ИИ. Проблема решается заменой офсетной математики на прямое обращение по адресу PINFO[HostID].COMPINFO.

В итоге я всё же принял решение не трогать UserParam[], а добавить массив UserParam2[3] в конце структуры, так как в одном из последних элементов хранится версия клиента и любое изменение структуры до него чревато неверным определением версий в игровом лобби. А так игроки с версией 1.35 будут видеть, что у других обновлённая версия игры.

Какие уроки можно почерпнуть для себя из этого?

  • В структуре, передающейся по сети, первым элементом должна быть версия клиента.
  • Никогда не исходить из того, что расположение структуры в памяти будет неизменным.
  • Писать функции сериализации, а не полагаться на #pragma pack(1) и побайтовое копирование.

Невидимый Джо Дефайн

Разбираясь с механикой отображения внутриигровых текстовых сообщений с целью увеличения времени отображения и максимального количества сообщений на экране, я наткнулся на занимательную константу:

#define SIGNBYTE ‘’ void ShowCharUNICODE( int x, int y, byte* strptr, lpRLCFont lpr ) < if (strptr[0] == SIGNBYTE) < /* юникод */ >else < /* ascii */ >>

«Ну и что в этом такого? — спросите вы — Всего лишь пробел в качестве константы». Ну, во-первых, пробел был бы крайне странным выбором для идентификации чего-либо в строке текста, а во-вторых это вовсе не пробел. SIGNBYTE определён как 0x7F, или управляющий символ DEL. И если ваш браузер достаточно осмотрителен и хотя бы показывает, что между кавычками что-то есть, то Visual Studio 2015 вероломно рисует », между которыми курсор «спотыкается» на один символ.

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

Правовой аспект

Всякий раз удивляюсь, когда для запуска игры требуются права администратора. И всякий раз думаю что-то вроде «ну как так можно игры программировать-то». Но в этот раз у меня и код на руках был, и собирал его я сам, а окно UAC всё так же не давало мне покоя.

Ответ нашёлся совершенно случайно, когда я подумал, что неплохо было бы вписать в свойства исполняемого файла информацию о том, что эта версия игры не оригинальная и не поддерживается разработчиками. Манифеста в проекте, естественно, не было, но был файл ресурсов Script1.rc. Каково же было моё удивление, когда после изменения блока VS_VERSION_INFO игре перестали требоваться права администратора!

Оказывается, ОС Windows начиная с Windows Vista применяет эвристический алгоритм для определения приложений, которым может потребоваться повышение привилегий. Называется эта функция «Технологией обнаружения установщика» (см. статью в ИТ-центре Windows), и обычно она реагирует на ключевые слова вроде install или setup. Но в нашем случае виновником оказался параметр CompanyName — если он содержит строку «-GSC-», то просыпается UAC и требует прав администратора.

Читайте также:
Программа в Телеграмме для проверки авто по номеру машины

Как уберечь своё приложение от такой эвристики со стороны Майкрософт, существующей и грядущей? А никак. Сегодня вы разрабатываете игры, а завтра уже стоите в одном ряду с Inno Setup и InstallShield.

Партизанский sscanf()

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

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

  • RN0: префикс RN и размер карты (0 — 2)
  • 1A3C: значение ГПСЧ для инициализации случайной карты
  • 12345: Вид карты (ландшафт, горы, месторождения и пр.)
  • 0KFH31CJ: Нации, которые выбрали игроки (0 — K)
  • 4501326: Настройки игры (Артиллерия, PT и пр.)

int v1, v2, v3, ADD_PARAM; char ccc[32]; int z = sscanf( Name, «%s%x%x%x%d», ccc, v2, ADD_PARAM ); if ( z == 5 ) < /* Интерпретация настроек из ADD_PARAM */ >

Загвоздка здесь в том, что для четвёртой переменной указан тип %x, в то время как диапазон символов в ней выходит за рамки шестнадцатиричной системы и простирается до буквы K. Если в игре присутствуют игроки, которые выбрали нации с индексом выше F, то sprintf() преждевременно закончит парсинг и вернёт 4. Параметры не будут интерпретированы, у ИИ будет неправильная информация об игре и он будет принимать другие решения, что приведёт к рассинхронизации.

В дополнение к этому идёт тот факт, что sprintf() вызывается исключительно для ADD_PARAM — остальные переменные нигде не используются. Решение проблемы относительно простое:

int options = 0; int z = sscanf( Name, «%*s %*s %*s %*s %d», if ( 1 == z ) < /* Интерпретация настроек из ADD_PARAM */ >

Флаг * указывает функции, что значение не следует сохранять в переменной. Кстати, пoсмотреть, каким образом я реализовал кодирование 10 игровых настроек на месте тех же 7 цифр можно здесь. «Зачем?» — спросите вы. А потому что менять длину строки с именем файла карты по своему усмотрению показалось мне не очень хорошей идеей (см. выше в «Весёлой арифметике»).

Самое интересное для меня здесь это тот факт, что баг проявил себя лишь при компиляции в . Получается, что реализация функции sscanf() в стандартной библиотеке за прошедшие годы стала построже и впредь не будет прощать такие вольности со стороны программистов.

Памятка: Следовать в первую очередь требованиям документации, а не принципу «рабочий код — правильный код».

Тонкости языка

Локализация это отдельная тема для любого разработчика, но такое я увидел впервые:

#define RUSSIAN #define _CRYPT_KEY_ 0x78CD #ifdef RUSSIAN #undef _CRYPT_KEY_ #define _CRYPT_KEY_ 0x4EBA #endif

Если вам этого мало, предлагаю заглянуть под спойлер и посмотреть, для чего же нужен этот «крипто-ключ».

Не делайте так. Пожалуйста.

VOID CGSCarch::MemDecrypt( LPBYTE lpbDestination, DWORD dwSize ) < BYTE Key = (BYTE) ~( HIBYTE( _CRYPT_KEY_ ) ); isiDecryptMem( lpbDestination, dwSize, Key ); >void isiDecryptMem( LPBYTE lpbBuffer, DWORD dwSize, BYTE dbKey ) < _asm < mov ecx, dwSize mov ebx, lpbBuffer mov ah, dbKey next_byte: mov al, [ebx] not al xor al, ah mov [ebx], al inc ebx loop next_byte >>

Вот таким нехитрым образом можно запороть локализацию на этапе компилирования. Если, например, «английскому» dmcr.exe подсунуть архив с ресурсами из русской версии, то всё, что останется от игры — окно ошибки access violation. Потому что ни до, ни после «isi memory decryption» содержимое буфера не проверяется. А вот если мы распакуем архив all.gsc, заменим файлы и запакуем его обратно, то в игре нас будет ждать русский интерфейс.

Посмотрев на эту XOR-вакханалию я решил ограничиться английской версией, но с поддержкой кириллицы в чате. Так как весь текст отрисовывается через собственные шрифты игры, я скопировал из русской версии ресурс mainfont.gp. Осталось только отловить символы, выходящие за пределы диапазона ascii, и правильно сопоставить коды букв с «индексом кадров» этого файла (формат GP используется в игре повсеместно для хранения графики, в том числе и для анимации). Не самое элегантное решение, зато работает безотказно, причём на сервере в чате с игроками под версией 1.35 тоже.

UDP без дырок

К сожалению, в оригинальных «Казаках» не был реализован механизм UDP hole punching, который позволил бы игрокам подключаться к игровым комнатам, даже если их хост находится по ту сторону NAT своего провайдера.

К счастью, товарищ, известный под ником [-RUS-]AlliGator, запустивший и поддерживающий сервер cossacks-server.net, выделил немного своего времени и мы договорились о дополнительном протоколе, по которому хост игры будет поддерживать UDP соединение с сервером, и по которому сервер сможет сообщать внешний UDP порт хоста игрокам, желающим к нему подключиться.

Все детали реализации можно посмотреть в классе UdpHolePuncher. Соединение инициализируется при создании игровой комнаты хостом, после чего он вплоть до старта игры поддерживает связь, отправляя небольшие пакеты. Это нужно, т.к. NAT может при каждом новом UDP соединении присваивать другой внешний порт, а так сервер наверняка знает, что в данный момент времени хост доступен из-за NAT по тому порту, с которого приходят пакеты.

Соответствующие изменения были внесены и в процедуру обработки команд сервера и в структуру RoomInfo в библиотеке IChat.dll. Поддерживаются следующие дополнительные переменные при создании игровой комнаты:

  • %PROF: идентификатор игрока. С помощью него сервер сможет различать хостов
  • %CG_HOLEHOST: адрес сервера, обрабатывающего UDP пакеты
  • %CG_HOLEPORT: порт сервера, на котором слушается UDP
  • %CG_HOLEINT: интервал, с которым клиент должен отправлять пакеты

Хотя весь этот механизм уже имплементирован в клиенте игры, протестировать мне его ещё не удалось, т.к. контакт с Аллигатором оборвался. Незадолго до этого он выложил в открытый доступ исходный код своего сервера, — спасибо тебе за это! — так что если кто-то готов поднять эстафетную палочку, я буду только за.

Послесловие

Статья и так уже вышла длиннее, чем я планировал, так что буду краток. Хотя этот проект занял продолжительное время и ощутимо истощил запас моего энтузиазма к реверс-инжинирингу и анализу исходного кода, я рад, что взялся за него. Рад, что написал тогда статью на Хабр с описанием своего первого, ассемблерного, костыля для «Казаков». Рад, что в комментарии пришёл Максим fsou11 и выложил в свободный доступ исходный код игры. Также я благодарен сообществу LCN за ценные советы, объяснения и помощь в тестировании.

Ссылки:
  • Репозиторий на GitHub с новым кодом
  • Репозиторий с оригинальным исходным кодом
  • Репозитории с исходным кодом сервера
  • Укороченный список внесённых изменений на форуме LCN
  • Дополнительная информация

Источник: habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru