/FrameworkExample

A, despite the name, fully-featured training software for Counter Strike: Global Offensive, made for Linux with Framework

Primary LanguageC++GNU General Public License v3.0GPL-3.0

FrameworkCSGO

A fully-featured training software for Counter Strike: Global Offensive, made for Linux

WARNING: This program is being detected by Valve. Usage on official, custom or private servers will most likely result in punishment from Valve!

Installation

Gentoo/Portage Users might want to use this ebuild repository.

Dependencies

Ubuntu / Debian / Linux Mint

apt-get install gdb git cmake make build-essential libsdl2-dev

Arch Linux / Manjaro Linux

pacman -S base-devel cmake gdb git sdl2

Fedora

dnf install gdb git cmake make gcc-c++ SDL2-devel

OpenSUSE Tumbleweed

zypper install patchelf gdb git cmake make gcc-c++ SDL2-devel

These might be outdated, in that case please open an issue or a pull request, which updates the package names.

Download

Make sure to download the submodules.

git clone --recurse-submodules https://github.com/Sumandora/FrameworkCSGO.git

The build script can be used to build the program.

./Build.sh

If you want to supply additional compiler arguments use CXXFLAGS

CXXFLAGS="-fstack-protector-strong" ./Build.sh

Some of these might break the resulting binary however.

A ELF-Binary will be built in the "Build"-subdirectory, which will be created by the script.

Custom library names

In case you want to build the project using a different name you can do something like this:

echo "MyCoolProjectName" > ProjectName
./Clean.sh
# Rebuild here using Debug.sh or Build.sh

The situation with Clang

Using Clang is inappropriate and should be avoided. Clang's machine code is too unpredictable, so it is necessary to disable security features. However, you can use clang by setting your CC and CXX environment variables to clang and clang++ respectively.
Clang doesn't work right now because std::ranges::views::reverse is unsupported

Usage

A simple inject script using a debugger like GDB or LLDB is provided.
Make sure to run it as root user

./Load.sh

In case the default debugger (GDB) is not present, the script will error out.
Use the DEBUGGER variable to set it to something you have.

DEBUGGER=lldb ./Load.sh

After the script loaded the program into the game it will set the ptrace_scope to 3.
This means that you will not be able to use ptrace after loading.
To use ptrace again you will need to reboot.
Please note that the program is not the only software using ptrace, it may be used widely on your system.

Make sure to use the script in a state, where the game is not changing frequently.

  • Don't inject before you can see the main menu
  • Don't inject when you are loading a level

Contribution

Contributions are welcome
Issues and Pull Requests can help improve the program

Setting up a workspace (Example, your setup can differ)

  • Fork the repository
git clone --recurse-submodules [URL] # Replace URL with your forked repository
./Build.sh # Check for initial build errors
** Make changes **
./Debug.sh # The debug script will build and load a debug build, which can also be analyzed using a debugger of your choice

git add file1 file2 # If you added new files, you have to mark them to be tracked, if you didn't add any files, you can skip this step.
git commit -a # Make a commit with all changed files. You may have to set the 'EDITOR' variable, because you have to write a commit message. Please write a small and compact message explaining what you have done.
git push

You should have pushed your changes to your fork
If you want to propose the changes in the mainline release,
you can open a pull request on GitHub