Перейти к содержанию
Авторизация  
MasterGH

Создание и внедрение dll при помощи Cheat Engine

Рекомендуемые сообщения

Тема. Создание и внедрение dll при помощи Cheat Engine.

Сейчас у меня есть время на то, чтобы открыть самые основы этого метода и обратить внимание на его перспективы. Сразу напишу о перспективах. Ну, что тут сказать, если использовать этот метод внедрения чит-кодов, то открывается возможность использовать всю мощь языка программирования на котором вы пишите dll-ку включая ассемблерные вставки. Я же очень советую готовиться психологически переходить именно на этот метод совместно с языком C++ и использовать именно его, а не автоассемблер из Cheat Engine. Я не смогу раскрыть всё, то что можно сделать, но основы я покажу.

Скачиваем VisualStudio 2010, если вам удобно, то на русском языке. Создаём проект типа Win32, называем его например AppCheatsLib. Перед вами будет мастер проектов, с различными переходами. Отметьте что проект будет создан как dll и будет пустым. У вас создаться пустой проект.

В правом верхнем углу выделяем проект AppCheatsLib.dll и кликаем правой кнопкой мышки чтобы вызвать меню. Выберите добавить-> новый элемент. Там выберите Создать класс. Файл описания назовите CheatsLib.h, а реализации описания CheatsLib.cpp. Уберите предкомпиляцию. У вас создастся два файла.

Пока я хочу показать только такой простой пример. Возьмите какую-нибудь программу или игру. Найдите и запомните в ней адрес параметра, который нужно будет изменить один раз при помощи метода загрузки dll. Допустим этот адрес будет равен 0x0041d090.

А теперь в двух файлах удалите сгенерированных код и напишем свой:

// CheatsLib.h

namespace CheatsLib
{
class Cheats
{
public:
// Write value 1000
static __declspec(dllexport) void Cheat_WriteValue_10000(); // запомните эту экспортируемую функцию

};
}


// CheatsLib.cpp
#include "CheatsLib.h"
#include <windows.h>

namespace CheatsLib
{

void Cheats::Cheat_WriteValue_10000()
{
*(DWORD *)0x0041d090 = 10000; // поставьте свой адрес и своё значение
}

}

После этого найдите выпадающий список вверху с надписью Debug и смените на Realise и теперь собираем проект горячей клавишей F6. Заходим в директорию с проектом ищем папку Realise и в ней наша супер библиотека AppCheatsLib.dll.

ЗапускаемCE. Аттачим CE к процессу вашей игры/программы адрес которой вы нашли. В CE находим функцию внедрения dll из меню и вызываем её. Указываем путь к нашей AppCheatsLib.dll и жмём Ок. Сразу будет сообщение о том, не хотим ли мы запустить какую-то функцию из dll. СОГЛАШАЕМСЯ. И перед нами появится список в котором вы сможете узнать функцию

Cheats::Cheat_WriteValue_10000()

Выбираем её и жмём ОК. После этого значение в игре/программе должно измениться. На этом всё.

Также мы могли бы использовать ассемблерные вставки и много всего-того что можно придумать. НО. Это всё дело довольно сырое. Здесь нет считывания горячих клавиш, нет инъекции кода (мы не затирали инструкции), нет сканера сигнатур, нет контроля активации и деактивации и многого другого. Как будет сделано это много другое, то с успехом можно писать загрузчик dll-ки и этот загрузчик можно будет делать как трейнер, а dll-ку поместить в его ресурсы. Ну а после таких нескольких трейнеров можно строить один общий трейнерМакс, про который я уже говорю чуть ли не каждый пост (самому надоело :) ). Дело времени и дело бодрого настроения реализовать это всё...

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


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

Мне часто пишут, что не могут создать проект .dll. Я создал пустой проект вы сможете скачать отсюда

dllEmptyProject.rar .

Обратите внимание на опции компилятора и компоновщика в свойствах проекта

Проект который я делал в первом посте я похоже удалил и создавать его заново мне лень. Если упорство есть, сами напишите.

Дополнительная информация:

1) Создание пустого проекта модуля (размер упакованной dll-ки 4 кб) -  там вы узнаете как создать пустой проект с экспортируемыми функциями. Но там нет информации обработки события инициализации библиотеки. Её можно найти в пункте 2;

2) Обработки событий связанных с библиотекой (1,2,3);

3) Импортирование и экспортирование - о том как использовать библиотеки;

4) Другая информация включая "Поведение библиотеки времени выполнения" - эта информация возможно пригодится. 

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


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

Вызов процедуры из DLL

Объявление:

DWORD dwLoadOffset = ((DWORD)GetModuleHandle (NULL)-0x400000);
void (__cdecl *AddScore)(int) = (void (__cdecl *)(int))(0xDEADBEEF + dwLoadOffset);

где 0xDEADBEEF адрес процедуры которую мы хотим вызвать в игре

Использование:

AddScore(300);

Тут важно одно - правильно определить какие параметры функции нужны и что она возвращает

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


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

Здесь вызывается не 0xDEADBEEF ("то что мы хотели"), а "0xDEADBEEF + dwLoadOffset".

А почему вычитается "0x400000" ?

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


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

Получение базового адреса процесса. Довольно сомнительный подход, ибо не всегда база экзешника процесса будет равна 0х400000.

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


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

Есть Шеф, убрать не юзать сжечь и тп :closeyes:

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

×

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

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