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

Исходник [Сурс] BloodStrike — Актуальные оффсеты и структуры движка Messiah (C++)

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
189
Реакции
5
Народ, кто сейчас ковыряет BloodStrike, ловите свежий SDK под Steam-версию. Слил для тех, кто хочет накатать что-то свое, а не юзать паблик-мусор, который отлетает через час после катки.

Сразу по делу: забудьте про запуск IDA, пока процесс висит — античит там реагирует на дебаггеры моментально. Работаем только через дампы.

Техническая инфа по SDK:

  1. Ядро: Messiah Engine. Оффсеты актуальны на текущий билд.
  2. W2S: Используйте GetScreenPointFromWorldPoint, лежит по 0x0940F60.
  3. Camera: Структура 856 байт (0x358), матрица в 0x058. Внимательнее с расчетом матрицы 3x4, там row-major.
  4. Renderer: HWND лежит в 0x6DE9430.

Код:
Expand Collapse Copy
namespace bloodstrike
{
    // ============================================
    // Image Base
    // ============================================
    constexpr uintptr_t image_base = 0x140000000;  
 
    // ============================================
    // Renderer
    // ============================================
    namespace renderer
    {
        constexpr uintptr_t hwnd_offset = 0x6DE9430;
 
        inline uintptr_t base() { return (uintptr_t)GetModuleHandleA("BloodStrike.exe"); }
 
        inline uintptr_t hwnd() { return base() + hwnd_offset; }
    }
 
    // ============================================
    // Functions
    // ============================================
    namespace funcs
    {
        constexpr uintptr_t IObject__Initializer    = 0x02CF160;
        constexpr uintptr_t IObject__Deconstructor  = 0x02CF890;
        constexpr uintptr_t GetScreenPointFromWorldPoint = 0x0940F60; // W2S
        constexpr uintptr_t GetRayDirectionFromScreenPoint = 0x093FF90;
        constexpr uintptr_t GetOrigin              = 0x0940E90;
        constexpr uintptr_t GetBoneTransform       = 0x0D2BEC0;
        constexpr uintptr_t GetRawInputData        = 0x3BE8FF8;
    }
 
    // ============================================
    // VFTables
    // ============================================
    namespace vftables
    {
        constexpr uintptr_t IEntity            = 0x3D80048;
        constexpr uintptr_t ICamera            = 0x3F9B1D0;
        constexpr uintptr_t AnimationCore_Pose = 0x3FA2F18;
        constexpr uintptr_t SkeletonComponent  = 0x4103698;
        constexpr uintptr_t Actor              = 0x5001C20;
        constexpr uintptr_t ActorComponent     = 0x4138AB0;
        constexpr uintptr_t IArea              = 0x3FBAA68;
        constexpr uintptr_t TachComponent      = 0x4101FC8;
        constexpr uintptr_t FontType           = 0x3C189F0;
    }
 
    // ============================================
    // ICamera Offsets (856 bytes / 0x358)
    // ============================================
    namespace camera_offsets
    {
        constexpr uintptr_t vftable             = 0x000;
        constexpr uintptr_t flags               = 0x030;
        constexpr uintptr_t view_matrix         = 0x058; // float[12] (3x4 row-major)
        constexpr uintptr_t pos_x_local         = 0x07C; // float
        constexpr uintptr_t pos_y_local         = 0x080; // float
        constexpr uintptr_t pos_z_local         = 0x084; // float
        constexpr uintptr_t transform_matrix    = 0x0B8; // float[12] (3x4)
        constexpr uintptr_t world_offset_x      = 0x180; // int32
        constexpr uintptr_t world_offset_y      = 0x184; // int32
        constexpr uintptr_t world_offset_z      = 0x188; // int32
        constexpr uintptr_t screen_width        = 0x2F0; // uint16
        constexpr uintptr_t screen_height       = 0x2F2; // uint16
        constexpr uintptr_t viewproj_matrix     = 0x304; // float[9] (3x3)
        constexpr uintptr_t proj_scale          = 0x338; // float
    }
 
    // ============================================
    // Render View System Chain
    // ============================================
    namespace render_chain
    {
        // qword_1465F7AD0 -> +0x58 -> +0x58 -> +0x238 -> view data
        constexpr uintptr_t render_system_root  = 0x65F7AD0; // from base
    }
 
    // ============================================
    // Math Structures
    // ============================================
    struct Vec2 { float x, y; };
    struct Vec3 { float x, y, z; };
    struct Vec4 { float x, y, z, w; };
 
    // 3x4 row-major matrix (used by Messiah engine)
    struct Matrix3x4
    {
        float m[3][4];
 
        Vec3 origin() const { return { m[0][3], m[1][3], m[2][3] }; }
        Vec3 forward() const { return { m[0][0], m[1][0], m[2][0] }; }
        Vec3 right() const { return { m[0][1], m[1][1], m[2][1] }; }
        Vec3 up() const { return { m[0][2], m[1][2], m[2][2] }; }
    };
 
    // 4x4 matrix for W2S calculations
    struct Matrix4x4
    {
        float m[4][4];
    };
}

Нюансы реализации:
Смотрите внимательно на Render View System Chain (render_system_root = 0x65F7AD0), там цепочка указателей довольно типичная для движка, но лучше делайте валидацию каждого пойнтера перед чтением, чтобы не словить краш в самый неподходящий момент. По поводу векторов и матриц — структуры я добавил, под Messiah они стандартные, так что проблем с приведением типов быть не должно.

Братва, кто уже пробовал накидывать ЕСП поверх этого? Есть ли смысл сейчас лезть во внутренние хуки или лучше делать экстернал на чтении памяти через драйвер, чтобы не отлететь по первой же волне? Делитесь опытом, кто допиливал — кидайте свои правки или уточнения по оффсетам.
 
Назад
Сверху Снизу