Вопрос ConVar external | как включить r_drawothermodels 2

Пользователь
Статус
Оффлайн
Регистрация
30 Апр 2019
Сообщения
141
Реакции[?]
33
Поинты[?]
4K
Всем привет! Я пишу external читы, возникла потребность заставить работать консольные команды защищенные sv_cheats 1 по типу r_drawothermodels 2.
Проблема в том, что я не умею этого делать. Я знаю что есть OneByte читы которые запускают эту команду, но мне хотелось бы научится запускать и другие команды. Есть ли у кого-то учебник по этому поводу или может кто-то умеет это делать чтобы объяснить хотя бы на r_drawothermodels 2?
 
they tryna be cray
Пользователь
Статус
Оффлайн
Регистрация
22 Ноя 2017
Сообщения
238
Реакции[?]
78
Поинты[?]
4K
C++:
#define NT_SUCCESS(x) ((x) >= 0)
typedef NTSTATUS(NTAPI* _NtWriteVirtualMemory)(HANDLE ProcessHandle, PVOID BaseAddress, LPCVOID Buffer, ULONG NumberOfBytesToWrite, PULONG NumberOfBytesWritten);
_NtWriteVirtualMemory NtWriteVirtualMemory = (_NtWriteVirtualMemory)GetProcAddress(GetModuleHandleA(XOR("ntdll.dll")), XOR("NtWriteVirtualMemory"));
typedef NTSTATUS(NTAPI* _NtReadVirtualMemory)(HANDLE ProcessHandle, PVOID BaseAddress, PVOID Buffer, ULONG NumberOfBytesToRead, PULONG NumberOfBytesRead);
_NtReadVirtualMemory NtReadVirtualMemory = (_NtReadVirtualMemory)GetProcAddress(GetModuleHandleA(XOR("ntdll.dll")), XOR("NtReadVirtualMemory"));

C++:
int Utils::GetStringHash(const char* name)
{
    int codes[256];
    DWORD convar_name_hash_table = mem->read<DWORD>(mem->FindSignature(G.vstdlib_dll, G.vstdlib_dll_size, XOR("\x8B\x3C\x85"), XOR("xxx")) + 3) - G.vstdlib_dll;
    mem->rvm(G.vstdlib_dll + convar_name_hash_table, &codes);

    int v2 = 0;
    int v3 = 0;
    for (int i = 0; i < strlen(name); i += 2)
    {
        v3 = codes[v2 ^ toupper(name[i])];
        if (i + 1 == strlen(name))
            break;
        v2 = codes[v3 ^ toupper(name[i + 1])];
    }
    return v2 | (v3 << 8);
}

DWORD Utils::GetConVarAddress(const char* name)
{
    int hash = GetStringHash(name);
    DWORD interface_engine_cvar = mem->read<DWORD>(mem->FindSignature(G.vstdlib_dll, G.vstdlib_dll_size, XOR("\x8B\x0D\x00\x00\x00\x00\xC7\x05"), XOR("xx????xx")) + 0x2) - G.vstdlib_dll;
    DWORD CvarEngine = mem->read<DWORD>(G.vstdlib_dll + interface_engine_cvar);
    DWORD Pointer = mem->read<DWORD>(mem->read<DWORD>(CvarEngine + 0x34) + ((BYTE)hash * 4));
    while (Pointer)
    {
        if (mem->read<DWORD>(Pointer) == hash)
        {
            DWORD ConVarPointer = mem->read<DWORD>(Pointer + 0x4);
            char* varname[32];
            mem->rvm(mem->read<DWORD>(ConVarPointer + 0xC), &varname);
            if (!strcmp((char*)varname, name))
            {
                return ConVarPointer;
            }
        }
        Pointer = mem->read<DWORD>(Pointer + 0xC);
    }
}


C++:
std::string Utils::getValue(const char* name)
{
    char dummy[255]; 
    mem->rvm(mem->read<DWORD>(GetConVarAddress(name) + 0x24), &dummy); 
    return std::string(dummy); 
}

C++:
void Utils::SetValue(const char* name, int val)
{
    DWORD addr = GetConVarAddress(name); 
    mem->write<int>(addr + 0x30, val ^ addr); 
}

C++:
void Utils::SetValue(const char* name, float val)
{
    DWORD addr = GetConVarAddress(name);
    mem->write<int>(addr + 0x2C, *(int*)&val ^ addr);
}

Использование:

Код:
SetValue(XOR("cl_grenadepreview"), 1);
 
Пользователь
Статус
Оффлайн
Регистрация
30 Апр 2019
Сообщения
141
Реакции[?]
33
Поинты[?]
4K
C++:
#define NT_SUCCESS(x) ((x) >= 0)
typedef NTSTATUS(NTAPI* _NtWriteVirtualMemory)(HANDLE ProcessHandle, PVOID BaseAddress, LPCVOID Buffer, ULONG NumberOfBytesToWrite, PULONG NumberOfBytesWritten);
_NtWriteVirtualMemory NtWriteVirtualMemory = (_NtWriteVirtualMemory)GetProcAddress(GetModuleHandleA(XOR("ntdll.dll")), XOR("NtWriteVirtualMemory"));
typedef NTSTATUS(NTAPI* _NtReadVirtualMemory)(HANDLE ProcessHandle, PVOID BaseAddress, PVOID Buffer, ULONG NumberOfBytesToRead, PULONG NumberOfBytesRead);
_NtReadVirtualMemory NtReadVirtualMemory = (_NtReadVirtualMemory)GetProcAddress(GetModuleHandleA(XOR("ntdll.dll")), XOR("NtReadVirtualMemory"));

C++:
int Utils::GetStringHash(const char* name)
{
    int codes[256];
    DWORD convar_name_hash_table = mem->read<DWORD>(mem->FindSignature(G.vstdlib_dll, G.vstdlib_dll_size, XOR("\x8B\x3C\x85"), XOR("xxx")) + 3) - G.vstdlib_dll;
    mem->rvm(G.vstdlib_dll + convar_name_hash_table, &codes);

    int v2 = 0;
    int v3 = 0;
    for (int i = 0; i < strlen(name); i += 2)
    {
        v3 = codes[v2 ^ toupper(name[i])];
        if (i + 1 == strlen(name))
            break;
        v2 = codes[v3 ^ toupper(name[i + 1])];
    }
    return v2 | (v3 << 8);
}

DWORD Utils::GetConVarAddress(const char* name)
{
    int hash = GetStringHash(name);
    DWORD interface_engine_cvar = mem->read<DWORD>(mem->FindSignature(G.vstdlib_dll, G.vstdlib_dll_size, XOR("\x8B\x0D\x00\x00\x00\x00\xC7\x05"), XOR("xx????xx")) + 0x2) - G.vstdlib_dll;
    DWORD CvarEngine = mem->read<DWORD>(G.vstdlib_dll + interface_engine_cvar);
    DWORD Pointer = mem->read<DWORD>(mem->read<DWORD>(CvarEngine + 0x34) + ((BYTE)hash * 4));
    while (Pointer)
    {
        if (mem->read<DWORD>(Pointer) == hash)
        {
            DWORD ConVarPointer = mem->read<DWORD>(Pointer + 0x4);
            char* varname[32];
            mem->rvm(mem->read<DWORD>(ConVarPointer + 0xC), &varname);
            if (!strcmp((char*)varname, name))
            {
                return ConVarPointer;
            }
        }
        Pointer = mem->read<DWORD>(Pointer + 0xC);
    }
}


C++:
std::string Utils::getValue(const char* name)
{
    char dummy[255];
    mem->rvm(mem->read<DWORD>(GetConVarAddress(name) + 0x24), &dummy);
    return std::string(dummy);
}

C++:
void Utils::SetValue(const char* name, int val)
{
    DWORD addr = GetConVarAddress(name);
    mem->write<int>(addr + 0x30, val ^ addr);
}

C++:
void Utils::SetValue(const char* name, float val)
{
    DWORD addr = GetConVarAddress(name);
    mem->write<int>(addr + 0x2C, *(int*)&val ^ addr);
}

Использование:

Код:
SetValue(XOR("cl_grenadepreview"), 1);
Бляха, спасибо тебе друг, писал на UC кормили советами, но толком дать ответ на вопрос не смогли, а тут смотри как. Поставил бы лайк, но пропала кнопка сорян... Еще раз спасибо большое, дай Бог тебе всего хорошего)
 
vk.com/ahkcsgocheat
Пользователь
Статус
Оффлайн
Регистрация
21 Апр 2020
Сообщения
379
Реакции[?]
64
Поинты[?]
2K
Я совсем не так пишу эти консольные команды. А так, я уже нашел способ, как с sv_cheats 1 писать экстренал читы :laughing:. Т.е. легально получается.
 
Последнее редактирование:
Пользователь
Статус
Оффлайн
Регистрация
30 Апр 2019
Сообщения
141
Реакции[?]
33
Поинты[?]
4K
tu ouvres la console?


SetValue (XOR ("cl_grenadepreview"), 1);
Il existe des ConVars qui ne sont pas disponibles même avec sv_cheats 1, et la commande cl_grenadepreview est disponible pour modification, tout le monde peut modifier la valeur sur son serveur. Je ne l'ai pas encore testé, mais il me semble que les fonctions que la personne ci-dessus a données peuvent accéder aux commandes de console déverrouillées qui nécessitent sv_cheats 1
 
Сверху Снизу