С разбегу - [ссылка]!
Во второй части я покажу, как делается взлом скорости ("быстро бегать") для замечательной аркады Crimsonland, попутно объясню значение пары новых ассемблерных команд, характерных только для данного типа взлома. А именно:
fld [eax] - загружает значение типа float (с плавающей точкой) в [математический сопроцессор] (он же FPU) для последующих операций над ним.
fstp [eax] - соответственно, выгружает результат обратно в регистр eax.
Как именно вся эта фигня работает нам знать не настолько важно. Нам будут встречаться конструкции вида:
fld [eax+1234]
fadd [edi] (то же, что и add)
fsub [esx] (то же, что и sub)
fstp [eax+1234]
Основная мысль заключается в том, что главный процессор не умеет работать с дробными числами (float), так что для этого существует процессор поменьше - сопроцессор, который умеет только это. Командой fld (float load) мы заставляем главный процессор скормить нужное нам число сопроцессору, дальше в нём происходят какие-то действия над числом (fadd, fsub и т.п.), после чего по команде fstp число грузится обратно в главный процессор. Очень похоже на code-injection, правда? :)
Наша задача - или вклиниться в действия над значением после его загрузки в сопроцессор (пример - на видео), или посмотреть, что происходит чуть раньше - скажем, какая разница в координатах прибавляется\убавляется, часто можно обнаружить некоторый множитель. Типа, идём шагом - координаты умножаются на единичку, бежим бегом - умножаются на пять (бежим впятеро быстрее, чем идём шагом). Механизм действий схож для большинства игр, т.к. практически все хранят координаты в типе float, но ньюансы встречаются - нет универсального решения.
Теорию про сопроцессор и сопутствующие ему команды я выложу тут.
Во второй части я покажу, как делается взлом скорости ("быстро бегать") для замечательной аркады Crimsonland, попутно объясню значение пары новых ассемблерных команд, характерных только для данного типа взлома. А именно:
fld [eax] - загружает значение типа float (с плавающей точкой) в [математический сопроцессор] (он же FPU) для последующих операций над ним.
fstp [eax] - соответственно, выгружает результат обратно в регистр eax.
Как именно вся эта фигня работает нам знать не настолько важно. Нам будут встречаться конструкции вида:
fld [eax+1234]
fadd [edi] (то же, что и add)
fsub [esx] (то же, что и sub)
fstp [eax+1234]
Основная мысль заключается в том, что главный процессор не умеет работать с дробными числами (float), так что для этого существует процессор поменьше - сопроцессор, который умеет только это. Командой fld (float load) мы заставляем главный процессор скормить нужное нам число сопроцессору, дальше в нём происходят какие-то действия над числом (fadd, fsub и т.п.), после чего по команде fstp число грузится обратно в главный процессор. Очень похоже на code-injection, правда? :)
Наша задача - или вклиниться в действия над значением после его загрузки в сопроцессор (пример - на видео), или посмотреть, что происходит чуть раньше - скажем, какая разница в координатах прибавляется\убавляется, часто можно обнаружить некоторый множитель. Типа, идём шагом - координаты умножаются на единичку, бежим бегом - умножаются на пять (бежим впятеро быстрее, чем идём шагом). Механизм действий схож для большинства игр, т.к. практически все хранят координаты в типе float, но ньюансы встречаются - нет универсального решения.
Теорию про сопроцессор и сопутствующие ему команды я выложу тут.
Keng а что если инструкция не f*** a просто mov *** И так несколько штук похожих
ОтветитьУдалитьЕсли до них не идёт fld - значит, тип значения не является float, так что делать можно как в случае с обычной инъекцией. Если же вот так:
ОтветитьУдалитьfld [12345]
mov **
mov **
sub **
fstp [12345]
То это работает примерно как "расшифровать из float в dec, произвести над dec какие-то действия (обычными командам), затем зашифровать обратно в float. Примерно вот так. :)
Если получаться не будет - скажи название игры, посмотрю как будет время.
А мне вот интересно как написать скрипт по указателю.Есть такая игра Ведьмак 2 там только по указателям, но даже с заморозкой адреса могут убить,но если поставить к примеру 999 значение жизни и заморозить то не смогут убить. Собственно хотел спросить а как или возможно ли написать скрипт, чтобы он изменял значение адреса на 999 и замораживал.Вот уже бьюсь над этой проблеммой четыре дня, извиняюсь если не в ту тему.
ОтветитьУдалитьВполне в ту тему, почему же. Тут есть некоторая разница, попробую объяснить:
ОтветитьУдалить"заморозка" значения адреса действует таким образом, что Cheat Engine раз в 100-500мсек переписывает его одним и тем же значением. Скажем, каждые 100мсек - 999, следующие 100мсек - опять 999 и так далее. Но это не значит, что не работает код игры, например - "нанести игроку N урона". Скажем, падает он в пропасть - отнимается 1000 и игрок погибает. А если тебя бьют какие-нибудь мобы, то код игры отнимает каждые, например, 2 секунды по 10 урона. При этом Cheat Engine каждые 100мсек записывает туда же 999. Таким образом, это происходит быстрее и кажется что тебя не убьют, но если игра отнимет урона больше 999 или будет отнимать быстрее чем каждые 100мсек (скорость заморозки Cheat Engine), то игрок всё равно погибнет.
Штука в том, что надо найти ту самую инструкцию "нанести игроку урон" и отключить её, заменив командами nop. Попробуй правой кнопкой на адресе здоровья - "What writes to this address", заставить игрока потерять какое-то количество хп - должна выскочить инструкция. Правой на ней - "Replace with code that does nothing". Может помочь.
Там такая проблемма, что любые операции с инструкцией приводят к краху игры.
ОтветитьУдалитьВ этом случае игра может быть защищена каким-нибудь протектором. Надо или кряк использовать или снимать его самостоятельно. Я эту тему пока не освещал, увы. :(
ОтветитьУдалитьА статьи про отключение xlive 3.5 не намечается ?.А то из-за неё трейнер как ни пытайся не сделаешь.
ОтветитьУдалитьЭто уже не совсем законно, так что под вопросом. Для начала все основы пройдём и научимся готовые трейнеры делать, а потом подумаю ещё раз.
ОтветитьУдалитьНет это вполне законно, если бы полностью отключать, то другое дело, а тут нужно или отключить или обойти код проверки хэша xlive и игрового.Ну насчёт трейнеров там даже новичёк сообразит, что нужно нажать, для того чтобы сделать трейнер.А вот xlive проблемма серьёзная.
ОтветитьУдалитьПо подавляющему большинству лицензионных соглашений разрешается только один раз снять копию с оригинального диска, вносить изменения в код игры - нельзя.
ОтветитьУдалитьВот у англичан к примеру в трейнерах есть функция отключения xlive их же не заботит лицензионное соглашение.А что по вашему трейнер делает ? Вносит изменение в код игры и если на одно изменение станет больше я думаю хуже не станет.
ОтветитьУдалитьИзначально они меняли только адреса в памяти, но тут вы всё-таки правы - меняет и код тоже. Думаю, рассмотрю варианты снятия защит и создания загрузчиков (встроенное отключение защиты в сам трейнер), но основная тематика блога - взлом игр и создание трейнеров, а не снятие тех или иных защит - это уже слегка другая область, но они во многом граничат. Особенно это касается современных игр, на которые вешают довольно навороченные защиты как игровых данных так и кода игры в целом - от копирования, например.
ОтветитьУдалитьВот статья про снятие защиты как раз имеет прямое отношение к созданию трейнера.Вот допустим есть несколько скриптов, но в игре стоит защита и игра вылетает примерно минут через 10 после активации скриптов.Отсюда уже есть вывод, что пока защиту не отключишь трейнер не сделаешь.А вообще в новых играх через раз стоит какая-нибудь навороченная защита, и это очень усложняет процесс создания трейнера, а иногда вообще шансов нет.Вообще как мне кажется взлом игр долже под собой подразумевать снятие античитерских защит.
ОтветитьУдалитьЗащиты эти делаются или на лицензионных дисках (защита от копирования, которая усложняет отвязку игры от диска и включает антиотладку, антидампер, шифрование и т.д.) и\или защиту игры по сети, добавляя к предыдущим MD5-проверку, разбитие дампа процесса на несколько частей, хранение некоторых данных на внешнем сервере и т.д. Есть защиты, которые в одиночку снять очень и очень сложно, тем более - без подготовки. Взлом игры подразумевает взлом игры, так что никто не мешает скачать игру с уже отвязанной защитой и ломать её. Нам по теме взлома и так ещё много чего осваивать, когда к защитам подберёмся - пока не знаю.
ОтветитьУдалитьНу вообще-то щас уже кряки к играм делают и все
ОтветитьУдалитьэти лицензионные защиты убираются.Единственное что остаётся так это xlive и антиотладка.Конечно и на эти защиты можно обойти и отключить, но бывают случаи когда не отключить и не обойти и этих случаев последнее время всё больше и больше.По-моему уже пора подбираться к защитам.
Тогда сначала покажу, как трейнеры писать (хотя бы в том же СЕ), а потом защиты покурочим.
ОтветитьУдалитьКогда будет след. урок высоко прыгать ?
ОтветитьУдалитьКенг когда будет следующий урок ?!)
ОтветитьУдалить