Blog / anti-cheat · · 11 min read · Signed KyTech Research

Anatomy of a Cheat Ban Wave: Timing, Batching, and Telemetry Signals

Why publishers batch enforcement instead of banning on detection, and what the timing tells you about how the sausage is made.

A "ban wave" is what happens when an anti-cheat vendor sits on months of detection data, then flushes thousands of enforcement actions to the platform in a single window. To a banned player it looks arbitrary. To a cheat vendor it looks like a scheduled artillery strike. To the anti-cheat engineering team it is the safest way to ship enforcement without lighting the whole detection stack on fire.

Instant bans exist. Signature matches on obvious tooling still trigger same-session kicks and permanent flags. But the enforcement events that move the needle on active cheater counts, the ones that get press write-ups and Twitter screenshots, are batched. This post walks through why batching is preferred, how the timing works across EAC, BattlEye, VAC, and Vanguard, what signals the professional cheat market watches for, and what a mature provider does in the two weeks before a wave lands.

Why publishers batch enforcement

There are four defensible reasons a publisher chooses batched enforcement over instant action, and they compound.

The first is signature diversity. A detection heuristic that fires on one player is a curiosity. The same heuristic firing on 4,000 players who all share a memory access pattern, a driver load fingerprint, or a set of RWX pages at identical relative offsets is a signature cluster. Anti-cheat telemetry pipelines are built to correlate those clusters. Banning instantly on the first hit throws away the ability to group; batching preserves it and lets the reviewer sort provider A from provider B from a false-positive cluster driven by, say, a broken overlay.

The second is attribution deniability. If a cheat provider pushes build 4.7.2 on a Tuesday and every user of 4.7.2 gets kicked on Wednesday, the provider knows with certainty which build tripped the wire. They can revert, diff against 4.7.1, and isolate the exact change. Batching the enforcement across three or four subsequent builds diffuses that signal. When users of builds 4.7.0 through 4.7.4 all get banned in the same wave, the provider has to guess which change was actually detected. That guess costs engineering hours, and engineering hours are the actual cost the publisher wants to impose.

Third is legal defense. Batched enforcement with a documented human review step holds up much better than automated instant action when a chargeback bank, a class-action complaint, or a regional consumer regulator asks how the ban decision was made. A batched wave with an internal case number per ban, a signature ID, and a reviewer sign-off is defensible; a real-time kernel heuristic firing a permaban is not.

Fourth is the psychology of the wave itself. A single announcement that 40,000 accounts were banned lands in press coverage. Instant bans, spread across every day of the month, do not. Deterrence is not measured only by how many cheaters you removed, it is measured by how many people who were considering a subscription saw the news and closed the tab.

The historical cadence, by vendor

Cadences shift, and no one on the outside sees the internal calendar, but the public record from the last several years is consistent enough to sketch. Treat these as observed patterns rather than promises.

Anti-cheat Typical wave cadence Public announcements Notes
EAC (Epic, acquired 2018) Monthly, occasionally larger quarterly sweeps Rare, per-title Waves often align with title patch cycles
BattlEye More frequent, sometimes weekly Public bulletins on @BattlEyeGB Vocal about specific cheats and providers
VAC Historically quarterly, irregular now Almost never Steam account bans surface on profiles
Vanguard (Riot) Mixed, real-time kicks plus batched account actions Occasional, per-title Moved LoL to TPM 2.0 requirement in 2024
Byfron / Hyperion (Roblox, acquired 2022) Continuous with periodic batching Rare Heavy on client-side attestation

The EAC monthly rhythm is the one most professional cheat operations plan around, because Fortnite, Apex, and a long tail of Unreal titles all sit under that umbrella. BattlEye's public style is different, more of a rolling drumbeat with named callouts. VAC is the outlier: enforcement decisions can sit for months and appear without any external event to anchor them.

Signals that precede a wave

A cheat provider does not need to be told a wave is coming. If they are competent, they are watching a small set of telemetry proxies that get noisy in the days before enforcement lands. None of these are secret, and none require access to publisher systems, only careful monitoring of publicly observable behavior:

  • Client-side scan spikes. The anti-cheat service starts issuing more ReadProcessMemory or NtQueryVirtualMemory calls into the game process than baseline. A provider running a per-user telemetry stub sees the call frequency climb three to seven days before a wave.
  • New signature bundle sizes. Vanguard, Byfron, and modern EAC hot-refresh their rule bundles over HTTPS. The bundle URL is fixed and the size is observable. A jump of hundreds of kilobytes on a signature bundle correlates with a new detection set that vendors sometimes let sit for a week to catch users who did not update.
  • Support ticket clustering. Users on specific hardware or specific game modes suddenly reporting kicks in the same 24-hour window is the classic single-day-detection tell.
  • Public forum silence. Competing providers going conspicuously quiet on their status pages, patch notes, or Discord announcements often means they took a hit and are triaging.
  • Anti-cheat driver version bumps. A silent EAC or BattlEye driver revision pushed outside a normal game update almost always precedes a wave by one to two weeks.

The KyTech engineering team tracks the first two in an internal dashboard, correlated across our six supported titles. It is not a crystal ball. It is a heuristic that has been right often enough to influence when we push a substrate rotation.

Silent bans versus public bans

VAC-style silent bans arrive weeks or months after the detection. The account plays normally, the vendor never sees the wire trip, and the ban lands during a quiet Saturday flush Valve does not comment on. Attribution leaks are near zero, and the wave only becomes visible once third-party trackers aggregate profile updates. The tradeoff is deterrence: a silent ban educates no one except the person who lost the account.

Public bans, the BattlEye pattern, invert every tradeoff. The kick is immediate, the overlay names the anti-cheat, and BattlEye's public Twitter will name the specific cheat and provider by build. A competent provider can reverse the exact signature within a day. Most mature titles now run a mixed program: real-time kicks for obvious tooling, quarterly silent flushes for the harder layer.

Signal-to-response latency

The gap between a vendor observing a signal and a provider pushing a countermeasure is the operationally relevant number. KyTech targets under 24 hours from a confirmed signal, and under six hours for a signed-driver revocation, since a revocation stops every user at once rather than the fraction a wave typically catches.

A concrete timeline from a recent EAC cycle, sample-date through ban-date on one axis:

day 0    2026-06-01   substrate rebuild deployed to a live cohort
day 3    2026-06-04   EAC signature bundle jumps from 4.1 MB to 4.7 MB
day 7    2026-06-08   support: 4 users on Ryzen 7000 + Win11 24H2 kicked
day 11   2026-06-12   BattlEye pushes silent driver revision 7.634 -> 7.641
day 14   2026-06-15   provider rotates driver certificate out of band
day 21   2026-06-22   wave lands, roughly 9,000 accounts across EAC titles
day 28   2026-06-29   post-wave forensic completes, next rotation scheduled

Signal aggregation does not require exotic tooling. Grouping ban events by IP prefix, hour bucket, and reported anti-cheat message reveals wave shapes fast enough for a human on-call to act:

-- group recent ban events into wave candidates
SELECT
  substr(ip, 1, instr(ip || '.', '.') - 1) AS octet1,
  strftime('%Y-%m-%d %H:00', event_time)   AS hour_bucket,
  anti_cheat_msg,
  count(*) AS hits
FROM ban_events
WHERE event_time >= datetime('now', '-72 hours')
GROUP BY octet1, hour_bucket, anti_cheat_msg
HAVING hits >= 5
ORDER BY hits DESC;

The point is not the query, it is the discipline of running it every hour rather than after the fact.

What a mature provider does before a wave

The correct posture in the pre-wave window is boring: rotate, test, hold. Specifically:

  1. Rotate the driver signature. The signed component gets rebuilt with a new certificate binding and re-submitted through the attestation queue if that channel is being used. Any customer whose loader still holds the previous signed hash is asked to re-download.
  2. Rotate the polymorphic bodies. The per-user builds get a forced rebuild ahead of the normal nightly cadence, invalidating whatever byte pattern the vendor has been staging.
  3. Freeze feature launches. Nothing new ships during the suspected window. New features carry new detection risk and no upside if a wave is about to land.
  4. Pre-brief support. Anyone who gets banned in the wave needs a fast, honest response. The worst customer experience is a two-day silence after their account dies.
  5. Communicate the risk honestly. Users who are running high-visibility playstyles (professional streamers, high-rank ladder, tournament seats) get an explicit heads-up that the next 48 hours are elevated risk. Some choose to sit out. That is the correct choice.

The temptation for a smaller provider is to hide the risk in the hope customers do not notice. That is a short-term move that ends the business the first time a wave outs it as dishonest.

The kernel side of a wave

For providers running a kernel component, waves have a second dimension. A batched detection frequently includes a signed-driver revocation or a Windows Defender blocklist update naming a specific hash. The user's OS refuses to load the driver, the loader hits STATUS_INVALID_IMAGE_HASH, and the cheat stops working entirely, not just for the banned accounts. That is why every serious kernel-mode provider maintains a rotation-ready certificate stack: not to hide from detection, which does not work, but to keep the product functional after the OS-level countermeasure lands.

Blocklist updates ship on Microsoft's schedule, roughly quarterly, with out-of-band pushes when a particularly egregious donor driver enters wide use. The public policy is at learn.microsoft.com/en-us/windows/security/application-security/application-control/microsoft-recommended-driver-block-rules/. Providers who ride third-party signed drivers watch that page like weather forecasters watch storm tracks.

After the wave

The post-wave forensic pass matters more than the pre-wave hardening. A provider that does not learn from a wave will simply lose the next one the same way.

The questions worth answering internally:

  • Which users got banned? What hardware, what game mode, what feature set was enabled, what version were they running?
  • Do the bans cluster on a single detection signature, or is it a spread?
  • What did our own telemetry show in the 72 hours before the wave that we ignored or misread?
  • Are there any customers who were running the same build and playstyle as the banned cohort but did not get banned? What differed?

The last question is the most valuable. If the ban wave caught users with feature X enabled and spared users without it, feature X is the detection surface. If the wave caught users on hardware profile Y and spared others, Y is the detection surface. This is basic statistical hygiene, and the difference between a provider that lasts and one that folds in six months is whether the team actually runs the analysis instead of just rotating and hoping.

What this means for a customer

If you are a customer, the practical takeaways are short.

  1. Waves are not random. If a provider you trust tells you the risk is elevated, sit out for 48 hours. The cost of missing two days is measured in games. The cost of a hardware ban is measured in months.
  2. A provider that has never taken a wave hit has either not been around long enough or is lying about it. Both are red flags.
  3. A provider that responds to a wave with silence, blame-shifting, or generic apologies rather than a concrete list of what changed is not a provider you want next quarter.
  4. HWID durability matters. If you take a hardware ban, the ban follows the machine. A working HWID spoofer is not optional in a wave-heavy environment. See our companion posts on HWID spoofers explained and the Apex Legends ban tracker for what actually persists across reinstalls.

Before queueing a ranked match after a rumored wave, a quick self-check against a public status endpoint catches the case where the account was quietly flagged overnight:

# self-check an account against a public status endpoint
$SteamID64 = '76561198000000000'
$Url       = "https://api.example.com/vac-check?steamid=$SteamID64"

$resp = Invoke-WebRequest -Method Head -Uri $Url -UseBasicParsing
if ($resp.Headers['X-Account-Status'] -eq 'banned') {
    Write-Host 'Account flagged. Do not queue.'
    exit 1
}
Write-Host 'Account clean as of' $resp.Headers['Date']

How KyTech handles this

KyTech was founded in 2025 by two engineers who spent the previous decade watching wave cycles from the reverse side. Our posture is exactly the one this post describes: signature bundle monitoring across all six supported titles (Apex Legends, Counter-Strike 2, Overwatch 2, Call of Duty Black Ops 7, Forza Horizon 6, and Roblox), driver certificate rotation ready to fire on 24 hours notice, and honest pre-wave communication to any customer whose playstyle sits in an elevated-risk bucket.

We do not publish wave hit rates, ban counts, or uptime percentages, because those numbers are trivially fabricated and every provider that publishes them is guessing or lying. What we do publish is our current supported build matrix on the purchase page, the specific Windows version compatibility for each product, and the beta status of the Apex Legends HWID spoofer.

The spoofer is Apex-only for now because cross-title HWID cross-checks differ enough between BattlEye, EAC, Vanguard, and Byfron that a general spoofer cannot pretend to work everywhere. See how this ships in KyTech Apex. When we extend it, we will say so and explain what changed. That is the entirety of the marketing story: build what works, tell customers what does not, and treat waves as the periodic pruning event they are rather than the emergency they look like from the outside.

Signed by KyTech Research

We still play these games and we still push every build in production. If something in here is wrong, and eventually something will be, ping us in Discord and we will fix it.

Enough theory. get in.

The loader is one click away. Ring-0 kernel driver, polymorphic per download, memory-only injection. Six games across VAC, EAC, Ricochet, Byfron, and Warden.

Get in ›