unity il2cpp

Rust

pinned build 1 — 7/3/2026 6:32pm (EST) updated 2026-07-03 22:34 UTC

Rust offsets

Dumped by swig. Build snapshot.

Everything below is paste-ready C++ — copy any block with the button that appears on hover. Offsets marked heuristic were resolved without a symbol match and should be re-verified after the next patch.

il2cpp handle

inline static constexpr uintptr_t il2cppHandle = 0x101CA4E0;

Classes

BaseNetworkable

struct base_networkable {
    inline static constexpr uintptr_t base_networkable     = 0xFD36298;
    inline static constexpr uintptr_t static_fields        = 0xB8;
    inline static constexpr uintptr_t wrapper_class_ptr    = 0x8;
    inline static constexpr uintptr_t parent_static_fields = 0x10;
    inline static constexpr uintptr_t entities             = 0x10;
    inline static constexpr uintptr_t hv_offset            = 0x18;
};

Camera

struct camera {
    inline static constexpr uintptr_t main_camera_c   = 0xFD0A5C0;
    inline static constexpr uintptr_t camera_static   = 0xB8;
    inline static constexpr uintptr_t camera_object   = 0x28;
    inline static constexpr uintptr_t entity          = 0x10;
    // Unity native camera state
    inline static constexpr uintptr_t view_matrix     = 0x2FC;
    inline static constexpr uintptr_t position        = 0x444;
    inline static constexpr uintptr_t field_of_view   = 0x170;
    inline static constexpr uintptr_t culling_mask    = 0x3E8;
};

BasePlayer

struct base_player {
    inline static constexpr uintptr_t cl_active_item    = 0x568;
    inline static constexpr uintptr_t player_eyes       = 0x3E8;
    inline static constexpr uintptr_t player_inventory  = 0x2F0;
    inline static constexpr uintptr_t current_team      = 0x538;
    inline static constexpr uintptr_t base_movement     = 0x788;
    inline static constexpr uintptr_t player_model      = 0x500;
    inline static constexpr uintptr_t player_flags      = 0x6B8;
    inline static constexpr uintptr_t display_name      = 0x6E0;
    inline static constexpr uintptr_t player_input      = 0x518;
};

BaseCombatEntity

struct base_combat_entity {
    inline static constexpr uintptr_t lifestate  = 0x298;
    inline static constexpr uintptr_t model      = 0x1A8;
    inline static constexpr uintptr_t _health    = 0x2A4;
    inline static constexpr uintptr_t _maxHealth = 0x2A8;
};

BaseEntity

struct base_entity {
    inline static constexpr uintptr_t flags = 0x1B0;
};

Inventory

struct item_container {
    inline static constexpr uintptr_t item_list = 0x18;
};

struct player_inventory {
    inline static constexpr uintptr_t main = 0x30;
    inline static constexpr uintptr_t belt = 0x60;
    inline static constexpr uintptr_t wear = 0x28;
};

Item / ItemDefinition

struct item {
    inline static constexpr uintptr_t definition   = 0xA0;
    inline static constexpr uintptr_t amount       = 0xE0;
    inline static constexpr uintptr_t uid          = 0x60;
    inline static constexpr uintptr_t held_entity  = 0x0;
};

struct item_definition {
    inline static constexpr uintptr_t itemid       = 0x20;
    inline static constexpr uintptr_t shortname    = 0x28;
    inline static constexpr uintptr_t displayName  = 0x40;
    inline static constexpr uintptr_t category     = 0x58;
    inline static constexpr uintptr_t stackable    = 0x78;
    inline static constexpr uintptr_t iconSprite   = 0x50;
    inline static constexpr uintptr_t rarity       = 0x94;
    inline static constexpr uintptr_t condition    = 0xB8;
};

BaseProjectile

struct base_projectile {
    inline static constexpr uintptr_t projectileVelocityScale     = 0x37C;
    inline static constexpr uintptr_t automatic                   = 0x380;
    inline static constexpr uintptr_t reloadTime                  = 0x3C0;
    inline static constexpr uintptr_t canUnloadAmmo               = 0x3C4;
    inline static constexpr uintptr_t primaryMagazine             = 0x3C8;
    inline static constexpr uintptr_t fractionalReload            = 0x3D0;
    inline static constexpr uintptr_t aimSway                     = 0x3E8;
    inline static constexpr uintptr_t aimSwaySpeed                = 0x3EC;
    inline static constexpr uintptr_t recoil                      = 0x3F0;
    inline static constexpr uintptr_t aimCone                     = 0x400;
    inline static constexpr uintptr_t hipAimCone                  = 0x404;
    inline static constexpr uintptr_t aimconePenaltyPerShot       = 0x408;
    inline static constexpr uintptr_t stancePenaltyScale          = 0x418;
    inline static constexpr uintptr_t hasADS                      = 0x41C;
    inline static constexpr uintptr_t isBurstWeapon               = 0x427;
    inline static constexpr uintptr_t canChangeFireModes          = 0x428;
    inline static constexpr uintptr_t internalBurstFireRateScale  = 0x430;
    inline static constexpr uintptr_t internalBurstAimConeScale   = 0x434;
};

RecoilProperties

struct recoil_properties {
    inline static constexpr uintptr_t recoilYawMin              = 0x18;
    inline static constexpr uintptr_t recoilYawMax              = 0x1C;
    inline static constexpr uintptr_t recoilPitchMin            = 0x20;
    inline static constexpr uintptr_t recoilPitchMax            = 0x24;
    inline static constexpr uintptr_t timeToTakeMin             = 0x28;
    inline static constexpr uintptr_t timeToTakeMax             = 0x2C;
    inline static constexpr uintptr_t ADSScale                  = 0x30;
    inline static constexpr uintptr_t movementPenalty           = 0x34;
    inline static constexpr uintptr_t clampPitch                = 0x38;
    inline static constexpr uintptr_t pitchCurve                = 0x40;
    inline static constexpr uintptr_t yawCurve                  = 0x48;
    inline static constexpr uintptr_t useCurves                 = 0x50;
    inline static constexpr uintptr_t shotsUntilMax             = 0x54;
    inline static constexpr uintptr_t maxRecoilRadius           = 0x58;
    inline static constexpr uintptr_t overrideAimconeWithCurve  = 0x5C;
    inline static constexpr uintptr_t aimconeCurveScale         = 0x60;
    inline static constexpr uintptr_t aimconeCurve              = 0x68;
    inline static constexpr uintptr_t aimconeProbabilityCurve   = 0x70;
    inline static constexpr uintptr_t newRecoilOverride         = 0x80;
};

WorldItem / HeldEntity

struct world_item {
    inline static constexpr uintptr_t allowPickup = 0x1F0;
    inline static constexpr uintptr_t item        = 0x1F8;
};

struct held_entity {
    inline static constexpr uintptr_t worldModelAnimator = 0x208;
    inline static constexpr uintptr_t item_owner         = 0x1F0;
    inline static constexpr uintptr_t viewModel          = 0x240;
    inline static constexpr uintptr_t handBone           = 0x250;
    inline static constexpr uintptr_t holdInfo           = 0x260;
    inline static constexpr uintptr_t isBuildingTool     = 0x27C;
    inline static constexpr uintptr_t forcedOwner        = 0x280;
    inline static constexpr uintptr_t hostileScore       = 0x29C;
    inline static constexpr uintptr_t ownerItemUID       = 0x2D0;
};

Model / PlayerModel

struct model {
    inline static constexpr uintptr_t collision       = 0x20;
    inline static constexpr uintptr_t rootBone        = 0x28;
    inline static constexpr uintptr_t headBone        = 0x30;
    inline static constexpr uintptr_t eyeBone         = 0x38;
    inline static constexpr uintptr_t animator        = 0x40;
    inline static constexpr uintptr_t skeleton        = 0x48;
    inline static constexpr uintptr_t boneTransforms  = 0x50;
    inline static constexpr uintptr_t boneNames       = 0x58;
};

struct player_model {
    inline static constexpr uintptr_t jawBone           = 0xE8;
    inline static constexpr uintptr_t neckBone          = 0xF0;
    inline static constexpr uintptr_t headBone          = 0xF8;
    inline static constexpr uintptr_t skinnedMultiMesh  = 0x398;
    // heuristic — last-pair Vector3s, reverify after patches
    inline static constexpr uintptr_t position          = 0x498;
    inline static constexpr uintptr_t velocity          = 0x4FC;
};

PlayerEyes / PlayerInput / PlayerWalkMovement

struct player_eyes {
    inline static constexpr uintptr_t worldPosition = 0x0;
    inline static constexpr uintptr_t bodyRotation  = 0x50;
    inline static constexpr uintptr_t viewOffset    = 0x60;
};

struct player_input {
    inline static constexpr uintptr_t bodyAngles = 0x44;
};

// heuristic offsets — reverify after patches
struct player_walk_movement {
    inline static constexpr uintptr_t GroundAngle        = 0x70;
    inline static constexpr uintptr_t GroundAngleNew     = 0x78;
    inline static constexpr uintptr_t GroundTime         = 0x80;
    inline static constexpr uintptr_t JumpTime           = 0x88;
    inline static constexpr uintptr_t LandTime           = 0x90;
    inline static constexpr uintptr_t GravityMultiplier  = 0x98;
    inline static constexpr uintptr_t TargetMovement     = 0x128;
};

ConVar.Graphics

struct convar_graphics {
    inline static constexpr uintptr_t type_info     = 0x0;
    inline static constexpr uintptr_t static_fields = 0xB8;
    inline static constexpr uintptr_t fov           = 0x0;
};

BaseNetworkable decryption

Two variants — dump both and let the runtime pick whichever produces a valid il2cpp_get_handle result. Fresh dump swaps the constants; keep the shape stable and just replace the magic numbers per patch.

uintptr_t decryption::base_networkable_0(uint64_t a1)
{
    std::uintptr_t   rax = driver.read<std::uintptr_t>(a1 + 0x18);
    std::uint32_t*   rdx = (std::uint32_t*)&rax;
    std::uint32_t    r8d = 0x2;
    std::uint32_t    eax, ecx;

    do {
        ecx = *(std::uint32_t*)(rdx);
        eax = *(std::uint32_t*)(rdx);
        rdx = (std::uint32_t*)((std::uint8_t*)rdx + 0x4);
        eax = ecx;
        ecx = ecx << 0x16;
        eax = eax >> 0xA;
        ecx = ecx | eax;
        ecx = ecx - 0x512FB7E6;
        ecx = ecx ^ 0x3C25B628;
        ecx = ecx + 0x606330A1;
        *((std::uint32_t*)rdx - 1) = ecx;
        --r8d;
    } while (r8d);

    return il2cpp_get_handle(rax);
}
uintptr_t decryption::base_networkable_1(uint64_t a1)
{
    std::uintptr_t   rax = driver.read<std::uintptr_t>(a1 + 0x18);
    std::uint32_t*   rdx = (std::uint32_t*)&rax;
    std::uint32_t    r8d = 0x2;
    std::uint32_t    eax, ecx;

    do {
        ecx = *(std::uint32_t*)(rdx);
        eax = *(std::uint32_t*)(rdx);
        rdx = (std::uint32_t*)((std::uint8_t*)rdx + 0x4);
        eax = ecx;
        ecx = ecx << 0x12;
        eax = eax >> 0xE;
        ecx = ecx | eax;
        ecx = ecx ^ 0xE54E9BFF;
        eax = ecx;
        ecx = ecx << 0x8;
        eax = eax >> 0x18;
        ecx = ecx | eax;
        ecx = ecx ^ 0xCECB4770;
        *((std::uint32_t*)rdx - 1) = ecx;
        --r8d;
    } while (r8d);

    return il2cpp_get_handle(rax);
}

Notes

  • il2cpp_get_handle resolves the current GC handle target — patch-safe as long as you re-derive it from a fresh il2cpp_gchandle_get_target disassembly after Unity engine changes.
  • player_model::position / player_model::velocity were resolved heuristically (last Vector3 pair before the class trailer). If bones or feature flags shift and animations desync, walk the tail of PlayerModel's field list and pick the last two UnityEngine.Vector3 entries again.
  • player_walk_movement fields were carried over from the last dump without symbol confirmation on this build. Compare against BaseMovement in the raw class dump if movement predictions drift.
  • ConVar.Graphics class handle wasn't resolvable in this dump — the wrapper offsets are provided so the field can be walked once a matching typeinfo is available.

— swig