• Объявления

    • Garik66

      Пользователям форума   05.11.2017

      Прошу обратить внимание на эту тему (чтобы увидеть ссылку, войдите в объявление - нажмите на заголовок):   
krocki

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

98 сообщений в этой теме

В общем я решил по настроению сделать пошаговую инструкцию для новичков по взлому игр 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 в любой части  перескочить на другой уровень ?

0

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


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

Итак, 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
0

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


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

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

 

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

 

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

 

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

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

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


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

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

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

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

Изменено пользователем Xipho
Не нужно цитировать большие сообщения целиком.
0

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


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

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

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

1

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


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

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

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

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

0

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


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

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

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

 

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

 

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

1

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


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

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

1

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


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

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

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

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

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


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

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

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

1

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


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

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

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

0

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


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

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

0

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


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

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

1

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


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

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

0

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


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

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

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

0

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


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

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

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

Бессмертие.

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

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

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

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

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

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

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

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

 

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

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

2

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


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

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

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

Бессмертие.

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

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

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

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

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

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

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

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

 

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

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

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

0

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


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

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

0

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


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

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

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

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

0

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


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

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

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


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

Создайте аккаунт или войдите для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас