интересно какие виды читов вообще бывают
Для начала стоит понимать адресные пространства.
Есть физическая память, она находится в планках оперативки (ОЗУ).
Но есть также виртуальная память, или виртуальное адресное пространство, такое есть у каждого процесса, и у каждого из них оно свое, то есть одни и те же адреса в разных процессах указывают в разные места в озу. Виртуальные адреса в итоге сопоставляются на какие то физические. Каждый процесс отщипывает себе нужное количество физической памяти для своей виртуальной памяти.
Все виды читов следуют из этого:
У процесса игры свое адресное пространство, интернал это когда чит сам является частью адресного пространства игры, например если подгружен туда как библиотека (dll), или замаплен каким-то другим образом. У интернала много возможностей, т.к. ты можешь перехватывать любые функции, изменять поток кода и вообще быть с игрой на ты. Но так же и большой минус детектируемости, интернал сложнее скрыть от античита. Т.к. у чита есть память, он исполняется в процессе игры, все это позволяет его отследить.
Экстернал же, это когда ты работаешь с игрой из отдельного процесса. То есть у тебя свое адресное пространство и чтобы прочитать/записать что-то, тебе придется делать запросы в ядро, где ядро перейдет в контекст нужного процесса, поработает с памятью, и вернется в твой контекст. Из этого следует что как минимум тебе нужен хэндл для работы с процессом, опять же античит может запрещать открытие процесса из ядра например, или следить за тем кто получал хэндлы. Кроме этого, ты не синхронизирован с игрой, все что ты можешь это читать/записывать память раз в какой то интервал, но ты никогда не сможешь это делать например каждый кадр. Так же нельзя ничего перехватить, можно лишь как-то пропатчить функции. Поэтому экстерналы обычно скромнее в функционале.
Теперь по ядру, ядро на самом деле это тоже процесс ntoskrnl.exe, просто он крутится на высоком уровне привилегий. А драйверы (.sys) это просто .dll-ки для ядра. Из ядра ты можешь работать с памятью процесса без хэндла вовсе, или даже напрямую работать с физической памятью. Так же ядерный чит сложнее обнаружить если античит крутится в юзермоде. Но есть куча минусов. Во первых попасть туда сложно, в норме для драйверов нужна цифровая подпись, которую для чита раздобыть маловероятно, поэтому используют всякие уязвимые драйвера, и с их помощью маппят (инжектят) свои драйвера. Кроме этого возрастает цена ошибки, если в случае интернала ты прочтешь или запишешь невалидную память (или как то иначе испортишь игру), то упадет только процесс игры, если в экстернале у тебя будет исключение, то упадет только процесс чита, даже игра останется жить, а в ядре же одна ошибка и ты получаешь BSOD - синий экран смерти, комп перезагружается. Так же и тяжелее разрабатывать читы, потому что отлаживать на своем компьютере не выйдет (нужна виртуальная машина), при краше тратишь время и т.д.
Иногда используют гибридные варианты, когда чтение/запись реализованы в драйвере в обход всех мер безопасности, а сам чит крутится в .exe.
Эту тему на самом деле можно развивать бесконечно, можно залезть и в гипервизоры, которые выше даже уровня ядра.
Или бывают которые работают на уровне UEFI.
Все это следствие борьбы античитов с читами, чем сильнее античит прижимает, тем более сложные методы приходится использовать.