Перейти к содержанию

MasterGH

Ветераны
  • Постов

    2 999
  • Зарегистрирован

  • Победитель дней

    129

Сообщения, опубликованные MasterGH

  1. Если верить создателю, то этот asi плагин убирает проверку xlive.dll, то есть данные становятся незащищёнными.

    [ub=http://www.filekeeper.org/download/shared/XliveProtectDisabler.asi]XliveProtectDisabler[/ub]

    Возникает вопрос - как эту весчь вшить в тренер чтобы отдельно не подгружать?

    А инструкция есть как XliveProtectDisabler.asi пользоваться? :)

    PS Для тех кто не в танке (сталкивался с пакерами), мне кажется, что Александр Блейд либо напрямую связан Artmoney как её разработчик, либо косвенно (использовал один и тот же пакер). Потому что и Артмани и XliveProtectDisabler.asi запакованы похоже одним и тем же странным пакером и похожим на обфускатор Аспака.

  2. Пока точного решения нет...

    Эта штука помотала мои нервы в игре Reziden Evil 5. В защите так же есть букет антиотладочных методов, с которыми у меня не было времени разбираться.

    В какой-то версии xlive я использовал этот скрипт (сделанный WhiteHat с форума MHS)

     

     
    [ENABLE]
    xlive.dll+14747C:>00007BFB1510F4C96A505B5F5DC20C00YYxxxxxxxx5151F605844AAF010175
    db C3 90
    
    xlive.dll+1439C1:>4DFC5F5E33CD5BE8CAEC4800C9C20C00YYxxxxxxxx81ECD8060000A1C08CAF
    db C2 08 00
    
    xlive.dll+45EE9D:>C00000008B11508B4224FFD033C05FC3YYxxxxxxxx81EC28030000A3F05CAF
    db C3 90
    
    [DISABLE]
    xlive.dll+14747C:>00007BFB1510F4C96A505B5F5DC20C00YYxxxxxxxx5151F605844AAF010175
    db 8B FF
    
    xlive.dll+1439C1:>4DFC5F5E33CD5BE8CAEC4800C9C20C00YYxxxxxxxx81ECD8060000A1C08CAF
    db 8B FF 55
    
    xlive.dll+45EE9D:>C00000008B11508B4224FFD033C05FC3YYxxxxxxxx81EC28030000A3F05CAF
    db 8b ff

     

    Проверочные байты нужно поправить, т.к. они могут не совпадать (будет время в субботу или пятницу, то я постараюсь грохнуть этот xlive на Rezident Evil ). Данный скрипт вызывает сразу или через некоторое время "мессагу исключения" при подключении отладчика или изменении памяти игры. Если мессагу не закрывать, то можно исследовать код и играть дальше.

    Если этот скрипт не использовать, то игра будет "молча" закрываться.

  3. Задали мне такой вопрос, про то как работают активирующие скрипты. Разберём пример.

    //=========================================

    // ParaWorld

    // Game Version : 1.0

    // Script Version: 1.0

    // CE Version : 5.5

    // GodMode and Resources

    // 16-Jan-2010

    //=========================================

    [ENABLE]

    alloc(MyCode,1024)

    //=========================================

    // Declaration section

    label(_GodMode)

    label(_BackGM)

    label(_ExitGM)

    label(_MonID)

    label(_BackMI)

    label(_MonRes)

    label(_BackMR)

    label(_ExitMR)

    label(pHero)

    label(pUnit)

    label(pRes)

    label(iEnableGM)

    label(iEnableMR)

    label(iPlayerID)

    registersymbol(MyCode)

    registersymbol(pHero)

    registersymbol(pUnit)

    registersymbol(pRes)

    registersymbol(iEnableGM)

    registersymbol(iEnableMR)

    registersymbol(iPlayerID)

    //=========================================

    // Hacking Points

    PWServer.exe+1c408c:

    jmp _GodMode

    nop

    _BackGM:

    PWServer.exe+045540:

    jmp _MonID

    nop

    nop

    _BackMI:

    PWServer.exe+237944:

    jmp _MonRes

    nop

    _BackMR:

    MyCode:

    //=========================================

    _GodMode:

    cmp dword ptr [iEnableGM],0

    je _ExitGM // Jump if feature is disabled

    mov eax,[iPlayerID] // Get player ID

    cmp eax,[esi+10] // Is it a playerґs Object?

    jne _ExitGM // Jump if false

    mov [pHero],esi // Save pointer for debugging

    mov dword ptr [esp+08],0 // value2decrease = 0

    mov eax,[esi+0000061c] // Get Max HP

    mov [esi+00000618],eax // Update HP

    _ExitGM:

    fld dword ptr [esi+00000618] // Original code

    jmp _BackGM // Back to main code

    //=========================================

    _MonID:

    mov ecx,[esp+2c] // Original code

    mov [pUnit],ecx // Save ptr for debugging

    push ebx

    mov ebx,[ecx+10] // Original code

    mov [iPlayerID],ebx // Save Player ID for further use

    pop ebx

    cmp eax,[ecx+10] // Original code

    jmp _BackMI // Back to main code

    //=========================================

    // EDI = ptr to Worker

    _MonRes:

    cmp dword ptr [iEnableMR],0

    je _ExitMR // Jump if feature is disabled

    or edi,edi // Valid pointer?

    jz _ExitMR // Jump if false

    mov eax,[iPlayerID] // Get player ID

    cmp eax,[edi+10] // Is it a playerґs worker?

    jne _ExitMR // Jump if false

    mov [pRes],esi // Save ptr for debugging

    mov eax,459c4000 // Get cheat value

    cmp eax,[esi+000002dc] // Current value >= cheat value?

    jle _ExitMR // Jump if true

    mov [esi+000002dc],eax // Update value

    _ExitMR:

    fld dword ptr [esi+000002dc] // Original code

    jmp _BackMR // Back to main code

    //=========================================

    // Variables

    pHero:

    dd 0

    pUnit:

    dd 0

    pRes:

    dd 0

    iEnableGM:

    dd 1

    iEnableMR:

    dd 1

    iPlayerID:

    dd 0

    //=========================================

    // Original Codes

    [DISABLE]

    PWServer.exe+1c408c:

    fld dword ptr [esi+00000618]

    PWServer.exe+045540:

    mov ecx,[esp+2c]

    cmp eax,[ecx+10]

    PWServer.exe+237944:

    fld dword ptr [esi+000002dc]

    dealloc(MyCode)

    unregistersymbol(MyCode)

    unregistersymbol(pHero)

    unregistersymbol(pUnit)

    unregistersymbol(pRes)

    unregistersymbol(iEnableGM)

    unregistersymbol(iEnableMR)

    unregistersymbol(iPlayerID)

    Пишем вспомогательные скрипты, типа этого


    [ENABLE]
    iEnableGM:
    db 01

    [DISABLE]
    iEnableGM:
    db 00
    //Скрипт2

    На главный скрипт вешаем хот-кей ctrl+0.

    На скрипт2 вешаем хот-кей ctrl+1.

    Когда идём в игру, то нажимает на ctrl+0 один раз. Затем можем включать читы, например нажав ctrl+1.

    Активирующим скриптом я называю первый скрипт. Остальные - вспомогательными.

  4. В общем скачал исходники, настроил проекты как надо. CE компилируется, трейнер компилируется с картинкой в 1 метр, глюков с иконами нет. В общем всё работает.

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

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

    Версия CE 5.6 Rus 1.0 будет без модернизации. Будет только изменён дизайн и сделан перевод =)

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

    Откопал исходники сходники CE 5.6, сейчас качну и гляну рабочие ли они.

  6. Ну наконец она вышла официально (правда уже несколько дней прошло)

    Вышла версия CE 5.6

    Поведую я вам с моих слов о том какие более существенные обновления появились в этой версии.

    - Существенно увеличина скорость и эффективность поиска указателей.

    - Теперь можно указывать смещения относительно начала структур при поиске цепочки указателей.

    - В автоассемблере теперь есть область действия за пределами [enable] и [disable]

    - Поддержка 64-разрядных игр, добавлена расшифровка регистров xmm

    - В расструктуризации данных теперь можно найти указатели ссылающиеся на строки, а также все сами эти строки.

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

    - В автоассемблер добавлены две команды: aobscan(varname, arrayofbyte),"assert(address, arrayofbyte)"

    - В первом случе будет каждый раз сканирование проверочных байт по адресам. Найденных адерс будет в объявленной метке varname. Во втором случе будет просто проверка находятся ли по некоторому адресу некоторые байты, если не находятся, то скрипт не выполнится.

    Честно говоря, сложно представить чем может пригодится assert(address, arrayofbyte) на практике. Возможны условия типа, если в игре не произошло то-то, то не активировать скрипт под Enable или под Disable.

    - Расструктуризация данных теперь возможна повторно при этом можно увеличить/уменьшить размер структуры. Также статические адреса стали зелеными.

    - Во время отладки можно следить за тем что творится в стеке. Отображение стека также имеет ряд настроеке.

    Для тех кто не знает, стек начинается с текующего значения esp. И если по стеку выувидите параметры например

    адрес34: текущее значение здоровье

    адрес44: максимальное значение здоровья

    То вы можете всегда обращаться к этим адресам от текущего esp или даже от ebp. Посмотрие в OllyDbg на стек и регистры esp и ebp при пошаговой отладке и вы всё поймете.

    - В папке с CE 5.6 есть "commonmodulelist.txt", в него входят модули, которые обычно используют игры. Память этих модулей сканироваться не будет. Вы можете добавить не нужные модули.

    - В папке "example scripts" появились примеры скриптов, которые помогут научиться пользоваться Script Engine на C-подобном языке.

    - Существенно расширена работа с плагинами, а также расписана справочная информация по работе с ними.

    - Добавлена поддержка в автоассемблере (float)#, (double)#, (int)#, (double), а также новая метка DQ.

    Примеры:

    mov eax,#100 //тоже самое, что (int)100

    mov eax,#100.1 //тоже самое, что (float)100.1.

    А (double)100.1 написать можно только под меткой (Т.к. в 32-разрядных приложения нет 8-ми байтных регистров)

    dq

    (double)100.1

    Другие прмеры:

    dd

    (int)100

    dd

    (float)100.1

    Надеюсь вы не забыли, что есть также db, dw, dd =)

    - В дизассемблере появилась функциональность Watch Memory Allocation. По введеному адресу покажет начало кучи. Толку особого и нету +)

    - Также исправлены всякие баги.

    Более подробно вы можете прочитать на сайте Дарк Байта.

    Пока исходников CE 5.6 нет, поэтому и русской версии нет :)Как мне сказали однажды: "Нет резюме, значит и работы нет" :D

  7. Короче тебе в любом случае надо подменить номер слота / указатель на слот по которому будет "удаление" навыка. Это будет не просто и я мало верю в то, что не забьёшь на это дело.

    3.8 гб это тоже много. Если хочешь попробуй свой репак сделать. Повырезай всё что можно чтобы игра работала. Если не больше гига получится, то я скачаю. Залить можешь куда есть желание. Мне удобнее с letititbit скачивать, правда там проблема с докачкой при обрыве связи.

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

  8. С волшебным пендалем, ты перегнул палку :D

    Самое ключевое место я вижу следующее - компьютер сам выбирает какое умение забыть.

    Логика следующая.

    Если игра выбирает какой навык нужно забыть, то подмени выбранное значение своим, если это опыт твоего ГГ (главного героя).

    Я представляю слоты такими.

    1 2 3 4 - слоты

    А Б В Г - умения

    Возможно, есть некоторая функция.

    1. Прочитать количество навыков.

    2. Сгенерировать случайно число навыка который будет удалён

    3. Удалить навык...

    4. Создать новый навык в освободившемся месте.

    Находим адрес количества навыков.

    Берём такой страшный инструмент как OllyDbg и работаем в нём.

    Ставим на адрес количества навыков бряк на доступ перед тем как будет автоматически забываться какой-то навык. И внимательно идём по коду (клавиши F7,F8)смотрим как происходит работа со значением количества навыков. Оно должно идти в генератор типа call-а и возвращаться должно сгенерированное значение, которые ты подменяешь на тот слот навык в котором по твоему желанию должен забыться.

    Я бы с удовольствием бы помог решить эту задачу, но эту игрушку скачивать я запарюсь.

  9. Я думаю, ты делал всё правильно, наверно, просто есть какие-то ошибки в коде CE. В CE предусмотрено открывать таблицы артмани, попробуй открыть английской версией CE, если не пробовал.

    О багах русской версии.

    1) В версии CE RUS 1.2.0 трейнер сделать почему-то нельзя.

    2) Почему-то CE автоматически сохраняет таблицы с названиями без расширения .CT.

    Например у меня в папке лежит "spider.CT" и просто "spider". Если вас беспокоит этот "мусор", то вы можете его удалить.

    3) В русской версии до 1.2.0 замечено, что генерируемые ей трейнеры прибавили в весе чуть ли не 6 мб.

    Мною было решено, дождаться выхода версии 5.6 и модернизировать уже только её. А версию CE 5.5 RUS 1.2.0 можно считать больше не обновляемой. Следующая версия будет CE 5.6 RUS.

  10. Если ты про сайт там где русская версия CE, то я думаю лучше его не привязывать к данному форуму. Потому что там сайт просто как этикета Cheat Engine RUS.

    А сайта у нас нет ) Потому что у нас форум как сайт ))

    Кстати у меня была идея сделать программу подобную ЧеМаксу как ТрейнерМакс на основе базы таблиц cheat engine. Можно было бы выбрать также игру, видеть описание, горячие клавиши и более того редактировать скрипты с перепаковкой базы скриптов. Тогда можно было бы делать сайт с лентой новостей об обновлении программы. Надеюсь Xipho черкнёт тут свои мысли по этому поводу. Ведь у меня уже есть заготовки и реализовать за два дня я думаю смогу это.

  11. Данная проблема произошла по моей вине в русской CE версии ниже 1.0.0 (а может и более ранняя версия, т.е. та, которая ниже 1.0.0)

    Решение такое:

    1) Сохранить нужные файлы, например, таблицы.

    2) Корректно удалить CE инсталлятором (вроде такой должен быть, если я не ошибаюсь)

    3) Установить инсталлятором англискую CE

    4) Скопировать в директорию программы, главный файл CE RUS ни ниже 1.0.0. ,если нужно пользоваться русской версией.

    Проблема из-за того, что в реестре остаются не верные данные от CE RUS после её закрытия, после чего могут быть проблемы с английской версией, которая также напортачит в реестре. Затем ни одна версия не откроется.

    Увы, моя вина... но сейчас такого быть не должно.

  12. Здесь можно задавать общие вопросы по Cheat Engine в том числе и русской.

    Если ваш вопрос заслуживает особого внимания, то вы можете создать отдельную тему.

    Старайтесь задавать вопросы, которые больше относятся к специфике Cheat Engine, а не по играм которые ей можно обмануть. К этим вопросам можно отнести применение той или иной функции, общие настройки Cheat Engine, настройки отдельных функций, ошибки и т.д.

    Вопрос должен быть привязан к специфике cheat engine, а уже в последнюю очередь к игре. В противном случае лучше задать вопрос в форуме по взлому игр.

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

    [sp=Скрыто]Опкод (Operation Code) - часть инструкции, равная одному байту

    Ноп (Nop - Noop) - опкод "пустой", ничего не делающей инструкции. Используется для выравнивания оригинальных инструкций при создании Code Cave.

    Нопить - забивать какую-либо инструкцию нопами (nop).

    Типы данных - прежде всего тип данных обусловлен размером количества единиц информации битов или байтов. Затем процессор может их воспринимать как знаковое число, целое число, вещественное число или как текст.

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

    Статический адрес - адрес в памяти, который не меняет своего положения в памяти игры. Виден как зелёный адрес в Cheat Engine и MHS. Находится в регионах памяти с типом Image.

    Динамический адрес - адрес в памяти, который меняет своё положение в памяти игры после некоторого события.

    Цепочка указателей - указатель на указатель больше чем одного уровня. Представление цепочки указателей обозначается фигурными скобками. Пример f[[game.exe+0x6454]+5*54h]. Более подробно в справке MHS.

    Структура - структура это набор данных. Главные параметры структуры: есть начало и конец, соответственно размер. В структурах могут быть данные как одного типа так и разных.

    Расструктуризация - раскрытие характеристик определённых структур данных при которой становится известно, на каком смещении от начала структуры какие данные находятся. Например, здоровье находится на смещении +0x48, от начала структуры или начала структуры объекта.

    Объект (игровой объект) - объект можно воспринимать буквально как явление, предмет, на к-рый направлена чья-н. деятельность, чье-н. внимание (книжн.) . Объект в программировании или при обмане игр, когда речь идёт об инструкциях работающих с объектами стоит воспринимать как структуру данных в памяти, которая отражает поведение некоторой абстрактной сущности. Например, юнита в игре можно реализовать как объект на основе описания класса юнита. Объект наполняется данными по описанию класса, также к данным по смещениям от начала структуры объекта "привязываются" методы. Таким образом методы будут работать с некоторым объектом на основе описания класса.

    Класс - это описание данных и методов объекта. На описании класса реализуются объекты или один объект. Класс также является типом.

    Метод - это в ассемблерном представлении, это блок кода который работает только с определённым классом. Этот блок кода может вызывать от куда угодно, но он будет работать с данными класса к которому привязан.

    Массив данных - массив представляет однотипную структуру данных. Например, массив байт или массив некоторых объектов.

    Отладчик - обычно, включает в себя также дизассемблер. Позволяет ставить брекпоинты, снимать показания регистров изменять регистры и т.п.

    Брейкпоинты - точки остановки программы. Можно поставить на адрес на чтение и запись. Можно поставить на инструкцию. В результате остановки игрового процесса можно снять показания регистров. Брейкпоинты бывают также условные, которые выполняются при определённых условиях (см. правку по ollyDbg)

    Дизассемблер - позволяет перевести байт-код в ассемблерное представление. Ассемблер - язык программирования, самый близкий к машинному.

    Регистры - информацию по регистрам смотреть в Интернете или у нас на форуме. Своими словами это операнды, которыми оперирует процессор, выполняя те или иные инструкции.

    Инструкции - или ассемблерные инструкции, также смотреть в Интернете или у нас на форуме. Дизассемблированные инструкции отражают какую-то операцию происходящую в игре. С помощью программ CE, MHS можно изменять инструкции изменяя поведение игры и её игровых объектов.

    Часто обращаемая инструкция - инструкция которая срабатывает очень быстро.

    Определение адресов на инструкции - определение результирующих адресов с которыми происходит работа. Например, есть инструкция mov eax, [ecx*4 + 64]. В квадратных скобках может проскакивать множество адресов, которые можно определить средствами CE или OlltDbg.

    Классификация инструкций сработавших при брейкпоинте.

    -Тип А

    Данная инструкция работает с некоторым единственным параметром только определённого игрового объекта.

    Например, здоровье от структуры находится по смещению +155. Инструкция А, работает только с этой структурой, только со смещением +155.

    -Тип B

    Эта инструкция работает с параметрами двух и более объектов, параметры которых находятся по одинаковым смещениям.

    Например, у нас шесть объектов - игроков, у которых по смещениям +155 находится здоровье. Инструкция типа B получает указатель на начало некоторой структуры объекта игрока, прибавляет смещение +155 и работает с параметром (читает параметр из адреса или пишет в адрес). Таким образом, инструкция типа B может отнимать здоровье у героя, а также отнимать здоровье у врагов.

    -Тип С

    Данный тип инструкций может работать с данными находящимися не по одному (как при типах А и В), а по разным смещениям относительно одной или более структур. Стоит не путать тип А с С, т.к. инструкция А работает с одним смещением, тоже самое касается и B.

    Отсюда мы получаем подтипы:

    C(А) - работает с разными смещениями одной структуры (объекта);

    C(B) - работает с разными смещениями более одной структуры (объекта).[/sp]

  14. Вот нашёл информацию о CE 5.6

    [sp=Скрыто]Cheat Engine 5.6

    1

    2

    3 Changes:

    4 Pointerscanner speed has been increased a lot

    5 New Icon (thanks to Phox from the forum)

    6 The pointerscanner can now scan for values

    7 The pointerscanner now lets you specify an offset list that it has to end with.

    8 Removed the injected pointerscanner

    9 The auto assembler now supports code outside of [enable] and [disable] sections so it affects both

    10 Resultcount is now comma seperator (thanks to infinito)

    11 New kernelmode debugger

    12 Added the ability to offload the current OS to dbvm (if your cpu supports it)

    13 The driver is now 64-bit compatible. (You will have to sign it yourself, or reboot with unsigned driver support)

    14 Rewrote the disassemblerview

    15 Deleting addresses from a scanresult is now a bit faster

    16 Changed the hotkey handler to be more controllable

    17 New heaplist that works based on dll injection instead of toolhelp32

    18 Dissectcode now helps finding referenced strings

    19 Added a new Auto assembler command "aobscan(varname, arrayofbytestring)"

    20 Dissect data now works with offsets instead of sizes

    21 Added the ability to follow pointers easily with Dissect Data

    22 There's now a stacktrace visible during debugging

    23 The registerview is gone as long as you're not debugging

    24 CE now suppresses the "No disk" message when the searchpath is invalid

    25 Added a common modulelist to the ce folder that you can edit. Include files that you do NOT want to go through when doing memory inspection

    26 You can now open another pointerscanner window while another pointerscan is running and read the results.

    27 Added a string reference windows

    28 Improved the plugin system with some extra disassembler commands and a command to load modules into memory

    29 Added (float)#, (double)# and (int)# support to the assembler, (double) is mainly usable in combination with the new DQ command though

    30

    31

    32 Fixes:

    33 Fix mov [reg],reg disassembly when a 16-bit prefix is used

    34 Fixed some floating point assembler instructions

    35 Taborder fix for "Value between scan" (infinito)

    36 Fixed the Auto assembler code injection template with regard to the "Alt:" line

    37 Jmp FAR instruction not shown properly in the disassembler

    38 Fixed disassembler instructions that had a rep/repe prefix while they shouldn't

    39 Fixed xorps instruction

    40 Fixed assembler where segment registers are used

    41 Fixed rm32,imm16 notations getting dowsized to rm32,imm8 while they should go rm32,imm32

    42 Fixed hang when setting the window on top and then doing a scan

    43 Fixed FILD qword instruction

    44 Fixed FNSTSW AX instruction

    45 Fixed FCOM instruction

    46 Fixed IMUL,0a instruction

    47 Fixed broken alt-key when the disassemblerview is focused

    48 Fixed the bug where removing a assigned hotkey to a cheat table didn't work

    49 Fixed the floating point panel. It now actually shows the floating point values...

    50 Fixed several bugs in the Dissect Data window

    51 Several gui fixes for high dpi systems[/sp]

    Побыстрее бы она вышла в свет, заждался я :D Пора уже обманывать 64-х разрядные игры =)

  15. Может я и не внимательно читал описание по Gentee и посмотрел примеры программирования на нём, но меня он не порадовал - тот же самый C/C++ с некоторым другим "синтаксисом" в который вникать незачем. Это моё ИМХО :)

  16. Сравнение проверочных байт.

    Русская версия CE на нашем сайте умеет генерировать возможную сигнатуру байт.

    Красный – отличающиеся байты.

    Голубой – сомнительные, которые могут поменяться со следующим патчем.

    Жирный – подходящие для проверочных байт.

    Некоторые области я не правильно закрасил, но смыл не особо теряется. Лень переделывать.

    post-3-1294575029,34_thumb.gif

    Некоторые выводы:

    1. Этот участок кода не менялся разработчиками, его изменил компилятор, т.к. наблюдается строгая последовательность операторов.

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

    2. Могут меняться: размеры структур, некоторые регистры, операнды для push-ей,

    3. Если push занимает один байт, то этот байт сомнительный и его не следует брать в цепочку проверочных байт.

    Итак цепочка проверочных байт будет равна:

    DisciplesIII.exe+2D13BA:>xxxxxxxx8Bxx3B91xxxxxxxx89xxxxxxYYxx8Bxx6Axx6Axx68xxxxxxxx68xx

    Буду тестировать эту цепочку на всех патчах, которые найду, позже сегодня выложу результат.

    Протестировано 4 версии игры. Все тесты успешны.

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.