Grim Anticheat — Minecraft용 안티치트 플러그인
Grim Anticheat(GrimAC)는 Minecraft 1.8–26.1.2용 오픈소스(GPL-3.0) 서버 사이드 안티치트로, 패턴 대조 대신 움직임 시뮬레이션으로 Reach·Timer·NoFall 등을 감지하고 Discord 웹훅과…
Grim Anticheat(GrimAC)는 Minecraft 1.8–26.1.2용 오픈소스(GPL-3.0) 서버 사이드 안티치트로, 패턴 대조 대신 움직임 시뮬레이션으로 Reach·Timer·NoFall 등을 감지하고 Discord 웹훅과 SQLite/MySQL 기록 저장을 지원한다.
Grim Anticheat — Minecraft용 안티치트 플러그인
Java: 17 이상
지원되는 Minecraft 버전: 1.8 – 26.1.2
플러그인 버전: 2.3.74
Grim Anticheat(GrimAC)는 GPL-3.0 라이선스가 부여된 오픈 소스 서버 측 Minecraft 안티치트입니다. 이 플러그인은 고정된 행동 패턴과 비교하는 대신 플레이어의 움직임을 시뮬레이션하는 방식으로 작동하며, 이는 대부분의 무료 대안과 차별화되는 점입니다.
주요 역할은 전투, 이동 또는 블록과의 상호 작용에서 부당한 이점을 제공하는 허용되지 않은 클라이언트 수정(모드)을 감지하는 것입니다. 플러그인 자체는 플레이어를 차단하지 않으며, 위반 사항을 기록하고 처벌을 다른 플러그인(LiteBans, AdvancedBan 또는 구성을 통한 사용자 지정 명령)에 위임합니다.
접근 방식: 패턴 대신 움직임 예측
기존의 무료 안티치트는 미리 기록된 행동 패턴에 따라 작동합니다. 이 방법에는 분명한 한계가 있습니다. 새로운 패턴이 데이터베이스에 추가될 때까지 모드가 업데이트될 때마다 탐지를 우회할 가능성이 있습니다.
대신 GrimAC에는 Movement Simulation Engine이 포함되어 있습니다. 서버 자체는 주변의 블록, 물약 효과, 거미줄, 거품 기둥, 보트, 돼지, 스트라이더, 겉날개 및 기타 수십 가지 상황을 고려하여 특정 게임 틱에 플레이어가 있을 수 있는 위치를 계산합니다. 클라이언트가 가능한 범위를 벗어나는 좌표를 보내면 블록의 오프셋 계산과 함께 Simulation 검사가 트리거됩니다.
별도로 플러그인은 각 플레이어에 대해 세계의 개인 복사본을 유지 관리합니다. 청크는 팔레트를 사용하여 16–64KB로 압축되므로 200명 이상의 온라인 플레이어가 있어도 캐시가 충분히 가볍습니다. 이 아키텍처를 사용하면 패킷을 통해 다른 플러그인이 배치한 가짜 블록을 안전하게 처리할 수 있습니다.

채팅에서 /grim help 명령의 출력
검사
검사는 기능 그룹으로 나뉩니다. 이름은 소스 코드에서 가져오며 관리자는 /grim verbose 및 웹훅 메시지에서 볼 수 있습니다. 이름 자체는 허용되지 않는 모드의 이름이 아닙니다. 이것은 플러그인의 내부 분류입니다.
이동
Simulation — 주요 검사. 물리적으로 가능한 궤적과 일치하지 않는 플레이어 위치의 모든 변화를 감지합니다. (허용되지 않은 가속, 지지대 없는 이동, 블록 통과)
Timer, TimerLimit, NegativeTimer, VehicleTimer — 클라이언트 내부 시간의 가속을 기록합니다. 이것은 빠른 아이템 사용 및 활 쏘기를 위한 모드가 구축되는 기반입니다. 감지 임계값은 정상 속도의 약 1.005배이며 대부분의 무료 대안보다 정확합니다.
NoFall — 낙하 상태 스푸핑. 모드는 가짜 onGround=true를 보내 낙하 피해를 취소합니다. 검사는 이를 감지합니다.
Phase — 단단한 블록을 통과하는 이동. 벽을 통과하거나 보호 구역에 들어갈 수 있게 해주는 모드의 기본 동작입니다.
전투
Reach — 허용된 거리를 초과한 공격.
Hitboxes — 대상의 실제 히트박스를 벗어난 공격.
Knockback, Explosion — 클라이언트가 타격이나 폭발의 추진력을 무시합니다.
Aim, Interact — 타격 전의 잘못된 머리 회전, 물리적으로 불가능한 상호 작용.
패킷 및 블록 배치
BadPackets, PacketOrder, Crash — 잘못된 패킷 순서, 의도적으로 형식화된 패킷으로 서버를 다운시키려는 시도.
NoSlow — 플레이어가 음식을 먹거나, 활을 쏘거나, 방패를 사용하거나, 거미줄에서 기어갈 때 느려지지 않습니다.
블록 배치 검사 그룹 — 물리적으로 할 수 없는 상태에서 블록 배치를 기록합니다: 너무 멀거나, 접근할 수 없는 방향이거나, 지지대 없는 공중.
Baritone — 자동화된 도우미 봇의 이동 패턴.
Exploit — 특정 익스플로잇, 예를 들어 겉날개에서 Sprint-Jump 악용.
기본 관리자 명령
명령 | 목적 |
| 짧은 설명이 포함된 명령 목록 |
| 채팅에서 알림 켜기/끄기 |
| 버퍼 및 임계값 없이 각 플래그 표시 |
| 클라이언트 버전, 브랜드(Vanilla/Fabric/Lunar/Forge), 마우스 감도, FastMath 상태 |
| 데이터베이스의 페이징된 세션 및 위반 기록 |
| 관전자 모드로 들어가 플레이어에게 텔레포트 |
| 이전 위치로 돌아가기 |
| 특정 플래그 ID에 대한 디버그 로그 다운로드 |
| 모든 구성을 다시 로드하고, 활성화된 위반 재설정 |
| 개발자 모드: 예측과 오프셋이 있는 실제 움직임 비교 |
| 실제 위반을 기다리지 않고 Discord 웹훅 테스트 |

채팅에서 /grim profile 명령의 출력 — 클라이언트 버전, 브랜드, 마우스 감도 및 플레이어의 FastMath 상태
알림 및 처벌
각 검사에는 시간이 지남에 따라 점차 감소하는 자체 위반 카운터가 있습니다. 이것은 중요합니다. 짧은 지연(렉)이나 무작위 오류가 누적되어 영구 차단이 되지는 않으며, 안정적인 위반에 대해서만 반응이 트리거됩니다. 반응 자체는 관리자가 설정합니다. 검사 그룹마다 어떤 위반에 얼마나 자주 명령을 실행할지 지정합니다.
논리는 다음과 같습니다. 반응이 트리거될 위반 번호와 이후 반복될 빈도(간격)를 지정합니다. 100:0 kick %player% 항목은 플레이어가 정확히 100번째 위반에서 강퇴되며 명령이 다시 실행되지 않음을 의미합니다. 5:3 [alert] 항목은 5번째 위반 시 트리거된 다음 8번째, 11번째 등에서 트리거되며 알림은 액세스 권한이 있는 플레이어의 게임 내 채팅으로 전송됩니다.
명령 위치는 Grim 자체의 특수 태그([alert] — 채팅 메시지, [log] — 콘솔 및 데이터베이스에 기록, [webhook] — Discord로 전송, [proxy] — 다른 백엔드 서버로 전송) 또는 서버의 모든 콘솔 명령으로 채울 수 있습니다. 사용 가능한 변수는 플레이어 이름, 검사 이름 및 위반 횟수이며 표준 자리 표시자입니다. 덕분에 Grim은 추가 브리지 없이 외부 밴 플러그인에 연결됩니다.
Discord 웹훅
Discord에 알림을 보내기 위해 GrimAC에는 기본 제공 통합 기능이 있습니다. 메시지의 모양은 임베드 색상에서 표시할 필드에 이르기까지 완전히 사용자 지정할 수 있습니다. 완성된 메시지에서 플레이어 이름, 검사 이름, 위반 횟수, 클라이언트 버전 및 브랜드, 현재 핑, 이벤트 발생 시 서버의 tps를 볼 수 있습니다. 일반 채널과 Discord의 포럼 채널이 모두 지원됩니다. 구성은 미리 확인해야 합니다. /grim testwebhook 명령은 실제 위반을 기다리지 않고 테스트 메시지를 보냅니다.
호환되지 않는 클라이언트 모드
공식 위키는 바닐라 메커니즘을 깨거나 오탐(false-positive)을 유발하는 모드의 별도 목록을 유지 관리합니다. 목록이 완전하지는 않습니다 — 플러그인의 GitHub 위키에 있는 'Known incompatible client mods' 페이지에서 업데이트됩니다. 플레이어가 안정적인 핑 상태에서 위반 징후 없이 대규모 플래그를 받는 경우 첫 번째 가설은 이 목록에 있는 클라이언트 모드입니다.
위반 기록 보관
GrimAC는 세션에 연결된 기록 데이터베이스를 유지 관리합니다. 세션은 서버에 대한 플레이어의 단일 연결입니다. /grim history <플레이어> 명령은 플레이어가 언제 합류했는지, 세션이 얼마나 오래 지속되었는지, 위반 횟수, 어떤 클라이언트에서 연결했는지, 검사 내역과 함께 보여줍니다.
지원되는 백엔드: SQLite(기본적으로 로컬 파일 data/history.v1.db), MySQL, PostgreSQL, MongoDB, Redis. 단일 서버에는 SQLite로 충분합니다. 여러 Grim 인스턴스가 있는 네트워크의 경우 공유 데이터베이스가 있는 네트워크 백엔드(일반적으로 MySQL 또는 Postgres)가 필요합니다.
보존(retention)은 개별적으로 작동합니다 — 오래된 기록의 자동 정리. 기본적으로 세션은 90일, 위반은 365일 유지됩니다. 이를 구성하거나 비활성화할 수 있습니다.

채팅에서 /grim history 명령의 출력
구성 (Configuration)
설정은 plugins/Grim/ 폴더의 여러 YAML 파일에 분산되어 있습니다.
첫 설정 시 주의를 기울일 가치가 있는 매개변수:
매개변수 | 파일 | 역할 |
| config.yml | Simulation이 위반으로 간주되기 전 블록 단위의 오프셋 임계값입니다. 값이 작을수록 더 엄격해지며, 렉이 있을 때 오탐이 더 많아집니다. |
| config.yml | 바닐라 한계를 넘어선 히트박스 확장. 0.0005는 3.0005 블록부터 초과를 기록합니다. |
| config.yml | 더 정확한 Reach 감지를 위해 각 틱의 끝에 추가 패킷을 보냅니다. 1.8 PvP 서버에서 유용하며, 그렇지 않으면 불필요한 트래픽을 생성합니다. |
| config.yml | 테스트 검사를 활성화합니다. 불필요하게 켜두지 마세요. |
| config.yml | 플레이어가 자동으로 강퇴되기 전의 타임아웃 시간(초)입니다. |
| config.yml | 문제가 있는 Forge 1.18.2–1.19.3 버전의 클라이언트를 강퇴합니다. |
| config.yml | 프록시를 통해 백엔드 서버 간에 알림을 전송합니다. Velocity의 bungee-plugin-message-channel이 필요합니다. |
| database.yml | 기록을 저장하기 위한 메인 스위치입니다. |
| database.yml | 위반 기록 위치: sqlite, mysql, postgres, mongo, redis, none. |
config.yml의 나머지 매개변수(감쇠 계수, 상한, 폭죽 부스트와 같은 특정 메커니즘의 핑 제한)는 감지의 엄격함과 핑이 좋지 않은 플레이어의 편안함 사이의 균형을 미세하게 조정합니다. 대부분의 관리자는 이를 기본값으로 둡니다 — 플러그인 작성자가 정확도와 높은 핑 허용 오차 간의 절충안으로 선택한 값입니다.
결론
Grim Anticheat는 패턴과 비교하는 대신 움직임 예측을 통해 일반적인 움직임, 전투 및 패킷 처리 위반의 대부분을 기록합니다. 결과적으로 이 플러그인은 동일한 모드의 새 버전에 내성이 있습니다. 실제 한계: 에임봇(마우스 운동 능력 기반) 또는 오토클릭커(클릭 빈도 기반)에 대한 휴리스틱 검사가 없습니다 — 이것들은 아직 출시되지 않은 Premium 브랜치에서 약속되어 있습니다. GrimAC는 허용되지 않는 모드를 설치할 실질적인 동기가 있는 서버(PvP 경기장, 미니 게임 네트워크, 귀중한 리소스가 있는 생존 서버, 아나키 서버)에 적합합니다. 친구 10명이 있는 작은 크리에이티브 생존 서버의 경우 플러그인이 과도합니다. 심각한 위반 위험이 없다면 예측 엔진은 단지 서버 리소스만 낭비할 뿐입니다.
설치
일반적인 설치는 약 5 분 정도 걸려요. 과정은 동일하고, Loader 와 그에 맞는 빌드만 달라요.
- 1Stop your Minecraft server.
- 2Drop the plugin .jar into the server /plugins folder.
- 3Start the server once so the plugin generates its config files.
- 4Edit /plugins/<name>/config.yml as needed, then run /reload confirm or restart.











