Перейти к содержанию
Авторизация  
krocki

Взлом Игр 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

Поделиться сообщением


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

 

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

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

 

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

  • Плюс 1

Поделиться сообщением


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

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

 

Кстати в этом эмуляторе есть какая та поддержка LUA.

  • Плюс 1

Поделиться сообщением


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

Напиши пожалуйста как сделать чтобы в Adventure Island в любой части  перескочить на другой уровень ?

Поделиться сообщением


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

Итак, 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 + заморозить и перезапустить игру...

  • Плюс 1

Поделиться сообщением


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

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

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

Пробывал все.

Поделиться сообщением


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

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

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

 

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

 

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

  • Плюс 1

Поделиться сообщением


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

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

  • Плюс 1

Поделиться сообщением


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

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

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

Изменено пользователем drs36

Поделиться сообщением


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

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

Вообще там 2 байта подряд - area и round.

  • Плюс 1

Поделиться сообщением


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

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

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

Поделиться сообщением


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

Взломал  Adventure Island 3 и нашел интересный код на уровни если запороть начальный уровень,то идет перемещение к уровню с боссом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
krocki и A1t0r

Молодцы ребята! Очень интересная статья и lua-код, продолжайте в том же духе, лично от меня - плюсы вам!

  • Плюс 1

Поделиться сообщением


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

 Как сделать чтобы в Adventure Island 3  перескочить на другой уровень ?

Поделиться сообщением


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

Как сделать чтобы в Adventure Island 3 перескочить на другой уровень ?

Тебе писали о том, как это сделать в первой части. Делай по аналогии.

Поделиться сообщением


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

Взломал я эту игру 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:

Поделиться сообщением


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

На днях взломал игру 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

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

×

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

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