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 ограничен по функциональности, но выигрывает за счёт стабильности и маленького порога входа.

Понимание этих различий позволяет корректно оценивать возможности, риски и сложность реализации в каждом конкретном случае.