Internal vs External
В контексте читов существуют два понятия - Internal и External читы.
Они используются для обозначения двух принципиально разных подходов к вмешательству в работу игры. Различия между ними касаются архитектуры, способа внедрения, уровня доступа к данным игры и рисков обнаружения античитами.
Что такое Internal читы
Internal чит - это код, который разработан, чтобы напрямую внедряться в процесс игры и быть выполненным внутри её адресного пространства.
Как работают Internal читы
- загружаются в память игры через DLL-инъекцию
- получают прямой доступ к игровым структурам данных
- перехватывают и используют функции игрового движка
- работают в том же процессе, что и игра
Из преимуществ интернал читов можно выделить высокую скорость работы, поскольку нет затрат на выполнение WinApi-запросов, а код выполняется со скоростью выполнения кода игры. Используя этот подход мы так же получаем возможность вызывать внутренние функции у игровых объектов или отслеживать их моменты выполнения. Это позволяет реализовывать более разнообразный функционал в чите. Но отсюда вытекает и очевидный минус - сложность разработки. Мы работаем с сырой памятью и указателями внутри процесса и у нас нет права на ошибку. Одно неправильное разыменование указателя, и мы получим вылет. Так же если мы хотим видеть противников и иметь графический интерфейс, то нам придётся хукать функции связанные с рендерингом, что сильно усложняет жизнь новичкам. Функция, которую нужно будет хукать, зависит от API, которое использует игра, например в случае с DirectX 10 / 11 это будет IDXGISwapChain::Present.
При создании такого типа чита используется проект типа Dynamic-Link Library и код компилируется в .dll файл.
Вот каким образом в этом случае выглядит точка входа приложения:
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
//И тут мы уже можем выполнять действия с памятью
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Что такое External читы
External читы - это код, который разработан, работать вне адресного пространства целевого процесса игры и взаимодействует с ней через операционную систему.
Как работают External читы
- читают и записывают память игры извне
- не внедряются в процесс
- используют системные функции API
- используют свой рендеринг
Преимущество такого подхода заключается в том, что мы сами вольны в выборе API рендеринга, и можно просто использовать один шаблон для любой игры. Но тут мы получаем некоторые сложности с тем, что у нас нет такой скорости как при интернал подходе, по причине временных затрат на вызов API функций для взаимодействия с памятью. Также, при интернал подходе мы ограничены чтением и записью памяти - мы не можем вызывать функции внутри процесса игры и приходится выкручиваться используя ASM-модификации.
Точка входа в external-чите выглядит в большинстве случаев следующим образом:
INT APIENTRY WinMain(HINSTANCE instance, HINSTANCE, PSTR, INT cmd_show) {
while (true){
//тут мы в бесконечном цикле выполняем рендеринг нашего окна
}
}
Основные различия Internal и External читов
| Критерий | Internal | External |
|---|---|---|
| Место работы | Внутри процесса игры | Вне процесса игры |
| Доступ к памяти | Полный | Ограниченный |
| Доступ к функциям | Полный | Минимальный |
| Скорость | Высокая | Ниже |
| Сложность разработки | Высокая | Средняя |
Что выбрать: Internal или External
Выбор подхода зависит от задач:
- Internal подходит, если требуется максимальный контроль и глубокая интеграция
- External предпочтителен при фокусе на простоте или при сложностях применения internal-подхода
Вывод
Internal и External читы отличаются не «качеством», а архитектурой и уровнем вмешательства. Internal обеспечивает полный доступ и максимальные возможности, но сложен в реализации. External ограничен по функциональности, но выигрывает за счёт стабильности и маленького порога входа.
Понимание этих различий позволяет корректно оценивать возможности, риски и сложность реализации в каждом конкретном случае.