Модель консоли: PS3 Slim
Прошивка: REBUG 4.84.2 D-REX
Другие консоли: Увы
Регистрация: 06.05.2019
Возраст: 38
Сообщений: 5,540
Вы сказали Спасибо: 1,944
Поблагодарили 11,206 раз(а) в 2,281 сообщениях
Сила репутации: 1Репутация: 11152 
(репутация неоспорима)
|
Всем здрям, и так как у меня CWF прошивка, я для взлома использую программу NetCheat, так вот для того что бы найти нужные коды занимает очень мало времени, но в NetCheat практически все коды находятся именно в памяти, а не в исполняемом файле,
к примеру, при сканировании игры NetCheat выдает блоки памяти,
00010000 02D90000 это исполнительный блок памяти
10000000 40000000 это виртуальная память
и так да пустим мы нашли код по адресу 13507750 вирт. память., так скажем бессмертие, то его в EBOOT- ELF не встроить у них просто даже нет таких смещений, но есть про дебюгер который отслеживает в реальном времени процесс игры, там есть вкладачка, в нее можно вставить данный адрес 13507750, снимаем игру с паузы и ждем когда нас например ударят, после удара игра автоматом встаёт на паузу, а в асамблере желтая стрелка покажет адрес исполняемого чита, так вот просто так его нельзя изменить, тут суть идет в том, что он часть кода процесса, и там нужно понимать асамблирование,
к примеру адрес-код начало кода отвечающего за бессмертие
00222084-45454545 r0 r0 0x1 r29
а вот сам тот самый адрес код на который ссылается NetCheat 13507750
00222088-60000000 r0 r0 (r3)
как бы вы не пытались сменить данный код игра будет зависать, потому что r0=10 то есть 1 десяток, если знать асамблирование, то тут надо складывать что бы получить нужный нам код, и и внести изменения, и тут нужна математика и не 11 класса, это только пример, я не помню точных данных, но я к чему это все, я знаю тут есть человек который шарит в асамблирование, ErikPshat,  , я знаю что он прочтет и поможет, как сделать так что бы к примеру вот на этот адрес 00222088-60000000 r0 r0 (r3) поступал новый код и игра не зависала.
Вот тут есть пример как это делать, но у меня не получилось
По заявке товарища Sear Biss рассмотрим создание чита для игры Call of Duty 3 [BLES00016]. Сегодня мы будем делать чит посложнее. Полезем в инструкции игры.
И так, проверяем, что для нашей игры нет обновления, и модифицируем EBOOT.BIN, опираясь на наш опыт из предыдущих сообщений. Запустив игру и поиграв минут 5, мы попадаем в игре под обстрел. Я забрал у мёртвого немца его автомат MP40 и решил сделать бесконечные патроны в его рожке (магазине). После нескольких попыток найти значение патронов магазина в памяти приставки, оказалось, что они хранятся в диапазоне 10000000 - 10B80000. А именно 10160B68. Если заморозить значение 00000015 в этом адресе памяти, то патроны в рожке никогда не заканчиваются и не требуется перезарядка. Давайте найдём инструкцию (команду) в машинном коде исполняемого файла EBOOT.BIN, уменьшающую патроны в магазине при стрельбе, чтобы её модифицировать. Для этих целей незаменима программа-отладчик, входящая в состав ProDG, называемая ps3debugger.exe. Запускайте её всегда после запуска NetCheat PS3 и после присоединения игры к ней. Так бывает, что отладчик при запуске висит с окном скачивания какого-то файла с приставки. Причём, это окно можно увидеть, только если свернуть все окна программ Windows. Наберитесь терпения, не трогайте комп и приставку, попейте чаю. Максимум через 20 минут всё откроется.
В отладчике также нужно приконнектиться к игре. Для этого всегда в первую очередь фиксируем в нажатом состоянии кнопочку Auto Update (четвёртая справа), чтобы видеть в реальном времени все изменения в приставке. Затем открываем окно Processes. Обычно процесс уже присоединён (не активен пункт контекстного меню Attach Process). Но на всякий случай убедитесь в этом, а затем щёлкните двойным щелчком по процессу, чтобы он раскрылся. Вот как это должно выглядеть: http://www.psjailbreak.ru/uploads/fo...364process.jpg
Если же к процессу мы отладчиком подключаемся (делаем Attach Process), то игра на приставке станет на паузу, а в отладчике выскочит окошко с вопросом. Отвечаем Continue without symbols. Игру с паузы снимаем в NetCheat PS3, нажав зелёный треугольник в верхнем правом углу. Кстати, это большой плюс в подключении к приставке через Target Manager API, что всегда можно поставить игру на паузу в NetCheat PS3.
И так, к процессу подключились. Сворачиваем окошко с процессом, а открываем окна Disassembly и Registers. Даём задание программе-отладчику перехватить команду записи в найденный нами адрес памяти 10160B68. Для этого заходим в меню Debug и выбираем Hardware Breakpoints. В появившемся окошке в строке Address вводим 0x10160B68, ставим галочку on WRITE и нажимаем OK. Этими действиями мы сказали отладчику следующее: "Включи отслеживание (OK) на запись (on WRITE) шестнадцатиричного (0x) адреса (10160B68)". Вот теперь, как только мы попытаемся выстрелить из автомата, игра сама станет на паузу, а в окне Disassembly жёлтая стрелочка покажет нам адрес 002AAD34 интересующей нас инструкции. Напомню, что в данном диапазоне памяти лежит расшифрованный и распакованный EBOOT.BIN. А значит, мы по сути ковыряемся в исполняемом файле. Читы, сделанные модификацией исполняемого файла ценятся больше, т.к. многие пользователи (в том числе и пользователи ODE) могут подменить оригинальный EBOOT.BIN на модифицированный читами и играть, не используя каждый раз компьютер и дополнительные программы.
И так, инструкция найдена, и мы в первую очередь должны убедиться, что никакие другие инструкции не задействованы. Жмём F5 и видим, что игра снялась с паузы. Отключаем отслеживание, чтобы оно нам не мешало. Снова заходим в Hardware Breakpoints, оставляем в строке Address значение 0x10160B68, оставляем галочку on WRITE, но нажимаем кнопочку Disable. Этими действиями мы сказали отладчику следующее: "Отключи отслеживание (Disable) на запись (on WRITE) шестнадцатиричного (0x) адреса (10160B68)".
Давайте изучим нашу инструкцию по адресу 002AAD34. Мы видим четырёхбайтный (32-х битный) машинный код 7C07592E, который понимает и выполняет процессор приставки во время выстрела из автомата MP40. Для человека понять этот код очень сложно, т.к. принцип работы любого процессора и мозга человека очень сильно отличается. Поэтому для понимания машинных кодов существует почти универсальный язык программирования Ассемблер, показывающий человеку в понятном виде, в виде мнемоник, что делает процессор. Посмотрим на мнемоники нашей инструкции. Это stwx r0,r7,r11. Если вы, как и я, не особо знаете Power Accembler, то, подсветив мышком команду stwx, мы увидим подсказку к данной команде. В нашем случае процессор складывает значения регистров r7 и r11. а в результат, который является адресом, записывает значение, хранящееся в регистре r0. Давайте подробно рассмотрим этот момент.
Во-первых, расположите два окна Disassebly и Registers так, чтобы было видно содержимое обоих окон. Во-вторых, изучать работу инструкции нужно во время паузы игры на данной инструкции, т.е. во время выстрела. Если вы поставите на паузу игру в любой другой момент, то значения регистров могут быть самыми различными, и будет бессмысленно разбираться в команде. Поэтому щёлкните мышкой левее адреса 002AAD34, чтобы появился тёмно-красный кружок. Игра сама станет на паузу, когда будет выполняться данная инструкция, т.е. во время выстрела из MP40. В моём случае, отбросив лишние нули, r0=10, r7=101608C0, r11=2A8. И так, r7+r11=101608C0+2A8=10160B68. Здесь сформировался адрес хранения патронов в рожке MP40 и запишется туда шестнадцатиричное значение 10, т.е. 16 патронов в рожке. После выстрела значение регистра r0 будет уже 0F, т.е 15 патронов. В принципе, можно уже убить эту инструкцию, и тогда уменьшающееся значение r0 никогда не будет записано в наш адрес патронов в рожке 10160B68. А можно проследить код выше и найти команду, уменьшающую значение r0 на 1. Долго искать не пришлось. Двумя строками выше видим команду xori r0,r0, 0x1. Грубо говоря, это значит, что процессор присваивает регистру r0 значение 1. И потом на 1 будет уменьшено наше значение патронов. Можно также убить эту инструкцию, а можно модифицировать её.
Удаление инструкции. Если мы хотим избавиться от неугодной нам инструкции, мы её удаляем. Но нельзя просто заменить 7C07592E на 00000000. Процессор дойдёт до этой строки и увидит отсутствие команды в принципе, и остановится. На приставке вы получите зависшую игру. Нужно проставить команду ничего неделания nop, т.е. заменить 7C07592E на 60000000. Это можно сделать прямо из окна Disassembly, нажав правую кнопку мыши на строке, выбрать Disassembly, а затем выбрать Set address to NOP (или просто нажать Delete). В NetCheat PS3 это можно сделать кодом 0 002AAD34 60000000. Проверив игру с таким кодом, вы видим, что патроны в рожке перестали уменьшаться и для других типов оружия, т.к. данная инструкция отвечала и за другое оружие.
Модификация инструкции. Удаление инструкции не всегда приводит к ожидаемым результатам. Порой удалив инструкцию, отнимающую у твоего героя здоровье, оказывается, что здоровье перестаёт отниматься и у всех твоих врагов. Поэтому приходиться ковыряться в коде глубже и менять алгоритм работы целой процедуры. Давайте в данном примере изменим инструкцию xori r0,r0, 0x1 по адресу 002AAD2C, которая присваивает регистру r0 значение 1. Сделаем xori r0,r0, 0x0, чтобы патроны уменьшались на 0. Для этого код 68000001 меняем на 68000000. Это можно сделать в NetCheat PS3 кодом 0 002AAD2C 68000000, а можно открыть редактор памяти (Memory) в отладчике, перейти по адресу 0x002AAD2C и изменить 68000001 на 68000000. В итоге следующая процедура subf r0,r0,r8 возьмёт значение патронов в рожке из r8, уменьшит на r0, которое у нас будет равно 0, и запишет результат тот же r0. И, как вы помните, следубщая инструкция stwx r0,r7,r11 запишет в адрес памяти наше итоговое количество патронов в рожке. Вот таким вот извращённым способов в этой игре реализован учёт отстреленных патронов в магазине.
и да, 00010000 02D90000 в исполняемом файле в принципе кодов практически нет, то есть они там есть, но NetCheat, их не находит, я протестировал 7 игр и только в одной из них я нашел коды это фаер 3,
но знаю что у французов есть конвертер который, может по этому адресу 13507750 может найти точный адрес в EBOOT-ELF, и он там будет 1 и единственный, но к сожалению ссылки мертвые.
Последний раз редактировалось Serp87; 11.12.2019 в 16:30.
|