| Разработка и ромхакинг > Инструменты |
| [NES/Дэнди/SMD] ROM glitcher - сделай себе хак не зная ромхакинг |
| << < (5/8) > >> |
| Беларус:
Новая версия Инвертера: исправлены баги интэрфэйса, уменьшено время поиска, добавлены дополнительные проверки при поиске кандидатов в инструкции ("инструкция не может указывать внутрь себя"), из-за чего отброшены сотни ложных инструкций: версии первая и последняя (-"инструкции") SoR1 3838 3804 (-34) SoR2 13680 13274 (-406) Contra 9271 9195 (-76) MK3 18103 17637 (-466) UMK3 14919 14627 (-292) Robocop 9674 9268 (-406) Попробовал Глитчер от pav13, встроенный в эмулятор, и это очень круто, когда эмулятор делает половину работы, а тебе надо лишь выбирать пункт :thumbup: Поиск происходит ещё быстрее. Надеюсь, форк примут в основной код и такой поиск встанет рядом со стандартным поиском значений в памяти. |
| AnyZero:
Быстро вброшу и убегу :lol:. Вообще другое искал, но это выглядит здорово, стрельба по-македонски. |
| Беларус:
AnyZero, для тех, кто не играл в игру - пушек стало две, да? А урон тоже удвоился? |
| AnyZero:
Пушек стало 2, только визуал. Урон не меняется. |
| Беларус:
Как тебе такое, Илон Ма SeregaZ? :) Твой бедный SSD не насилуется, всё делается в памяти, как ты и хотел. +всё автоматизировано до предела, буквально надо выбирать из трёх кнопок аки подопытная обезьяна :biggrin: --- Цитата: SeregaZ от 20 Февраль 2024, 05:12:49 ---нужен эмулятор в виде дллки, чтобы подключать его к своим проектам и чтобы он работал с образом памяти, дабы не гадить на жестком диске --- Конец цитаты --- |
| SeregaZ:
ну хорошо если так :shifty: |
| pav13:
--- Цитата: perfect_genius от 06 Сентябрь 2025, 23:52:44 ---всё делается в памяти, как ты и хотел. --- Конец цитаты --- то что всё делается в памяти - это конечно хорошо. но я думаю, что SeregaZ имел ввиду немного другое под --- Цитата: SeregaZ от 20 Февраль 2024, 05:12:49 ---... в виде дллки, чтобы подключать его к своим проектам ... --- Конец цитаты --- то что сейчас сделано это не динамическая библиотека именно Глитчера, это один конкретный эмулятор с Глитчером внутри. |
| SeregaZ:
pav13, сам ром переглючивает в памяти и запускает каждый шаг в этом эмуляторе из памяти? то есть без создания рома как файла на жестком диске? |
| pav13:
--- Цитата: SeregaZ от 07 Сентябрь 2025, 19:25:59 ---сам ром переглючивает в памяти и запускает каждый шаг в этом эмуляторе из памяти? --- Конец цитаты --- да --- Цитата ---то есть без создания рома как файла на жестком диске? --- Конец цитаты --- да |
| SeregaZ:
руль руль :thumbup: |
| AnyZero:
Встречайте, версия для nes, делает ровно тоже самое, реверс BEQ/BNE 0xF0/0xD0 Результаты классные, инструмент вышел прикольный, Contra огненная неуязвимость - 20 шагов. В Mario Bros 2 все враги тебя лечат, звёзды грибы убивают - 143 шага, всегда попадать по врагам, давить их - 40 шагов. Jackal - неуязвимость и суперракеты - 80 шагов. GunSmoke - любой урон возвращается врагу в виде BOOM - 49 шагов. Rush'n attack - всех врагов превратить в оружие - 44 шага, играть за врагов с 48 примерно. Monster in my pocket - 62 шага неуязвимость, Robocop 3 - 68 шагов, неуязвимость. Бонусом кучу интересных багов можно увидеть в процессе поиска. Исходник в комплекте. Все права и благодарность perfect_genius, моя там только идея. --- NesGlitcher v2.0 Русский язык. Описание того что примерно вы сможете нахакать, счётчики шагов/количества инструкций работают. Больше инструкций для инвертирования (экспериментов). 1. ADC/SBC 2. BCC/BCS 3. BNE/BEQ 4. BPL/BMI 5. BVC/BVS 6. INC/DEC --- NesGlitcher v2.01 Фикс счётчика шагов при выходе из приложения. --- NesGlitcher v2.02 Теперь при выборе инструкции ром меняется сразу, нет нулевого шага. --- NesGlitcher v2.1 Поддержка символов Unicode в названиях ромов. Возможность поиска в CHR ROM. Поддержка размера PRG ROM 2-го типа из NES 2.0 --- NesGlitcher v2.1.1 Фикс счётчиков. --- NesGlitcher v2.1.2 Фикс счётчиков. --- NesGlitcher v2.2.0 Программа обзавелась иконкой. Запуск 2 способами, как обычно и перекидыванием рома на иконку программы. Выбор файла стандарным файлпикером винды. Автобэкап рома перед использованием программы. Автоматизация для Fceux (читайте инструкцию, там всё просто). После успешной модификации результаты сохранятся и в txt файле. |
| euror:
я конечно извиняюсь, но есть ли подробная инструкция для работы с глитчером? после перекидывания в него РОМ файла глитчер закрывается |
| Беларус:
euror, у тебя ром не в архиве ли? Какое у него окончание названия? AnyZero использовал нейросеть для добавления фич, поэтому там могут быть баги. Один там точно есть, но некритичный :) |
| AnyZero:
--- Цитата: perfect_genius от 19 Сентябрь 2025, 13:10:27 ---euror, у тебя ром не в архиве ли? Какое у него окончание названия? AnyZero использовал нейросеть для добавления фич, поэтому там могут быть баги. Один там точно есть, но некритичный :) --- Конец цитаты --- У меня этого бага нет -_-. Если ты о том котором писал. |
| Беларус:
Оказывается, он только в старой консоли, а не в новой Windows Terminal, т.е. отпадают владельцы Виндов ниже Десятки. Оригинальный Глитчер совместим со всеми Виндами, в Переставлятеле ради этого пришлось немного заморочиться. Ты не обижайся, просто я снял с себя ответственность за возможные сюрпризы от ЫЫ. Посмотрев твой код на меня снизошло озарение, что я забыл, что на NES код отделён от графики, а значит большая вероятность инвертировать инструкции, а не данные. Значит надо бы добавить возможность глитчить и ромы NES :thumbup: Интересно, почему твой экзэшник не удаляется сразу после скачивания антивирусом Вин11. Получается, он ведь как-то подписан или сертифицирован. Или же нейросеть знает как писать код, не раздражающий антивирусы. --- Цитата: pav13 от 19 Сентябрь 2025, 13:08:51 ---просто сделай что написано на экране --- Конец цитаты --- Но там ведь написано на английском. А то, что на русском - закрывает окно. Вот стали менять протэстированный работающий код сомнительным способом, да ещё перевели на ненашский язык - отсюда и проблемы пошли :biggrin: |
| AnyZero:
У меня и на 7ке нет сообщений. Но пофиксить можно. А про тесты, так и на оригинал тоже надо на иконку программы кидать файл. Если в открытую кинуть, закроется. Кстати поиграв с ADD/SUB на Sega в Aero the acrobat пропадает часть интерфейса, нижняя. На Робокопе против Терминатора не проверял. |
| Беларус:
--- Цитата: AnyZero от 20 Сентябрь 2025, 12:48:42 ---так и на оригинал тоже надо на иконку программы кидать файл --- Конец цитаты --- Это написано на привычном языке, не надо знать другой :) --- Цитата: AnyZero от 20 Сентябрь 2025, 12:48:42 ---поиграв с ADD/SUB --- Конец цитаты --- Наверно знаешь, что там несколько этих + и - SUB SUBX SUBA SUBI SUBQ ADD ADDX ADDA ADDI ADDQ И тоже достаточно инвертировать один бит. |
| AnyZero:
BEQ/BNE - бессмертие, открытие дверей, уровней, проход сквозь стены, секретные менюшки. BCC/BCS - столкновения (коллизии), проход сквозь стены, лимиты предметов. BPL/BMI - движение направление, таймеры, статусы в игре (в рпг отравление, лед, пламя). BVC/BVS - физика, анимации, графические баги, фризы. ADDQ/SUBQ - жизни, патроны, очки, время, счётчики. ADDI/SUBI - бонусы, урон, лечение. ADD/SUB - урон, физика, двойные прыжки, экономика. Вообще чтоб покрыть 95% хватает BEQ/BNE и SUB/ADD, минут за 10 можно найти вообще всё нужное, а порой и смешное, остальное слишком специфичное. Но побаловаться можно. |
| Беларус:
Уклонился от ответа :shifty: Раз в одном случае "счетчики" и заглавные буквы, а в другом уже "счётчики" и строчные, то предположу, что тут смешанный опыт - твой и чужой. --- Цитата: pav13 от 23 Сентябрь 2025, 09:04:24 ---Есть ли подобное описание, но для SMD? --- Конец цитаты --- Код есть код, как и логика, независимо от платформы. Т.е. всё это касается и SMD. |
| Sharpnull:
--- Цитата: AnyZero от 19 Сентябрь 2025, 07:02:24 ---версия для nes --- Конец цитаты --- Нет поддержки размера PRG ROM 2-го типа из NES 2.0, поэтому не работает Galaxian, у которого задаётся 8КиБ PRG ROM через NES 2.0. Также бывают ромы с трейнером (512 байт после заголовка), код для определения положения PRG ROM и CHR ROM такой (я не проверял): --- Код: --- uint64_t PRGSize = header[4] * 0x4000; uint64_t CHRSize = header[5] * 0x2000; bool isTrainer = (header[6] & 0x04) == 0x04; // NES 2.0 if ((header[7] & 0x0C) == 0x08) { uint64_t PRGSizeHigh = header[9] & 0x0F; if (PRGSizeHigh != 0x0F) { PRGSize += (PRGSizeHigh << 8) * 0x4000; } else { uint8_t E = header[4] >> 2; if (E > 0x3D) { // >= 2 EiB (exbibyte) PRGSize = 0; } else { PRGSize = ((uint64_t)1 << E) * ((header[4] & 3) * 2 + 1); } } uint64_t CHRSizeHigh = (header[9] & 0xF0) >> 4; if (CHRSizeHigh != 0x0F) { CHRSize += (CHRSizeHigh << 8) * 0x2000; } else { uint8_t E = header[5] >> 2; if (E > 0x3D) { // >= 2 EiB (exbibyte) CHRSize = 0; } else { CHRSize = ((uint64_t)1 << E) * ((header[5] & 3) * 2 + 1); } } } uint64_t start_prg = 16; if (isTrainer) { start_prg += 512; } uint64_t end_prg = start_prg + PRGSize; // Не включая end_prg uint64_t start_chr = end_prg; uint64_t end_chr = start_chr + CHRSize; // Не включая end_chr --- Конец кода --- В CHR ROM бывает код (например, Batman - Return of the Joker), можно добавить опцию как вариант. Нет поддержки файлов с иероглифами (и другими символами), я в своей программе для вывода информации о заголовке рома использовал такой код: --- Код: --- LPWSTR* w_argv; int w_argc; w_argv = CommandLineToArgvW(GetCommandLineW(), &w_argc); if (w_argv == NULL) { fprintf(stderr, "Error: CommandLineToArgvW()\n"); return 1; } // Debug //for (int i = 0; i < w_argc; i++) { // printf("%d: ", i); // WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), w_argv[i], lstrlenW(w_argv[i]), NULL, NULL); // printf("\n"); //} FILE* fp = _wfopen(w_argv[1], L"rb"); LocalFree(w_argv); --- Конец кода --- Для string придётся преобразования производить через WideCharToMultiByte или как-то по-другому это всё обрабатывать. Я не знаю что у вас в новом коде, но в старом #define _CRT_SECURE_NO_WARNINGS нужно было расположить перед #include, а fread(rom_name.data() вообще не компилируется из-за const char *, в сети пишут fread(&rom_name[0]. UPD: Лучше не называть версии программ как v2.02, а вот так https://semver.org/lang/ru/ v2.2, ..., v2.20. Кстати, меня удивило, что в Cyberpunk 2077 используется древняя система версий с десятичной дробью: 1.06 < 1.1 < 1.11. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |