ReChecker is a Metamod plugin that asks connecting clients for the MD5 hash (or existence, or absence) of specific files on their machine, and lets you act on the answer. It is how you catch the obvious cheats — a modified opengl32.dll, a wallhack's replacement models, a .cfg that no legitimate client has — and how you enforce that everyone is running the same map or model files you shipped.
Be honest about what it is: ReChecker is not an anti-cheat. It is a file-integrity check. A cheat that does not touch a file you check for, or that lies about the hash, walks straight past it. It raises the floor. It does not stop a determined cheater.
1. Install the plugin
ReChecker is a Metamod plugin (like ReVoice and Reunion), not an AMXX plugin.
mkdir -p /home/steam/hlds/cstrike/addons/rechecker cp rechecker_mm_i386.so /home/steam/hlds/cstrike/addons/rechecker/ cp resources.ini /home/steam/hlds/cstrike/addons/rechecker/ chmod 644 /home/steam/hlds/cstrike/addons/rechecker/*
Register it in cstrike/addons/metamod/plugins.ini:
linux addons/rechecker/rechecker_mm_i386.so linux addons/amxmodx/dlls/amxmodx_mm_i386.so
Restart. Metamod plugins load at server start, not on map change.
2. resources.ini — the rules
This is the whole product. Each line is a check against a client-side file path, an expected hash (or a keyword), and an action.
; <file> <hash or keyword> <action> ["message"] ; kick anyone whose opengl32.dll differs from the one we expect "opengl32.dll" "d41d8cd98f00b204e9800998ecf8427e" "kick" "Modified opengl32.dll" ; the file must not exist at all "cstrike/wallhack.cfg" "missing" "kick" "Cheat config detected" ; the file must exist and match, or the client is kicked "cstrike/models/player/vip/vip.mdl" "<md5>" "kick" "Bad player model" ; log only, do not act — use this while you are calibrating "cstrike/config.cfg" "any" "log"
Actions available in typical builds: kick, log, console, and passing the result to a plugin. Read the resources.ini that ships with your build for the exact keyword set — it has changed between versions and inventing an action silently disables the rule.
3. Get the hashes right
The hash in resources.ini must be the MD5 of the file as it exists on the client, not on your server. For files you ship (custom models, sprites, sounds), those are the same file, so:
md5sum cstrike/models/player/vip/vip.mdl
For client-side game files (opengl32.dll, hw.dll), they are not the same — you need the hash from a clean client install, and it differs between the Steam build and every non-Steam build in circulation. This is where people get themselves into trouble.
4. Start in log-only mode. Always.
Set every rule to log for the first week. Then read what actually shows up:
tail -f /home/steam/hlds/cstrike/addons/rechecker/rechecker.log
You will discover that legitimate players have a dozen different opengl32.dll hashes, because they are on different client builds — Steam, steam_legacy, and half a dozen non-Steam packs. If you had shipped that rule as kick, you would have kicked most of your regulars on day one. That is exactly the failure described in ReChecker kicking legitimate players, and it is entirely avoidable by not skipping this step.
Only after you have a week of logs, and you understand which hashes are normal on your player base, do you convert a rule to kick. Convert one rule at a time.
5. Verify
meta list
[ 1] ReChecker RUN - rechecker_mm_i386. 2.x ini Start ANY
Then test the pipeline end to end with a rule you can trigger on purpose. Create a file on a test client:
echo test > cstrike/rechecker_test.cfg
and a rule:
"cstrike/rechecker_test.cfg" "missing" "kick" "Test rule"
Connect from that client. You should be kicked with your message. Connect from a client without the file — you should not be. That proves the plugin loads, parses the config, queries the client, and acts on the answer. Nothing short of that proves ReChecker is working.
Rules that are worth writing
- Server-shipped custom content — models, sprites and sounds you distribute. The hashes are yours, they are stable, and a mismatch means the player replaced your model with a bright-green wallhack version. This is ReChecker's best use case by a distance.
- Known-cheat filenames — files that no clean client has. Low false-positive rate, low value (renaming a file defeats it), but it costs nothing.
- Do not check
hw.dll,opengl32.dll, orclient.dllwithkickunless you have a Steam-only server and you have logged the real distribution first. On a mixed server, the hash space is too wide to enumerate.
Common errors
bad loadinmeta list— wrong architecture.file rechecker_mm_i386.somust report ELF 32-bit, Intel 80386. See bad load.- Rules never fire —
resources.iniis in the wrong directory, or a syntax error made the parser drop the file. It must sit next to the.soinaddons/rechecker/. - Everyone gets kicked at once — you hashed a file from your machine and it does not match any real client. Set the rule back to
logimmediately, then read the logs. - Non-Steam players are kicked, Steam players are not — you are hashing a client binary. Non-Steam builds differ. Drop that rule.
Verification checklist
meta list— ReCheckerRUN.- The log file is being written with entries for connecting players.
- A deliberately-planted test file triggers a kick with your message.
- After a week in log-only mode, zero legitimate players would have been kicked by your rules.
If you want defence in depth, pair this with the anti-cheat options overview — ReChecker is one layer, not the answer.









