Перейти к содержанию

Лидеры

Популярный контент

Показан контент с высокой репутацией 19.02.2012 во всех областях

  1. Базовый способ взлома — это поиск адреса в памяти игры по правилам поиска, изменение значения адреса и заморозка значения по адресу. Это можно сделать с помощью программ Artmoney, Cheat Engine и других сканеров памяти. Правила поиска описываются в руководстве Artmoney на русском языке. Этим способом можно взломать (или сделать читы) чуть ли не на все игры. Если в игре загружается игровой уровень или игровая сцена, то адреса в памяти могут поменяться и придется адрес искать вновь. В этом случае можно использовать поиск указателей, который может быть как быстрым так и очень долгим. Попробовать можно в тех же программах Artmoney, Cheat Engine. Если поиск указателей не хотим использовать, т.к. он долгий, то есть вариант изменить код игры для того чтобы по адресу записывалось другое значение. Попробовать можно в тех же программах Artmoney, Cheat Engine. Для этого нужно поставить брейкпоинт на найденный адрес, выйти на инструкцию ассемблера и что-то с ней сделать. Для нужно поискать руководства по инструкциям ассемблера. Кратко 1) если инструкция пишет в адрес, то её можно занопить, т.е. стереть. mov, dec, sub или другие... 2) с Cheat Engine можно заменить инструкцию, если размер инструкции в байтах подойдет. Если не подойдет, то заменяем инструкцию на инструкцию прыжка на адрес выделенной памяти, в которой пишут немного "сложного" ассемблерного кода и затем делают прыжок обратно. Если все делается с Cheat Engine, то на действия вешаются хот-кеи. Создается таблица или трейнер и все готово. Берем любую игру, Cheat Engine, делаем трейнер и публикуем его на форуме или где захотим. Вы можете пойти по следующим путям: 1) писать скрипты для CE (Cheat Engine) 2) генерировать трейнеры на CE, 3) можете писать трейнеры на языке программирования. Во всех трёх направления на нашем форуме (если поискать) есть как простые примеры, так и очень сложные. Лучше всего начать со справки Артмани и использовании самой этой программы. Затем установить Cheat Engine и подробно смотреть и читать следующие темы: 1) Туторы по CE Autoassembler Engine; 2) Grand Theft Auto Vice City, метод указателей (использовалась TSearch, но вы должны всё понимать как если бы это было CE ) 3) Посмотрите наш раздел по Cheat Engine 4) Ну и чиnаем всё что найдёте у нас на сайте и на форуме. Для более опытных Lua Engine в CE для создания трейнеров или создание на языках программирования с Windows API. Термины
    1 балл
  2. В этом учебнике я собираюсь обрисовать основной API, необходимый для создания трейнера в Дельфи. Основы знания Дельфи предпочтительны, но Дельфи итак довольно прост в освоении. Концепция. Хорошо, вот что мы хотим от трейнера. Мы запускаем игру. После этого ALT+TAB в Windows. Мы запускаем трейнер, и жмем кнопку. Это действие запишет некие значения в некоторые адреса в игре. Так, например, если мы знаем адрес денег в памяти игры, мы сможем хакать деньги, используя этот трейнер. Вот что нам надо для этого: Название окна игры Запускаем игру, потом переходим в Windows по Alt+Tab. Ищем в панели задач нашу игру и записываем е_ точный заголовок. (К примеру, запустив Red Alert 2, в панели задач Вы увидите кнопку с ее названием - Red Alert 2. Это и есть заголовок главного окна программы. Кстати, Red Alert 2 взломать способом, описанным здесь, не удастся - это DMA игра. Читайте пару документов здесь, посвященных именно A.G.T. и борьбе с DMA) Адреса в памяти игры (в шестнадцатеричном виде) Используем программу, подобную GameHack или MTC (Magic Trainer Creator), мы можем найти любое значение в игре и соответствующий ему адрес в памяти. К примеру, адрес в шестнадцатеричном виде 41D090. Запишем и это тоже. Значение, которое мы хотим записать (в шестнадцатеричном виде): Так, у нас есть адрес в памяти. Что мы хотим в него записать? Скажем, я хочу 50 единиц золота. То есть первым делом мне надо перевести 50 в шестнадцатеричную форму, используя соответствующий конвертер (подойдет и Калькулятор из Стандартных программ Windows - не забудьте включить инженерное представление - прим.пер.) Конвертер скажет 32. Так что запишите и это значение также. Число байт, которое мы хотим писать В том значении, которое мы получили выше, мы должны знать также сколько байт это займет в памяти. К примеру, число 32 займет только 1 байт, но FF07 займет уже два байта. В общем случае, две цифры будут занимать один байт. Начнем кодить Мы собираемся использовать Win32 API чтобы записывать значения в память другого процесса. Вот те функции, которые мы будем использовать. По порядку: FindWindow GetWindowThreadProcessID OpenProcess ReadProcessMemory WriteProcessMemory CloseHandle (Прочтите описания этих функций в файле Win32.hlp (или MSDN - прим.пер.) для полного описания. ) Я буду показывать только основы, так что начинающие могут просто копировать код из этого документа и вставлять его в свой проект.) Итак, начало. Во-первых, мы объявляем наши переменные. Скопируйте и вставьте это в свой проект: Var WindowName : integer; ProcessId : integer; ThreadId : integer; buf : PChar; HandleWindow : Integer; written : cardinal; Теперь надо объявить следующие константы. Скопируйте и этот раздел. Эти константы устанавливаются в соответствии с тем, что вы записали выше. Const WindowTitle = 'prog test'; Address = $41D090; PokeValue = $32; NumberOfBytes = 1; Теперь, чтобы записать значения, вы должны получить хэндл памяти игры. Невозможно сделать это в одно действие, поэтому мы сделаем следующее. Получаем хэндл главного окна С этим хендлом мы получаем идентификатор процесса (process identifier - pID) С этим pID, мы получаем хэндл области памяти. С этим хэндлом мы можем начинать хакать. Во-первых, нам надо получить хэндл главного окна. Используем функцию FindWindow WindowName := FindWindow(nil,WindowTitle); If WindowName = 0 then begin MessageDlg('Игра должна быть запущена до трейнера. Запустите ее, потом трейнер', mtwarning,[mbOK],0); end; Заметим, что код проверяет, равен ли нулю хэндл этого окна. Если оно равно, это значит, что игра не запущена, так что мы предупреждаем пользователя и говорим ему о том, чтобы он запустил игру. Теперь нам нужен pID. Мы используем функцию GetWindowThreadProcessId. После этого мы получаем хэндл области памяти через OpenProcess. Скопируйте код, приведенный ниже. ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId); HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); Вот оно. Теперь нам надо использовать WriteProcessMemory чтобы писать что-то внутри этого хэндла. Как только мы это сделаем, мы закрываем хэндл. Так принято. Так безопасно. Скопируйте код, приведенный ниже: GetMem(buf,1); buf^ := Chr(PokeValue); WriteProcessMemory(HandleWindow,ptr(Address),buf,NumberOfBytes,write); FreeMem(buf); CloseHandle(HandleWindow); Вот исходный код для всего трейнера. Для начинающих программистов, чтобы быстро сделать трейнер, требуется только поменять константы, объявленные в начале программы. Var WindowName : integer; ProcessId : integer; ThreadId : integer; buf : PChar; HandleWindow : Integer; write : cardinal; Const WindowTitle = 'prog test'; Address = $41D090; PokeValue = $32; NumberOfBytes = 1; ########################################################### # (Вставьте следующий код в обработчик OnClick кнопки )# ########################################################### begin WindowName := FindWindow(nil,WindowTitle); If WindowName = 0 then begin MessageDlg('Игра должна быть запущена до трейнера. Запустите ее, потом трейнер', mtwarning,[mbOK],0); end; ThreadId := GetWindowThreadProcessId(WindowName,@ProcessId); HandleWindow := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId); GetMem(buf,1); buf^ := Chr(PokeValue); WriteProcessMemory(HandleWindow,ptr(Address),buf,NumberOfBytes,write); FreeMem(buf); CloseHandle(HandleWindow); end;
    1 балл
  3. В этом теме я расскажу подробнее об DMA адресе (Значит динамический) DMA адрес это плохо, потому что если вы например нашли адрес денег или жизней то,адрес при перезагрузки игры измениться и нужно будет искать по новой DMA адресом может быть любое значение жизни, деньги,таймер в миссиях т.д Для того чтобы адрес который вы нашли при перезагрузки игры не менялся нужно написать скрипт, но для начало нужно найти адрес Нахождение адреса: 1. Для начало нужно выбрать игру (любая) 2. Начинаем поиск, если в игре значение написано цифрами вам повезло будет легко найти адрес, а если полоской то придёться потрудиться а)"Адрес в стиле цифр" если адрес у вас в игре записан в цифрах будет лёгко, просто в поиске пишите число в игре, уменьшаете или прибавляете (Процесс отсеивания) после того как нашли адрес выводите его в главную панель, и значения этого адреса можно изменить на любое желаемое вам число и заморозить (При замораживании число которые у вас в игре не уменьшается) б)"Адрес в стиле полосы или на подобии этого" если адрес у вас в игре записал в полоске или на подобии этого то будет очень сложно (сложность в том что придёться много времени отсеивать),для того чтобы найти такой адрес надо выбрать "Поиск неизвестно значения", уменьшать и прибавлять (Процесс отсеивания) после того как осталось немного адресов а отсеивание не даёт результатом просто выводите все адрес на главную панель и каждый по очереди замораживаете и если число в игре не умешается то это ваш адрес. Если у вас Cheat Engine то написание скрипта будет легче, жмём правой кнопкой мышки по адресе и ннаходим там "Точка остановка на доступ" нажимаем её, и возвращаемся опять в игру и отсеиваем (уменьшаем или прибавляем) возвращаемся к Cheat engine и видим появились инструкции, нажимаете первую инструкцию и справа нажимаем "Отладчик", после этого появился отладчик, нажимаем вверху "Инструменты" и Автоассембел, теперь начинается самое интересное написание скрипта. в) Бывает и такое что когда в игре цифры и вы используте "Точное значение" поиска, адрес не находиться, но адрес можно найти тоже с помощью поиска "Неизвестного значения" Написание скрипта: Нажимате "Шаблон", "Вставление секций ENABLE и DISABLE",после этого "Внедрение кода" и вот вам придстоит написать скрипт, вы напишите его сами, на форeме можно найти много примеров написание скриптов на разный языках програмированния включая Cheat Engine Примеры скриптов: Здоровие (Float значение) [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat alloc(newmem,2048) //2kb should be enough label(returnhere) label(originalcode) label(exit) newmem: //this is allocated memory, you have read,write,execute access //place your code here mov dword ptr [ecx+00000540],(float)999 originalcode: fld dword ptr [ecx+00000540] exit: jmp returnhere "gta_sa.exe"+226B9E: jmp newmem nop returnhere: [DISABLE] //code from here till the end of the code will be used to disable the cheat dealloc(newmem) "gta_sa.exe"+226B9E: fld dword ptr [ecx+00000540] //Alt: db D9 81 40 05 00 00 Деньги (обычный DMA адрес) [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat alloc(newmem,2048) //2kb should be enough label(returnhere) label(originalcode) label(exit) newmem: //this is allocated memory, you have read,write,execute access //place your code here mov dword [esi+000000B8],#10000000 originalcode: mov eax,[esi+000000B8] exit: jmp returnhere "gta_sa.exe"+17059B: jmp newmem nop returnhere: [DISABLE] //code from here till the end of the code will be used to disable the cheat dealloc(newmem) "gta_sa.exe"+17059B: mov eax,[esi+000000B8] //Alt: db 8B 86 B8 00 00 00 Вот и все, желаю удачи будущим взломщикам
    1 балл
×
×
  • Создать...

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

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