GrimAC is an open source anticheat designed for 1.17 and supporting 1.7-1.17.

Related tags

Networking Grim
Overview

GrimAC

Currently too unstable to use in production. Work is being done on a partial rewrite to simplify the code, run block place/break/interact logic at the packet level, and to rewrite handling core netcode issues such as tick skipping and 0.03. No ETA on completion for this partial rewrite, it will be pushed when the partial rewrite is complete.

GrimAC is an open source anticheat designed for 1.17 and supporting 1.7-1.17. It will be sold for $15 on SpigotMC and other various websites, without obfuscation, DRM, subscriptions, or other nonsense that plague other anticheats.

Discord: https://discord.gg/FNRrcGAybJ

Grim supremacy

Here are the main cores that make grim stand out against other anticheats

Prediction Engine

  • We have a 1:1 replication of the player's possible movements
  • This covers everything from basic walking, swimming, knockback, cobwebs, to bubble columns
  • It even covers riding entities from boats to pigs to striders
  • Built upon covering edge cases to confirm accuracy
  • 1.13+ clients on 1.13+ servers, 1.12- clients on 1.13+ servers, 1.13+ clients on 1.12- servers, and 1.12- clients on 1.12- servers are all supported regardless of the large technical changes between these versions.
  • Order of collisions depends on client version and is correct
  • Accounts for minor bounding box differences between versions, for example:
    • Single glass panes will be a + shape for 1.7-1.8 players and * for 1.9+ players
    • 1.13+ clients on 1.8 servers see the + glass pane hitbox due to ViaVersion
    • Many other blocks have this extreme attention to detail.
    • Waterlogged blocks do not exist for 1.12 or below players
    • Blocks that do not exist in the client's version use ViaVersion's replacement block
    • Block data that cannot be translated to previous versions is replaced correctly
    • All vanilla collision boxes have been implemented

Fully asynchronous and multithreaded design

  • All movement checks are run off the main thread and netty thread
  • The anticheat can scale to many hundreds of players, if not more
  • Thread safety is carefully thought out
  • The next core allows for this design

Full world replication

  • The anticheat keeps a replica of the world for each player
  • The replica is created by listening to chunk data packets and block changes
  • On all versions, chunks are compressed to 16-64 kb per chunk using palettes
  • Using this cache, the anticheat can safety access the world state
  • Per player cache allows for multithreaded design
  • Sending players fake blocks with packets is safe and does not lead to falses
  • The world is recreated for each player to allow lag compensation

Latency compensation

  • World changes are queue'd until they reach the player
  • This means breaking blocks under a player does not false the anticheat
  • Everything from flying status to movement speed will be latency compensated

Secure by design, not obscurity

  • All systems are designed to be highly secure and mathematically impossible to bypass
  • For example, the prediction engine knows all possible movements and cannot be bypassed
Comments
  • IndexOutOfBoundsException v2.3.32

    IndexOutOfBoundsException v2.3.32

    Stack trace

    https://paste.gg/p/anonymous/fb110dd120ec4a9192b86a5b43ff0d71

    How to replicate it if known

    No response

    Grim version

    grimac-2.3.32

    Server version

    PaperMC 1.19.2

    Plugins

    GrimAC

    error 
    opened by ItsSynchro 0
  • BadPacketsJ/RotationPlace/AimModulo360/Post when entering vehicles

    BadPacketsJ/RotationPlace/AimModulo360/Post when entering vehicles

    Describe the false positive and how to replicate it

    1. Place down an oak boat
    2. Spam shift and right click buttons to keep entering it
    3. BadPacketsJ, RotationPlace, AimModulo360 will flag, possibly Post

    Video is here: https://www.youtube.com/watch?v=96iLF0N-xiw

    Tested on Vanilla 1.19.3 client on the Grim test server.

    AimModulo360 doesn't flag as often but it can. Also have seen Post (interact entity) flag sometimes.

    Grim version

    2.3.32, Grim test server

    Server version

    Grim Test Server (1.19.2)

    Plugins

    Grim Test Server

    false positive 
    opened by SamB440 2
  • Dynamic Reach Detection

    Dynamic Reach Detection

    Feature description

    Hi there. I have one suggestion for you to improve the anti-cheat: custom reach violations by reach like if reach <3.1 - 1 violation 3.11-3.5 3vl, 3.6-4.0 - 10vl etc (customizable) the fact is that some cheat clients have dynamic coverage: 3.0 if another player does not hit it, and for example 3.4 in a pvp state. thus, cheaters try to take the kick away from the anticheat. but if you issue vl depending on the cheater's coverage, this can be prevented

    enhancement 
    opened by katr1nge 4
  • Fix Slime and Magma Cube dimensions

    Fix Slime and Magma Cube dimensions

    Fixes missing hitbox

    NMS 1.14+

    @Override
    public EntityDimensions getDimensions(EntityPose pose) {
        return super.getDimensions(pose).scaled(0.255f * (float)this.getSize());
    }
    
    opened by scarfacered 2
  • Plug-in error

    Plug-in error

    Stack trace

    Plug-in error[17:37:42] [Netty Server IO #2/WARN]: [ac.grim.grimac.shaded.com.github.retrooper.packetevents.PacketEventsAPI] PacketEvents caught an unhandled exception while calling your listener. java.lang.ArrayIndexOutOfBoundsException: Index 74 out of bounds for length 46 at ac.grim.grimac.utils.inventory.InventoryStorage.getItem(InventoryStorage.java:27) ~[grimac-2.3.31.jar:?] at ac.grim.grimac.utils.inventory.inventory.AbstractContainerMenu.getPlayerInventoryItem(AbstractContainerMenu.java:122) ~[grimac-2.3.31.jar:?] at ac.grim.grimac.utils.inventory.inventory.AbstractContainerMenu.doClick(AbstractContainerMenu.java:262) ~[grimac-2.3.31.jar:?] at ac.grim.grimac.utils.latency.CompensatedInventory.onPacketReceive(CompensatedInventory.java:303) ~[grimac-2.3.31.jar:?] at ac.grim.grimac.manager.CheckManager.lambda$onPacketReceive$1(CheckManager.java:170) ~[grimac-2.3.31.jar:?] at com.google.common.collect.ImmutableList.forEach(ImmutableList.java:422) ~[guava-31.0.1-jre.jar:?] at ac.grim.grimac.manager.CheckManager.onPacketReceive(CheckManager.java:170) ~[grimac-2.3.31.jar:?] at ac.grim.grimac.events.packets.CheckManagerListener.onPacketReceive(CheckManagerListener.java:528) ~[grimac-2.3.31.jar:?] at ac.grim.grimac.shaded.com.github.retrooper.packetevents.event.PacketReceiveEvent.call(PacketReceiveEvent.java:45) ~[grimac-2.3.31.jar:?] at ac.grim.grimac.shaded.com.github.retrooper.packetevents.event.EventManager.callEvent(EventManager.java:51) ~[grimac-2.3.31.jar:?] at ac.grim.grimac.shaded.com.github.retrooper.packetevents.util.PacketEventsImplHelper.handleServerBoundPacket(PacketEventsImplHelper.java:43) ~[grimac-2.3.31.jar:?] at ac.grim.grimac.shaded.io.github.retrooper.packetevents.injector.handlers.PacketEventsDecoder.read(PacketEventsDecoder.java:53) ~[grimac-2.3.31.jar:?] at ac.grim.grimac.shaded.io.github.retrooper.packetevents.injector.handlers.PacketEventsDecoder.decode(PacketEventsDecoder.java:63) ~[grimac-2.3.31.jar:?] at ac.grim.grimac.shaded.io.github.retrooper.packetevents.injector.handlers.PacketEventsDecoder.decode(PacketEventsDecoder.java:35) ~[grimac-2.3.31.jar:?] at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:88) ~[netty-codec-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:327) ~[netty-codec-4.1.77.Final.jar:4.1.77.Final] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:299) ~[netty-codec-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:327) ~[netty-codec-4.1.77.Final.jar:4.1.77.Final] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:299) ~[netty-codec-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286) ~[netty-handler-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.handler.flush.FlushConsolidationHandler.channelRead(FlushConsolidationHandler.java:152) ~[netty-handler-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:722) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:658) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:584) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496) ~[netty-transport-4.1.77.Final.jar:4.1.77.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:995) ~[netty-common-4.1.77.Final.jar:4.1.77.Final] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.77.Final.jar:4.1.77.Final] at java.lang.Thread.run(Thread.java:833) ~[?:?]

    How to replicate it if known

    No response

    Grim version

    grimac-2.3.31

    Server version

    purpur1.19.2

    Plugins

    other

    error 
    opened by lizheyo77 1
Owner
DefineOutside
Currently writing the best anticheat. Discord: DefineOutside#4497
DefineOutside
Apache Dubbo is a high-performance, java based, open source RPC framework.

Apache Dubbo Project Apache Dubbo is a high-performance, Java-based open-source RPC framework. Please visit official site for quick start and document

The Apache Software Foundation 38.2k Dec 31, 2022
This is an open source android based Music Player application developed in Android Studio

Pulse Music An offline music player android app, with modern UI and powerful features If you liked this repo, fork it and leave a STAR. Your support m

Sharath 7 Apr 11, 2022
Short code snippets written by our open source community!

Code Examples This repository contains different code examples in different programming languages. Website https://codes.snowflakedev.org How do I con

SnowflakeDev Community ❄️ 64 Nov 13, 2022
Pcap editing and replay tools for *NIX and Windows - Users please download source from

Tcpreplay Tcpreplay is a suite of GPLv3 licensed utilities for UNIX (and Win32 under Cygwin) operating systems for editing and replaying network traff

AppNeta, Inc. 956 Dec 30, 2022
Nzyme is a free and open next-generation WiFi defense system.

Nzyme is a free and open next-generation WiFi defense system.

Lennart Koopmann 1.1k Jan 1, 2023
Java library for representing, parsing and encoding URNs as in RFC2141 and RFC8141

urnlib Java library for representing, parsing and encoding URNs as specified in RFC 2141 and RFC 8141. The initial URN RFC 2141 of May 1997 was supers

SLUB 24 May 10, 2022
Android application allowing to sniff and inject Zigbee, Mosart and Enhanced ShockBurst packets on a Samsung Galaxy S20

RadioSploit 1.0 This Android application allows to sniff and inject Zigbee, Mosart and Enhanced ShockBurst packets from a Samsung Galaxy S20 smartphon

Romain Cayre 52 Nov 1, 2022
Telegram API Client and Telegram BOT API Library and Framework in Pure java.

Javagram Telegram API Client and Telegram Bot API library and framework in pure Java. Hello Telegram You can use Javagram for both Telegram API Client

Java For Everything 3 Oct 17, 2021
Fibers and actors for web development

COMSAT Scalable, Concurrent Web Apps Getting started Add the following Maven/Gradle dependencies: Feature Artifact Servlet integration for defining fi

Parallel Universe 600 Dec 23, 2022
An annotation-based Java library for creating Thrift serializable types and services.

Drift Drift is an easy-to-use, annotation-based Java library for creating Thrift clients and serializable types. The client library is similar to JAX-

null 225 Dec 24, 2022
ssh, scp and sftp for java

sshj - SSHv2 library for Java To get started, have a look at one of the examples. Hopefully you will find the API pleasant to work with :) Getting SSH

Jeroen van Erp 2.2k Jan 8, 2023
Efficient reliable UDP unicast, UDP multicast, and IPC message transport

Aeron Efficient reliable UDP unicast, UDP multicast, and IPC message transport. Java and C++ clients are available in this repository, and a .NET clie

Real Logic 6.3k Dec 27, 2022
LINE 4.1k Dec 31, 2022
Square’s meticulous HTTP client for the JVM, Android, and GraalVM.

OkHttp See the project website for documentation and APIs. HTTP is the way modern applications network. It’s how we exchange data & media. Doing HTTP

Square 43.4k Jan 9, 2023
A Java library for capturing, crafting, and sending packets.

Japanese Logos Pcap4J Pcap4J is a Java library for capturing, crafting and sending packets. Pcap4J wraps a native packet capture library (libpcap, Win

Kaito Yamada 1k Dec 30, 2022
Full-featured Socket.IO Client Library for Java, which is compatible with Socket.IO v1.0 and later.

Socket.IO-client Java This is the Socket.IO Client Library for Java, which is simply ported from the JavaScript client. See also: Android chat demo en

Socket.IO 5k Jan 4, 2023
Asynchronous Http and WebSocket Client library for Java

Async Http Client Follow @AsyncHttpClient on Twitter. The AsyncHttpClient (AHC) library allows Java applications to easily execute HTTP requests and a

AsyncHttpClient 6k Dec 31, 2022
API gateway for REST and SOAP written in Java.

API gateway for REST and SOAP written in Java.

predic8 GmbH 389 Dec 31, 2022