- Game Name
- CS GO
- Anticheat
- VAC
- How long you been coding/hacking?
- 6 months
- Coding Language
- C++
After writing some more cheats for cs go, I thought it'd finally be fun to try and see if I could take any of the cheats online.
I decided to try and create a skinchanger that I could use online, as that wouldn't cause any issues regarding an overwatch ban.
...And I got banned after a day
I followed the 5 simple steps from how to bypass VAC, but obviously I did something wrong, so I want to ask a few questions to get an idea of where the problem could have been.
Hooks:
1. How far should you hook with a mid-function hook?
I used mid-function hooks for the CS GO functions I hooked, and used NtProtectVirtualMemory over the regular VirtualMemory as I've read that VAC hooks VirtualProtect.
However, sometimes I only hooked 12 bytes into the function, rather than farther in. Is this bad practice or should I have been fine going 12 bytes into the function?
2. How much would using GetModuleHandle affect it?
I didn't even realize I had done this, but I used GetModuleHandle when that's an obvious function that VAC hooks. So that was stupid.
I wrote all of this code myself (besides the fact that it is based on many concepts I've learned from GH) and I'm wondering whether overlooking
this small detail would have caused the ban.
3. Would using FindWindow and SetWindowLongPtr have caused a crash?
I used these functions when setting up imGui, and I'm wondering whether I should have opted for a stealthier option.
Console:
1. Does using a console affect detection? I'd assume not, but want to be sure. I used the console to initially debug some problems specific to MM.
Injection:
1. Does the time of injection matter?
I wasn't able to auto-inject right on game start, so I decided to try to just inject while I was already in-game. I had read a post from 2016 under the Bypass VAC thread that you should inject before, but reading around recent threads it didn't seem to be of great importance for many people, so I thought I'd just try it.
2. Should uninjecting a manually mapped DLL crash your game?
I've read that you can't just use FreeLibraryAndExitThread() to properly exit a manually mapped dll, yet I used it and found that my game never crashed so I just put off properly implementing manually mapped uninjection until later. I'm assuming this doesn't pertain to the ban but was curious anyway.
Going for Round Two
- How much needs to be changed for the cheat's signature to be different than the last one?
This isn't the worst thing since my code is shit anyways and could use rewriting, but definitely want an idea of what needs to be changed to ensure the signature is different.
I don't expect all of these questions to be answered for me without any work on my end, but I thought I'd organize them here for anyone that knows the answer immediately to some of the questions as these are what I'm going to be looking into in the coming weeks to figure out where I went wrong.
Thank you for any feedback for this troglodyte who failed to bypass VAC
Not sure whether to label this as Q&A or discussion since there likely won't be a straightforward answer, but I'll set it to Q&A for now.
I decided to try and create a skinchanger that I could use online, as that wouldn't cause any issues regarding an overwatch ban.
...And I got banned after a day

I followed the 5 simple steps from how to bypass VAC, but obviously I did something wrong, so I want to ask a few questions to get an idea of where the problem could have been.
Hooks:
1. How far should you hook with a mid-function hook?
I used mid-function hooks for the CS GO functions I hooked, and used NtProtectVirtualMemory over the regular VirtualMemory as I've read that VAC hooks VirtualProtect.
However, sometimes I only hooked 12 bytes into the function, rather than farther in. Is this bad practice or should I have been fine going 12 bytes into the function?
2. How much would using GetModuleHandle affect it?
I didn't even realize I had done this, but I used GetModuleHandle when that's an obvious function that VAC hooks. So that was stupid.
I wrote all of this code myself (besides the fact that it is based on many concepts I've learned from GH) and I'm wondering whether overlooking
this small detail would have caused the ban.
3. Would using FindWindow and SetWindowLongPtr have caused a crash?
I used these functions when setting up imGui, and I'm wondering whether I should have opted for a stealthier option.
Console:
1. Does using a console affect detection? I'd assume not, but want to be sure. I used the console to initially debug some problems specific to MM.
Injection:
1. Does the time of injection matter?
I wasn't able to auto-inject right on game start, so I decided to try to just inject while I was already in-game. I had read a post from 2016 under the Bypass VAC thread that you should inject before, but reading around recent threads it didn't seem to be of great importance for many people, so I thought I'd just try it.
2. Should uninjecting a manually mapped DLL crash your game?
I've read that you can't just use FreeLibraryAndExitThread() to properly exit a manually mapped dll, yet I used it and found that my game never crashed so I just put off properly implementing manually mapped uninjection until later. I'm assuming this doesn't pertain to the ban but was curious anyway.
Going for Round Two
- How much needs to be changed for the cheat's signature to be different than the last one?
This isn't the worst thing since my code is shit anyways and could use rewriting, but definitely want an idea of what needs to be changed to ensure the signature is different.
I don't expect all of these questions to be answered for me without any work on my end, but I thought I'd organize them here for anyone that knows the answer immediately to some of the questions as these are what I'm going to be looking into in the coming weeks to figure out where I went wrong.
Thank you for any feedback for this troglodyte who failed to bypass VAC

Not sure whether to label this as Q&A or discussion since there likely won't be a straightforward answer, but I'll set it to Q&A for now.