Сейчас на форуме: tyns777, bezumchik (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Reverse Engineering ЛИБО простейшая правка через OLLY-IDA-HEX
Посл.ответ Сообщение

Ранг: 0.2 (гость)
Активность: 0.02=0.02
Статус: Участник

Создано: 02 февраля 2020 20:05 · Поправил: Navlibushka
· Личное сообщение · #1

Ребят, у меня вопрос состоит из двух частей

Часть-I:

Есть старый шутер 1999 года. Есть я. Есть файл .lib (библиотека статическая, насколько я понял), который находится в SDK это самой игрушки. Нужно декомпилировать файл .lib, минуя\исправляя все декомпиляционные баги, чтобы была возможность править исходный код и компилировать обратно в .lib. Если имеет значение - игра написана на С. Реально ли это и как это сделать? В идеале, конечно, если найдётся Нэо, который это сваяет, ибо, похоже, вникать во всё это нужно самому лет 10.

P.S. Ощущаю себя Морфеусом, который ищет избранного программиста, ибо, как я понял, то, что мне нужно - возможно только в матрице, а не в реальной жизни...

Часть-II

Когда я спрашивал это, нашёлся один мудрец, который предложил гораздо более простой способ. Хочу сначала попробовать его, если не выйдет - тогда откатываемся к части-I.
Сама инструкция:

Загружаешь exe в Olly. В IDA ищешь сей код и переключаешься в HEX. Выделяешь кусок и в самом Olly ищешь где он находится. Там просто заменяешь 694 на все что угодно (ну только что желательно размер не превышать ). И вполне возможно что все ок.

https://dropmefiles.com/t9Xt8 - здесь сам пациент, в котором нужно изменить то число "694" на "1000", например, и скрины той инстркции, которую мне скинул человек. Я изначально сюда просто прикреплял картинку, но она в каком-то формате неадекватном прикрепляется, что потом нормально не скачивается, пришлось запихнуть в архив с самим редактируемым файлом

Может кто-нибудь провернуть для начала Часть-II? Потому что я сам с этим буду разбираться полтора месяца, так как я с этим со всем как попугай с баяном. Я бы проверил новый файл на игрушке сразу и может даже к декомпиляциям тем переходить не нужно будет. Есть здесь волшебники?



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 02 февраля 2020 20:33
· Личное сообщение · #2

А искомый код то где?
Таких чисел там может быть великое множество.
И вообще, желательно знать конечную цель сего действа. Пункт 1 невыполним, вы правильно понимаете



Ранг: 0.2 (гость)
Активность: 0.02=0.02
Статус: Участник

Создано: 02 февраля 2020 20:37
· Личное сообщение · #3

_MBK_ пишет:
https://dropmefiles.com/t9Xt8


Код в https://dropmefiles.com/t9Xt8

Там сам файл + 2 фото с теми инструкциями. Я не смог прикрепить больше одного прикрепления (фото с инструкциями + сам код, поэтому всё утрамбовал в архив и через файлообменник).




Ранг: 69.9 (постоянный), 83thx
Активность: 0.140.73
Статус: Участник

Создано: 02 февраля 2020 21:03
· Личное сообщение · #4

А какой результат должен быть? В плане, зачем это все? Может, может обойтись инструментами попроще, типа ArtMoney, CheatEngine?



Ранг: 0.2 (гость)
Активность: 0.02=0.02
Статус: Участник

Создано: 02 февраля 2020 21:45 · Поправил: Navlibushka
· Личное сообщение · #5

morgot пишет:
А какой результат должен быть? В плане, зачем это все? Может, может обойтись инструментами попроще, типа ArtMoney, CheatEngine?


Тогда развернём карты побольше:

Я играю в одну игрушку. 1999 год, Фаргус, если это о чём-то говорит...
Делаю для неё карты, моддинг, в общем. Делаю и для одиночной игры, и для мультиплеера. Все NPC, которые есть в одиночной игре перемещаются по карте по определённым навигационным меткам.

Такая метка называется "node".

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

Делается это через консольные команды. Просто вводишь и бегаешь, а игра делит пространство на определённые клетки, где 4 клетки = 1 node, типо один из них занимает 4 клетки. Ты бегаешь, создаётся .nav file в корне игры и всё - после этого NPC тебя достанут, где хочешь.

Проблема в том, что разработчики сделали для nodes лимит - 695, не больше. Мне нужно расширить это число, ибо карта у меня большая, а резать не хочу.

Что имеем:
SDK в виде .c и .h файлов, где эти 695 есть, но их и изменение ни на что не
влияет. Там, кстати, строка "#define max_nodes 700", а не 695 почему-то, но да ладно.

Navlib.lib - статическая(как я понимаю) библиотека в самом SDK, которая используется при его компиляции. Эти 695 прописаны в .lib. Нужно декомпилировать .lib, изменить те 695 на что-нибудь типа 10000 и компилировать обратно в .lib.

Я уже пробовал открывать его через Hex Editor и там искать значения "694" и т.д. Результат таков, что если исправить единственное находимое там "700" и второе из двух находимых "695" (но не "694"), то число меток можно увеличить до 730, но игра постоянно вылетает тогда. Если открывать через IDA, то там в коде есть конкретная строчка типа с "> 694" и ниже printf с сообщением о "max_nodes reached", если достигаются те 695. Был вариант всё декомпилировать, исправить 695 на нечто большее не через Hex, где непонятно, то ли это вообще место в коде правится, а через сам код и компилировать обратно, проверив, получится ли расширить число nodes без каких-либо проблем.

Я могу на почту переслать большое объяснение с кучей скриншотов того, что было в IDA, в Hex, что я делал, что да как, чтобы нагляднее было, может и реверс не нужен, может есть какой-то обходной путь для моей задачи.

Просто мне на это же самое человек один порекомендовал вместо декомпиляции сделать ту правку через 3 проги. Воу попробовать, ибо с его слов это 2 минуты, если знать, как делать.



Ранг: 21.0 (новичок), 19thx
Активность: 0.010.03
Статус: Участник

Создано: 02 февраля 2020 22:51
· Личное сообщение · #6

вылетает, видимо, из-за того, что изменение одной лишь константы не решет вопрос размера выделенной памяти в классе под хранение этих самых ваших "node".
волшебники декомпиляции найдутся, если вы озвучите приемлемый бюджет. (сумма с тремя нулями за каждые 100KB в y.e. как минимум). есть тема на форуме "поиск специалистов", вам туда.



Ранг: 63.5 (постоянный), 35thx
Активность: 0.290.96
Статус: Участник

Создано: 03 февраля 2020 06:50
· Личное сообщение · #7

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




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 03 февраля 2020 07:25
· Личное сообщение · #8

Тема закрыта за нарушение п.9 правил форума.
В поиск специалистов.


 eXeL@B —› Вопросы новичков —› Reverse Engineering ЛИБО простейшая правка через OLLY-IDA-HEX
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати