Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос CS 1.6 Steam Build 10210 — Поиск оффсетов pClFuncs и pEngFuncs

Sloppy
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
697
Реакции
18
Приветствую, реверс-комьюнити.

Классика жанра: решил поднять проект на базе Valve SDK под CS 1.6, но Steam-версия опять подкинула проблем. На актуальном билде 10210 привычные оффсеты уехали, и старые таблицы из пабликов благополучно превратились в тыкву.

Сейчас на руках есть кусок кода, который раньше работал без нареканий, но теперь ловит краши или просто выдает нули:
Код:
Expand Collapse Copy
const uintptr_t pClFuncs  = 0x122ED60;
const uintptr_t pEngFuncs = 0x136260;
const uintptr_t pGame     = 0x6C3A90;

Методом научного тыка в Cheat Engine удалось наковырять следующие зацепки:
  1. hw.dll + 196E8D (HUD_GetModelInterface)
  2. client.dll + 47820 (client.Initialize)
  3. client.dll + 47430 (cldll_func_t struct)

Код:
Expand Collapse Copy
#pragma once
#ifndef GAME_H
#define GAME_H
 
#include <pch.h>
#define BASE_OFFSET(base, offset) (&((char*)base)[offset])
#define MODULE_OFFSET(offset) BASE_OFFSET(this->Module.base, offset)
 
namespace cstrike
{
    namespace Offsets
    {
        const uintptr_t pClFuncs  = 0x122ED60;
        const uintptr_t pEngFuncs = 0x136260;
        const uintptr_t pGame     = 0x6C3A90;
    }
 
    class GameModule
    {
    public:
        bool IsValid = false;
        mem::module_t Module;
 
    public:
        GameModule()
        {
 
        }
 
        void Update()
        {
 
        }
 
    protected:
        bool Setup(std::string module_name)
        {
            this->Module = mem::in::get_module(module_name);
            return this->Module.is_valid();
        }
    };
 
    class hw : GameModule
    {
    public:
        cldll_func_t* cl_funcs = nullptr;
        cldll_func_t      o_cl_funcs = {};
        CGame* Game = nullptr;
        cl_enginefuncs_s* Engfuncs = nullptr;
    public:
        hw()
        {
            if (!this->Setup("hw.dll"))
                return;
 
            this->Update();
            this->IsValid = true;
        }
 
        ~hw()
        {
 
        }
 
 
        void Update()
        {
            this->cl_funcs = (cldll_func_t*)MODULE_OFFSET(Offsets::pClFuncs);
            memcpy((void*)& this->o_cl_funcs, (void*)this->cl_funcs, sizeof(this->o_cl_funcs));
 
            this->Engfuncs = (cl_enginefuncs_s*)MODULE_OFFSET(Offsets::pEngFuncs);
            this->Game = (CGame*)MODULE_OFFSET(Offsets::pGame);
            
        }
    };
 
    class client : public GameModule
    {
    public:
        cldll_func_t* cl_funcs = nullptr;
 
    public:
        client()
        {
            if (!this->Setup("client.dll"))
                return;
 
            this->Update();
            this->IsValid = true;
        }
 
        void Update()
        {
 
        }
    };
}
 
#endif

Собственно, вопрос к опытным: как сейчас адекватно искать эти оффсеты под Steam-версию? Пытался ориентироваться на старые мануалы по поиску, но на этом билде они не отрабатывают. Это мой первый опыт сборки .dll на чистом SDK, так что буду признателен за любые наводки по паттернам или логике поиска в IDA.

Кто как сейчас обновляет свои наработки под свежие апдейты старушки, делитесь опытом.
 
Последнее редактирование модератором:
Назад
Сверху Снизу