1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.
  3. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

Вопрос про IDA (реверс-инженеринг Blood)

Тема в разделе "Мастерская", создана пользователем M210, 25 авг 2016.

  1. M210

    M210

    Регистрация:
    19 мар 2008
    Сообщения:
    670
    Привет. Занимаюсь реверс-инженерингом игры Blood.
    На данный момент разбираю методы AI и перемещения спрайтов и параллельно пишу свой код реализации этих методов от полученных данных.
    Методы были написаны и вроде бы даже работают, но под вопросом остается одна из переменных.
    См. приложение - переменная dist2 в которой присутствует слагаемое $off_40000. Тип у этой переменной UNKNOWN, поэтому чему она равна, не представляю. Заменил ее пока на значение в коде 262144, но значение скорее всего не такое, т.к. ниже force считается не совсем правильно (от 0 до 3) хотя код ниже с такими значениями работает. Можно ли как нибудь определить или вычислить это значение?
    Доп. сложность еще вносит то, что переменная объявлена внутри метода и не является глобальной (глобальные переменные я могу достать с помощью artmoney или cheat engine по смещению) А как добраться до переменных методов я пока не осознал, может есть ли способ?

    Была бы игра на Windows, я бы без труда прочитал бы это значение из дебаггера...под дос же дебаггера,я так понял, не существует?
     

    Вложения:

    AndyFox нравится это.
  2.  
  3. Guyver

    Guyver

    Регистрация:
    2 окт 2005
    Сообщения:
    4.959
    Как не существует? А труподебаггер (Turbo Debugger)?
     
    AndyFox нравится это.
  4. M210

    M210

    Регистрация:
    19 мар 2008
    Сообщения:
    670
    Спасибо за ответ :) Позволит ли он мне работать с IDA? Я эту тему пока мало изучал, и из того что я знаю, это Bochs debugger и idados от которого вообще никакого толку...а через Bochs у меня вываливается исключение в IDA, поэтому я не могу с ним работать
     
  5. tuliss

    tuliss

    Регистрация:
    24 фев 2014
    Сообщения:
    5.975
    Не проще DOSbox и IDA ?

    http://www.old-games.ru/forum/threads/revers-v-dosbox-s-pomoschju-ida.57039/page-3
     
  6. M210

    M210

    Регистрация:
    19 мар 2008
    Сообщения:
    670
    @tuliss, ну я уже выше написал, что от него нет толку, он работает только с 16битными программами, коих вообще в природе существует :) Другими словами, Blood это 32битное приложение, плагин даже не появляется в дебаггерах
     
  7. tuliss

    tuliss

    Регистрация:
    24 фев 2014
    Сообщения:
    5.975
    Да, извиняюсь - прочитал по диагонали.
    А если использовать IDA Pro под DOS ?
    Да старая версия, но работать должна :)

    Можно еще вспомнить Soft-ICE.

    P.S. А вообще вроде как движок открытый Build Engine. Может стоит посмотреть код ?

    http://www.advsys.net/ken/buildsrc/
     
    Последнее редактирование: 25 авг 2016
  8. M210

    M210

    Регистрация:
    19 мар 2008
    Сообщения:
    670
    Я конечно слабо представляю, как может выглядеть многооконность в досе, но попробовать можно))
    А ссылку на IDA под дос можно? Там есть Hex-Rays? А то если он мне будет показывать просто asm код, я в нем разобраться не смогу.

    Хотелось бы функциональность как в windbg, поставил точку останова, а когда программа остановилась в данном месте, навелся на интересующую переменную и IDA говорит, чему она ровна
     
  9. tuliss

    tuliss

    Регистрация:
    24 фев 2014
    Сообщения:
    5.975
    На http://old-dos.ru/ есть.
    Честно я тебе сейчас ничего не скажу, так как пслд раз я запускал IDA под DOS в 98 году, когда было стремление освоить программирование (так и не стал, но стремлюсь :D ) и освоить ASM.
    Надо пробовать.

    Я же посмотрел бы сначала исходный код движка. Тем более он там на C/C++
    Watcom C/C++
     
  10. nop

    nop

    Регистрация:
    5 дек 2014
    Сообщения:
    2.297
    Мне кажется в старой Иде не было дебагера. Но вообще-то софтайс/винайс под 98-й виндой решит все проблемы. А вообще отладчиков под досом - десятки! Но самый удобный, конечно, TD.
    @tuliss, build-это только графический компонент движка. А человек вроде ai реверсит. Хотя для начала следовало бы сравнить с исходниками Duke3d, конечно.
     
  11. M210

    M210

    Регистрация:
    19 мар 2008
    Сообщения:
    670
    Ну, именно знание движка сподвигло меня декомпилить игру, известные методы и частично исходный код неплохо так облегчает задачу...но могу сказать вот что: имеются исходники альфа версии. Декомпилированный альфа код нечем не отличается от исходников альфы (что в общем то не странно) а вот в релизной версии в этом месте как раз изменения, и эта переменная единственное, что мне непонятно в этом методе...Сомнения возникли, переходя к следующему методу, который вызывается из существующего....этот неправильно расчитанный force должен причинять урон врагам...а какой там урон может быть если переменная варьируется от 0 до 3?))) Да и в вызывающем методе есть строка, if(force < 160)...конечно 0 и 3 под это условие попадает, но все-таки 160 явно говорит, что урон может быть и больше 160, а у меня получается что force = 3, если под ногами врага взорвался динамит...т.е. максимальный урон. Самое интересное, что враг и отлетает от этого взрыва как в оригинале, а вот расчет урона пока неизучен.

    Хотя условия if < 160 могут быть и ложными...IDA очень сильно любит коверкать код до неузнаваемости и иногда вставляет самоисключающую чушь внутрь кода...самая прикольная из подобных это reference << 18 >> 18. Т.е. битовый сдвиг сначала влева на 18 бит, а потом обратно на 18 ))) Очень глаза мозолит....а иногда и дизинформирует, например брать предыдущих два байта структура и в коде сдвигать вправо на 16 бит...в этоге оказываемся на другой переменной типа short
    --- добавлено 25 авг 2016, предыдущее сообщение размещено: 25 авг 2016 ---
    Уже сравнилась - небо и земля :) Да и собственно я написал порт Tekwar, поэтому сам движок знаю достаточно хорошо
    --- добавлено 25 авг 2016 ---
    Ну и в заключении напишу - переменная не из движка, это утверждение 100%
    Код отвечает за физические явления типа инерции, благодаря чему бладе есть рокетждамп а монстры красиво разлетаются от взрывов...код чисто monotithовский
    --- добавлено 25 авг 2016 ---
    Запустил я TD, вроде включил пошаговый режим, и с какого то шага игра просто запускается и все, дальше из нее можно только выйти....не привык я с абстракцией работать, мне проще будет догадаться, что это за переменная, чем найти ее в этой абстракции :(
     
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление