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

  • Автор темы Автор темы $1and1
  • Дата начала Дата начала
  • 9 тыс.
Ветеран
Статус
Не в сети
Рег
5 Май 2022
Посты
284
Реакции
44
Иногда, играя с какой-нибудь читом, ты думал, Как же его сделали? Смогу ли сделать?
Я попробую показать вам как можно написать простой чит на 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");






Думаю вам был полезен данный гайд!
 
Последнее редактирование:
Полезно
 
Для новичков очень полезно кто собирается в Game Hacking
Чтение и запись в память это основная функция что делают все читы
Респект!
 
Иногда, играя с какой-нибудь читом, ты думал, Как же его сделали? Смогу ли сделать?
Я попробую показать вам как можно написать простой чит на 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?
 
Полезно :)
 
Статья интересная, видел такую на одном форуме, но тут более детальнее всё показывает. Извини за глупый вопрос, но если ты подключил using namespace std; то зачем ты дальше в коде перед cout, пишешь std?
Ошибкой это не будет считаться, можешь писать, можешь не писать, иногда нужно их писать например когда работаешь с файлами заголовка и он не подключен к using namespace std, но тут так же все обходится если подключить ее как extern
 
Ошибкой это не будет считаться, можешь писать, можешь не писать, иногда нужно их писать например когда работаешь с файлами заголовка и он не подключен к using namespace std, но тут так же все обходится если подключить ее как extern
Так вроде если не писать std, то тогда код будет более оптимизирован или нет?
 
а в IDA можно найти адреса? Просто допустим в фортнайте кикает если запущен cheat engine
 
а в IDA можно найти адреса? Просто допустим в фортнайте кикает если запущен cheat engine

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