/NullHooks

CS:GO internal cheat based on designer's based base.

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

NullHooks

CS:GO cheat I made based on designer's base, and many other cheats I found. Mainly made for learning.

GitHub issues Pull requests welcome License

Table of contents

  1. Description
  2. Features
  3. Installing
  4. Todo
  5. Screenshots

Description

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.

NOTE: Because @hBuffer dissapeared, I am transfering the repo from r4v10l1/NullHooks to NullHooks/NullHooks. Make sure you update your remotes with git 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.

Features

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

Player ESP

  • Enable/disable team ESP
  • Box ESP
  • Player skeleton
  • Name ESP
  • Health ESP
  • Line
  • Player info (flashed, weapons, etc.)
    • Current weapon
    • A - Armor
    • F - Is flashed
    • S - Is scoped
    • X - Can't shoot
    • D - Is defusing (soft)
    • D - Has defuser (hard)
    • B - Has bomb

Glow

  • Player glow
  • C4 glow
  • Dropped weapons and grenades glow
  • Chicken glow

Chams

  • Player chams
  • Hand chams
  • Sleeve chams
  • Weapon chams (viewmodel)
  • Change individual materials for the chams

Skinchanger

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. ⚠️ Currently stattrack is not working properly becayse of an error. See todo list.
"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

Model changer

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

⚠️ All the models need to be downloaded manually.

  • 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 in models.hpp. In that file explains where to put the models and all that. If an item is NULL 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 with v_.
      Example: "models/weapons/eminem/bananabit/v_bananabit.mdl"
    • "worldmodel": The worldmodel path from the csgo directory. The worldmodel files usually start with w_.
      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.

Misc

  • 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
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.

Installing

Compiling from source (Recommended)

I recommend using Visual Studio 2022.

  1. Install Microsoft Visual Studio 2022 from this link
  2. Clone or download the project to your computer
  3. Open the file src/NullHooks.sln with Visual Studio 2022
  4. If an alert pops up, click Ok or Update, if it doesn't make sure the project is updated by clicking Project > Retarget solution in the window bar
  5. Make sure you are compiling the project in Release | x86 in the top bar
  6. Click Build > Build solution in the window bar (You can also press Ctrl+Shift+B)
  7. The final .dll file path should be in the output window of Visual Studio (Usually src/output/release/NullHooks.dll)
  8. 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.

Downloading the .dll from releases

This method is not recommended as the cheat can be a bit outdated and you might encounter some problems depending on your computer.

  1. Go to the latest release page
  2. Download the file NullHooks.dll under "Assets"
  3. Inject using your favourite injector

Todo

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

  • 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)
  • 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)
    • Add decoy timer
  • Arm models are only changed when having a custom playermodel. replace_arms_model() is always called.
  • Add no-recoil
  • Add scaleform ui
  • 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

Screenshots

Some screenshots might be a bit outdated...

screenshot-1 screenshot-2 screenshot-3 screenshot-4 screenshot-5