Статья Гайд для новичков: Пишем первый простой чит

$1and1

Активный
Сообщения
282
Реакции
41
Иногда, играя с какой-нибудь читом, ты думал, Как же его сделали? Смогу ли сделать?
Я попробую показать вам как можно написать простой чит на c++.
Что для этого нужно:
✔️УМЕТЬ РАБОТАТЬ С CHEAT ENGINE(можно посмотреть видео на ютубе если кто не в теме)
✔️VISUAL STUDIO И КАК С НИМ РАБОТАТЬ
В CHEAT ENGINEДЛЯ НАЧАЛА ВЫ НАХОДИТЕ НУЖНЫЙ АДРЕС(КОТОРЫЙ ВЫ ХОТИТЕ ЧТОБЫ ВАШЕ ПРИЛОЖЕНИЕ АВТОМАТИЧЕСКИ МЕНЯЛО ЗНАЧЕНИЕ НА УКАЗАННОЕ)
B VISUAL STUDIO СОЗДАЁМ ПРОЕКТ, ШАБЛОНЫ КОНСОЛЬНОЕ ПРИЛОЖЕНИЕ
И ТАМ ЖЕ ПИШЕМ:

C++:
#include <windows.h>
#include <iostream>
#include <string>
#include <stdio.h>

using namespace std;

int main()
{
    DWORD addr = 0x101454D4;//здесь адрес из Cheat Engine, обратите внимание я поставил впереди 0х и потом адрес
    DWORD pid;//pid процесса
    int data;//эту переменную я буду использовать для записи и чтения
 
 
    HWND hwd = FindWindow(0, L"Counter-Strike");
    GetWindowThreadProcessId(hwd, &pid);
    if (!hwd) {
        std::cout << "Нету такого окна!" << endl;
        //printf("oppa");
        system("pause");
        return -1;
    }
    HANDLE hnd = OpenProcess(PROCESS_ALL_ACCESS, false, pid);
    if (!hnd) {
        std::cout << "Ошибка!" << endl;
        system("pause");
        return -1;
    }
    ReadProcessMemory(hnd, (LPVOID)addr, &data, sizeof(nmon), 0);
    std::cout << "Значение в Адресе: " <<data<<endl;
 
    std::cout << "На что вы хотите поменять значение: ";
    std::cin >> data;
 
    WriteProcessMemory(hnd, (LPVOID)addr, &data, sizeof(nmon), 0);
    std::cout<<"Значение изменено!"
 
    system("pause");
}
Вот сам код, я попробую объяснить его.
Подключаем что нам нужно:
C++:
#include <windows.h>
#include <iostream>
#include <string>
#include <stdio.h>

using namespace std;


Создаём переменные
C++:
DWORD addr = 0x101454D4;//здесь адрес из Cheat Engine, обратите внимание я поставил впереди 0х и потом адрес
DWORD pid;



ПОлучаем pid процесса, обратите внимание, я использовал название окна и находил его pid, но вы можете делать так, как показывал дарвин

Для просмотра скрытого содержимого вы должны авторизироваться или зарегистрироваться

C++:
HWND hwd = FindWindow(0, L"Counter-Strike");
GetWindowThreadProcessId(hwd, &pid);
если делайте как дарвин вот код:
C++:
pid=GetProcessID("csgo.exe");




Проверка, есть ли такое окно,
C++:
if (!hnd) {
        std::cout << "Ошибка!" << endl;
        system("pause");
        return -1;
}
обратите внимание если вы сделали как дарвин то проверку рекомендуется сделать так:
C++:
if (!pid) {
        std::cout << "Ошибка!" << endl;
        system("pause");
        return -1;
}






тут мы читаем то, что лежит в указанном адресе(addr) и выводим на экран
C++:
ReadProcessMemory(hnd, (LPVOID)addr, &data, sizeof(nmon), 0);
std::cout << "Значение в Адресе: " << data<<endl;





тут мы меняем значение в памяти игры:
C++:
std::cout << "На что вы хотите поменять значение: ";
std::cin >> data;

WriteProcessMemory(hnd, (LPVOID)addr, &data, sizeof(nmon), 0);
std::cout<<"Значение изменено!"
 
system("pause");






Думаю вам был полезен данный гайд!
 
Последнее редактирование:

Darwin

Команда форума
Администратор
Сообщения
815
Реакции
390
Для новичков очень полезно кто собирается в Game Hacking
Чтение и запись в память это основная функция что делают все читы
Респект!
 

010010010100

Активный
Сообщения
266
Реакции
104
Иногда, играя с какой-нибудь читом, ты думал, Как же его сделали? Смогу ли сделать?
Я попробую показать вам как можно написать простой чит на c++.
Что для этого нужно:
✔️УМЕТЬ РАБОТАТЬ С CHEAT ENGINE(можно посмотреть видео на ютубе если кто не в теме)
✔️VISUAL STUDIO И КАК С НИМ РАБОТАТЬ
В CHEAT ENGINEДЛЯ НАЧАЛА ВЫ НАХОДИТЕ НУЖНЫЙ АДРЕС(КОТОРЫЙ ВЫ ХОТИТЕ ЧТОБЫ ВАШЕ ПРИЛОЖЕНИЕ АВТОМАТИЧЕСКИ МЕНЯЛО ЗНАЧЕНИЕ НА УКАЗАННОЕ)
B VISUAL STUDIO СОЗДАЁМ ПРОЕКТ, ШАБЛОНЫ КОНСОЛЬНОЕ ПРИЛОЖЕНИЕ
И ТАМ ЖЕ ПИШЕМ:

C++:
#include <windows.h>
#include <iostream>
#include <string>
#include <stdio.h>

using namespace std;

int main()
{
    DWORD addr = 0x101454D4;//здесь адрес из Cheat Engine, обратите внимание я поставил впереди 0х и потом адрес
    DWORD pid;//pid процесса
    int data;//эту переменную я буду использовать для записи и чтения
 
 
    HWND hwd = FindWindow(0, L"Counter-Strike");
    GetWindowThreadProcessId(hwd, &pid);
    if (!hwd) {
        std::cout << "Нету такого окна!" << endl;
        //printf("oppa");
        system("pause");
        return -1;
    }
    HANDLE hnd = OpenProcess(PROCESS_ALL_ACCESS, false, pid);
    if (!hnd) {
        std::cout << "Ошибка!" << endl;
        system("pause");
        return -1;
    }
    ReadProcessMemory(hnd, (LPVOID)addr, &data, sizeof(nmon), 0);
    std::cout << "Значение в Адресе: " <<data<<endl;
 
    std::cout << "На что вы хотите поменять значение: ";
    std::cin >> data;
 
    WriteProcessMemory(hnd, (LPVOID)addr, &data, sizeof(nmon), 0);
    std::cout<<"Значение изменено!"
 
    system("pause");
}
Вот сам код, я попробую объяснить его.
Подключаем что нам нужно:
C++:
#include <windows.h>
#include <iostream>
#include <string>
#include <stdio.h>

using namespace std;


Создаём переменные
C++:
DWORD addr = 0x101454D4;//здесь адрес из Cheat Engine, обратите внимание я поставил впереди 0х и потом адрес
DWORD pid;



ПОлучаем pid процесса, обратите внимание, я использовал название окна и находил его pid, но вы можете делать так, как показывал дарвин

Для просмотра скрытого содержимого вы должны авторизироваться или зарегистрироваться

C++:
HWND hwd = FindWindow(0, L"Counter-Strike");
GetWindowThreadProcessId(hwd, &pid);
если делайте как дарвин вот код:
C++:
pid=GetProcessID("csgo.exe");




Проверка, есть ли такое окно,
C++:
if (!hnd) {
        std::cout << "Ошибка!" << endl;
        system("pause");
        return -1;
}
обратите внимание если вы сделали как дарвин то проверку рекомендуется сделать так:
C++:
if (!pid) {
        std::cout << "Ошибка!" << endl;
        system("pause");
        return -1;
}






тут мы читаем то, что лежит в указанном адресе(addr) и выводим на экран
C++:
ReadProcessMemory(hnd, (LPVOID)addr, &data, sizeof(nmon), 0);
std::cout << "Значение в Адресе: " << data<<endl;





тут мы меняем значение:
C++:
std::cout << "На что вы хотите поменять значение: ";
std::cin >> data;

WriteProcessMemory(hnd, (LPVOID)addr, &data, sizeof(nmon), 0);
std::cout<<"Значение изменено!"
 
system("pause");






Думаю вам был полезен данный гайд!
Статья интересная, видел такую на одном форуме, но тут более детальнее всё показывает. Извини за глупый вопрос, но если ты подключил using namespace std; то зачем ты дальше в коде перед cout, пишешь std?
 

Darwin

Команда форума
Администратор
Сообщения
815
Реакции
390
Статья интересная, видел такую на одном форуме, но тут более детальнее всё показывает. Извини за глупый вопрос, но если ты подключил using namespace std; то зачем ты дальше в коде перед cout, пишешь std?
Ошибкой это не будет считаться, можешь писать, можешь не писать, иногда нужно их писать например когда работаешь с файлами заголовка и он не подключен к using namespace std, но тут так же все обходится если подключить ее как extern
 

010010010100

Активный
Сообщения
266
Реакции
104
Ошибкой это не будет считаться, можешь писать, можешь не писать, иногда нужно их писать например когда работаешь с файлами заголовка и он не подключен к using namespace std, но тут так же все обходится если подключить ее как extern
Так вроде если не писать std, то тогда код будет более оптимизирован или нет?
 

Refrine

Следопыт
Сообщения
54
Реакции
10
а в IDA можно найти адреса? Просто допустим в фортнайте кикает если запущен cheat engine
 

Nowane

Следопыт
Сообщения
71
Реакции
25
а в IDA можно найти адреса? Просто допустим в фортнайте кикает если запущен cheat engine

используй вместо Cheat Engine крякованный Cheat Engine. Называется Lunar Engine. То есть пересобрали и изменили в программе имена, название и упоминания cheat engine, чтобы не кикало.
 
Верх Низ