Форум Эму-Россия http://forum.emu-russia.net/ |
|
Sega дебаггер-альтернатива http://forum.emu-russia.net/viewtopic.php?f=106&t=33 |
Страница 1 из 1 |
Автор: | GManiac [ 27 июл 2007, 01:00 ] |
Заголовок сообщения: | Sega дебаггер-альтернатива |
Originally posted by Яковлев Виктор at forum.romov.net 14.06.2005 04:38 Все хоте ли бы иметь сеговский эмулятор с возможностью устанавливать бряки на чтение из памяти и запись в память. Но такого эмулятора нет!Пока! Тем не менее я придумал довольно не стандартный метод всетаки добраться до команды чтения и записи в эмуляторе! Для этого нам понадобится дебаггер OllyDbg, эмулятор Gens+ 0.39(подойдет только он), игра для примера- Sparkster!Для начала поиграйте в игру и найдите адрес текущей жизни в озу эмулятора с помощью например другого эмулятора(например Gens 2.11 mk2) и адрес озу винды но только для эмулятора Gens+ 0.39!У меня получилдось что жизнь храниться в озу эмулятора по адресу FFD2A3, а в озу винды по адресу 6C35E2! Теперь грузим эмулятор в дебаггере OllyDbg жмем кнопку Run в дебаггере и эмулятор запустится!Загрузите игру в эмуляторе!Дойдите до того места где есть опасность что герой потеряет жизнь!Нажмите остановить эмуляцию ESC-ом!Теперь поставьте в дебаггере бряк на запись в память 6C35E2!Перейдите опять в эмуль и жмите Enter(запускать игру по кадру)!Не забывайте сохраняться после каждого пропущенного кадра!Нужно сохраниться обязательно до того момента, когда после пропуска одного кадра сработает бряк!Ага сохранились!Жмете Enter и срабатывает бряк!Отлично!Жмем опять Run в дебаггере, чтобы эмулятор опять работал после срабатывания бряка!Жмем в эмуле загрузить сохранение!Опять сработает бряк в дебаггере!Не обращаем на него внимания, т.к. грузятся старое значение!Жмем опять Run! Теперь переходим в дебаггер эмулятора!Жмем кнопку T для выполнения 1 команды игры!После 10 команд сохраняемся!Ага сохранились и после скажем 6-7 каманд(к примеру) сработал бряк в дебаггере!Отлично!Запускаем опять дальше эмуль кнопкой Run дебаггере!И грузим старое сохранение в эмуле, минуем срабатывание бряка кнопкой Run!И выполняем скажем 4 команды в эмуле кнопкой T!И видим в дебаггере следующий код: 41С4 sub.w $0026(A0),D0 //уменьшение жизни на 1 41С8 move.w D0, $0022(A0) //сохранение нового значения жизни в памяти т.д. (прим.Непривычно что команды для сега читаются слева - направо, а не стандартно как во всех справо налево) Таким образом нашли со 100% вероятностью то место где должен был бы сработать бряк на запись в память в эмуле, если он был бы! Две эти команды соответствуют 9068 0026 3140 0022 по hex-су!Нужно поменяем команду sub.w $0026(A0),D0 на две холостые NOP ее Hex код 4E71!Эти команды находятся потому же адресу в роме!Меняем 9068 0026 на 4E71 4Е71!Сохраняем в роме!Грузим игру в эмуле и вуаля!Жизнь больше не уменьшается! Два часа используя этот метод для взлома игр Сега, я столкнулся с гемороем!Сохраняться после 10 команд это не дело!А если должно выполниться 1000 каманд до того момента когда сработает бряк!Я подумал, а что если просто зажать Т и ждать когда сработает бряк!Но я боялся, что есть задержки между записью в озу эмуля и в озу винды, но я ошибся!Задержек нет и бряк сработает как раз в тот момент когда дебаггер эмуля перейдет к следующей команде после команды записи в память!Т.е. для игры Sparkster дебаггер встанет на команде move.w D0, $0022(A0), т.е. следующей после команды sub.w $0026(A0),D0. Таким образом, перейдя в дебаггер эмуля просто зажмите Т и ждите срабатывания бряка!И вы очутитесь как раз в том месте плюс 1 команда где осуществляется запись в память озу эмуля! Примечание: 1)В эмулу лучше сохраняться опцией "сохраниться как"!Просто сохраниться у меня не получается!Возможно это только у меня! 2)Вместо дебаггера OllyDbg подойдет дебаггер SoftIce, но его устанавливать сложнее! Кто не нашел ссылки на OllyDbg то вот: http://clabz.com/new/ollydbg110xp.rar 3)Для того чтобы поставить бряк на запись в озу в OllyDbg, нужно курсор мыши подвести в левое нижнее окно и в ячейке 6C35E2 щелкнуть правой кнопкой мыши и выбрать Breakpoint -> Memory, on write! 4)Не которые захотят убыстрить процесс, зайдя в дебаггер сега после срабатывания бряка в дебаггере!Не получится!Потому что после запуска эмуля после срабатывания бряка эмуль обработает до конца 1кадр!Поэтому вы проскочите тот момент когда жизнь меняет свое значение на другое(проскочите команду записи в память озу)! 5)!!!!!!!!Самое главное забыл!!!!!!!!!!:нужно эмулятор распаковать, т.к. он запакован EXE-паковщиком ASPACK 2.12!Для распаковки используйте программу Aspackdia 1.4!После распаковки эмуль вырастит в размере до 20 Мб!Без распаковки дебаггер не даст ставить бряки! |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |