Вопрос /del

keep silence
Участник
Статус
Оффлайн
Регистрация
17 Дек 2018
Сообщения
546
Реакции[?]
201
Поинты[?]
0
/del
 
Последнее редактирование:
keep silence
Участник
Статус
Оффлайн
Регистрация
17 Дек 2018
Сообщения
546
Реакции[?]
201
Поинты[?]
0
they tryna be cray
Пользователь
Статус
Оффлайн
Регистрация
22 Ноя 2017
Сообщения
238
Реакции[?]
78
Поинты[?]
4K
0x6293c038 - r_modelAmbientMin
0x62937158 - mat_force_tonemap_scale


C++:
//int
mem->write<int>(addr + 0x30, val ^ addr);

//float
mem->write<int>(addr + 0x2C, *(int*)&val ^ addr);
 
keep silence
Участник
Статус
Оффлайн
Регистрация
17 Дек 2018
Сообщения
546
Реакции[?]
201
Поинты[?]
0
0x6293c038 - r_modelAmbientMin
0x62937158 - mat_force_tonemap_scale


C++:
//int
mem->write<int>(addr + 0x30, val ^ addr);

//float
mem->write<int>(addr + 0x2C, *(int*)&val ^ addr);
СПАСИБО <3
Если не секрет, то куда записывать значения? В client.dll или engine.dll? И значения записывать во float?
Т.е. Write<float>(clientModule + *нужный оффсет*, 1.f); ? (в случае с экстерналом)

UPD.: я мудак, не сразу заметил функции. Но вопрос по тому, куда именно писать остаётся открытым)

UPD.2: я вдвойне мудак, поэтому лучше спрошу, где брать или как искать алреса конваров? и что это за значения 0x30 & 0x2C? Да, я настолько жалок)
 
Последнее редактирование:
they tryna be cray
Пользователь
Статус
Оффлайн
Регистрация
22 Ноя 2017
Сообщения
238
Реакции[?]
78
Поинты[?]
4K
СПАСИБО <3
Если не секрет, то куда записывать значения? В client.dll или engine.dll? И значения записывать во float?
Т.е. Write<float>(clientModule + *нужный оффсет*, 1.f); ? (в случае с экстерналом)

UPD.: я мудак, не сразу заметил функции. Но вопрос по тому, куда именно писать остаётся открытым)

UPD.2: я вдвойне мудак, поэтому лучше спрошу, где брать или как искать алреса конваров? и что это за значения 0x30 & 0x2C? Да, я настолько жалок)
C++:
int Utils::GetStringHash(const char* name)
{
    int codes[256];
    DWORD convar_name_hash_table = mem->read<DWORD>(mem->FindSignature(G.vstdlib, G.vstdlib_size, AY_OBFUSCATE("\x8B\x3C\x85"), AY_OBFUSCATE("xxx")) + 3) - G.vstdlib;
    mem->rvm(G.vstdlib + 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, G.vstdlib_size, AY_OBFUSCATE("\x8B\x0D\x00\x00\x00\x00\xC7\x05"), AY_OBFUSCATE("xx????xx")) + 0x2) - G.vstdlib;
    DWORD CvarEngine = mem->read<DWORD>(G.vstdlib + 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);
    }
}

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

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

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

Вызов функции: SetValue("нужный convar", значение);
Получить оффсет convara: GetConVarAddress("нужный convar");
Получить значение convara:GetValue("нужный convar");
 
keep silence
Участник
Статус
Оффлайн
Регистрация
17 Дек 2018
Сообщения
546
Реакции[?]
201
Поинты[?]
0
C++:
int Utils::GetStringHash(const char* name)
{
    int codes[256];
    DWORD convar_name_hash_table = mem->read<DWORD>(mem->FindSignature(G.vstdlib, G.vstdlib_size, AY_OBFUSCATE("\x8B\x3C\x85"), AY_OBFUSCATE("xxx")) + 3) - G.vstdlib;
    mem->rvm(G.vstdlib + 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, G.vstdlib_size, AY_OBFUSCATE("\x8B\x0D\x00\x00\x00\x00\xC7\x05"), AY_OBFUSCATE("xx????xx")) + 0x2) - G.vstdlib;
    DWORD CvarEngine = mem->read<DWORD>(G.vstdlib + 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);
    }
}

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

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

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

Вызов функции: SetValue("нужный convar", значение);
Получить оффсет convara: GetConVarAddress("нужный convar");
Получить значение convara:GetValue("нужный convar");
Спасибо огромнейшее ещё раз!
 
keep silence
Участник
Статус
Оффлайн
Регистрация
17 Дек 2018
Сообщения
546
Реакции[?]
201
Поинты[?]
0
C++:
int Utils::GetStringHash(const char* name)
{
    int codes[256];
    DWORD convar_name_hash_table = mem->read<DWORD>(mem->FindSignature(G.vstdlib, G.vstdlib_size, AY_OBFUSCATE("\x8B\x3C\x85"), AY_OBFUSCATE("xxx")) + 3) - G.vstdlib;
    mem->rvm(G.vstdlib + 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, G.vstdlib_size, AY_OBFUSCATE("\x8B\x0D\x00\x00\x00\x00\xC7\x05"), AY_OBFUSCATE("xx????xx")) + 0x2) - G.vstdlib;
    DWORD CvarEngine = mem->read<DWORD>(G.vstdlib + 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);
    }
}

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

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

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

Вызов функции: SetValue("нужный convar", значение);
Получить оффсет convara: GetConVarAddress("нужный convar");
Получить значение convara:GetValue("нужный convar");
Извини за пинг, но в ProcMem нет FindSignature, AY_OBFUSCATE, а также отсутствует переменная G или что это.
 
they tryna be cray
Пользователь
Статус
Оффлайн
Регистрация
22 Ноя 2017
Сообщения
238
Реакции[?]
78
Поинты[?]
4K
Извини за пинг, но в ProcMem нет FindSignature, AY_OBFUSCATE, а также отсутствует переменная G или что это.
C++:
DWORD FindSignature(DWORD start, DWORD size, const char* sig, const char* mask)
{
    BYTE* data = new BYTE[size];
    SIZE_T bytesRead;

    ReadProcessMemory(G.hProcess, (LPVOID)start, data, size, &bytesRead);

    for (DWORD i = 0; i < size; i++)
    {
        if (mem->MemoryCompare((const BYTE*)(data + i), (const BYTE*)sig, mask)) {
            delete[] data;
            return start + i;
        }
    }
    delete[] data;

    return NULL;
}

bool MemoryCompare(const BYTE* bData, const BYTE* bMask, const char* szMask)
{
    for (; *szMask; ++szMask, ++bData, ++bMask)
    {
        if (*szMask == 'x' && *bData != *bMask)
        {
            return false;
        }
    }
    return (*szMask == NULL);
}

G - это мои глобальные переменные.
AY_OBFUSCATE - функция для защиты чита от детекта. Убери просто эту функцию.

G.vstdlib - это модуль, такой же как и client.dll или engine.dll, тебе нужно его получить в своей memory фукнции.
если что-то не получится, напиши в дс Saivior#9999
 
Последнее редактирование:
keep silence
Участник
Статус
Оффлайн
Регистрация
17 Дек 2018
Сообщения
546
Реакции[?]
201
Поинты[?]
0
C++:
DWORD FindSignature(DWORD start, DWORD size, const char* sig, const char* mask)
{
    BYTE* data = new BYTE[size];
    SIZE_T bytesRead;

    ReadProcessMemory(G.hProcess, (LPVOID)start, data, size, &bytesRead);

    for (DWORD i = 0; i < size; i++)
    {
        if (mem->MemoryCompare((const BYTE*)(data + i), (const BYTE*)sig, mask)) {
            delete[] data;
            return start + i;
        }
    }
    delete[] data;

    return NULL;
}

bool MemoryCompare(const BYTE* bData, const BYTE* bMask, const char* szMask)
{
    for (; *szMask; ++szMask, ++bData, ++bMask)
    {
        if (*szMask == 'x' && *bData != *bMask)
        {
            return false;
        }
    }
    return (*szMask == NULL);
}

G - это мои глобальные переменные.
AY_OBFUSCATE - функция для защиты чита от детекта. Убери просто эту функцию.

G.vstdlib - это модуль, такой же как и client.dll или engine.dll, тебе нужно его получить в своей memory фукнции.
если что-то не получится, напиши в дс Saivior#9999
Спасибо ещё раз огромное. Днём попробую)
 
Похожие темы
Ответы
9
Просмотры
330
Ответы
0
Просмотры
114
Ответы
0
Просмотры
134
Ответы
0
Просмотры
255
Сверху Снизу