Гайд Как писать читы на C# (BunnyHop)

Статус
В этой теме нельзя размещать новые ответы.
  • ShDVR
  • Контент постер
  • 40
  • 10
Я не буду объяснять, как создавать проекты в VisualStudio и тому подобное, будем считать, что те, кто читают этот гайд, хотя бы немного разбираются в том, как создавать и работать с проектами в визуалке.

1)Первым делом нужно скачать библиотеку на GitHub:NativeManager
2)Скомпилируйте эту библиотеку у себя на компьютере
3)Создайте свой проект с будущим читом
4)Через ссылки добавьте NativeManager в свой проект
5)Приступаем к разработке!!!!

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Чит мы будем создавать на примере игры CS:GO

1)После того как мы создали проект с читом, нам нужно добавить ссылки на пространства имен нашего NativeManager'a
using System.MemoryInteraction;

2)В NativeManager есть 2 класса для работы с памятью
  1. SimpleMemoryManager
  2. MemoryManager(Производный класс от SimpleMemoryManager)
Мы будем использовать класс MemoryManager, так как в нем реализованы методы, которые позволяют нам без дополнительных усилий прочитать данные из памяти процесса.

3)Пишем код для присоединения к процессу игры
ВАЖНО!!!
Игра должна быть запущена раньше чита, иначе мы словим исключение, что такого процесса не существует!
C#:
Process process = Process.GetProcessesByName("csgo")[0];
MemoryManager memory = process.GetMemoryManager();
В первой строчке кода мы указали, что нам нужен процесс с именем "CSGO".
Во второй строчке кода мы указали, что нам нужно получить экземпляр MemoryManager для работы с виртуальной памятью процесса.

4)Следующим этапом нам нужно получить модули процесса, с которыми нам нужно работать, что бы прочитать нужные нам данные
C#:
IntPtr client = process.GetModule("client.dll").BaseAddress;
5)Создаем бесконечный цикл для того, что бы наш чит постоянно читал данные из игры и мог так же в нее записывать.
C#:
while(true)
{

}
6)Теперь нам нужно получить локального игрока из игры. Для этого в цикле нам нужно написать вот такой код
C#:
IntPtr localPlayer = memory.Read<IntPtr>(client + 0xD3FC5C);
Число 0xD3FC5C может меняться с каждым обновлением игры. Следить за обновлением оффсетов можно на GitHub по этой ссылке:hazedumper

7)Мы получили локального игрока, теперь нам нужно получить его флаг. С помощью него мы будем понимать в прыжке он или нет
C#:
 int flag = memory.Read<int>(localPlayer + 0x104);
8)Для начала сделаем проверку на нажатие кнопки пробела
Этот код нужно добавить в любой из классов
C#:
[DllImport("user32.dll")]
static extern bool GetAsyncKeyState(int vKey);
А этот код в наш цикл после получения флага
C#:
if (GetAsyncKeyState(32))
{

}
9)Теперь нам нужно сделать проверку, находится игрок в воздухе или на земле. Для этого нужно добавить этот код в условие проверки нажатия клавиши пробел
C#:
 if(flag == 256 || flag == 262)
{

}
10)В этом условии нам нужно сделать запись в память игры, что бы делать прыжок, когда мы оказываемся на земле
C#:
if (flag == 256 || flag == 262)
{
     memory.Write(client + 0x51FE22C, 4);
}
else
{
     memory.Write(client + 0x51FE22C, 5);
}
На этом все. Мы написали такой маленький и легкий код, с помощью которого наш персонаж может прыгать без остановок.
Надеюсь, я объяснил все доходчиво и понятно. Если будут какие то вопросы, то с удовольствием отвечу вам на них в комментариях.
А вот подарок тем, кто не хочет копировать код по частям.

C#:
Process process = Process.GetProcessesByName("csgo")[0];
            MemoryManager memory = process.GetMemoryManager();

            IntPtr client = process.GetModule("client.dll").BaseAddress;

            while(true)
            {
                IntPtr localPlayer = memory.Read<IntPtr>(client + 0xD3FC5C);

                int flag = memory.Read<int>(localPlayer + 0x104);

                if (GetAsyncKeyState(32))
                {
                    if (flag == 256 || flag == 262)
                    {
                        memory.Write(client + 0x51FE22C, 4);
                    }
                    else
                    {
                        memory.Write(client + 0x51FE22C, 5);
                    }
                }

                Thread.Sleep(1);
            }
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу