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

Возвращаясь к Operation Flashpoint...


Рекомендуемые сообщения

Так я и не взломал эту игру на предмет бессмертия от пуль..

Что известно на данный момент (инфа актуальна для демоверсии Operation Flashpoint Resistance Demo):

1) pID (указатель на нашего солдата) = [[[FlashpointResistanceDemo.exe+2E9A20]+7A4]+8]

2) Повреждения частей тела: [[pID+17C]+n*4]

при n=0 - голова, n=1 - туловище, n=2 - руки, n=3 - ноги

3) Неработающий скрипт бессмертия:

[ENABLE]
aobscan(_faddress,d9xxxxebxxd9xxxxxxxxxxc2xxxxxx8bxxxxa1xxxxxxxx85xxxx8bxx74xxff)
alloc(_newmem,2048)
label(_returnhere)
label(_originalcode)

_newmem:
// cmp edi,13788100 - этот фильтр недоделан
// jne _originalcode
mov [ecx+eax*4],0
fld dword ptr [ecx+eax*4]
jmp flashpointresistancedemo.exe+1595b2
_originalcode:
fld dword ptr [ecx+eax*4]
jmp flashpointresistancedemo.exe+1595b2
jmp _returnhere

_faddress: // 005595A7 = FlashpointResistanceDemo.exe+1595A7
jmp _newmem
_returnhere:

[DISABLE]
aobscan(_faddress,d9xxxxxxxxxxc2xxxxxx8bxxxxa1xxxxxxxx85xxxx8bxx74xxff)

_faddress-5:
fld dword ptr [ecx+eax*4]
jmp flashpointresistancedemo.exe+1595b2

dealloc(_newmem)
//Alt: db D9 04 81 EB 06

Этот скрипт вроде как защищает от утопления в воде, но шальная пуля всё равно убивает.

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

Ссылка на комментарий
Поделиться на другие сайты

А что мешает через указатель на героя и указатель на структуру в любом куске кода, который выполняется постоянно сделать прыжок и ручками заполнять структуру повреждений нужными значениями? Тогда и фильтр не понадобится.

Зы. Ой )) Сам себе репу поднял :-D

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

Почему приведённый скрипт защищает от воды, но не защищает от пуль?

А главное - почему при включении спидхака скрипт и от воды перестаёт защищать? Обновлять значения не успевает чтоли..

Возможные причины не работающего бессметрия:

1. Не найден адрес здоровья или найдены не все (что скорее всего).

Проверить это можно, ставив бряк на запись на адреса здоровья своего героя и на адреса здоровья других игроков.

2. Адрес (или адреса) здоровья может находиться в структуре1. С неё снимается копия в структуру2 и код который работает с этой структурой может повлиять на смерть героя.

Больше вариантов у меня нет, если не тратить время чтобы придумывать их. Как написал Xipho необходимо смотреть в отладке. Хорошо бы найти несколько структур и постарать найти адреса-зацепки которые изменяются во время смерти некотрого игрока, но не своего...

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

Если setdammage работает в редакторе, то надо проследить в какую функцию идёт эта комманда. Попытаться найти её в самой игре. Я думаю, проще искать причину гибели от пуль.

Это делать надо в Olly и брякнуться в момент оповещения о сметри героя. Именно брякнуться. Запомнить это место - Бряк1. Посмотреть стек вызовов и на каждом вызове поставить бряки. Перезапустить игру и играть если прерываемся и очевидной смерти нет, то снимаем бряки кроме 1. Если остался бряк1, то надо чё-то думать.

И наконец когда смерть вновь произошла и сработал один из бряков, то плясать уже на этом уровне кода и смотреть что там происходит.... В общем не знаю как объяснить и предположить иное.

Ссылка на комментарий
Поделиться на другие сайты

  • 7 месяцев спустя...

Итак, в игре имеется флаг смерти [pID+178h]. Поставил бряк на запись, занопил всё, что выскочило и получил искомое бессмертие с одной оговоркой - экран "Вы погибли" всё счастье портит)) хотя видно, что после этой надписи я стою на ногах, а не лежу замертво. Теперь осталось разобраться с перехваченными функциями и всё заработает :)

Ссылка на комментарий
Поделиться на другие сайты

Кому интересно вот таблица с бессмертием для всех (без фильтра) - http://narod.ru/disk/3888623001/flashpoint.rar.html (для оригинальной Холодной войны от Буки). Там две инструкции. В одной надо изменить сравнение cmp с нуля на единицу, и полностью занопить вызов функции call 004BEEDD. Пока так грубо.. надо ещё посидеть, бессмертие для всех это не круто.

Адреса в таблице на бессмертие не влияют, но чтобы боец не орал от боли можно заморозить здоровье

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Создатель тренера для этой игры признаётся, что потратил на взлом игры 20 часов и преклоняется перед кодерами из Bohemia Interactive (http://www.ggmania.com/cheat.php3?cheat=5298). Видимо мне можно и не тратить время на попытки взлома игры)) хотя... ведь почти получилось - либо бессмертны все (нужен фильтр), либо только я пока не сяду в машину (фильтр найден некорректно, при посадке в машину начинает указывать на машину, а не на солдата). Вообще как вариант, кто хорошо владеет олей и IDA, можно дизассемблить тренер и посмотреть как там сделано) у меня на это знаний не хватает (ссылка на тренер выше)

Ссылка на комментарий
Поделиться на другие сайты

Paper Clip Trainer Spy позволит пошпионить за трейнером. Я думаю можно это сделать без угрызения совести, если ты откажешься от создания своего трейнера на основе того как работает трейнер автора.

Ссылка на комментарий
Поделиться на другие сайты

Эти перехватчики я уже пробовал, не работают, скорее всего из-за моей Windows 7 x64. Но я уже выдрал код из тренера с помощью простых бряках на WriteProcessMemory, ничего сложного :) Я уже и статью склепал "Исследование работы чужих тренеров на примере игры Operation Flashpoint". Как думаете, можно выдранный код тут выложить, и статью?

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

Ссылка на комментарий
Поделиться на другие сайты

Кстати говоря вот здесь уже приводили скрипт бессмертия: http://www.neoseeker.com/forums/675/t739996-god-mode/

Я этот форум и раньше находил, но скрипт не сработал из-за неправильного адреса инъекции. Неизвестно для какой версии игры приведён скрипт, но если изменить адрес инъекции (у меня такая сигнатура сработала на двух версиях игры, кроме демок: 8bxxxxxxxxxxxxxx33xx85xx74xx8bxxe8xxxxxxxx3bxx75xxd9xxxxdc), то скрипт становится рабочим. И в CE нужно выбирать не exe-файл игры, а mfc32.dll. Скрипт полностью совпадает с моим выковыренным из тренера. Кто-нибудь объясните принцип работы скрипта. И почему в skipGodMode код отличается от оригинального?

Ссылка на комментарий
Поделиться на другие сайты

Я уже и статью склепал "Исследование работы чужих тренеров на примере игры Operation Flashpoint". Как думаете, можно выдранный код тут выложить, и статью?

Учитывая что код инъеции уже выкладывали на форум, то привести его можно. А вот статью лучше не делать, т.к. получается ты будешь учить как рипать трейнеры.

И в CE нужно выбирать не exe-файл игры, а mfc32.dll. Скрипт полностью совпадает с моим выковыренным из тренера. Кто-нибудь объясните принцип работы скрипта. И почему в skipGodMode код отличается от оригинального?

mfc32.dll нсколько я помню это модуль которым пользуются множество Windows приложений написанных на C++ с библиотекой MFC. Это не модуль игры

По поводу отличий.

mov edi,[eax+00000354]

mov edi,[eax+00000364]

Это можно узнать только в отладке.

Ссылка на комментарий
Поделиться на другие сайты

Всё разобрался. Теперь осталось грамотно сделать фильтр на игрока.

В общем нашёл я цикл лечения частей тела, а сразу ниже цикла расположен некий call, в котором в ecx сохраняется [pPlayer+00000060]. И что это? Правильно, указатель на общее здоровье :) Общее здоровье также хранится в диапазоне от 0.0 до 1.0. Солдат умирает как только это здоровье становится >=1.0. Обычно в бою это здоровье уходит в единицу гораздно раньше здоровья частей тела. Но если вдруг части тела уйдут в единицу раньше, то и тогда солдат погибает. Замораживаем все 5 адресов на нуле и мы бессмертны :) К сожалению простая заморозка адресов в таблице не работает, нужна подмена кода. А значит придётся поломать голову над фильтром.

Сколько времени игру ломаем, а вроде бы и ничего сложного нет. И кстати на уровне сложности Ветеран общее здоровье разумеется есть, просто быстрее расходуется. Почему CyberMan так неполноценно взломал игру только для сложности Кадет, да притом пошёл каким-то неведомым кружным путём, который я так и не понял, для меня загадка.

Ссылка на комментарий
Поделиться на другие сайты

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

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

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