MasterGH Опубликовано 1 декабря, 2010 Поделиться Опубликовано 1 декабря, 2010 Если вы что-то будите писать, то можете писать про любые другие платформы, эмуляторы и отладчике.В этом постей 2 части по созданию читов в игре M4K.Игра: M4K.Дебагер: fceux-2.1.4a-win32Исходник этого эмулятора и различная документация:fceu2.1.4a.rarСайт этого отладчка:ссылкаЧасть1.Отключение таймера с помощью отладки.Сразу скажу, что я не нашёл хорошего способа в Artmoney, в потому что в ней жёстко привязывается "название эмулятора - адрес в эмуляторе". Мне это не понравилось.Сразу покажу к чему мы придём. С помощью этой галочки мы с можем отключать и включать таймер теоритически на любом эмуляторе. Здесь русифицированная версия Cheat Engine, но на оригинальной версии скрипты тоже должны работать.Ну а теперь, о том как это было сделано.1. Обзор команд микропроцессора 6502 Этот микропроцессор используется под игры платформы NES. В интернете можно быстронайти документацию по ним. В общем сразу ищем инструкции нопа, уменьшения,увеличения. Пока этого достаточно для простых читов.NOP NoOperationDEC Decrement Memory by One DEX Decrement Index X by OneDEY Decrement Index Y by OneINC Increment Memory by OneINX Increment Index X by OneINY Increment Index Y by OneИ другие команды в большой документации для продвинутого создателя читов: 6502.rar. Можете скачать у нас, а можно взять отсюда.Не очень плохой дебагер: fceux-2.1.4a-win32Как видим тут свои инструкции ассемблера, не тек к которым мы привыкли.2. Часть. Простой нопинг.Самый простой способ не выполнять какое-то действие это занопить инструкции работающие с адресами параметров на которые хотим повлиять. Подопытным кроликом будет M4K, т.е. не пользователь M4K, а игрушка +)Рис.1Таймер, который равен 96 секундам и постоянно уменьшаетсяэто замечательная возможность продемонстрировать как его остановить используяотладчик.Для начала найдём адрес таймера.Поставим игру на паузу.Заходим сюда в RAM SearchРис.2Первый поиск.Рис.3Снимаем паузу с игры и вновь ставим, на экране 94 секунды.Второй поиск:Рис.4Как видим, осталось 4 результата. Каждый адрес последовательно выделяем и нажимаем кнопку Add Cheat, чтобы найти из них рабочий путём заморозки. Закрываем этоокно. Идём в другое.Рис.5Откроется окноРис.6Там где звёздочки, там идёт заморозка адреса значением в HEX виде.Вновь снимем паузу с игры и увидим, что таймер не меняется. Наша задача узнать все ли адреса рабочие для заморозки. Для этого мы должны снимать звёздочки и проверять, не работает ли таймер.Рис.7Оказалось , что заморозка значения актуальна только для первого адреса. Все остальные адреса хранят значение указанное по первому адресу. Итак, мы нашли рабочий адрес значения таймера! Теперь начинается самое интересное. Нам нужно выйти на инструкцию, которая записывает значение этого таймера по рабочему адресу.Сделаем это следующим образом.Кликнем правой кнопкой мышки по первому адресу, чтобыперейти в hex редактор, а уже из него быстро попадём куда надо.Рис.8Ещё не забудьте снять заморозку (я забыл снять заморозку на рис.6) Перешли сюда, смотримРис.9Опять кликнем, чтобы вызвать меню и установить брейкпоинт на запись. На запись потому , мы хотим найти инструкцию которая записывает истереть её.Рис.10У вас появиться большое окно отладчика.Рис.11Снимаем паузу с игры и тут же прерываемся на знакомойинструкции вычитания.Рис.12Выделите и удалите брейкпоинт (хотя без разницы, т.к. выможете его оставить)Кликнем левой кнопкой мышки на место указанное стрелкой на рисунке 12.Появится интересное окноРис.13Инструкция DEC состоит из 2 байтов, NOP - из одного. Значит нужно два NOP-а. Сколько байткакая инструкция занимает смотрите в документации или можете не смотреть, а узнать об этом прямо в этом окне на рис.13 Напишем nop и нажмем клавишу Enter. И ещё раз. Вот что вышло.Рис.14Рис.15На рис. 15 байты в главном окне ещё не перерисовались. Итак мы видим, что мы запишем два нопа, тудагде надо и не нарушим логику кода.Сохраним (Save)для возможной отмены.Нажмём Applay (обновить/подтвердить)Увидим следующие изменения.Рис.16Ага, значит мы стерли команду нопами. Закрываем окно нарис. 16 И видим изменение в коде.Рис.17Теперь нажмем на кнопку RUN и снимаем паузу.И видим, что таймер теперь застыл на 93 секундах.Рис.18Отлично, работает!Переходим к автоматизации активации и деактивации чита записью nop-ов и восстановлением оригинального кода07: C284:C6 B2 - таймер включен07: C284:EA EA - таймер выключенЕсть множество инструментов, которыми можно это сделать: CE, MHS и в конце концов своим трейнером. В Artmoney есть ручной поиск сигнатуры, его можно использовать для нахождения адреса, а затем записывать в него пару нопов или восстанавливать предыдущее значение. Но Artmoney меня не устроила темчто там надо делать многое вручную. Идеальный вариант писать свою программу, ноэто долго и поэтому я решил сделать всё на Cheat Engine.Итак, скопируем кусок сигнатуры в блокнот (шрифт Courier New, чтобы соблюдалась табуляция):07:C286:A5 B2 LDA $00B2 = #$5D07:C288:85 07 STA $0007 = #$0007:C28A:A9 00 LDA #$0007:C28C:85 08 STA $0008 = #$0007:C28E:85 09 STA $0009 = #$0007:C290:85 0D STA $000D = #$0007:C292:20 BA D2 JSR $D2BA07:C295:AD 74 06 LDA $0674 = #$0907:C298:69 40 ADC #$4007:C29A:8D 3E 06 STA $063E = #$4A07:C29D:AD 73 06 LDA $0673 = #$0307:C2A0:69 41 ADC #$4107:C2A2:8D 3F 06 STA $063F = #$4407:C2A5:60 RTS07:C284:C6 B2 DEC $00B2 = #$5DСигнатура представляет из себя байты кода: C6 B2 A5 B2 85 07 A9 00 85 08 85 09 85 0D 20 BA D2 Здесь не все байты кода, но если нужно, т.е. если чти работать не будет, то возьмите другие байты.Пишем скрипт для CE:Игра NES: M4K (любой эмулятор)Чит-код: Остановка таймераДата: 12.3.2010Автор скрипта: MasterGHВерсия CE: Cheat Engine 5.6 RUS (v 2.0) }[ENABLE] aobscan(_faddress,C6B2A5B28507A90085088509850D20BAD2)_faddress:db EA EA[DISABLE] aobscan(_faddress,EAEAA5B28507A90085088509850D20BAD2)_faddress:db C6 B2{Запускаем Cheat Engine.В процессах подключаем эмулятор.Идём в автоассемблер, вставляем этот скрипт и связываем с основной таблицей.Переименовываем чит в «Остановка таймера»Рис.19Теперь очень удобно нажимать галочку для активации идеактивации таймера.Минусы, у этого метода следующие вручную придётсявыбирать процесс и вручную выбирать таблицу с читами. И ещё один минус вам нужно настроить поиск в настройках - сканировать память типа MEM_MAPPED.Рис.20Если вы теперь решите использовать CE для сканирования памяти Windows-игр, то Вам придется отключать эту настройку вручную, т.к. сканирование замедляется с этой настройкой.На этом пока всё. Часть2 . Продолжение.... Точнее это черновик. К сожалению чит не доделан из-за не удобного отладчика в эмуляторе (пока нет времени времени доделать чит)Черновик приводить в нормальный вид некогда. Просто вот скрипт CE на постоянное здоровье в игре M4Kaobscan(addres1,F6 B8 A9 20 8d 06 20 b5 b8 38 e9 01 4a 4a 4a)aobscan(addres2,02 04 00 02 04 00 02 04 00 02 04 00 02 04 00 02 04)addres1:db 4c 0b cb eaaddres2:db F6 B8 8D 16 CB A9 00 85 B8 AD 16 CB 4C FB C1 02 04[DISABLE]aobscan(addres1, 4c 0b cb ea 8d 06 20 b5 b8 38 e9 01 4a 4a 4a)aobscan(addres2, F6 B8 8D 16 CB A9 00 85 B8 AD 16 CB 4C FB C1 02 04)addres1:db F6 B8 A9 20addres2:db 02 04 00 02 04 00 02 04 00 02 04 00 02 04 00 02 04[ENABLE] Ссылка на комментарий Поделиться на другие сайты Поделиться
M4K Опубликовано 1 декабря, 2010 Поделиться Опубликовано 1 декабря, 2010 О, круто! Если что, последние SVN ревизии здесь: http://www.emucr.com/search/label/Fceux Ссылка на комментарий Поделиться на другие сайты Поделиться
M4K Опубликовано 3 декабря, 2010 Поделиться Опубликовано 3 декабря, 2010 Круто. Надо будет попробовать - я не читил в эмуляторах средствами дебага)Upd.: А зачем Signed для таймера? Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 3 декабря, 2010 Автор Поделиться Опубликовано 3 декабря, 2010 Это я случайно поставил или не обратил внимание ) Ссылка на комментарий Поделиться на другие сайты Поделиться
M4K Опубликовано 9 декабря, 2010 Поделиться Опубликовано 9 декабря, 2010 Вот здесь тоже используется дебаг в FCEUX: http://www.gshi.org/vb/threads/4499-Jump-in-Midair-Tutorial?p=39872#post39872 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 10 декабря, 2010 Автор Поделиться Опубликовано 10 декабря, 2010 Спасибо, ссылку я посмотрел. Это статья для начинающих.M4K, если будет время и желание скачай игру по статье и проверь новый скрипт на CE на постоянное здоровье для первого игрока на разных эмуляторах - хотя бы на трёх, чтобы можно было убедиться, что этот скрипт работает независимо от эмулятора.[ENABLE]aobscan(addres1,F6 B8 A9 20 8d 06 20 b5 b8 38 e9 01 4a 4a 4a)aobscan(addres2,02 04 00 02 04 00 02 04 00 02 04 00 02 04 00 02 04)addres1:db 4c 0b cb eaaddres2:db F6 B8 8D 16 CB A9 00 85 B8 AD 16 CB 4C FB C1 02 04[DISABLE]aobscan(addres1, 4c 0b cb ea 8d 06 20 b5 b8 38 e9 01 4a 4a 4a)aobscan(addres2, F6 B8 8D 16 CB A9 00 85 B8 AD 16 CB 4C FB C1 02 04)addres1:db F6 B8 A9 20addres2:db 02 04 00 02 04 00 02 04 00 02 04 00 02 04 00 02 04Раньше я писал аналогичный скрипт сохраняя регистр А в стек, а стек оказался действительно полным и поэтому в него нельзя было просто так сохранить временные данные. Вместо сохранения в стек я использовал адрес в codecave находящийся ниже тела инъекции нового условия.... Здоровье первого героя не будет уменьшаться, здоровье второго героя будет уменьшаться, но этого не будет видно. Если бить по врагу, то в конце-концов он быстро умрёт. Пока я не понял почему здоровья врага видимо не уменьшается, скорее из-за меняющихся флагов в регистре флагов.Я сделал для себя вывод, что по началу привыкнуть к ассемблеру под "этот" процессор сложно, нужно упорство. А потом всё легче и легче и уже что-то делаешь на автомате: ищешь адрес, ставишь бряки, ищешь codecave, пишешь условие на ассемблере, прыжок на кодкейв, прыжок обратно, копируешь байты, проверяешь сигнатуры, пишешь скрипт на CE и чит для рома готов и он теоретически не зависит от типа эмулятора. В CE при запуске скрипта нужно поставить настройки памяти, как это было указано в первом посте.Пока в этой теме от меня никакой информации больше не будет Кому интересно, могут повторить что я делал и задать вопросы, пока я помню, что и как я делал. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения