Source Code OpenSpades Offsets & Structures

Hexui Undetected CSGO Cheats Sinkicheat PUBG Cheat

Solaire

Respected Hacker
Dank Tier VIP
Dec 15, 2013
1,051
16,353
62
Game Name
OpenSpades
Anticheat
None
How long you been coding/hacking?
3 years
Coding Language
C++
Here are all the OpenSpades offsets we have:
OpenSpades Offsets 1
OpenSpades Offsets 2

We also have a main thread for OpenSpades here: Guide - OpenSpades Cheats

Going to make an ESP, Aimbot, and possibly a triggerbot for this game.

This is what I've got so far.

GetPlayerOrNull - OpenSpades.exe + 0xBDCB1
GetLocalPlayerOrNull - OpenSpades.exe + 0xBD8F0

Get NetClient Object Hook - OpenSpades.exe + 0xBDE50
Hook here and grab the address out of ECX to get the NetClient Object Address to use in the this * in GetPlayerOrNull/GetLocalPlayerOrNull

Continue reading for more...
 
Last edited by a moderator:

Yothri

Jr.Coder
Full Member
Nobleman
Sep 12, 2013
107
823
4
C++:
#define OFFS_SENDCHAT 0xC1C80
typedef void(__thiscall* tSendChat)(void*, std::string, bool);
tSendChat pSendChat;

void __fastcall hkSendChat(void* ecx, void* edx, std::string text, bool global)
{
    cout << text << endl;
    return pSendChat(ecx, text, global);
}

pSendChat = (tSendChat)DetourFunction((PBYTE)GetModuleHandleA(0) + OFFS_SENDCHAT, (PBYTE)hkSendChat);
cout << text << endl; puts out only xxxx when writing something in chat instead of my text i wrote andalso game crashes with dump. Could you have a look into this?
 

mambda

headass
Escobar Tier VIP
Trump Tier Donator
Jun 25, 2014
2,294
37,938
269
Open the dump in visual studio or windbg and find out :p
 

Solaire

Respected Hacker
Dank Tier VIP
Dec 15, 2013
1,051
16,353
62
C++:
#define OFFS_SENDCHAT 0xC1C80
typedef void(__thiscall* tSendChat)(void*, std::string, bool);
tSendChat pSendChat;

void __fastcall hkSendChat(void* ecx, void* edx, std::string text, bool global)
{
    cout << text << endl;
    return pSendChat(ecx, text, global);
}

pSendChat = (tSendChat)DetourFunction((PBYTE)GetModuleHandleA(0) + OFFS_SENDCHAT, (PBYTE)hkSendChat);
cout << text << endl; puts out only xxxx when writing something in chat instead of my text i wrote andalso game crashes with dump. Could you have a look into this?
I'll try hooking later to see what I can come up with for this.

Why are you hacking an open source game? :D

Just add your code directly into their source and then re compile :)
Because that takes all of the reversing goodness out of it ;P
 

Yothri

Jr.Coder
Full Member
Nobleman
Sep 12, 2013
107
823
4
Why are you hacking an open source game? :D

Just add your code directly into their source and then re compile :)
I knew this question will come up, as i already said in the chatbox some time ago, its for learning purposes. For example i am still learning ASM and with source i can more easily understand what's going on in the games memory.
 

mambda

headass
Escobar Tier VIP
Trump Tier Donator
Jun 25, 2014
2,294
37,938
269
I've got nothing to do while my chicken thaws, anyone wanna send me their crash dump and i'll have a look-see? :)
 

Darth Revan

Newbie
Full Member
Oct 21, 2015
13
107
1
Oh come on! I'm currently working on Build And Shoot (aka old Ace Of Spades), and you guys start doing OpenSpades, an open source game (that connects to Build And Shoot servers), wtf! That's just my luck xD

Build And Shoot is not open source, OpenShades is.
 

Solaire

Respected Hacker
Dank Tier VIP
Dec 15, 2013
1,051
16,353
62
Updated OpenSpades Offsets

C++:
class Player
{
public:
char _0x0000[4];
    Vec3 pos; //0x0004
    Vec3 velocity; //0x0010
    Vec3 orientation; //0x001C
    Vec3 eye; //0x0028
char _0x0034[8];
    DWORD weapon; //0x003C
    __int32 playerId; //0x0040
    __int32 teamId; //0x0044
char _0x0048[12];
    __int32 Health; //0x0054
    __int32 Grenades; //0x0058
    __int32 blockStocks; //0x005C
char _0x0060[12];
    float moveDistance; //0x006C
    __int32 moveSteps; //0x0070
    __int32 lastJump; //0x0074
    float lastClimbTime; //0x0078
    float lastJumpTime; //0x007C
    float nextSpadeTime; //0x0080
    float nextDigTime; //0x0084
    __int32 firstDig; //0x0088
    float nextGrenadeTime; //0x008C
    float nextBlockTime; //0x0090
    __int32 holdingGrenade; //0x0094
    float grenadeTime; //0x0098
    __int8 blockCursorActive; //0x009C
    __int8 blockCursorDragging; //0x009D
char _0x009E[26];
    __int32 lastSignleBlockBuildSeqDone; //0x00B8
    float lastReloadingTime; //0x00BC
    __int8 pendingPlaceBlock; //0x00C0
    __int8 canPending; //0x00C1
char _0x00C2[14];
    __int32 reloadingServerSide; //0x00D0
    float respawnTime; //0x00D4
};//Size=0x0480
I was too lazy to include the IntVector3 stuff, so it's up to you to add them :p.

Also, the first 4 bytes in the class is the World pointer, and DWORD Weapon is a Weapon pointer.
 
Last edited by a moderator:

SystemX32

Dank Tier VIP
Dank Tier Donator
Jun 2, 2015
251
12,368
44
Been hacking this game. I'll post juicy info here when I can.

C++:
    struct Player_T
    {
        World_T * pWorld; //0x0000
        Vector3 position; //0x0004
        Vector3 velocity; //0x0010
        Vector3 orientation; //0x001C
        Vector3 eye; //0x0028
        __int32 input; //0x0034
        __int32 toolType; //0x0038
        __int32 weaponType; //0x003C
        WeaponInfo_T * pWeaponInfo; //0x0040
        __int32 playerId; //0x0044
        __int32 teamId; //0x0048
    private:
        char pad_0x004C[0xC]; //0x004C
    public:
        __int32 health; //0x0058
        __int32 grenades; //0x005C
        __int32 blockStock; //0x0060
        __int32 blockR; //0x0064
        __int32 blockG; //0x0068
        __int32 blockB; //0x006C
    private:
        char pad_0x0070[0x28]; //0x0070
    public:
        __int8 holdingGrenade; //0x0098
    private:
        char pad_0x0099[0xB]; //0x0099
    public:
        __int32 blockPosX; //0x00A4
        __int32 blockPosY; //0x00A8
        __int32 blockPosZ; //0x00AC
    };

    struct World_T
    {
        void * pIWorldListener; //0x0000
        void * pIGameMode; //0x0004
        void * pGameMap; //0x0008
        void * pGameMapWrapper; //0x000C
        float time; //0x0010
        __int32 fogR; //0x0014
        __int32 fogG; //0x0018
        __int32 fogB; //0x001C
        __int32 team1R; //0x0020
        __int32 team1G; //0x0024
        __int32 team1B; //0x0028
        char team1Name[4]; //0xF25888
    private:
        char pad_0x0030[0x14]; //0x0030
    public:
        __int32 team2R; //0x0044
        __int32 team2G; //0x0048
        __int32 team2B; //0x004C
        char team2Name[4]; //0xF25888
    };

    struct WeaponInfo_T
    {
        void * pIdk; //0x0000
        World_T * pWorld; //0x0004
        Player_T * pOwner; //0x0008
        float time; //0x000C
        __int8 shooting; //0x0010
        __int8 shootingPreviously; //0x0011
        __int8 reloading; //0x0012
    private:
        char pad_0x0013[0x15]; //0x0013
    public:
        __int32 ammo; //0x0028
        __int32 stock; //0x002C
    };
 

Rake

Cesspool Admin
Administrator
Jan 21, 2014
12,074
78,998
2,371
These OpenSpades offsets are from @Kix's thread: Source Code - Internal OpenSpades Hack

C++:
enum class WeaponType : int32_t
{
    RIFLE_WEAPON = 0,
    SMG_WEAPON = 1,
    SHOTGUN_WEAPON = 2
};

enum class ToolType : int32_t
{
    ToolSpade = 0,
    ToolBlock = 1,
    ToolWeapon = 2,
    ToolGrenade = 3
};

enum NetClientStatus
{
    NetClientStatusNotConnected = 0,
    NetClientStatusConnecting,
    NetClientStatusReceivingMap,
    NetClientStatusConnected
};

class Player
{
public:
    class World* WorldPtr; //0x0000
    Vector3 Position; //0x0004
    Vector3 Velocity; //0x0010
    Vector3 Orientation; //0x001C
    Vector3 Eye; //0x0028
    char pad_0034[2]; //0x0034
    bool Airborne; //0x0036
    bool Wade; //0x0037
    ToolType ToolType; //0x0038
    WeaponType WeaponType; //0x003C
    class Weapon* WeaponPtr; //0x0040
    int32_t PlayerId; //0x0044
    int32_t TeamId; //0x0048
    char pad_004C[12]; //0x004C
    int32_t Health; //0x0058
    int32_t Grenades; //0x005C
    int32_t Blocks; //0x0060
    IntVector3 BlockColor; //0x0064
    float MoveDistance; //0x0070
    int32_t MoveSteps; //0x0074
    bool LastJump; //0x0078
    char pad_0079[7]; //0x0079
    float NextJumpTime; //0x0080
    float NextSpadeTime; //0x0084
    char pad_0088[8]; //0x0088
    float NextGrenadeTime; //0x0090
    float NextBlockTime; //0x0094
    bool HoldingGrenade; //0x0098
    char pad_0099[3]; //0x0099
    float GrenadeTime; //0x009C
    bool BlockCursorActive; //0x00A0
    bool BlockCursorDragging; //0x00A1
    char pad_00A2[2]; //0x00A2
    IntVector3 BlockCursorPos; //0x00A4
    IntVector3 BlockCursorDragPos; //0x00B0
    bool LastSingleBlockBuilSeqDone; //0x00BC
    char pad_00BD[3]; //0x00BD
    float LastReloadTime; //0x00C0
    bool PendingPlaceBLock; //0x00C4
    bool PendingRestockBlock; //0x00C5
    char pad_00C6[2]; //0x00C6
    IntVector3 PendingPlaceBlockPos; //0x00C8
    bool ReloadingServerSide; //0x00D4
    char pad_00D5[3]; //0x00D5
    float RespawnTime; //0x00D8
}; //Size: 0x00DC

class Team
{
public:
    IntVector3 Color; //0x0000
    std::string Name; //0x000C
}; //Size: 0x0024

class World
{
public:
    char pad_0000[16]; //0x0000
    float Time; //0x0010
    IntVector3 FogColor; //0x0014
    class Team Teams[3]; //0x0020
    char pad_008C[8]; //0x008C
    class EntityList* EntityListPtr; //0x0094
    char pad_0098[8]; //0x0098
    class PlayerPersistentList* PlayerPersistentsPtr; //0x00A0
    char pad_00A4[8]; //0x00A4
    int32_t LocalPlayerIndex; //0x00AC
}; //Size: 0x023C

class EntityList
{
public:
    class Player* Players[32]; //0x0000
}; //Size: 0x0080

class Weapon
{
public:
    char pad_0000[4]; //0x0000
    class World* WorldPtr; //0x0004
    class Player* OwnerPtr; //0x0008
    float Time; //0x000C
    bool Shooting; //0x0010
    bool ShootingPreviously; //0x0011
    bool Reloading; //0x0012
    char pad_0013[1]; //0x0013
    float NextShotTime; //0x0014
    float ReloadStartTime; //0x0018
    float ReloadEndTime; //0x001C
    int32_t SlowReloadLeftCount; //0x0020
    bool LastDryFire; //0x0024
    char pad_0025[3]; //0x0025
    int32_t Ammo; //0x0028
    int32_t Stock; //0x002C
}; //Size: 0x0044

class PlayerPersistent
{
public:
    std::string Name; //0x0000
    int32_t Kills; //0x0018
}; //Size: 0x001C

class PlayerPersistentList
{
public:
    class PlayerPersistent PlayerPersistents[32]; //0x0000
}; //Size: 0x0380

class SceneDefinition
{
public:
    int32_t ViewportLeft; //0x0000
    int32_t ViewportTop; //0x0004
    int32_t ViewportWidth; //0x0008
    int32_t ViewportHeight; //0x000C
    float FovX; //0x0010
    float FovY; //0x0014
    Vector3 ViewOrigin; //0x0018
    Vector3 ViewAxis[3]; //0x0024
    float zNear; //0x0048
    float zFar; //0x004C
    bool SkipWorld; //0x0050
    char pad_0051[3]; //0x0051
    float DepthOfFieldFocalLength; //0x0054
    float DepthOfFieldNearBlurStrength; //0x0058
    float DepthOfFieldFarBlurStrength; //0x005C
    uint32_t Time; //0x0060
    bool DenyCameraBlur; //0x0064
    char pad_0065[3]; //0x0065
    float BlurVignette; //0x0068
    float GlobalBlur; //0x006C
    float Saturation; //0x0070
    float RadialBlur; //0x0074
    char pad_0078[28]; //0x0078

}; //Size: 0x0094

class Client
{
public:
    char pad_0000[148]; //0x0000
    float Time; //0x0094
    char pad_0098[12]; //0x0098
    float TimeSinceInit; //0x00A4
    char pad_00A8[136]; //0x00A8
    class SceneDefinition LastSceneDef; //0x0130
    char pad_01C4[124]; //0x01C4
    bool ScoreboardVisible; //0x0240
    bool FlashlightOn; //0x0241
    char pad_0242[202]; //0x0242

}; //Size: 0x030C

class NetClient
{
public:
    Client* client;
    NetClientStatus status;
};

namespace Offsets
{
    inline uintptr_t base = 0;
    inline World* world = 0;
    inline EntityList* entityList = 0;
    inline Player* localPlayer = 0;
    inline SceneDefinition sceneDef = {};
    inline std::vector<Vector4> draws = {};
}
 
Last edited:
  • Like
Reactions: Kix
Attention! Before you post:

Read the How to Ask Questions Guide
99% of questions are answered in the Beginner's Guide, do it before asking a question.

No Hack Requests. Post in the correct section.  Search the forum first. Read the rules.

How to make a good post:

  • Fill out the form correctly
  • Tell us the game name & coding language
  • Post everything we need to know to help you
  • Ask specific questions, be descriptive
  • Post errors, line numbers & screenshots
  • Post code snippets using code tags
  • If it's a large project, zip it up and attach it

If you do not comply, your post may be deleted.  We want to help, please make a good post and we will do our best to help you.

Community Mods