CS:GO cheat I made based on designer's base, and many other cheats I found. Mainly made for learning.
Edgy name but not as cool as PissHooks™ (RIP).
As I said I made this project to learn about game hacking and cpp in general, so expect some bad practises and errors, but feel free to improve them!
See contributing.md for contributing to the project and references.md for a list of cheats that helped me learn while making it.
⚠️ This project is currently inactive.
Working on this project has been a lot of fun, and I learned a lot in the process. Thank you to everyone who helped me and supported me.
My knowledge and my code style has improved notably since I started with this project, so if you are actually interested in some good code, I recommend you check out my osdev project: fs-os (and the wiki too!).
Note
Because @hBuffer dissapeared, I am transfering the repo from 8dcc/NullHooks to NullHooks/NullHooks. Make sure you update your remotes withgit remote set-url origin https://github.com/NullHooks/NullHooks
.
Note
If you are some kid from a third world country trying to sell this, please just don't, everyone knows how retarded you are.
Aim
- Triggerbot
- With custom delay
- Aimbot
- Snappy
- Silent
- Autowall
- Only visible
- Autowall (Min damage)
- Ignore walls
- Autofire
- On key
- Auto if key is set to 'None'
- Aimbot fov
- Fov circle
- Bodyaim if lethal. Will ignore enabled hitboxes if another one is lethal.
- Priorize lethal targets. Will ignore closest target if there is a killable target inside the aimbot's fov.
- Aimbot smoothness (Only on snappy aimbot)
- Aimbot and triggerbot hitboxes
- Only if scoped
- Autorevolver
- Aimpunch only on rifles (Looks more legit)
Antiaim
- Antiaim with custom pitch and jaw
- Spinbot with custom speed
Visuals
- Enable/disable team ESP
- Box ESP
- Player skeleton
- Name ESP
- Health ESP
- Line
- Player info (flashed, weapons, etc.)
- Current weapon
A
- ArmorF
- Is flashedS
- Is scopedX
- Can't shootD
- Is defusing (soft)D
- Has defuser (hard)B
- Has bomb
- Player glow
- C4 glow
- Dropped weapons and grenades glow
- Chicken glow
- Player chams
- Hand chams
- Sleeve chams
- Weapon chams (viewmodel)
- Change individual materials for the chams
The skinchanger loads a json file called skins.json
, inside DOCUMENTS/NullHooks/
, DOCUMENTS being your windows documents folder (will be created if it doesn't exist). The json structure is very simple, having the weapon buy index enum name as a string (weapon name list), with the weapon properties as strings inside:
Setting name | Description |
---|---|
"item_definition_index" |
Can have a weapon buy index as int or as enum name (Same names as weapons, like WEAPON_KNIFE_M9_BAYONET for example). |
"paint_kit" |
The skin id as integer. You can find some skin ids here, here or here. |
"seed" |
The skin seed as integer. |
"stattrack" |
The stattrack kill number as int. -1 means disabled. |
"quality" |
The int or enum string of the quality. List can be found here. |
"wear" |
The float corresponding to the weapon wear. From 0.001f to 1.f , lower means better. |
"custom_name" |
String containing the custom name for the weapon. |
An example of a skin config file can be found in example-configs/skins.json.
The skin chager currently is able to change:
- Weapon skins
- Knife skins and models
- Gloves
There are currently 2 model changer methods. find_mdl
and precached models. sv_pure
bypass is integrated in the cheat.
The model changer is currently able to change:
- Weapons
- Normal weapons
- Knifes
- Players
- Localplayer
- Allies
- Enemies
- Arms
- When using
find_mdl
, it will hook to the function, and when the game tries to load a model, we will replace it with our own.find_mdl
model paths are hardcoded inmodels.hpp
. In that file explains where to put the models and all that. If an item isNULL
it will be ignored. - Precached models are a way better alternative, because with my json config system you can edit and load the file any time you want during a match. For adding models to a weapon, simply add to the skin json the following options:
"viewmodel"
: The viewmodel path from the csgo directory. The viewmodel files usually start withv_
.
Example:"models/weapons/eminem/bananabit/v_bananabit.mdl"
"worldmodel"
: The worldmodel path from the csgo directory. The worldmodel files usually start withw_
.
Example:"models/weapons/eminem/bananabit/w_bananabit.mdl"
A good example of a json file for replacing the knives usin precached models would be like this:
Example skins.json file and explanation
{
"LOCAL_PLAYER": "models/player/custom_player/kuristaja/hitler/hitler.mdl",
"PLAYER_ALLY": "models/player/custom_player/kolka/master_chief/master_chief.mdl",
"PLAYER_ENEMY": "models/player/custom_player/nier_2b/nier_2b.mdl",
"ARMS": "models/player/custom_player/nier_2b/nier_2b_arms.mdl",
"WEAPON_KNIFE": {
"item_definition_index": "WEAPON_KNIFE_KARAMBIT"
},
"WEAPON_KNIFE_T": {
"item_definition_index": "WEAPON_KNIFE_WIDOWMAKER"
},
"WEAPON_KNIFE_WIDOWMAKER": {
"paint_kit": 416,
"seed": 420,
"quality": "SKIN_QUALITY_VINTAGE"
},
"WEAPON_BAYONET": {
"paint_kit": 44,
"seed": 555,
"quality": "SKIN_QUALITY_CUSTOMIZED",
"viewmodel": "models/weapons/caleon1/screwdriver/v_knife_screwdriver.mdl",
"worldmodel": "models/weapons/caleon1/screwdriver/w_knife_screwdriver.mdl"
},
"WEAPON_KNIFE_KARAMBIT": {
"paint_kit": 416,
"seed": 69,
"quality": "SKIN_QUALITY_GENUINE",
"custom_name": "Banana knife",
"viewmodel": "models/weapons/eminem/bananabit/v_bananabit.mdl",
"worldmodel": "models/weapons/eminem/bananabit/w_bananabit.mdl"
}
}
The first 3 lines are for changing special models. In this case ally players, enemy players and localplayer. See special models here: Link.
Changes the default ct knife index to the karambit one, automatically changing the models and applaying the skins of the karambit. Since there is a custom viewmodel and worlmodel, the model will change but the rarity, skin name, kill icon, etc. will be the same.
You can add viewmodels to weapons that you are not currently using like the bayonet in this case. Right now we are replacing the terrorist knife with a Vintage Talon Knife Zaphire, but if we wanted to change that, we could just edit the file, replace the "item_definition_index"
of the terrorist knife to the WEAPON_BAYONET
, load the skins config from the config tab and press the full update button.
- C4 timer and bar
- Dropped weapons and grenades name
- Dropped weapons and grenades icon
- Nade projectile ESP
- Nade projectile duration
- Grenade prediction
- No flash
- No scope
- Wireframe smoke (Open an issue if you want NoSmoke)
- Worldcolor
- Custom crosshair
- Recoil crosshair
- Bullet tracers (:warning: Broken in online matches. Check todo)
- Fov changer
- Thirdperson
- Motion blur
Movement
- Infinite duck (:warning: Untrusted)
- BunnyHop
- Autostrafe
- Legit
- Forward rage (Old one)
- Multidirectional rage
- Edgejump (On key)
- Edgebug assist (Needs improvement)
- Jumpbug (On key)
- Slow walk (On key)
- Speed graph (With color, height and position options)
Misc
- Backtrack
- Rank revealer
- Spectator list
- Stats watermark (username, cheat name, fps, ping...)
- Hide cheat on screenshots
- Hotkey system
- Delete sets the hotkey to
None
, meaning that the hotkey will apear always as held - Esc will cancel the current hotkey selection, restoring it to its original state
- Delete sets the hotkey to
Config system
Config system for skins and settings (independent for now). The skin configs should be placed under the NullHooks folder which is created in your documents folder, and your setting configs should be placed under the config directory. Example:
DOCUMENTS
└─ NullHooks
├─ config
│ ├─ my_config_1.json
│ └─ my_name_123.json
└─ skins.json
For more information and examples check config-examples
.
I recommend using Visual Studio 2022.
- Install Microsoft Visual Studio 2022 from this link
- Clone or download the project to your computer
- Open the file
src/NullHooks.sln
with Visual Studio 2022 - If an alert pops up, click
Ok
orUpdate
, if it doesn't make sure the project is updated by clickingProject > Retarget solution
in the window bar - Make sure you are compiling the project in
Release | x86
in the top bar - Click
Build > Build solution
in the window bar (You can also pressCtrl+Shift+B
) - The final
.dll
file path should be in the output window of Visual Studio (Usuallysrc/output/release/NullHooks.dll
) - Inject using your favourite injector
Note: If you have problems, make sure you follow the steps above and verify the integrity of your game files.
This method is not recommended as the cheat can be a bit outdated and you might encounter some problems depending on your computer.
- Go to the latest release page
- Download the file
NullHooks.dll
under "Assets" - Inject using your favourite injector
Completed items
- Clean the code
- Choose team not working (click)
- Move NullHooks-Lite to NullHooks branches
- Change spectator list style
- Add recoil crosshair
- Make spectator list movable (same as menu)
- Add active nade ESP
- Fix smoke class id
- Add nade prediction
- Add player skeleton ESP
- Bring menu tabs back (rip)
- Make spectator list width dynamic depending on name lengths
- Add line esp
- Add glows
- Add bomb glow
- Add player glow
- Add chicken glow
- Add weapon glow
- Add bomb timer
- Add weapon info about player
- Fix entity names showing outside the map if they dont exist (See
entity_esp.cpp
) - Remove glow on nade projectiles
- Remove esp on spectated player
- Nade projectiles outside screen
- Add option for disabling watermark and stats
- Make gui checkboxes enable by clicking the name of the feature
- Add chams
- Add section columns
- Add hand chams
- Add material selector to chams
- Support wchar strings in renderer (Russian characers for example, see comment in renderer) (See this)
- Spectator list repeating name again (const's fault?)
- Fix chams on custom playermodels
- Fix cursor position being relative to screen instead of game window
- Add color picker (example)
- Add popup system that renders after the menu so other elements don't render over the window
- Fix
gui::id_changer()
decrease button. See issue - Add great global input system
- Fix both spectator list and menu dragging when overlapped (See bottom of
menu.cpp
) - Add combobox (Will add multi-combobox when needed)
- Make selected item highlighted in the popup
- Replace noflash toggle with slider for opacity
- Add speedgraph
- Fix combobox crash when holding outside area
- Add second color picker
- Add color picker for friendly player chams
- Fix chams render distance (link) (#18)
- Add custom models
- Check if model path exists (link)
- Add custom hotkeys to framework
- Add motion blur (See #25)
- Add multicombobox
- For selecting what parts of the speedgraph we should draw
- Reset bomb timer on new round (sometimes?)
- Add alt+tab checks to global input
- Add skinchanger
- Config based
- Add config and all that (json or whatever)
- Skins
- Global config
- Make config system more "nested"
- Add can't shoot to player ESP
- Add textbox to framework for creating new config files from menu
- Add antiaim
- Add killicons to knife skinchanger
- Replace
player_info
esp with multicombobox - Replace
findmdl
model changer with precached models (link) - Add "defusing" to bomb timer
- Add worldcolor
- Entity glow won't turn off on weapons (will turn off if another glow is on)
- Skinchanger fixes
- Fix talon knife inspect animation
- Get localplayer steam id to fix weapon stattrack
- Add auto revolver
Pending items
- Add aim stuff
- Triggerbot
- Add delay slider
- Aimbot
- Silent
- Snappy
- Aimbot fov circle (or square)
- Custom aimbot key (autofire)
- Add bodyaim if lethal
- Make aimbot and triggerbot also aim for backtrack. (Get hitbox positions from matrix)
- Fix aimbot shooting 1 tick behind (Try shooting moving targets with
sv_showimpacts 1
, it only hits locally)
- Triggerbot
- Add movement stuff
- EdgeJump
- EdgeBug (Improve: link)
- JumpBug
- Slowwalk
- Add event listeners (hook
FireEventIntern
)- Add bullet tracers
- Fix
bullet_impact
event not working in online matches (without using event listener)
- Fix
- Add decoy timer
- Add bullet tracers
- Arm models are only changed when having a custom playermodel.
replace_arms_model()
is always called. - Add no-recoil
- Add scaleform ui
- Add custom radar (See SEOwned for cool style)
- Add player list
- Ability to set certain players to rage and ignore aimbot smoothing, etc.
- Ability to set certain players to friendly and ignore aimbot, etc.
- Port to linux
Some screenshots might be a bit outdated...