Вопрос Как VAC обнаруживает External читы?

Начинающий
Статус
Оффлайн
Регистрация
26 Апр 2022
Сообщения
28
Реакции[?]
2
Поинты[?]
0
Хочу сделать свой собственный чит,
Чтоб не детектился. Я слышал, что valve детектит External читы по сигнатурам. Это их единственный способ узнать, читерю я или нет?
 
midnight.im
Администратор
Статус
Оффлайн
Регистрация
1 Июл 2015
Сообщения
1,648
Реакции[?]
2,144
Поинты[?]
135K
Перед тем как писать чит для начала изучи как работает античит.

Вальв дампят все процессы которые имеют открытые хендлы к ксго. даже если там нет флага на запись
 
Пользователь
Статус
Оффлайн
Регистрация
29 Дек 2018
Сообщения
416
Реакции[?]
109
Поинты[?]
2K
Хочу сделать свой собственный чит,
Чтоб не детектился. Я слышал, что valve детектит External читы по сигнатурам. Это их единственный способ узнать, читерю я или нет?
Vector, углы обзора, неправильный подход к записи памяти. И много чего.
 
  • Печально
Реакции: sove
Пользователь
Статус
Оффлайн
Регистрация
29 Дек 2018
Сообщения
416
Реакции[?]
109
Поинты[?]
2K
Вальв дампят все процессы которые имеют открытые хендлы к ксго. даже если там нет флага на запись
А как тогда реализовать обычный bhop? Там без хэндла и записи памяти никак. Все externalы в пуб. доступе используют handle.
 
Забаненный
Статус
Оффлайн
Регистрация
19 Янв 2022
Сообщения
50
Реакции[?]
18
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Пользователь
Статус
Оффлайн
Регистрация
29 Дек 2018
Сообщения
416
Реакции[?]
109
Поинты[?]
2K
Пользователь
Статус
Оффлайн
Регистрация
17 Янв 2020
Сообщения
383
Реакции[?]
64
Поинты[?]
2K
Не сможешь. На bhop только как-то реализовать через mouse scroll input или эмулировать нажатие.. Чуваки писали что можно через Arduino.
Arduino для VAC куда катиться мир
 
Today is the day I live
Пользователь
Статус
Оффлайн
Регистрация
2 Июл 2020
Сообщения
125
Реакции[?]
237
Поинты[?]
66K
Хочу сделать свой собственный чит,
Чтоб не детектился. Я слышал, что valve детектит External читы по сигнатурам. Это их единственный способ узнать, читерю я или нет?
Я не изучал VAC,но знаю, что он просматривает открытые HANDLE к своему процессу(что и сказал Blick1337) т.к это единственный способ обнаружить присоединённый HANDLE к вашему процессу.
Пояснение работы обнаружение:
В NtQuerySystemInformation существуют классы SystemHandleInformation/SystemExtendedHandleInformation,который передают информацию об открытых HANDLE'ах.
Всякий раз,когда вы вызываете OpenProcess/NtOpenProcess вызывается
Пожалуйста, авторизуйтесь для просмотра ссылки.
,который вызывает
Пожалуйста, авторизуйтесь для просмотра ссылки.
.
Вот сам пример кода обнаружение открытого HANDLE к вас:
C++:
typedef struct _OBJECT_FULL_HANDLE_INFORMATION
{
    HANDLE handle;
    INT ObjectTypeIndex;
    PVOID Object;
} OBJECT_FULL_HANDLE_INFORMATION, * POBJECT_FULL_HANDLE_INFORMATION;


INLINE auto is_object_exist_proc(PSYSTEM_HANDLE_INFORMATION handle_info, PVOID Object, INT pid, ULONG access = NULL) -> ULONG
{
    ULONG number = NULL;
    for (ULONG i = NULL; i < handle_info->NumberOfHandles; i++)
    {
        SYSTEM_HANDLE_TABLE_ENTRY_INFO handleInfo = handle_info->Handles[i];
        if (handleInfo.UniqueProcessId == pid)
        {
            if (handleInfo.Object == Object && access)
            {
                if ((handleInfo.GrantedAccess & access) != NULL)
                {
                    std::cout << "handle value ->\t" << std::hex << handleInfo.HandleValue << '\n';
                    number++;
                }
            }
            else if (handleInfo.Object == Object)
            {
                std::cout << "handle value ->\t" << std::hex << handleInfo.HandleValue << '\n';
                number++;
            }
        }
    }
    return number;
}


//Only mutate code
class handle_attached
{
private:

    PVOID nt_close = NULL;
    PVOID nt_query_system_information = NULL;
    PVOID nt_query_object = NULL;
    PVOID nt_dublicate_object = NULL;
    OBJECT_FULL_HANDLE_INFORMATION process_query_inf = { NULL };


    INLINE auto init_struct() -> bool
    {
        if (nt_close && nt_query_system_information)
            return TRUE;

        nt_close = LI_FN(NtClose).nt_cached();
        nt_query_system_information = LI_FN(NtQuerySystemInformation).nt_cached();
        nt_query_object = LI_FN(NtQueryObject).nt_cached();
        nt_dublicate_object = LI_FN(NtDuplicateObject).nt_cached();
        return nt_close && nt_query_system_information && nt_query_object && nt_dublicate_object;
    }
public:

    NO_INLINE auto is_handle_attached() -> VOID
    {

        bool is_detect = FALSE;
        ULONG access_process = PROCESS_VM_WRITE | PROCESS_VM_READ;
        INT old_pid = NULL;
        ULONG ret_lenght = NULL;
        PVOID buffer = NULL;
        NTSTATUS nt_status = STATUS_UNSUCCESSFUL;

        if (!init_struct())
            return;

        if (
            process_query_inf.ObjectTypeIndex
            )
        {
            process_query_inf.handle= NULL;
            goto start_check;
        }
        process_query_inf.handle= OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, (DWORD)NtCurrentTeb()->ClientId.UniqueProcess);
        if (process_query_inf.handle)
        {
        start_check:

            nt_status = reinterpret_cast<decltype(&NtQuerySystemInformation)>(nt_query_system_information)(SystemHandleInformation, &ret_lenght, ret_lenght, &ret_lenght);
            while (nt_status == STATUS_INFO_LENGTH_MISMATCH)
            {
                if (buffer != NULL)
                    crt_wrapper::free(buffer);

                buffer = crt_wrapper::malloc(ret_lenght);
                nt_status = reinterpret_cast<decltype(&NtQuerySystemInformation)>(nt_query_system_information)(SystemHandleInformation, buffer, ret_lenght, &ret_lenght);
            }

            if (!NT_SUCCESS(nt_status))
            {
                goto close_handle;
            }
            //Get  informathion about object
            auto handle_info = reinterpret_cast<PSYSTEM_HANDLE_INFORMATION>(buffer);

            //We have type
            if (
                !process_query_inf.ObjectTypeIndex
                )
            {
                for (ULONG i = NULL; i < handle_info->NumberOfHandles; i++)
                {
                    SYSTEM_HANDLE_TABLE_ENTRY_INFO handleInfo = handle_info->Handles[i];
                    if (handleInfo.UniqueProcessId == reinterpret_cast<USHORT>(NtCurrentTeb()->ClientId.UniqueProcess))
                    {
                        if (handleInfo.HandleValue == reinterpret_cast<USHORT>(process_query_inf.handle))
                        {
                            process_query_inf.ObjectTypeIndex = handleInfo.ObjectTypeIndex;
                            process_query_inf.Object = handleInfo.Object;
                        }
                    }
                }
            }

            handle_info = reinterpret_cast<PSYSTEM_HANDLE_INFORMATION>(buffer);
            for (ULONG i = NULL; i < handle_info->NumberOfHandles; i++)
            {
                SYSTEM_HANDLE_TABLE_ENTRY_INFO handleInfo = handle_info->Handles[i];
                if (old_pid != handleInfo.UniqueProcessId && handleInfo.UniqueProcessId != reinterpret_cast<USHORT>(NtCurrentTeb()->ClientId.UniqueProcess))//Try optimizathion by don't check not corrupted PID
                {
                    old_pid = handleInfo.UniqueProcessId;
                    if(
                        is_object_exist_proc(handle_info, process_query_inf.Object, handleInfo.UniqueProcessId, access_process)
                        )
                    {
                       std::cout << "PID attached ->\t" << std::dec << handleInfo.UniqueProcessId << '\n';
                    }

                }

            }

        }

    close_handle:

        crt_wrapper::free(buffer);
        if (process_query_inf.handle)
            reinterpret_cast<decltype(&NtClose)>(nt_close)(process_query_inf.handle);
        return;
}
Screenshot_1103 (1).png
При написания чита, просто помните, что не нужно поднимать красные флаги AC(особенно на серверной части)
Не сможешь. На bhop только как-то реализовать через mouse scroll input или эмулировать нажатие.. Чуваки писали что можно через Arduino.
В чём проблема юзать в ядре
Пожалуйста, авторизуйтесь для просмотра ссылки.
или Ke/KiStackAttachProcess +SEH + ProceForRead/Write (или просто проверить Address + Length < MmUserProbeAddress) или перейти на чтение/записи
Пожалуйста, авторизуйтесь для просмотра ссылки.
в крайнем случае.
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
26 Апр 2022
Сообщения
28
Реакции[?]
2
Поинты[?]
0
Перед тем как писать чит для начала изучи как работает античит.

Вальв дампят все процессы которые имеют открытые хендлы к ксго. даже если там нет флага на запись
Спасибо
Я не изучал VAC,но знаю, что он просматривает открытые HANDLE к своему процессу(что и сказал Blick1337) т.к это единственный способ обнаружить присоединённый HANDLE к вашему процессу.
Пояснение работы обнаружение:
В NtQuerySystemInformation существуют классы SystemHandleInformation/SystemExtendedHandleInformation,который передают информацию об открытых HANDLE'ах.
Всякий раз,когда вы вызываете OpenProcess/NtOpenProcess вызывается
Пожалуйста, авторизуйтесь для просмотра ссылки.
,который вызывает
Пожалуйста, авторизуйтесь для просмотра ссылки.
.
Вот сам пример кода обнаружение открытого HANDLE к вас:
C++:
typedef struct _OBJECT_FULL_HANDLE_INFORMATION
{
    HANDLE handle;
    INT ObjectTypeIndex;
    PVOID Object;
} OBJECT_FULL_HANDLE_INFORMATION, * POBJECT_FULL_HANDLE_INFORMATION;


INLINE auto is_object_exist_proc(PSYSTEM_HANDLE_INFORMATION handle_info, PVOID Object, INT pid, ULONG access = NULL) -> ULONG
{
    ULONG number = NULL;
    for (ULONG i = NULL; i < handle_info->NumberOfHandles; i++)
    {
        SYSTEM_HANDLE_TABLE_ENTRY_INFO handleInfo = handle_info->Handles[i];
        if (handleInfo.UniqueProcessId == pid)
        {
            if (handleInfo.Object == Object && access)
            {
                if ((handleInfo.GrantedAccess & access) != NULL)
                {
                    std::cout << "handle value ->\t" << std::hex << handleInfo.HandleValue << '\n';
                    number++;
                }
            }
            else if (handleInfo.Object == Object)
            {
                std::cout << "handle value ->\t" << std::hex << handleInfo.HandleValue << '\n';
                number++;
            }
        }
    }
    return number;
}


//Only mutate code
class handle_attached
{
private:

    PVOID nt_close = NULL;
    PVOID nt_query_system_information = NULL;
    PVOID nt_query_object = NULL;
    PVOID nt_dublicate_object = NULL;
    OBJECT_FULL_HANDLE_INFORMATION process_query_inf = { NULL };


    INLINE auto init_struct() -> bool
    {
        if (nt_close && nt_query_system_information)
            return TRUE;

        nt_close = LI_FN(NtClose).nt_cached();
        nt_query_system_information = LI_FN(NtQuerySystemInformation).nt_cached();
        nt_query_object = LI_FN(NtQueryObject).nt_cached();
        nt_dublicate_object = LI_FN(NtDuplicateObject).nt_cached();
        return nt_close && nt_query_system_information && nt_query_object && nt_dublicate_object;
    }
public:

    NO_INLINE auto is_handle_attached() -> VOID
    {

        bool is_detect = FALSE;
        ULONG access_process = PROCESS_VM_WRITE | PROCESS_VM_READ;
        INT old_pid = NULL;
        ULONG ret_lenght = NULL;
        PVOID buffer = NULL;
        NTSTATUS nt_status = STATUS_UNSUCCESSFUL;

        if (!init_struct())
            return;

        if (
            process_query_inf.ObjectTypeIndex
            )
        {
            process_query_inf.handle= NULL;
            goto start_check;
        }
        process_query_inf.handle= OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, (DWORD)NtCurrentTeb()->ClientId.UniqueProcess);
        if (process_query_inf.handle)
        {
        start_check:

            nt_status = reinterpret_cast<decltype(&NtQuerySystemInformation)>(nt_query_system_information)(SystemHandleInformation, &ret_lenght, ret_lenght, &ret_lenght);
            while (nt_status == STATUS_INFO_LENGTH_MISMATCH)
            {
                if (buffer != NULL)
                    crt_wrapper::free(buffer);

                buffer = crt_wrapper::malloc(ret_lenght);
                nt_status = reinterpret_cast<decltype(&NtQuerySystemInformation)>(nt_query_system_information)(SystemHandleInformation, buffer, ret_lenght, &ret_lenght);
            }

            if (!NT_SUCCESS(nt_status))
            {
                goto close_handle;
            }
            //Get  informathion about object
            auto handle_info = reinterpret_cast<PSYSTEM_HANDLE_INFORMATION>(buffer);

            //We have type
            if (
                !process_query_inf.ObjectTypeIndex
                )
            {
                for (ULONG i = NULL; i < handle_info->NumberOfHandles; i++)
                {
                    SYSTEM_HANDLE_TABLE_ENTRY_INFO handleInfo = handle_info->Handles[i];
                    if (handleInfo.UniqueProcessId == reinterpret_cast<USHORT>(NtCurrentTeb()->ClientId.UniqueProcess))
                    {
                        if (handleInfo.HandleValue == reinterpret_cast<USHORT>(process_query_inf.handle))
                        {
                            process_query_inf.ObjectTypeIndex = handleInfo.ObjectTypeIndex;
                            process_query_inf.Object = handleInfo.Object;
                        }
                    }
                }
            }

            handle_info = reinterpret_cast<PSYSTEM_HANDLE_INFORMATION>(buffer);
            for (ULONG i = NULL; i < handle_info->NumberOfHandles; i++)
            {
                SYSTEM_HANDLE_TABLE_ENTRY_INFO handleInfo = handle_info->Handles[i];
                if (old_pid != handleInfo.UniqueProcessId && handleInfo.UniqueProcessId != reinterpret_cast<USHORT>(NtCurrentTeb()->ClientId.UniqueProcess))//Try optimizathion by don't check not corrupted PID
                {
                    old_pid = handleInfo.UniqueProcessId;
                    if(
                        is_object_exist_proc(handle_info, process_query_inf.Object, handleInfo.UniqueProcessId, access_process)
                        )
                    {
                       std::cout << "PID attached ->\t" << std::dec << handleInfo.UniqueProcessId << '\n';
                    }

                }

            }

        }

    close_handle:

        crt_wrapper::free(buffer);
        if (process_query_inf.handle)
            reinterpret_cast<decltype(&NtClose)>(nt_close)(process_query_inf.handle);
        return;
}
Посмотреть вложение 238160
При написания чита, просто помните, что не нужно поднимать красные флаги AC(особенно на серверной части)

В чём проблема юзать в ядре
Пожалуйста, авторизуйтесь для просмотра ссылки.
или Ke/KiStackAttachProcess +SEH + ProceForRead/Write (или просто проверить Address + Length < MmUserProbeAddress) или перейти на чтение/записи
Пожалуйста, авторизуйтесь для просмотра ссылки.
в крайнем случае.
спасибо огромное за информацию!
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
7 Фев 2023
Сообщения
6
Реакции[?]
0
Поинты[?]
0
Попробуй инжектить не напрямую, а через программу транзистор, такую как Discord, например.
 
Начинающий
Статус
Оффлайн
Регистрация
26 Апр 2022
Сообщения
28
Реакции[?]
2
Поинты[?]
0
спасибо огромное за информацию
Я не изучал VAC,но знаю, что он просматривает открытые HANDLE к своему процессу(что и сказал Blick1337) т.к это единственный способ обнаружить присоединённый HANDLE к вашему процессу.
Пояснение работы обнаружение:
В NtQuerySystemInformation существуют классы SystemHandleInformation/SystemExtendedHandleInformation,который передают информацию об открытых HANDLE'ах.
Всякий раз,когда вы вызываете OpenProcess/NtOpenProcess вызывается
Пожалуйста, авторизуйтесь для просмотра ссылки.
,который вызывает
Пожалуйста, авторизуйтесь для просмотра ссылки.
.
Вот сам пример кода обнаружение открытого HANDLE к вас:
C++:
typedef struct _OBJECT_FULL_HANDLE_INFORMATION
{
    HANDLE handle;
    INT ObjectTypeIndex;
    PVOID Object;
} OBJECT_FULL_HANDLE_INFORMATION, * POBJECT_FULL_HANDLE_INFORMATION;


INLINE auto is_object_exist_proc(PSYSTEM_HANDLE_INFORMATION handle_info, PVOID Object, INT pid, ULONG access = NULL) -> ULONG
{
    ULONG number = NULL;
    for (ULONG i = NULL; i < handle_info->NumberOfHandles; i++)
    {
        SYSTEM_HANDLE_TABLE_ENTRY_INFO handleInfo = handle_info->Handles[i];
        if (handleInfo.UniqueProcessId == pid)
        {
            if (handleInfo.Object == Object && access)
            {
                if ((handleInfo.GrantedAccess & access) != NULL)
                {
                    std::cout << "handle value ->\t" << std::hex << handleInfo.HandleValue << '\n';
                    number++;
                }
            }
            else if (handleInfo.Object == Object)
            {
                std::cout << "handle value ->\t" << std::hex << handleInfo.HandleValue << '\n';
                number++;
            }
        }
    }
    return number;
}


//Only mutate code
class handle_attached
{
private:

    PVOID nt_close = NULL;
    PVOID nt_query_system_information = NULL;
    PVOID nt_query_object = NULL;
    PVOID nt_dublicate_object = NULL;
    OBJECT_FULL_HANDLE_INFORMATION process_query_inf = { NULL };


    INLINE auto init_struct() -> bool
    {
        if (nt_close && nt_query_system_information)
            return TRUE;

        nt_close = LI_FN(NtClose).nt_cached();
        nt_query_system_information = LI_FN(NtQuerySystemInformation).nt_cached();
        nt_query_object = LI_FN(NtQueryObject).nt_cached();
        nt_dublicate_object = LI_FN(NtDuplicateObject).nt_cached();
        return nt_close && nt_query_system_information && nt_query_object && nt_dublicate_object;
    }
public:

    NO_INLINE auto is_handle_attached() -> VOID
    {

        bool is_detect = FALSE;
        ULONG access_process = PROCESS_VM_WRITE | PROCESS_VM_READ;
        INT old_pid = NULL;
        ULONG ret_lenght = NULL;
        PVOID buffer = NULL;
        NTSTATUS nt_status = STATUS_UNSUCCESSFUL;

        if (!init_struct())
            return;

        if (
            process_query_inf.ObjectTypeIndex
            )
        {
            process_query_inf.handle= NULL;
            goto start_check;
        }
        process_query_inf.handle= OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, (DWORD)NtCurrentTeb()->ClientId.UniqueProcess);
        if (process_query_inf.handle)
        {
        start_check:

            nt_status = reinterpret_cast<decltype(&NtQuerySystemInformation)>(nt_query_system_information)(SystemHandleInformation, &ret_lenght, ret_lenght, &ret_lenght);
            while (nt_status == STATUS_INFO_LENGTH_MISMATCH)
            {
                if (buffer != NULL)
                    crt_wrapper::free(buffer);

                buffer = crt_wrapper::malloc(ret_lenght);
                nt_status = reinterpret_cast<decltype(&NtQuerySystemInformation)>(nt_query_system_information)(SystemHandleInformation, buffer, ret_lenght, &ret_lenght);
            }

            if (!NT_SUCCESS(nt_status))
            {
                goto close_handle;
            }
            //Get  informathion about object
            auto handle_info = reinterpret_cast<PSYSTEM_HANDLE_INFORMATION>(buffer);

            //We have type
            if (
                !process_query_inf.ObjectTypeIndex
                )
            {
                for (ULONG i = NULL; i < handle_info->NumberOfHandles; i++)
                {
                    SYSTEM_HANDLE_TABLE_ENTRY_INFO handleInfo = handle_info->Handles[i];
                    if (handleInfo.UniqueProcessId == reinterpret_cast<USHORT>(NtCurrentTeb()->ClientId.UniqueProcess))
                    {
                        if (handleInfo.HandleValue == reinterpret_cast<USHORT>(process_query_inf.handle))
                        {
                            process_query_inf.ObjectTypeIndex = handleInfo.ObjectTypeIndex;
                            process_query_inf.Object = handleInfo.Object;
                        }
                    }
                }
            }

            handle_info = reinterpret_cast<PSYSTEM_HANDLE_INFORMATION>(buffer);
            for (ULONG i = NULL; i < handle_info->NumberOfHandles; i++)
            {
                SYSTEM_HANDLE_TABLE_ENTRY_INFO handleInfo = handle_info->Handles[i];
                if (old_pid != handleInfo.UniqueProcessId && handleInfo.UniqueProcessId != reinterpret_cast<USHORT>(NtCurrentTeb()->ClientId.UniqueProcess))//Try optimizathion by don't check not corrupted PID
                {
                    old_pid = handleInfo.UniqueProcessId;
                    if(
                        is_object_exist_proc(handle_info, process_query_inf.Object, handleInfo.UniqueProcessId, access_process)
                        )
                    {
                       std::cout << "PID attached ->\t" << std::dec << handleInfo.UniqueProcessId << '\n';
                    }

                }

            }

        }

    close_handle:

        crt_wrapper::free(buffer);
        if (process_query_inf.handle)
            reinterpret_cast<decltype(&NtClose)>(nt_close)(process_query_inf.handle);
        return;
}
Посмотреть вложение 238160
При написания чита, просто помните, что не нужно поднимать красные флаги AC(особенно на серверной части)

В чём проблема юзать в ядре
Пожалуйста, авторизуйтесь для просмотра ссылки.
или Ke/KiStackAttachProcess +SEH + ProceForRead/Write (или просто проверить Address + Length < MmUserProbeAddress) или перейти на чтение/записи
Пожалуйста, авторизуйтесь для просмотра ссылки.
в крайнем случае.
У меня есть один вопрос. А если я украду HANDLE у lsass.exe, и буду использовать его для чтения памяти, то обнаружит ли меня VAC?
 
Последнее редактирование:
midnight.im
Администратор
Статус
Оффлайн
Регистрация
1 Июл 2015
Сообщения
1,648
Реакции[?]
2,144
Поинты[?]
135K
спасибо огромное за информацию

У меня есть один вопрос. А если я украду HANDLE у lsass.exe, и буду использовать его для чтения памяти, то обнаружит ли меня VAC?
На сколько я знаю в лсас просто так не попасть, так же в лсас нет хендла к кс если я не ошибся
 
Начинающий
Статус
Оффлайн
Регистрация
26 Апр 2022
Сообщения
28
Реакции[?]
2
Поинты[?]
0
А есть ли еще программы, в которых можно украсть HANDLE?
 
Эксперт
Статус
Оффлайн
Регистрация
29 Мар 2021
Сообщения
1,355
Реакции[?]
493
Поинты[?]
85K
Open handle to CSGO = detection vector for VAC. Не тот вектор про который ты подумал.
"как вак обнаруживает читы? через вектора обнаружения читов брат, обращайся"

лагична
 
Пользователь
Статус
Оффлайн
Регистрация
29 Дек 2018
Сообщения
416
Реакции[?]
109
Поинты[?]
2K
"как вак обнаруживает читы? через вектора обнаружения читов брат, обращайся"

лагична
Что тут сложного? Открыл хандл к процессу = вектор обнаружения. А не "через вектор обнаружения". "Лагична" 🤔?
 
Эксперт
Статус
Оффлайн
Регистрация
29 Мар 2021
Сообщения
1,355
Реакции[?]
493
Поинты[?]
85K
Что тут сложного? Открыл хандл к процессу = вектор обнаружения. А не "через вектор обнаружения". "Лагична" 🤔?
открыл хендл - вектор обнаружения, согласен. он один? этот вектор?) если нет, то через эти вектора обнаружения идет детекшн - и я прав. либо же, он действительно один - и тогда ты можешь называть хендлы Vector'ами (нахуя?) - и я тоже прав.
 
Забаненный
Статус
Оффлайн
Регистрация
19 Янв 2022
Сообщения
50
Реакции[?]
18
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Начнем с того, что экстернал читы вообще не могут работать хорошо как интернал.
Чтобы сделать бхоп тебе нужно править юзеркоманду, которая генерируется каждый тик, в зависимости от того на земле игрок или не.
Из экстернала у тебя нет никакой синхронизации, информация будет попросту неактуальна.
Экстернал это выход когда античит лютует, в ксго вак фул юзермодный, можно обойти все его компоненты и делать качественный чит, вместо экстернал поделки, поэтому автору не нужно заниматься херней.
чтение/записи
Пожалуйста, авторизуйтесь для просмотра ссылки.
в крайнем случае.
Что не требует никакого хэндла, но здесь про это видимо впервые слышат.
Санди то ладно, но колби и блик, поразительно.
 
Сверху Снизу