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

Взлом Игр Dendy, Nes И Nintendo При Помощи Эмулятора Fceux V2.2.2


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

В общем я решил по настроению сделать пошаговую инструкцию для новичков по взлому игр Dendy, NES и Nintendo. И так приступим...  :sleep:

 

1: Скачиваем с интернета эмулятор FCEUX v2.2.2
2: Запускаем эмулятор и открываем с помощью него игру, например - Contra (U) [!].nes.
3: Начинаем играть в игру и видим две жизни у нашего героя.
4: В меню эмуляторе нажимаем на Tools > Cheats, появится окно поиска адресов.
5: В этом окне жмём на кнопку Reset, справа появится адреса и их значения.
6: Далее вводим значение 02 где 0x 00 и жмём на кнопку Known Value.
7: Переходим обратно в игру и теряем одну жизнь и опять переходим в окно Cheats Search.
8: Вводим значение 01, где 0x 02 и жмём опять на кнопку Known Value.
8: Так проделываем пока не будет один адрес: 0032 это и есть адрес наших жизней.
9: Далее в меню эмулятора нажмите на DebugDegugger появится большое окно отладчика.
10: Справа с верху есть три кнопки две из-них не активны и одна кнопка с названием Add нажмите на неё.
11: Появится окно Add BreakPoint, вводим в поле где адрес, наш адрес жизней 0032 - 0032 и ставим галочку где Write и жмём ОК.
12: Переходим обратно в игру и теряем ещё одну жизнь, сразу должен сработать бряк в отладчике и он покажет в самом верху слева нашу инструкцию уменьшения жизней 07:DA03:D6 32    DEC $32,X @ $0032 = #$02
13: Подводим к этой инструкции курсор мышки, в самом низу отладчика будет отображаться информация.
Информация: CPU Address 07:DA03, Offset 0x01DA13 in file "Contra (U) [!].nes" (NL file: 7)
14: Далее в меню эмулятора нажмите на Debug > Game Genie Decoder/Encoder появится окно создания кодов.
15: Вводим в поле Address - DA03, в поле Compare вводим значение в НЕХ'е D6, а где Value вводим значение НЕХ'е 60, справа верху появится наш Game Genie код ATEIUZVI.
 
Вот мы и сделали свой Game Genie код на вечные жизни.
 
Пояснение:
DA03 - Это адрес где сработал наш бряк на уменьшение жизней.
D6 - Это первый байт нашей инструкции (07:DA03:D6 32    DEC $32,X @ $0032 = #$02).
60 - Это байт инструкции RTS, которая затирает наш оригинальный байт D6, что бы жизни в игре не уменьшались.
 
 
Как вшить этот чит-код в игру на вечные жизни, что бы больше не париться для его ввода?  ;)
 
1: Скачиваем с интернета программу WinHEX желательно русскую, не забудьте ввести ключ продукта для активации, а лучше скачивайте крякнутую или портейбл версию, ну или любой другой НЕХ-Редактор.
2: Запускаем программу WinHEX и перетаскиваем в неё туда файл игры Contra (U) [!].nes.
3: Появится много чисел и букв, это называется НЕХ-Кодами.
4: Далее в меню программы жмём Навигация > Перейти к смещению, появится окно.
5: Вводим в поле наше смещение 01DA13 и жмём ОК (Это смещение выдал наш отладчик в информации или где мы создавали Game Genie код, там он тоже отображался пока игра была запущена).
6: И мы сразу перейдём на наше смещение и увидим знакомый нам код инструкции D6 32.
7: Заменяем D6 на 60 и жмём в программе WinHEX сохранить, то есть жмём на дискетку с изображением верхнем в левом углу программы.
Вот и всё, закрываем программу WinHEX, запускаем эмулятор с игрой и наслаждаемся.  8-)

 

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

  • Ответов 122
  • Создана
  • Последний ответ

Топ авторов темы

 

В общем я решил по настроению сделать пошаговую инструкцию для новичков по взлому игр Dendy, NES и Nintendo. И так приступим...  :sleep:

1: Скачиваем с интернета эмулятор FCEUX v2.2.2

 

Осталось научиться писать трейнеры в нём же (на Lua с iup)

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

Итак, Adventure Island, первая часть. так и не прошёл в детстве, хоть сейчас отыграюсь)))

Проходим до конца уровня и сохраняемся. Открываем RAM Search и ищем единичку(первый уровень). Проходим на 2-й и ищем двойку. Нету. Хм. Попробуем на 1-м уровне поискать ноль, а на втором единицу. Находится десяток адресов, но интересный первый 0038. Ставим в Debugger'e бряк на запись по этому адресу, вываливаемся по адресу 815B:

00:815B:E6 38     INC $0038 = #$00  

это увеличение номера round'а. Запомнили место, пригодится если надо будет прыгнуть на следующий уровень.

Идем ниже по коду. В 0037 номер area, запомнили. Идём дальше. Вот он прыжок на начало уровня:

00:816F:4C 9A 80  JMP $809A

Теперь можно писать скрипт.

 

Напишем функцию обратного вызова для нажатия на кнопку перехода:

cheats = { --название таблицы с функциями обратного вызова, пока только одна функция пусть будет "toLevel"									["toLevel"] = function(...) --в функцию передаются некоторые параметры					local val, area, round = {...}, nil, nil --пишем их в таблицу val, а также заведём локальные переменные area и round					area, round = tonumber(val[1]), tonumber(val[2]) --переписываем параметры в соответствующие переменные                                        ----------------------------------                                        --если переход запускается из меню                                        memory.writebyte(0x003F, 3) --устанавливаем кол-во жизней                                        memory.writebyte(0x0076, 10) --сытость                                        memory.writebyte(0x0528, 10) --сытость                                        memory.writebyte(0x0077, 0xFF) --сытость                                        ---------------------------------					if (area == 0) or (round == 0) then --если любой аргумент равен 0 будем прыгать на след. уровень						memory.setregister("pc", 0x815B) --прыгаем на место увеличения round, дальше игра сама разберётся						print("Jumped to next level") --печатаем в консоль					else --если переход на конкретный уровень						memory.writebyte(0x0037, area-1) --записываем в area и round значения						memory.writebyte(0x0038, round-1) --на 1 меньшие						memory.setregister("pc", 0x809A) -- и прыгаем на начало уровня						print("Jumped to area "..area..", round "..round) --печатаем для отладки					end 				end}

Теперь напишем интерфейс и зададим функцию обратного вызова для кнопки:

function winDraw()	-- переход на уровень	levelSpinArea = iup.text{ --спиннер для area 						spinmin = 0, --ограничиваем значения					spinmax = 8, --от 0 до 8					spin = "YES", 					readonly = "YES" --только чтение(от шаловливых ручек)				}	levelSpinRound = iup.text{--спиннер для round					spinmin = 0,					spinmax = 4, 					spin = "YES", 					readonly = "YES"				}		levelButton = iup.button{					title = "GO", --надпись на кнопке					action = function(self) --функция обработки для кнопки, передаём два параметра								cheats["toLevel"](levelSpinArea.spinvalue, levelSpinRound.spinvalue)							end				}					levelLabel = iup.label{ --надпись с пояснением как пользоваться					title = "if (area or round) = 0 then jump to next level"				}		level = iup.frame{ --пространство обведённое рамочкой				title = "To area(1-8)        round(1-4)",				iup.vbox{ --вертикальный контейнер для элементов					iup.hbox{ --внутри горизонтальный контейнер для элементов						levelSpinArea, --пихаем спиннер для area						levelSpinRound, --пихаем спиннер для round						levelButton --кнопку					},					levelLabel --ну и надпись ниже				},				size = "85X20" --размер фрейма			}		dialogs = dialogs + 1 --увеличиваем на 1 диалог для обработки	handles[dialogs] = iup.dialog{ --и создаём его		title="Adventure Island Trainer +1 by A1t0r", --заголовок окна		resize = "NO", --без ресайза		size = "220X50", --размер окна		iup.hbox{			iup.vbox{				level --и вставляем наш level jump			}		}	}		handles[dialogs]:show() --показываем окноendwinDraw() --выполнить функцию вышеwhile (true) do 	FCEU.frameadvance() --нарисовать кадр игрыend

Теперь скрипт полностью. Когда напишу (если напишу) полный трейнер, выложу в Файлы. Или drs36 напишет для практики)

--[[Адреса игровых значений:0x0037 - area0x0038 - roundИнтересные места в коде игры:0x815B - увеличение уровня на 10x809A - начало уровня]]--require("auxlib")--таблица обратных вызовов(callback)cheats = {["toLevel"] = function(...)local val, area, round = {...}, nil, nilarea, round = tonumber(val[1]), tonumber(val[2])memory.writebyte(0x003F, 3)memory.writebyte(0x0076, 10)memory.writebyte(0x0528, 10)memory.writebyte(0x0077, 0xFF)if (area == 0) or (round == 0) thenmemory.setregister("pc", 0x815B)print("Jumped to next level")elsememory.writebyte(0x0037, area-1)memory.writebyte(0x0038, round-1)memory.setregister("pc", 0x809A)print("Jumped to area "..area..", round "..round)endend}function winDraw()--ПОДГОТОВКА ЭЛЕМЕНТОВ ИНТЕРФЕЙСА И ЛОГИКИ-------------------------------------------- переход на уровеньlevelSpinArea = iup.text{spinmin = 0,spinmax = 8,spin = "YES",readonly = "YES"}levelSpinRound = iup.text{spinmin = 0,spinmax = 4,spin = "YES",readonly = "YES"}levelButton = iup.button{title = "GO",action = function(self)cheats["toLevel"](levelSpinArea.spinvalue, levelSpinRound.spinvalue)end}levelLabel = iup.label{title = "if (area or round) = 0 then jump to next level"}level = iup.frame{title = "To area(1-8) round(1-4)",iup.vbox{iup.hbox{levelSpinArea,levelSpinRound,levelButton},levelLabel},size = "85X20"}dialogs = dialogs + 1handles[dialogs] = iup.dialog{title="Adventure Island Trainer +1 by A1t0r",resize = "NO",size = "220X50",iup.hbox{iup.vbox{level}}}handles[dialogs]:show()endwinDraw()while (true) doFCEU.frameadvance()end
  • Плюс 4
Ссылка на комментарий
Поделиться на другие сайты

С уровнями разобрался(кодами),но когда начинаю уровень и заканчиваю его опять он по новой начинается ?

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

С уровнями разобрался(кодами),но когда начинаю уровень и заканчиваю его опять он по новой начинается ?

 

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

 

Обнаружил другой баг, сейчас исправим.

 

Поправил скрипт на случай перехода на др. уровень из меню.

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

Итак, Adventure Island, первая часть. так и не прошёл в детстве, хоть сейчас отыграюсь)))

Проходим до конца уровня и сохраняемся. Открываем RAM Search и ищем единичку(первый уровень). Проходим на 2-й и ищем двойку. Нету. Хм. Попробуем на 1-м уровне поискать ноль, а на втором единицу. Находится десяток адресов, но интересный первый 0038. Ставим в Debugger'e бряк на запись по этому адресу, вываливаемся по адресу 815B:

Мне скрипт не нужен я нашел код нужного мне уровня прописал его в cheats но запускается 1-й уровень ?

Изменено пользователем Xipho
Не нужно цитировать большие сообщения целиком.
Ссылка на комментарий
Поделиться на другие сайты

Адрес хоть правильный нашёл?

Пробовал изменить его значение на 2 + заморозить и перезапустить игру...

 

Адрес-то правильный, просто чит замораживает значение по адресу.

 

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

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

Щас попробую скачать эту игрушку и взломать на уровни.  :sleep:

Я разобрался в коды надо вводить номер зоны,а номер уровня не  надо.

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

Бл......Это же марио китайский! Помню его на приставке денди - макинтош ещё играл.

Ностальгия! Так я её и не прошёл, где то завис на каком то уровне.

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

Взломал я эту игру Hudson's Adventure Island:closeyes:

Читы я вшил в игру на:

Бессмертие.

Вечные жизни.

Вечное время.

Не терять время при ударе об булыжник.

Не терять оружие. 

Начать игру с максимальным оружием и скейтбордом.

Начать игру с 9-жизнями.

Ангел улетает, но эффект остаётся.

Скачать взломанную игру Hudson's Adventure Island.

 

Если кому надо, я так-же русифицировал эмулятор FCEUX v2.2.2.  :)

Скачать эмулятор FCEUX-RU.

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

Взломал я эту игру Hudson's Adventure Island

Читы я вшил в игру на:

Бессмертие.

Вечные жизни.

Вечное время.

Не терять время при ударе об булыжник.

Не терять оружие. 

Начать игру с максимальным оружием и скейтбордом.

Начать игру с 9-жизнями.

Ангел улетает, но эффект остаётся.

Скачать взломанную игру Hudson's Adventure Island.

 

Если кому надо, я так-же русифицировал эмулятор FCEUX v2.2.2.

Скачать эмулятор FCEUX-RU.

А как высокий прыжок сделать ?

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

Искать координату, которая меняется при прыжке, или таймер прыжка. Как это делать - прыгать и искать меняющееся значение. Как именно - не скажу, попробуй уже сам немного мозги размять.

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

Интересно! И куда же ты так хочешь высоко запрыгнуть?  o_0

Попробуй сам взломать на прыжки как сказал Xipho.

Я больше по взлому жизней, оружия и т.д. чем делать высокие прыжки и выбор уровней.  :closeyes:

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

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

На днях взломал игру Contra Force.  :closeyes:

Читы я вшил в игру на:

Бессмертие.

Вечные жизни.

Начать игру с 99 жизнями.

Вечные ящики.

Не терять ящики.

Максимальный дроп ящиков.

Не терять оружие.

Яростная стрельба.

Вечное время компаньона.

Авто-респавн компаньона.

Фикс - после убийства босса, режим паузы ещё работает, до победной музыки.

P.S - Рекомендую отключать напарника когда завалите боссака или до победной музыки.

Скачать взломанную игру CONTRA FORCE

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

Взломал ещё две игры.  ^_^

Читы вшиты в ромы:

 

Super Mario Bros;)

Бессмертие.
Вечные жизни.
Не терять большого-белого Mario.
Начать игру с большим белым Mario.
Начать игру с 9 жизнями.
Выбор уровней в меню игры нажатием кнопки A.

Скачать взломанную игру Super Mario Bros.

 

Teenage Mutant Ninja Turtles 3: The Manhattan Project  ;)

Бессмертие.
Вечные жизни.
Доступны опции: Выбор уровней, сложности, жизней в игре и тест звуков.

Скачать взломанную игру Teenage Mutant Ninja Turtles 3: The Manhattan Project

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

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

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

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