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

Xipho

Администраторы
  • Постов

    4 022
  • Зарегистрирован

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

    42

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

  1. Вниманию релизеров!

    С данного момента все трейнеры для публикации присылайте на admin@gamehacklab.ru.

    В письме трейнер (в rar архиве) делайте вложением, также делайте краткое описание трейнера (какое - думайте сами) и, по желанию, мини-скриншот трейнера (не больше 250 пикселей в ширину или в высоту).

  2. Внимание! В ближайшие дни переедем на новый более быстрый и удобный хостинг, на котором у нас будет доступно 5 гигабайт места. Сразу после переезда в работу также будет запущен сайт. Все желающие публиковать свои работы на сайте получат такую возможность. На время переезда форум будет остановлен. После остановки работа форума возобновится через 3-4 часа (все зависит от того, насколько быстро везде обновится информация об NS серверах).

  3. Получается такое элементарно. В свойствах проекта надо указать, что приложение Гуевое (Windows GUI), в противном случае проект компилится как Windows Console. А для консольного приложения автоматически создается консоль. Что, в принципе, вполне логично...

  4. В общем, есть новости по работе нашего ресурса:

    1. В течение месяца планируется переезд на новый хостинг с более выгодными условиями.

    2. Основой станет сайт, который целиком будет посвящен Cheat Engine RUS, надеюсь, MasterGH оценит ))

    3. Форум останется открытым для обсуждения, как и сейчас, но, вероятно, он будет перенесен на новый, гораздо более удобный, движок Invision Power Board (решается вопрос о приобретении лицензии на этот движок).

    4. Будет приобретен домен gamehacklab.ru. Если есть другие предложения по имени домена - рад выслушать.

    Пока это все новости на данный момент. Как будет еще что-то - отпишусь.

    ЗЫ. Те, кому это будет интересно - накидайте в фотошопе шаблон внешнего вида будущего сайта, а то я с работой совсем зашиваюсь, времени даже поспать толком нет ((

  5. В этом нет ничего сложного ) к трейнеру подключается модуль minifmod и в ресурсы, либо в секцию данных заталкивается непосредственно трек в формате XM (eXtended Module - трекерная музыка, появившаяся во времена ZX Spectrum). Я в своем двиге сначала тоже хотел сделать музыку, но потом передумал. Хотя, может быть я и вернусь к идее музыки в новой версии своего двига (точнее, уже не совсем своего, а совместного с MasterGH)

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

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

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

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

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

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

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

  8. Опкод (Operation Code) - часть инструкции, равная одному байту

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

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

    Пока все. Еще что-нибудь придет в голову - напишу.

    ЗЫ. Термины можно добавить в первый пост.

  9. Я не понял, зачем в приведенном выше коде используется несколько раз одна и та же процедура с единственным измененным параметром. Выигрыша в памяти в данном случае нет (а я так понял, что размер последнего параметра процедуры Poke призван снижать размер затрачиваемой памяти). Это раз. А во-вторых - с большинством современных игр этот трюк уже не прокатит, так как секции кода обычно имеют защиту от записи, и перед записью в них нужно менять защиту функцией VirtualProtectEx, затем делать запись и потом снова указанной функцией восстанавливать исходную защиту. Иначе будет вылет из игры.

  10. Флаги функции ChangeDisplaySettings


    dwflags
    Indicates how the graphics mode should be changed. This parameter can be one of the following values. Value Meaning
    0 The graphics mode for the current screen will be changed dynamically.
    CDS_FULLSCREEN The mode is temporary in nature.
    Windows NT/2000/XP: If you change to and from another desktop, this mode will not be reset.

    CDS_GLOBAL The settings will be saved in the global settings area so that they will affect all users on the machine. Otherwise, only the settings for the user are modified. This flag is only valid when specified with the CDS_UPDATEREGISTRY flag.
    CDS_NORESET The settings will be saved in the registry, but will not take affect. This flag is only valid when specified with the CDS_UPDATEREGISTRY flag.
    CDS_RESET The settings should be changed, even if the requested settings are the same as the current settings.
    CDS_SET_PRIMARY This device will become the primary device.
    CDS_TEST The system tests if the requested graphics mode could be set.
    CDS_UPDATEREGISTRY The graphics mode for the current screen will be changed dynamically and the graphics mode will be updated in the registry. The mode information is stored in the USER profile.
  11. Бессмертие только для игрока с использованием метода указателей

    Сложность: Новичок

    Инструменты: Artmoney, Tsearch.

    Итак, начнем. Запускаем игру, запоминаем количество жизней:

    ff67a9442b37.jpg

    Сворачиваем игру и запускаем Artmoney и выбираем игру из списка процессов.

    Продолжение статьи далее.

    Далее делаем поиск:

    4fc81c6efbce.jpg

    Почему именно так? Да потому, что жизни в вайсе хранятся в переменной с плавающей точкой.

    Далее делаем что-нибудь, чтобы потратить немного жизней, например падаем с крыши невысокого здания (чтобы не насмерть и чтобы жизней осталось на еще два-три таких падения)

    Далее делаем отсев с получившимися жизнями по принципу скриншота… то есть диапазон значений вычисляется так:

    нижний порог диапазона = текущие жизни-1

    верхний порог диапазона = текущие жизни+1

    Повторяем отсев до тех пор, пока не останется ОДИН адрес. Вот что получилось у меня в итоге:

    В игре:

    e559e2a9ed87.jpg

    А в Artmoney:

    a3484f88aec7.jpg

    Как видим, в игре у нас 66 процентов, а в АртМани 66.02 Это потому, что игра просто отбрасывает сотые доли и пишет в жизни тока целую часть. Наверное это сделано для затруднения взлома игры. Ну да нам это не помеха :P

    Запускаем TSearch:

    6ddef1d22c3a.jpg

    и открываем процесс игры. Надеюсь с этим вы справитесь без меня... Далее включаем отладчик:

    d0b2f6b5af14.jpg

    и открываем AutoHack window. Тоже надеюсь, что найдете где ;)

    В этом окне нажимаем зеленую стрелочку:

    203427a6052d.jpg

    Эта стрелочка позволяет установить breakpoint (точку останова) на адрес наших жизней:

    0195a1473bbe.jpg

    Это наш адрес жизней найденный в АртМани, вставляем его в окно установки breakpoint’a:

    d45d80192198.jpg

    Обратите внимание на тип breakpoint’a: он должен быть открытым, то есть срабатывать и на чтение из этого адреса и на запись.

    Далее мы возвращаемся в игру и бегаем пару секунд, но жизни НЕ тратим! Да, и в артмани их не замораживаем!

    После возврата в TSearch видим, что наше breakpoint сработал, и еще как сработал:

    728042d12a82.jpg

    Последний из найденных сразу же отсеиваем, так как это сравнение жизней, оно нам не нужно. А вот остальные придется перебирать вручную. Я этого делать не буду, дабы не затягивать туториал, и сразу покажу какой работает на моей версии игры, так как я ее уже ломал dry.gif

    Для начала найдем дырку в коде, для вставки нашей процедуры. Я использую для этой цели CodeCaver:

    ada177c28703.jpg

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

    Включаем в TSearch очень удобную фишку Easy Write:

    1f22596dfcc8.jpg

    Затем нажимаем new:

    ccef31a26e69.jpg

    Получаем такое окно:

    68e1018d0382.jpg

    В верхней части окна пишется код для патча адресов игры, а в нижней – для восттановления исходных значений, если вдруг вы решили поиграть честно ;)

    В верхней части набираем такой код:

    Сразу даю пояснения…


    fld dword ptr [ecx+0x354] – восстанавливаем оригинальную инструкцию
    mov dword ptr [ecx+0x354],0x4479C000 – записываем 999.00 в адрес жизней
    jmp 0x501979 возврат в игровую рутину

    Offset 0x501973 – инструкция по этому адресу читает жизни
    jmp 0x006E794F – делаем переход на свою процедуру
     nop – так как оригинальная инструкция всего 6 байт длиной а переход 5 байт длиной, то нам надо вставить это, для баланса байт, иначе получим вылет из игры.
    Offset 0x006E794F --- помните, я выбрал этот адрес для своей процедуры

    А в нижней вставляем это:


     fld dword ptr [ecx+0x354]
    Offset 0x501973

    То есть восстановление оригинального кода игры, для честной игры. Включив эту опцию, возвращаемся в игру. Мы стали бессмертными :)

    Но что это? Все прохожие и менты тоже стали бессмертными. :angry: Вот тут и начинается основная часть нашего взлома. Выключаем бессмертие. В окне AutoHack выбираем вкладку Дизассемблера.

    7cce06aaaa7c.jpg

    Затем делаем все четко по скриншотам:

    0a9614b79a92.jpg

    Этим мы заставим TSearch смотреть, что же происходит в регистрах при выполнении данной инструкции. Далее кликаем на Register:

    064efc8a6c3b.jpg

    И видим такое окно:

    a16dff246068.jpg

    Проставляем регистры как на скриншоте и включаем наблюдение (красная рожица слева). Возвращаемся в игру. В игре НИ В КОЕМ СЛУЧАЕ НЕ ВСТУПАЕМ НИ В КАКИЕ РАЗБОРКИ И НЕ ТРАТИМ ЖИЗНИ!!! Бегаем пару сек и снова возвращаемся в это окно. Вот и нашли значение для поиска указателя (если вы помните, это и есть цель этого тутора):

    846e9c598a5b.jpg

    Далее переводим его в десятичную систему (калькулятором все пользоваться умеют? :) ). И ищем как обычное число в артмани… А можно сразу искать его в шестнадцатиричном. Вот так:

    7aca70bca72f.jpg

    то есть мы вводим в строку поиска шестнадцатиричное значение, и просто напросто подставляем в конце h чтобы дать АртМани понять, что это шестнадцатиричное значение. Скорее всего адресов найдется много. Выходим из игры, АртМани и TSearch не закрываем! Снова заходим в игру и идем в TSearch. Снова выбираем процесс,  Включаем отладчик в TSearch’e  и переходим в окно Автохака. Оно должно было оставаться открытым. Выключаем наблюдение, снова включаем, переходим в игру, бегаем пару секунд и снова возвращаемся в Автохак

    7256d26f5734.jpg

    Видим, что регистр изменился… Делаем отсев по этому значению в АртМани… Повторяем заново, до тех пор, пока не останется только один адрес… Если же после 5-6 отсеиваний адресов все равно несколько, то берем любой :P

    Я взял адрес 0078F7E4 он мне больше всего понравился:

    8425be87f884.jpg

    Вот практически и все! Дорабатываем наш код:

    (Объясняю только то, что изменилось)


        fld dword ptr [ecx+0x354]
        push eax – сохраняю регистр на всякий случай <img src="http://forum.gamehacklab.ru/public/style_emoticons/default/smile.gif" class="bbc_emoticon" alt=":)">

        mov eax,[0x0078F7E4] – считываю из нашего указателя адрес для сравнения
        cmp ecx,eax – сравниваю с текущим указателем
        pop eax – восстанавливаю регистр (а вдруг он используется)
        jne 0x501979 – если указатели не равны, то возвращаюсь без записи
        mov dword ptr [ecx+0x354],0x4479C000 – записываю жизни
        jmp 0x501979 возвращаюсь в игру.
      
      А это все без изменений

    Offset 0x501973
        jmp 0x006E794F
        nop
    Offset 0x006E794F

    Вот и все!!! Теперь бессмертны только мы!!! 

    Заключение

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

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

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

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