Закрыть ... [X]

Как сделать чит своими руками

Делать нефиг, выходной, решил рассказать большую часть того, что умею)) сам учусь ещё, и буду учиться всегда...). Есть множество уроков в которых рассказывается как делать читы, но для обычного "Юзера" могут быть они не понятны. В этом уроке я постараюсь объяснить всё так, чтобы было понятно любому новичку. Если вы бог реверсинжиниринга, то вы не узнаете не чего нового из этого урока. И так кратко о программах которые нужны: как не странно нам понадобится CheatEngine, с помощью него мы будем искать значения, так же нам понадобится ReClass, для создания классов, чтобы не писать адрес каждого значения, и естественно нам нужна Visual Studio или Dev-C++ для написания самого чита.
Объяснять я буду на примере GTA San Andreas.
1)И так, для начала ознакомимся с игрой и посмотрим, какие значения мы сможем найти. Сразу видим две полоски в верху экрана, одна здоровье, другая броня, чтобы найти их значение открываем cheat engine и так как это полоска, а значения таких полосок чаще всего float, поэтому ищем не известное значение типа float,

Затем заходим в игру, изменяем значение т.е. делаем так чтобы полоска уменьшилась, переходим в cheat engine и выбираем: значение уменьшилось

затем увеличим значение с помощью чит кода (в других играх можно и аптечкой), и отсеиваем, сказав при этом, что значение увеличилось

проделываем это пока не останется 1-2 значения, и проверяем его: Замораживаем значение

и смотрим в игре если жизни не уменьшаются, то значение правильное.
2) Ищем универсальный статический адрес для наших будущих классов, cтавим бряк, для этого выбираем наш адрес и нажимаем F5, появится окно

заходим в игру и ждём секунду, сворачиваем игру и у нас в этом окне появляются инструкции

в этом окне мы видим вот такую инструкцию 006008BF - D9 86 40050000 - fld dword ptr [esi+00000540], 540 это смещение от базового адреса до адреса с хп, поэтому отнимаем от адреса AB3BA48 смещение 540, получаем AB3B508(адрес динамический), ищем указатель на него, в cheat engine нажимай правой кнопкой по адресу и выбираем pointer scan (по руский будет написанно что-то типо сканирование точек, или поиск точек для адреса, точно не знаю)

Теперь вылезло новое окно, "Настройка поиска", я настрои поиск вот так: поток 1, максимальное смещение 128, максимальный уровень 2

нажму ок.
Теперь выбираем адрес на свой вкус, я выберу gta_sa.exe+76F5F0 + offset 0x00, двойноё щелчёк и он дабавится в таблицу cheat engine, так как этот адрес статический, для удобства я его запишу по другому 0xB6F5F0.
3) Начинаем покорять reclass!
Теперь откроем reclass, выберем процесс, создадим новый класс

Вставим наш адрес (Базовый адрес) и придумаем имя классу

Теперь перейдём к реверсингу, чтобы в будущем не писать всяких больших функций, для поиска адреса по указателям, мы будем реверсить от статического адреса, не зря же в реклассе есть такая штука как pointer, и так как мы помним смещение до первого поинтера у нас было 0x00, по этому открываем в реклассе вкладку Modify, выделяем наш адрес и нажимаем на "кнопку" Pointer с права внизу

Добавляем ещё адресов кнопкой add 1024, чтобы в левой колонке появилось смещение 540, выделяем его и ставим modify->type значение float, затем переименовываем в Hilth, или как хотите, у меня это выглядит вот так:

Теперь найдём координаты игрока, заходим в CE, устанавливаем не извесное значение, ищем, изменяем положение, отсеиваем, я искал значение по z, его легче всего найти... Так же ставим бряк, затем ищем так же как и в первом случае, у меня нашолся указатель с базой gta_sa.exe+76F5F0, а это такой же базовый адрес, как и у нашего хп, и это радует.
Теперь так как полный адрес можно записать вот так (0xB6F5F0 - база, 14 -смещение 1, 30 - смещение 2), мы опять переходим в рекласс и вот:

Назовём наши координаты и сгенерируем наш класс, для того чтобы использовать его на c++


У меня получился код

PHP код:

//Generated using ReClass 2011 by DrUnKeN ChEeTaH

class Player;
class mPlayer;
class Coord;

class Player
{
public:
    mPlayer N02D52422; //0x0000 
char _0x0004[60];

};//Size=0x0040 своими

class mPlayer
{
public:
char _0x0000[20];
    Coord Coordinates; //0x0014 
char _0x0018[1320];
    float HILTH; //0x0540 
char _0x0544[4];
    float ARMOR; //0x0548 
char _0x054C[4852];

};//Size=0x1840

class Coord
{
public:
char _0x0000[48];
    float CoordX; //0x0030 
    float CoordY; //0x0034 
    float CoordZ; //0x0038 
char _0x003C[4];

};//Size=0x0040 

Теперь откроем visual studio, создаём новый проект (приложение win32->> библиотека dll, пустой проект)
Добавляем главный файл (проект, добавить, новый элемент, Файл c++(cpp))Назовём его Main и нажмём ок, затем добавим заголовочный файл (проект, добавить новый элемент, заголовочный файл.h), я назвал его Classes, в нём и будут находиться наши сгенерированные классы.
Теперь в файл Classes.h вставляем нашь код и не много модифицируем класc Pleyer

PHP код:

static Player  Singleton(int addres)
    {
        return  (Player)addres;
    } 
Теперь добавим класс в котором и будут наши функции (Проект-добавить класс), я назову класс Function, в файле Function cpp
объявим переменную, которая будет хранить наш базовый адрес

PHP код:

int BaseAddres = 0xB6F5F0; 
и подключим Классы

PHP код:

#include "Classes.h"
Player myPlayer = Player::Singleton(&BaseAddres); 
Переходим файл Function.h, после деструктора Function объявляем новую функцию,

PHP код:

void Hilth(); 
в файле function.cpp обьявляем прототип

PHP код:

void Function::hilTH()
{

    myPlayer->Point->HILTH = 100.f;


Добавляем заголовочник #include <windows.h>
затем таким же образом создаём функцию Coords и описываем в function.cpp

PHP код:

void Function::Coords()
{
    if (GetKeyState(VK_NUMPAD8))
    {
        myPlayer->Point->Coordinates->CoordX = myPlayer->Point->Coordinates->CoordX+1;
    }
    if (GetKeyState(VK_NUMPAD4))
    {
        myPlayer->Point->Coordinates->CoordX = myPlayer->Point->Coordinates->CoordX - 1;
    }


Теперь переходим в Main.cpp и пишем вот такой код,

PHP код:

#include <Windows.h>
#include "Function.h"
#define new_Thread(Function) CreateThread(0,0,(LPTHREAD_START_ROUTINE)Function,0,0,0);//Создание потоков

Function  funk = new Function;//Новый экземпляр функции
int MainThread()
{
    for (;; Sleep(2))//Бесконечный цикл, спим 0.002 секунды
    {
        funk->hilTH();//вызываем из Function.cpp
        funk->hilTH();

    }

    return 0;//вернём 0
}

BOOL WINAPI DllMain(HMODULE hDll, DWORD dwReason, LPVOID lpReserved)//Запуск dll
{
    if (dwReason == DLL_PROCESS_ATTACH)//Проверка приаттачились ли мы или нет!
    {
        DisableThreadLibraryCalls(hDll);
        
            new_Thread(MainThread);//Запуск функции MainThread() в новом потоке
            
        }

    return TRUE;

Вот улучшил немного классы
Classes.h:

PHP код:

//Generated using ReClass 2011 by DrUnKeN ChEeTaH

class GloballPlayer;
class myPlayerCondition;
class N036F3A76;
class myPlayerCoordinates;
class GlobalOdjects;
class ThePlayerCars;
class ConditionActiveCarPlayer;
class PlayerSkillS;
class MainlandStats;
class RedPoint;

class GloballPlayer
{
public:
    char _0x0000[584];
    float PlayerCamerTopBottom; //0x0248 
    char _0x024C[4];
    float PlayerCameraDistance; //0x0250 
    char _0x0254[4];
    float PlayerCameraCircle; //0x0258 
    char _0x025C[916];
    myPlayerCondition PlayerCondition; //0x05F0 
    char _0x05F4[908];
    __int32 N036CAB05; //0x0980 
    char _0x0984[1724];
static GloballPlayer  Singleton(int addres)
    {
        return  (GloballPlayer)addres;
    }
};//Size=0x1040

class myPlayerCondition
{
public:
    char _0x0000[20];
    myPlayerCoordinates PlayerCoordinats; //0x0014 
    char _0x0018[116];
    float Jump; //0x008C 
    char _0x0090[1200];
    float myPlayerHilth; //0x0540 
    float MaxCondition; //0x0544 
    float myPlayerArmor; //0x0548 
    char _0x054C[116];

};//Size=0x05C0

class N036F3A76
{
public:
    char _0x0000[64];

};//Size=0x0040

class myPlayerCoordinates
{
public:
    char _0x0000[48];
    float Coord_X; //0x0030 
    float Coord_Y; //0x0034 
    float Coord_Z; //0x0038 
    char _0x003C[2052];

};//Size=0x0840

class GlobalOdjects
{
public:
    char _0x0000[2300];
    ThePlayerCars Cars; //0x08FC 
    char _0x0900[832];
static GlobalOdjects  Singleton(int addres)
    {
        return  (GlobalOdjects)addres;
    }

};//Size=0x0C40

class ThePlayerCars
{
public:
    char _0x0000[20];
    ConditionActiveCarPlayer ConditionsOlayerCar; //0x0014 
    char _0x0018[1088];
    float WheelSize; //0x0458 
    char _0x045C[8];
    float ModelDisplay2D; //0x0464 
    char _0x0468[4];
    float ModelDisplay3D; //0x046C 
    char _0x0470[4];
    float ModelDisplay4D; //0x0474 
    char _0x0478[72];
    float HiltActivCar; //0x04C0 
    char _0x04C4[7036];

};//Size=0x2040

class ConditionActiveCarPlayer
{
public:
    float TheDegreeOfRotationOnAxesX; //0x0000 
    float TheDegreeOfRotationOnAxesY; //0x0004 
    float TheDegreeOfRotationOnAxesZ; //0x0008 
    char _0x000C[4];
    float TheBlockModelCoordinatesInAccordanceWithTheReliefX; //0x0010 
    float TheBlockModelCoordinatesInAccordanceWithTheReliefY; //0x0014 
    float TheBlockModelCoordinatesInAccordanceWithTheReliefZ; //0x0018 
    char _0x001C[20];
    float CoordCarX; //0x0030 
    float CoordCarY; //0x0034 
    float CoordCarZ; //0x0038 
    char _0x003C[4];

};//Size=0x0040

class PlayerSkillS
{
public:
    char _0x0000[160];
    __int32 Driving; //0x00A0 
    char _0x00A4[248];
    __int32 Flying; //0x019C 
    char _0x01A0[4];
    __int32 Lung; //0x01A4 
    char _0x01A8[12];
    __int32 Bike; //0x01B4 
    __int32 Cycling; //0x01B8 
    char _0x01BC[8];
    __int32 Luk; //0x01C4 
    char _0x01C8[524];
    float FAT; //0x03D4 
    float Stamine; //0x03D8 
    float Muskule; //0x03DC 
    __int32 N0423A370; //0x03E0 
    float Sexy; //0x03E4 
    char _0x03E8[152];
    float Resepcts; //0x0480 
    char _0x0484[16];
    float Pistol; //0x0494 
    float Silenced; //0x0498 
    float Degl; //0x049C 
    float Shotgan; //0x04A0 
    __int32 Sawn_Off; //0x04A4 
    float ShoutGun; //0x04A8 
    float MachinePistol; //0x04AC 
    float SMG; //0x04B0 
    float AK_47; //0x04B4 
    float M4A1; //0x04B8 
    char _0x04BC[1920];
static PlayerSkillS  Singleton(int addres)
    {
        return  (PlayerSkillS)addres;
    }
};//Size=0x0C3C

class MainlandStats
{
public:
    char _0x0000[2436];
    float Gravitation; //0x0984 
    char _0x0988[3832];

static MainlandStats  Singleton(int addres)
    {
        return  (MainlandStats)addres;
    }

};//Size=0x1880

class N039BCA3E
{
public:
    char _0x0000[1088];

};//Size=0x0440

class RedPoint
{
public:
    char _0x0000[52];
    float CoordRDX; //0x0034 
    float CoordRDY; //0x0038 
    float CoordRDZ; //0x003C 
    char _0x0040[148];
    float twoCoordRDX; //0x00D4 
    float twoCoordRDY; //0x00D8 
    float twoCoordRDZ; //0x00DC 
    char _0x00E0[3936];

static RedPoint  Singleton(int addres)
    {
        return  (RedPoint)addres;
    }

};//Size=0x1040 

При умелом подходе можно использовать лишь 1 адрес.
Более подробно о Reclass вы можете узнать из видеоурок а [Вы должны быть зарегистрированным и не заблокированным пользователем для того чтобы просматривать ссылки зарегистрироваться можно по этой ссылке]
Вот ссылка на исходник Тыч Тыч Тыч Этот исходник подходит для любой мультиплеерной gta (SAMP, CR и т.п.)
Только файлы исходного кода, по этому без VT
С трейнерами приловчусь, и добалю в эту тему). И про RakNet, тоже здесь напишу, когда разберусь)
Источник: http://cheaton.ru/f201/kak-legko-i-prosto-sdelat-chit-12196/


Как создать чит на игру?


Как сделать чит своими руками

Похожие новости


Бублик на волосы своими руками
Можно ли вырастить вишню из косточки в домашних условиях
Подготовка персонала к самостоятельной работе
Быстрые причёски на длинные волосы своими руками в домашних
Отбелить пожелтевшие вещи в домашних условиях
Почистить карбюратор своими руками
Как сделать деньги для world of tanks




ШОКИРУЮЩИЕ НОВОСТИ