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

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

Games for Windows - LIVE это некая программа от мелкософта, которая позволяет играть в инете в игры разных стилей и накапливать "достижения".

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

В этой теме как раз и хочу получить ответ на решение данной проблемы: как отключить защиту данных от взлома этой дряни?

P.S. как то рассматривая таблицу СЕ для DOW2 я наткнулся на вот такую вещ:

xlive.dll+AB247:
ret 0c // Disable XLive

 

Значит автор таблицы таки нашёл способ вырубить проверку данных, но как это сделать для остальных подобных игр?

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

Как раз-таки найти значения можно. xlive запрещает модификацию кода. Но это можно обойти. Данный вопрос мы с Мастером как-то обсуждали по аське, и Мастер где-то находил решение данной проблемы. Решение состоит в том, чтобы запретить в xlive процедуру проверки целостности кода. Что и сделано в указанном тобой коде. Только один нюанс - в каждой новой версии xlive данная процедура переезжает на новое место, а это значит, что нужно каждый раз при запуске трейнера проверять положение этой процедуры. В данной время в процессе разработка универсального (работающего на всех версиях xlive) алгоритма снятия защиты целостности кода.

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

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

Эта штука помотала мои нервы в игре 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 ). Данный скрипт вызывает сразу или через некоторое время "мессагу исключения" при подключении отладчика или изменении памяти игры. Если мессагу не закрывать, то можно исследовать код и играть дальше.

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

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

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

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

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

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

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

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

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

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

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

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

Инструкция та же, что и для ачивера - в чит энгине выбрать inject dll и выбрать эту библиотеку, потом нажать на NO и по идее лайв должен не выстёбываццо.

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

Инструкция та же, что и для ачивера - в чит энгине выбрать inject dll и выбрать эту библиотеку, потом нажать на NO и по идее лайв должен не выстёбываццо.

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

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

На мой взгляд - алгоритм таков:

1. Находим в коде xlive процедуру, следящую за целостностью кода.

2. Делаем хук на эту процедуру.

3. В перехваченной процедуре ничего не делаем, а возвращаем библиотеке значение, сигнализирующее о том, что все в порядке.

4. Взламываем игру, как обычно.

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

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

3. В перехваченной процедуре ничего не делаем, а возвращаем библиотеке значение, сигнализирующее о том, что все в порядке.

Ты такой вывод сделал (предположил) прогнав xlive в IDA ? :)

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

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

  • 2 недели спустя...
  • 10 месяцев спустя...

Данный скрипт убивает проверку GFWL на целостность данных в процессе игры.

Внимание: Нужна версия СЕ не ниже 5.6 из-за комманды aobscan.

Скрытый текст

[ENABLE]
alloc(MyCode,1024)

aobscan(CRCCheck,8b ff 55 8b ec 83 ec 20 53 56 57 8d 45 e0)

label(_XLive)

registersymbol(_XLive)

CRCCheck:
_XLive:
 ret 000c

[DISABLE]

_XLive:
 db 8b,ff,55,8b,ec,83,ec,20,53,56,57,8d,45,e0

unregistersymbol(_XLive) 

 

Проверял на Chaos Rising - помогло.

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

  • 2 недели спустя...

Недавно вышла статья про обход Xlive - ссылка.

Например, там вы увидите следующее. Для того чтобы узнать какой код xlive проверяет сохранность кода игры, вы должны поставить "аппаратный бряк на доступ" на игровой код (подробности в статьи с видео) ;)

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

Недавно вышла статья про обход Xlive - ссылка.

А вот и перевод этой статьи (хотя зачем он нужен с видео, ну да лишним не будет)

Работа с Xlive и аналогичными защитами

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

Некоторые игры используют грязные методы для проверки изменений в игровом коде. Это значит, что если Вы попытаетесь вставить свой код, игра это обнаружит и зависнет. Всё больше игр используют такие защиты, в первую очередь это относится к играм с логотипом «Games for Windows Live». Эта короткая статья расскажет, как работать с такими системами защиты. Это не сложно, если Вы умеете обращаться с отладчиком и знаете как работают функции, но если Вы этого вдруг не знаете, настоятельно рекомендую Вам прочесть мои предыдущие статьи – основы шифрования, отладка, обратная трассировка и стек.

Хорошо, приступим. Будем исследовать BlazBlue: Calamity Trigger и Cheat Engine 6.0 ( http://www.cheatengine.org/ ) для читинга. Это несложная игра, которую легко можно запустить в окне, эту игру легко взломать, но при изменении игрового кода игра вылетит. Игра использует защиту Games for Windows Live (GFWL), т.е. используется библиотека xlive.dll, как и в любой другой защищённой этой защитой игрой. Вы можете попробовать применить статью для обхода GFWL в любой другой игре, видео внизу поможет Вам понять что я делаю, если Вы этого не поймёте по тексту.

Небольшая подготовка

Я сделал только один чит для игры, бесконечное здоровье. Здоровье – простое целое, его легко найти. Xlive не только обнаруживает изменение игрового кода, но также обнаруживает использование отладчика. К счастью, в CE 6 тоже есть опции настройки отладчика, которые помогут нам остаться незамеченными.

1. Если у вас 32-битная ОС, откройте опции CE, выберите Debugger и затем выберите "Use kernelmode debugger option". Также поставьте галочку "Use Global Debug routines". С такими настройками отладчика Xlive Вас не обнаружит и одной проблемой станет меньше.

2. Если же у Вас 64-битная ОС, используйте VEHdebugger. Это не такая мощная опция, как "kernelmode debugger" и иногда Xlive сможет Вас обнаружить и игра вылетит, но это не так страшно. Просто перезапустите игру и продолжите взлом.

Если Вы нашли адрес здоровья, найдите, какие инструкции обращаются к здоровью, и Вы найдёте код, который работает со здоровьем обоих игроков. У меня этот код был

00488410 - 8B 81 48080000 - mov eax,[ecx+00000848]

Здесь [ecx+28] это ID игрока, если [ecx+28]=0, значит игрок Player1. Если [ecx+28]=1, тогда игрок Player2. Теперь легко можно сделать чит для игры, просто проверьте, что[ecx+28] равен нулю, и измените здоровье. Чит готов, но при его включении игра рухнет максимум через пару минут, когда защита обнаружит изменение кода.

Существует одна вещь, которую я настоятельно рекомендую делать при исследовании кода. Откройте memory view, меню Tools, Dissect code и дайте CE проанализировать код. Обычно Вы будете использовать анализатор кода на самой игре, но сейчас Вы увидите, что наш враг скрывается в xlive.dll, а не в exe, поэтому нажмите на "Include system modules", выберите xlive.dll из списка и подождите завершения анализа. Когда анализ закончится, просто закройте окно.

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

Поиск злого глаза

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

00488410 - 8B 81 48080000 - mov eax,[ecx+00000848]

Теперь нужно поставить бряк на данные по адресу 00488410, чтобы посмотреть, кто обращается к этому адресу. Мы делали это уже тысячу раз со значениями здоровья и т.д., но теперь мы проверяем адрес игрового кода и смотрим кто к нему обращается. Возвращаемся в игру и ждём, когда сработает наш бряк. Теперь у нас есть код, читающий память, добавляем его в список кодов и сохраняем таблицу. Вы видите, что найденный код находится в xlive.dll, как я и говорил. У меня код был такой:

012EAF84 - 8B 0A - mov ecx,[edx]

На следующем видео, названном мною «Этот код читает память и проверяет игровой код», показан наш прогресс.

Время вернуться к бою

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

Условный переход через нашу функцию

Функцию чтения памяти

Что-то другое

Поставим бряк на коде, читающем память и запустим игру. Как только увидите, что xlive.dll прекратил свою работу, уберите бряк и запустите игру, нажав F9. Нам нужен список возвратов, который появится в нижнем правом углу CE, когда xlive прекратит работу. Если Вы этого до сих пор не сделали, самое время запустить анализатор кода (Dissect code), который я предлагал Вам запустить в самом начале этой статьи. Теперь займёмся обратной трассировкой, как это было описано в предыдущей статье, в которой я объяснял работу обратной трассировки и функций.

Как видите, CE проанализировал наш код и показывает направление вызовов и прыжков. Это очень полезно. Если Вы прокрутите код вверх, Вы ничего интересного не найдёте, зато найдёте код, каким-то образом влияющий на вызовы. Мы нашли начало функции, в которой находится злой глаз (в моём случае функция начинается по адресу 012EAF1C). Хорошо, теперь вернёмся назад на один шаг и проверим функцию, которая вызывает нашу функцию. Если Вы нажмёте на верхний адрес в списке возратов, Вы перепрыгните туда. Мы находимся в месте, откуда вызывается наша функция. Видите намёки на условный прыжок? Да, есть один, но мне он не нравится, продолжаем листать функцию вверх. Дошли до начала функции. Давайте посмотрим, откуда она вызывается. Выбираем второй адрес в списке точек возврата. Теперь что-то интересное, куча прыжков и ничего больше. Ради интереса, давайте проверим третий адрес в списке точек возврата. Вау, то что мы искали. Короткий условный переход через функцию. Сохраните адреса найденного call и условного перехода в списке кодов и сохраните таблицу. Теперь осталось запенить условный прыжок je на безусловный jmp и будем всегда перепрыгивать функцию проверки, не давая xlive прочитать память. Теперь активируйте Ваш чит и играйте так долго, как захотите.

Третья часть видео:

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

Мир!

Geri

Перевод на русский: Alias

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

  • 4 месяца спустя...

А вот как быть, если мне Xlive не даёт найти тот же адрес с патронами? И ещё вопрос. Это получается для каждой ф-ции в трейнере нужно будет отключать проверку целостности кода?

В своих походах я не встречался Xlive (Игрушка с такой защитой не попала мне) я так понимаю что Xlive следить и проверяет код и не дает допуск, даже приближаться к коду. думаю один раз заглушишь Xlive и все, ворота открыто для исследование и т.д. Жизнь,патроны и т.д

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

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

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

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