Awesome Open Source
Awesome Open Source

PCSGOLH Build status

PCSGOLH - Pointless Counter-Strike: Global Offensive Lua Hooks. A open-source Lua API for CS:GO hacking written in modern C++

Getting Started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. (Documentation still not finished)


Visual Studio 2013+


Open up a project, make sure that build mode is set to Release, click build. Now the compiler should build all the required libraries and then the main project. Default script location is not defined, to change it to whatever you want, head to sdk/sdk.hpp and change the SCRIPT_DIR.


If you already sucessfully build project, head to Release folder where you should find Injector.exe and PCSGOLH.dll. Open a console there and type Injector.exe <dir to your project>/Release/PCSGOLH.dll. Make sure that Counter-Strike Global Offensive is running if not injector will throw an error.


DLL Injection works by tricking/forcing the target process into loading a DLL of your choice. After that, the code in that DLL will get executed as part of the target process and will be able to do anything the process itself can.

Usage of included injector: Injector.exe <dir to .dll>


Simple esp boxes

_Engine = Interfaces:GetEngine()
_EntityList = Interfaces:GetEntityList()

function DrawBox(pEntity)
	local vEyePos = pEntity:GetEyePos()
	local vOrigin = pEntity:GetAbsOrigin()
	local vHeadScreen = Vector()
	local vOrigScreen = Vector()
	Utils:WorldToScreen(vEyePos, vHeadScreen)
	Utils:WorldToScreen(vOrigin, vOrigScreen)
	local iBoxHeight = math.abs(vHeadScreen.Y - vOrigScreen.Y)
	local iBoxWidth = iBoxHeight / 1.8
	DrawManager:DrawRect(vHeadScreen.X - iBoxWidth / 2, vHeadScreen.Y, iBoxWidth, iBoxHeight, 255, 0, 255, 255)

function OnPaint(panel)
	if _Engine:IsInGame() then
		local pLocal = _EntityList:GetEntityFromIndex(_Engine:GetLocalPlayer())
		if not pLocal:IsValid() then return end
		for i = 1, _EntityList:GetHighestEntityIndex() do
			local pEntity = _EntityList:GetEntityFromIndex(i)
			if pEntity:IsValid() then
				if pEntity:GetClassId() == 40 then
					if pEntity:IsAlive()
						and not pEntity:IsDormant()
						and i ~= _Engine:GetLocalPlayer() then
Hooks:Register(HOOK_PAINTTRAVERSE, OnPaint)

For more examples check examples

Built With

  • Boost - LuaBind required utilities.
  • Lua - Programming language.
  • LuaBind - Binding C++ functions to lua.


  • Sebastian Lyko - Initial work - rvndl

See also the list of contributors who participated in this project.


This project is licensed under the MIT License - see the file for details

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
c-plus-plus (18,732
lua (2,131
cpp (1,333
reverse-engineering (481
hooks (259
cpp11 (253
cpp17 (218
hack (191
injection (80
csgo (74
dll (66
cheat (48
hooking (40
injector (18
counter-strike-global-offensive (16
internal (16