Malandrinus 615 Опубликовано 8 Октября 2010 З.Ы. Удивлен что тема дает толк Обсуждения такого рода вполне уместны в ковырялке для соответствующей версии. История повторяется. Создана тема с узкоспециальным назначением, причём по этому самому назначению её никто не использует (и не будет использовать). В лучшем случае тема уйдёт по списку вниз, и о ней благополучно забудут. В худшем - получится ещё одна микроковырялка. И зачем! У форума, к примеру, есть неприятная особенность "отписывать" рассылки от тем, где долго никто не пишет. Да и следить гораздо лучше за тремя темами, а не за десятком. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Поделиться этим сообщением Ссылка на сообщение
Malandrinus 615 Опубликовано 21 Октября 2010 sabir, Не надоело еще? У меня все три игры установлены. Ни в одной из них библиотеки движка не защищены никакими защитами и никак не зашифрованы. Основной загрузчик может и (был) защищен, но он никому и не интересен. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Поделиться этим сообщением Ссылка на сообщение
Malandrinus 615 Опубликовано 22 Октября 2010 _Призрак_, в hex виде из контекстного меню выбери "Data format" -> "Single Float (32 bit)". Затем можешь редактировать прямо число с плавающей запятой. Но только учти, что IDA никогда не меняет файл. То, что ты таким образом "изменил", можно сохранить в виде файла отличий "*.dif" через "File" -> "Produce File". Затем уже нужно применять этот файл к исходной dll с помощью утилиты "bpatch", которая понимает эти файлы и которую можно найти в сети. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Поделиться этим сообщением Ссылка на сообщение
Malandrinus 615 Опубликовано 27 Октября 2010 (изменено) Rolan, Как начну обновлять шапку выложу и xrGame исходный Кстати, а где? Сколько можно по ушам то ездить? =) Rolan, Выложу с разрешения админов ибо тут Шкипер писал ... Так что только, с разрешения. Ага =) Как там в одной книжке... Насовал нам фиалок за уши, а теперь отмазки лепит, админов понимаешь ли боится. Изменено 27 Октября 2010 пользователем malandrinus Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Поделиться этим сообщением Ссылка на сообщение
Malandrinus 615 Опубликовано 28 Октября 2010 Rolan, Вот он , xrGame от ЗП на сцене! Я ценю ваши старания, но давайте таки определимся. Это не исходники. Исходники - это то, что писали разработчики, и они их никому не давали. А это - сгенерированный идой текст. Его нетрудно получить самому. Загружаем в IDA pro вашу dll и делаем File -> Produce File -> Create C File... Толку от этого текста чуть менее, чем ничего. Потеряна информация о типах, точных сигнатурах и именах функций, именах аргументов функций, шаблонах C++ и ещё куча всего. Существенная часть функций не распознана (поскольку ссылки на них сделаны не вызовами, а косвенные). Комментариев в этом тексте естественно нет (хотя не факт, что они и в исходниках были =). Отсутствует деление на файлы (а между прочим в одном только xrgame.dll файлов исходного текста несколько тысяч). Читать этот текст и извлечь из него полезную информацию невозможно. Это не значит, что декомпилятор hex-ray из IDA бесполезен. Напротив, полезен весьма, но использовать его имеет смысл точечно. Вот нашли функцию, которая делает что-то (и вы знаете что именно), тогда уже именно эту функцию и пытаетесь декомпилить, чтобы понять, как именно она делает то, что делает. И это не избавит от необходимости смотреть в окно дизассемблера, уж поверьте. С практической точки зрения более интересным и информативным представляется разбор файлов билда MP 2947, которые шли с отладочными дампами. Насчёт законности. Вся эта возня не более и не менее законна, нежели прочая деятельность модостроителей (т.е. вообще говоря незаконна, почитайте лицензию к игре, параграф 1). AK74, рискну предположить что это было сделано из-за более навороченной графики. И вот почему: скрипты - это LUA, а LUA - это интерпретатор. А как известно, быстродействие не числится среди достоинств интерпретаторов. И имхо, вполне разумно, то что в предыдущих версиях игры реализовывалось скриптами "ввести" в код движка, а высвободившееся ресурсы CPU "отдать" графике. Для начала, Lua здесь используется в связке с JIT копилятором. Т.е. интерпретируется текст только при первом исполнении, затем уже исполняется скомпилированный код. Такой же принцип используется в исполняемой среде .NET. Естественно, это помедленнее будет, чем код движка, но не так уж драматически медленней. И потом на скриптовую часть не ложится большая нагрузка (естественно до тех пор, пока какой-либо новичок не начнёт делать при каждом апдейте перебор всех объектов =). Потом, утверждение о "переносе функций из скриптов в движок" - это ерунда из того-же разряда, что и разговоры о протекторах и прерываниях. Я утверждаю, что движок в той части, что соответствует xrgame.dll (т.е. вся игровая логика) практически мало изменился за все три игры. В лучшем случае была проведена работа по исправлению ошибок и может быть некоторой оптимизации. Практически все функции, которые были экспортированы в ЧН и ЗП по сравнению с ТЧ - это функции, которые там имелись изначально (т.е. ещё в ТЧ), просто были экспортированы в Lua и даны в распоряжение скриптёров. Т.е. выходит картина с точностью до наоборот - в новых версиях движка скриптёру предоставляются потенциально более широкие полномочия. Это Int 03h которые? Вот ведь... Господа, есть форумы и тьма их, на которых только тем и занимаются, что обсуждают ломание всяких защит и прочее в этом роде. Но обсуждать это здесь, при том, что никаких защит тут нет - это уже не смешно даже. Другое дело, если бы удалось скажем LAU и физикой нагрузить 2-е ядро процессора Это к сожалению невозможно. Совсем. Всё, что можно сделать в этом направлении, уже сделали разработчики. _Призрак_, Вообще-то, как я понял, flt_1006452C - не является названием переменной. Это так сказать сборка из 2 показателей - (тип числа)_(оффсет) В нашем случае это число типа float которое находится в 1006452C. Это всё-таки именно имя, не более. Только учтите, что в IDA есть только адреса ячеек памяти, поэтому это просто метка адреса. Имя метки IDA определяет при первичном анализе. Если по каким-то причинам IDA сочла, что по этому адресу лежит 4-х байтовый float, то имя составляется как flt_virtual_address. В дальнейшем вы можете изменить как это имя, так и интерпретацию содержимого памяти по этому адресу. как сделать новый сектор? Есть замечательная утилита PE Tools, которая позволяет это сделать. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Поделиться этим сообщением Ссылка на сообщение
Malandrinus 615 Опубликовано 28 Октября 2010 nuklia, может версия не та? Попробуй найти 5.5 Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Поделиться этим сообщением Ссылка на сообщение
Malandrinus 615 Опубликовано 30 Октября 2010 (изменено) _Призрак_, точнее malandrinus'а bpatch Не моя =) Это вроде бы известная GNU утилита. Хотя я о ней не знал сам, пока не потребовалось найти, чем применять dif файлы. Изменено 1 Ноября 2010 пользователем malandrinus Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Поделиться этим сообщением Ссылка на сообщение
Malandrinus 615 Опубликовано 1 Ноября 2010 _Призрак_, Из вызываемых без затей с классами и прочим могу посоветовать из _g.script: on_actor_...() таких там несколько штук start_game_callback() там же Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Поделиться этим сообщением Ссылка на сообщение
Malandrinus 615 Опубликовано 1 Ноября 2010 _Призрак_, из alife.ltx, ничего вызываться не может. Там просто прописывается его имя. Движок читает конфиг и затем вызывает функцию с этим именем. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Поделиться этим сообщением Ссылка на сообщение
Malandrinus 615 Опубликовано 9 Ноября 2010 SkyLoader, то, что ты нашёл, - это не функция, а строка с завершающим нулём (очевидно, имя консольной команды). IDA даёт им имя, комбинируя его из собственно строки и добавляя в начале "a" от ASCII. Чтобы найти остальные, надо реверсить функцию регистрации консольных команд. Ну или на wiki посмотреть =) align = выравнивание. Всякие данные обычно начинаются как минимум на границе двойного слова (4 байта). Ида распознаёт (чаще всего верно) все такие микропустоты перед началом переменных и пытается изобразить при этом корректный ассемблерный текст. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Поделиться этим сообщением Ссылка на сообщение
Malandrinus 615 Опубликовано 10 Ноября 2010 SkyLoader, можно ли взять кусок кода из одной длл-ки и кинуть в другую? =) Можно взять хвост от одной собаки и кинуть к другой, да чтоб она потом им махала? "Кинуть" - неподходящее слово. А вообще можно, вот же в шапке лежит проект "пришивания второго хвоста". Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Поделиться этим сообщением Ссылка на сообщение
Malandrinus 615 Опубликовано 13 Ноября 2010 SkyLoader, Это фрагмент функции добавления констант к классу-перечислению key_bindings. Там сериями вызовов добавляются пары ключ/значение. То, что ты конкретно привёл - это фрагмент добавления константы key_bindings.kCAM_2 со значением 17. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Поделиться этим сообщением Ссылка на сообщение
Malandrinus 615 Опубликовано 13 Ноября 2010 SkyLoader, признаться, не понимаю о каких настройках ты говоришь. Камера следует за актором. Что тут настраивать? Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Поделиться этим сообщением Ссылка на сообщение
Malandrinus 615 Опубликовано 14 Ноября 2010 SkyLoader, так это тебе нужно смотреть туда, где эти команды используются. Могу предположить, что это одна из таких функций: CActor::IR_OnKeyboardHold CActor::IR_OnKeyboardPress CActor::IR_OnKeyboardRelease Берёшь билд с отладочными дампами (mp 2947), находишь там эти функции (а может и не эти) и грызёшь их с помощью иды, пока не поймёшь, как это всё работает =) В релизных билдах разумеется код изменён, но не существенно, а найти там нужную функцию сходу почти нереально. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Поделиться этим сообщением Ссылка на сообщение
Malandrinus 615 Опубликовано 15 Ноября 2010 SkyLoader, надо искать в xrGame.dll из билда mp 2947. Там в комплекте имеются файлы с расширением *.pdb для каждого экзешника или библиотеки. При открытии файла идой в первый раз она спросит, загружать ли отладочную информацию. Надо ответить, что загружать. В этом случае ида уже не будет искать функции, типы и прочее, а просто возмёт это из этих файлов. Там безымянных или нераспознанных функций не будет вообще, и каждая функция будет иметь точную информацию о типе возвращаемого значения, типах и даже именах аргументов. Вот теперь уже и можете искать функции по имени. Можно сделать "jump to function" и там с помощью "search" найти функцию по тем иенам, что я давал. А можно просто отсортировать функции по именам в окошке слева и тогда найти её в списке тоже будет несложно. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Поделиться этим сообщением Ссылка на сообщение
Malandrinus 615 Опубликовано 19 Ноября 2010 SkyLoader, посмотрел эти функции, они большие. Я, правда, не очень понимаю, о чем они и чем могут мне помочь. ида даёт такой прототип этой функции: void __thiscall CActor__IR_OnKeyboardPress(CActor *this, int cmd); что означает на самом деле такой: void CActor::IR_OnKeyboardPress(int cmd); тип аргумента - неопределённый int, но можно предположить, что это одна из констант-действий из key_bindings. Функции большие, действительно. Это на самом деле хорошо. Думается мне, что там как раз и происходит обработка действий нажатия на клавиши. Скорее всего там в коде стояло что-то вроде такого: switch (cmd){ case <команда стрелять>: // делаем выстрел break; case <команда прыгать>: // выполняем прыжок break; // и т.д. } Это довольно нудно расшифровывать, поскольку оператор switch компилируется по-разному в зависимости от режима оптимизации и внутри превращается в весьма запутанную и неоднозначную конструкцию. Но что и где делается можно иногда понять и так по именам вызываемых функций. К примеру, стоят вызовы CInventory::Action(int,uint). Это явно какие-то действия с предметами в слотах. А вот это CActor::cam_Set(ACTOR_DEFS::EActorCameras) похоже на действия с камерой актора. Вероятно как раз и есть переключение режимов. Где-то там есть и изменение расстояния от актора до камеры. Если нужно найти параметры камеры, то отсюда надо начинать копать. Лезть в эти функции и пытаться понять, откуда они берут данные или куда пишут, какие ещё функции вызывают и т.д. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Поделиться этим сообщением Ссылка на сообщение
Malandrinus 615 Опубликовано 21 Ноября 2010 AK74, ну как они могут подходить? Ведь файлы PDB содержат привязки строк кода к бинарным файлам. Изменились бинарные файлы - всё, соответствие порушено. Даже если скомпилировать тот-же исходник с другими настройками, уже не подойдёт. А здесь мы говорим о новой версии движка. Т.е. НЕ подходят никаким боком. Информацию косвенно можно использовать, поскольку архитектура движка в целом не изменилась. Но только косвенно использовать: смотреть на старый (его легче изучать), затем сопоставлять с новыми версиями, которые уже без отладочной информации. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Поделиться этим сообщением Ссылка на сообщение
Malandrinus 615 Опубликовано 28 Ноября 2010 JIT = "Just In Time" компилятор "на лету". Ссылка для информации. Если вкратце, то суть в том, что вместо обычной интерпретации байткода при каждом исполнении при первом проходе функция компилируется в машинный код и затем исполняется. При всех последующих выполнениях функции уже исполняется компилированная версия. Такая же технология используется в среде выполнения .NET. Такой компилятор используется во всех версиях движка, так что особой разницы в скорости выполнения нет. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Поделиться этим сообщением Ссылка на сообщение
Malandrinus 615 Опубликовано 28 Ноября 2010 Сяк, с точки зрения создателей игры нет никакой разницы меняется движок, скрипты или что-то ещё. Любые изменения противоречат лицензии. Таким образом, любое модостроение под сингл является незаконным и возможно лишь в силу того, что фирма-разработчик закрывает на это глаза. Насчёт виртуальности если честно не понял. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Поделиться этим сообщением Ссылка на сообщение
Malandrinus 615 Опубликовано 28 Ноября 2010 Сяк, Я не согласен. Т.к. изменение скриптов не предполагает возможности запуска игры без лицензионного диска. А изменение движка - предполагает. А при чём здесь наличие или отсутствие диска? Речь о модификации. Скрипты - такая же кодовая часть игры, как и исполняемые файлы и динамические библиотеки. Как и кстати вообще всё содержимое игровых архивов. Я что-то не припомню, чтобы разработчики давали нам утилиту для их распаковки. Уже сам факт распаковки нарушает лицензию, поскольку файлы оттуда достаются с помощью утилит, которые были сделаны с помощью реверс инженеринга. Не так ли? Vano_Santuri, Менять в виртуальной памяти, когда запущен процесс. Как вариант fov в памяти... Это внедрение dll в адресное пространство? Типа asi loader и иже с ними? Во первых, это даёт только возможность менять данные. Насчёт кода не уверен, поскольку на нём стоит атрибут только для чтения. Что-то типа изменения fov или получения каких-либо данных ещё можно, а вот скажем дорегистрация своих функций уже становится проблематичной. Ну и даже если возможно. От того, что код меняется не на диске, а в памяти, это не становится более легально. DiXares, Шип, а где тогда в ТЧ либа jit'а? В ЧН и ЗП она есть, а в ТЧ нету... Статически прилинкован. В ЧН и ЗП не только это вынесли во внешние dll. Физику например тоже вынесли, а в ТЧ движок физики был в составе xrgame.dll. Читал, что luajit - это добавка к lua и содержит его самого. Так и есть. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Поделиться этим сообщением Ссылка на сообщение