-
Постов
743 -
Зарегистрирован
-
Посещение
-
Победитель дней
110
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные krocki
-
-
Осталось научиться писать трейнеры в нём же (на Lua с iup)
Кстати в этом эмуляторе есть какая та поддержка LUA.
- 1
-
В общем я решил по настроению сделать пошаговую инструкцию для новичков по взлому игр Dendy, NES и Nintendo. И так приступим...
1: Скачиваем с интернета эмулятор FCEUX v2.2.22: Запускаем эмулятор и открываем с помощью него игру, например - 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: Далее в меню эмулятора нажмите на Debug > Degugger появится большое окно отладчика.10: Справа с верху есть три кнопки две из-них не активны и одна кнопка с названием Add нажмите на неё.11: Появится окно Add BreakPoint, вводим в поле где адрес, наш адрес жизней 0032 - 0032 и ставим галочку где Write и жмём ОК.12: Переходим обратно в игру и теряем ещё одну жизнь, сразу должен сработать бряк в отладчике и он покажет в самом верху слева нашу инструкцию уменьшения жизней 07:DA03:D6 32 DEC $32,X @ $0032 = #$0213: Подводим к этой инструкции курсор мышки, в самом низу отладчика будет отображаться информация.Информация: 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, запускаем эмулятор с игрой и наслаждаемся.- 5
-
Здравствуйте я решил сделать бессмертие при помощи указателя. Как сделать отличное бессмертие чтобы не умереть.
А на эту игру чит-коды на бессмертие есть?
А то можно было найти инструкцию активации чит-кода и больше не мучиться.
-
Да! Точно! Ведь правда! Я когда находил отмычки - там же они отличались на 10 единиц! На самом деле - 175, а в значении 165!
Skyrim, не знаю кто тебя писал - но у меня есть веские основания для отправки твоих разработчиков в нарко-диспансер!
Может такое случилось после установки патчей в игру.
А также желаю удачного взлома этой игры.
-
Использование регистров зависит от того под какую версию написана программа. Есть ведь 32 и 64 битные приложения.
А ну теперь понятно! А то у меня винда 32 битная стоит.
-
Это что-то новое! Какой то новый регистр rbx, я такое в первые вижу, и он чё реально работает?
-
Привет всем. У меня возник вопрос по взлому данной игры (указана в названии темы). У меня не получается присоединить отладчик к адресу времени хода. Игра моментально вылетает, как только ты пытаешься подсоединить отладчик для получения инструкций пишущих или читающих в адрес. А с адресом времени хода ничего не выходит, ни в какую не хочет он принимать отладчик. Что мне делать?
С таким я один раз сталкивался, всё дело в приоритетах.
Дело в том что при подключении отладчика к адресу неважно
на чтение или запись, очень много инструкций работают с
твоим адресом и приоритет нагрузки идёт на отладчик и по
этому игрушка CRASH'ся. У вы что-то сделать с этим не
получится. В общем ищи альтернативную инструкцию
которая может работать, путём анализа.
-
Вот скрипт на мгновенную постройку для версии игры 1.12
[ENABLE]RA3_1.12.GAME+30F42E:jmp RA3_1.12.GAME+8D6D60RA3_1.12.GAME+8D6D60:mov dword ptr [esi+1C],42C80000cvttss2si eax,[esi+1C]jmp RA3_1.12.GAME+30F433[DISABLE]RA3_1.12.GAME+30F42E:cvttss2si eax,[esi+1C]- 1
-
EXCUSE MUA!
Я имел ввиду "анализ данных/структур"
-
Я знаю только 3 способа сделать фильтр.
1-й это найти указатель (Но в стратежках не актуален он или они, поскольку там много юнитов, только если ты хорошо знаешь ASM).
2-й это дата структуры. (Очень хорошо подходит для стратег, поскольку там работают с многими данными).
3-й это сравнение регистров. (Желательно использовать в стрелялках и гонках где только одна единица юнита). Это крайняя мера, если 1 и 2 вариант не помогает. Все игры разные, пробуй все способы.
Поскольку у тебя стратежка где много чего, поэтому способ №2 будет более актуален.
Просто делай побольше фильтров, если с одним фильтром перестаёт работать.
Бывает так что приходиться проходить игру и ломать походу прохождения, поскольку не знаешь будет ли скрипт -
работать после перехода на следующий уровень.
В общем удачного тебе хака этой игрушки.
-
Походу жизни в игре хранятся в как ком то модуле, а не в exe'ке, причём модуль этот запакован в каком то файле архива игры.
По этому Cheat Engine не может определить модуль, и автоматом выдаёт виртуальный адрес тебе.
Такое я в первые встретил в игре Quake 3 Arena, там такая же фигня, модуль жизней в архиве запакован.
Единственное что ты можешь сделать: Это распаковать полностью архив где находиться модуль, какой ни будь спец. прогой.
Ну и попробовать запустить игру извлечёнными файлами, а сам архив игры удалить или переместить в другую любую папку.
P.S - Обычно так делают моды для игр, извлекают файлы из архивов игры и редактируют, потом обратно запаковывают.
-
Да вроде как то так:
mov(cmp) регистр,[Rangers+12345678]mov(cmp), регистр,[регистр+38]mov(cmp), регистр,[регистр+4]mov(cmp), регистр,[регистр+0]mov(cmp) [регистр+F0],значениеMOV - Вшить.
CMP- Сравнить.
Как говорится смотря что хочешь сделать.
Варианты разные есть.
-
Помню на одну игрушку 5 фильтров (Указателей) вешал на одну инструкцию.
Так что можно.
И не только можно использовать структуру для фильтра.............Можно использовать регистры + части адресов как фильтры. Где то здесь на форуме я уже писал об этом одному чуваку, поищи найдёшь.
-
Это вопрос логики. Тогда используй сразу 2-3 фильтра сравнения структур.
-
LIRW
Ну если есть такая инструкция которая работает только стобой, конечно лучше её использовать и ненужны не какие фильтры.
Тупо записываешь значение в инструкцию и всё.
Интересно! А на броню и патроны тоже такое есть.
RamilА твой скрипт работает как хорошая заморозка для указателя, а сама инструкция ни-чё не даёт.
Так что используй скрипт как у LIRW
-
Ты просто используешь указатели или используешь их в скрипте как фильтр?
Если используешь просто указатели, то нужно выставлять максимальное значение и заморозку в 1-секунду.
А можно использовать указатели в скрипте типо так:
Образец:
[ENABLE]Alloc(newmem,32)Label(returnhere)newmem:mov edx,[edi+6C]mov [esi],edx[[[[[BF2.EXE+623DC0]+DC]+4]+3C]+10],3B9AC9FFjmp returnhereBF2.EXE+D58E28:jmp newmemreturnhere:[DISABLE]Dealloc(newmem)BF2.EXE+D58E28:mov edx,[edi+6C]mov [esi],edxПоставь на адрес жизней бряк на запись, потрать немного жизней, получишь инструкцию вычитания жизней, переходишь в отладчик, делаешь авто-скрипт на эту инструкцию, вставь по образцу свой указатель со значением в скрипт, вроде всё. -
-
Прикольно!
Если чё загружай таблицы скриптов на официальном сайте CHEAT ENGINE \ TABLES.
-
krocki, в первый раз сталкиваюсь со структурами, в смысле не пользовался этими инструментами раньше. немного не разобрался...
Да я вроде сверху понятно объяснил как да-чё.
Это типо как найти правильный адрес, а там тебе надо найти место адреса, правильное смещение + значение, вот и всё, ничего сложного.
Ну а насчёт образца от lamalamaz, как я понял это не стратежка же, походу дела там одна персона,
поэтому придётся скрипт + фильтр писать по другому, хотя может и сработает, в жизни всякое бывает.
Так же можешь использовать фильтр, как кусок адрес - регистра какого ни будь, если часть куска статична и работает только с тобой и на всех твоих юнитов.
Образец:
-------------------------------------------
Дополнительная информация
12345678 - test eax,eax
12345678 - mov [ebx,edx]
12345678 - mov [esi+16A8],eax
12345678 - mov [esi+16AC],eax
12345678 - push ebx
copy memory
Вероятное значение указателя: 00351028
EAX=000000FF EDX=00000012 EBP=FFFFFFFA
EBX=45856F10 ESI=00351028 ESP=0088914A
ECX=FF88AA21 EDI=006DD720 EIP=12345678
Выше приведены знач. регистров после выполнения инструкции
--------------------------------------------------------------------------------------
Берём только SI, и часть адреса 1028, ну с остальными так же можно.
Только не используй IP (EBP), это смещение к нашему (общему) коду.
И прописываем в скрипте.
Типо так:
[ENABLE]
Alloc(newmem,128)Label(returnhere)Label(originalcode)Label(сode)newmem:cmp si,1028 // 1028 - Кусок адреса.
je code
jmp originalcode:
code:
mov word ptr [esi+B8],270F // Добавляем всём своим 9999-жизней.
jmp returnhere // Можно попробовать и без неё, если не сработает скрипт. В большинстве случаев она ненужна.
originalcode:comiss xmm0,[esi+B8]jmp returnhereGAME.EXE+12345678:jmp newmemnop // ХЗ не знаю сколько байт занимает эта инструкция comiss xmm0,[esi+B8], тебе видней.nopreturnhere:[DISABLE]Dealloc(newmem)GAME.EXE+12345678:comiss xmm0,[esi+B8]А с указателями запаришься делать фильтр сразу тебе скажу, по этому либо регистры, либо анализ данных.В общем учись и читай здесь на форуме статейки их здесь полно.Кстати гляжу у меня после этого репутация ЛАМЕР появилась...........АААААА!!!!!! ну афигеть блин.Ненавижу ламеров, хоть убейся. Хотя бы юзер.- 2
-
Если есть в эмуляторе отладчик, то можно реально что то хакнуть.
И создавать свои Game Genie и Game Shark коды.
Playstation = Debugger-R3000.
Sega Mega Drive/Genesis = Debugger-M68000.
Ну и т.д.
-
Не проще использовать GAME GENIE коды.
-
В игре Craft The World одна инструкция проверяет жизнь у всех тварей(враги, свои, животные). Как из неё исключить своих? Это стратегия и своих может быть очень много.
Ну что можно сказать!!!1: Находишь адрес жизней своего юнита допустим, делаешь бряк на запись в этот адрес.2: Создаешь авто-скрипт на ту инструкция которая появиться. Типо такой mov [esi+24C],eaxВот пример, метку exit я убрал, она просто не нужна:[ENABLE]Alloc(newmem,128)Label(returnhere)Label(originalcode)newmem:originalcode:mov [esi+24C],eaxjmp returnhereGAME.EXE+12345678:jmp newmemnopreturnhere:[DISABLE]Dealloc(newmem)GAME.EXE+12345678:mov [esi+24C],eax3: Находишь адреса 2-3 юнитов врага.Как найти адреса жизней врагов?В отладчике жмёшь правой кнопкой мыши на брякнутую инструкцию и выбираешь:"Найти адреса, получающие доступ к этой инструкции". Появится окошко для адресов.После этого ударь по одному разу 2 врагов. И в этом окошке появиться адреса врагов.Добавьте их в список, двойным нажатием левой кнопки мышки.4: В отладчике жмёшь на "Инструменты > Анализ данных/Структур" появится окно, в этом окнедалее жмёшь "Файл > Добавить новую группу" штуки 2 для врагов, поскольку одна будет уже для тебя.5: В первую группу вбиваешь свой адрес жизней юнита, типо так 12345678-24C24С - Это смещение в брякнутой инструкции к динамическому адресу.Ну и врагов адреса также делаешь в 2 и 3 группу заносишь.Во второй группе где адрес врага, жмёшь правой кнопки мышки и выбираешь "Изменить группу"далее в новом окошке выбираешь группу номер 3 и подтвердить, то есть адреса 2 врагов будут в одной группе.Потом в окне "Анализ структуры" жмёшь на "Структуры > Определить новую структуру" и жмёшь: "Подтвердить > Да > Подтвердить" после этого появиться смещения, адреса и значения. Находишь одно уникальное смещение, то есть твоё значение например 1, а у врагов должно быть по 0-ям. Рекомендую перезапустить игру и проделать заново анализ данных/структур, чтобы точно найти правильное смещение и значение.Типо так:Анализ структур:Смещение-описание Адрес: Значение Адрес: Значение Адрес: Значениебезымянная структура0260 - 4 Bytes 12345678 : 1 12345678 : 0 12345678 : 06: Запоминаем смещение 0260 и значение 1 и дорабатываем наш скрипт.Примечание:Я добавил ещё одну инструкцию в скрипт и изменил на её смещение,которая находится чуть выше над этой mov [esi+24C],eaxТипо так, этот образец основан на стратегии Red Alert 2:[ENABLE] // Включение скрипта.Alloc(newmem,128) // Выделенная память пустоты на 128 байт.Label(returnhere) // Обратный прыжок.Label(originalcode) // Метка для оригинального кода.Label(originalcode2) // Добавил новую метку.newmem: // Выделенная памятьcmp byte ptr [esi+260],01 // Сравниваю общий регистр с нашим смещением и значение.je originalcode2 // Если равно, то прыгаю на полу изменённый код.jmp originalcode // Делаю прыжок на оригинальный код.originalcode2: // Метка для нашего кода бессмертия.nop // Здесь затёрли ненужную инструкцию test eax,eaxnopmov [esi+24C],eax // Оригинальная инструкция где сработал наш бряк.jmp returnhere // Делаем прыжок обратно.originalcode: // Метка для нашего оригинального кода.test eax,eax // Оригинальная инструкция которая находится над брякнутой.mov [esi+24C],eax // Оригинальная инструкция где сработал наш бряк.jmp returnhere // Делаем прыжок обратно.GAME.EXE+87654321: // Это модуль файла игры + смещение.jmp newmem // Делаем прыжок на выделенную память.nop // Здесь затёрли остаток части оригинального кода.nop // Чтобы не нарушать логику кода, а то будет вылет из игры.nopreturnhere:[DISABLE] // Выключение скрипта.Dealloc(newmem) // Высвобождение выделенной памяти (Дабы не засорять память).GAME.EXE+87654321: // Это модуль файла игры + смещение.test eax,eax // Оригинальная инструкция которая находится над брякнутой.mov [esi+24C],eax // Оригинальная инструкция где сработал наш бряк.В игре Red Alert 2 скрипт работал, все твои созданные войска и построенные здания были бессмертными.
Хотя можно написать скрипт и по другому, вариантов много, кому как удобно.
- 4
-
Надо ставить бряк на адрес, а на не указатель. exorcise
По пробу заново найти указатель на адрес золото, потом перезапусти игру, и отсеивай указатели, пока не найдёшь один уникальный.
Бывает так что найти статический указатель невозможно на некоторые игры или при переходе на другой уровень он меняет смещение.
По этому надо использовать инструкции assembler'а, и искать анализ данных, чтобы построить фильтр в скрипте, если и это не помогает,
используй регистры как фильтр в скрипте.
Почитай статейки здесь на форуме, чтобы научиться как правильно писать скрипты.
-
Если не получается найти указатель на адрес, попробуй через анализ данных/структур, ну или с регистрами поработай.
Кстати я так и не вкурил чем же отличается
db 90 90
от
nop
nop
Не чем не отличается как сказал A1t0r.
db 90 90 - байты в нех.
nop nop - байты в Assembler.
Целочисленное Деление
in Вопросы по созданию читов в одиночных играх
Опубликовано
Может как то так!
DIV
Без знаковое деление
• если делитель размером в байт, то делимое должно быть расположено в регистре ax. После операции частное помещается в al, а остаток — в ah;
• если делитель размером в слово, то делимое должно быть расположено в паре регистров dx:ax, причем младшая часть делимого находится в ax. После операции частное помещается в ax, а остаток — в dx;
• если делитель размером в двойное слово, то делимое должно быть расположено в паре регистров edx:eax, причем младшая часть делимого находится в eax. После операции частное помещается в eax, а остаток — в edx.
mov ax,10234
mov bl,154
div bl ;ah=остаток, al=частное