Jump to content

Hax, Cheating, Proxies & Bots, in General.

Posted

NEVER POST ANYTHING LIKE THIS IN THIS THREAD, EVER

  • Inane single-world replies like "cool" or "wow how did you code that" — That's what reactions are for, use them!

  • Don't ask for tech-support with learning the C Programming Language

  • Mope about how burnt out you are and how you have this great idea but not sure if anyone would like it — Just make things already!

  • Do not boast about griefing, cyber-crime, infiltrating people's accounts and expect praise — We are programmers, not mouth-breathing skiddies

  • Don't post about how you disabled HacksControl, or +hax MOTD toggles — Everyone already knows how to do this, it's a one-line change

What's the point of this thread?

There's a small group of ClassiCube players who "play" the game by making modified clients, bots, man-in-the-middle proxies and in general: client-side hax. Not just using off-the-shelf cheat clients, but actually writing our own that do cool and unique things.

Most of the time, we clump together in a random server for a few hours and show off our recent work, but sometimes we miss something awesome. This thread is for boasting about cool cheats that you have made, sharing source code, tips, tricks, and just yapping about cheats in general. Keep the signal-to-noise ratio high, and be polite and thoughtful.

Cool things people already made

@Rainb0wSkeppy's bot playing Bad Apple by rapidly placing blocks (not a server-side plugin; this video is speed up about 15% to sync with the original video, filmed on Ephemera Anarchy)

https://files.catbox.moe/kccj27.mp4

@jshtab's copy+paste feature in their modified client

https://files.catbox.moe/ehehwc.webm

Wall of Dangerous and Potentially Interested Programmers

@SuperZPMax @morgana @Icee_ @AAA59 @Alland20201
@FavoritoHJS @HarmonyNetwork

Featured Replies

  • Author

We should all have some sort of visible marker in our clients that they are cheats/bots

Going to be double-posting to my own thread, but here's a prompt towards some needed discussion, for people who are into that. We should mark our cheats as cheats, especially if we give out source code or binaries. It is polite to allow admins to kick unwelcome cheaters the moment they connect. I have been placing +hax in my AppName for a while now, similar to how plugins advertise themselves.

It's not difficult to brand your cheats in this way. If your cheats are based around ClassiCube, it's as quick as adding this little snippet to Game_Load or the GameComponent OnInit function:

static void OnInit(void) { 
   String_AppendConst(&Server.AppName, " +hax");
   // ...
}

struct IGameComponent PlusHacks_Component = {OnInit};

Simpler still is changing the GAME_APP_NAME macro on src/Constants.h:17

#define GAME_APP_TITLE "ClassiCube 1.3.7 +hax"

The same sort of thinking should apply to proxies and especially bots. They should support the CPE handshake if only to set their AppName to something conspicuous.

Proposed CPE AppName conventions

  • For cheat clients, it should be the vendor of the client, followed by +hax

    • ClassiCube 1.3.7 modified to be a cheat client, should use the AppName: ClassiCube 1.3.7 +hax

    • Some unique vendor which always ignored MOTD controls or HacksControl should include +hax in the name: Mugwort 1.0 +hax

  • For bots, they should be prefixed with Bot followed by the software vendor and/or the author/controller of the bot

    • Bots operated by SuperZPMax should have the AppName: Bot (SuperZPMax)

    • If a bot has a vendor name like "SuperBot" and it is run by a user named Testificate, it should have the AppName Bot/SuperBot (Testificate)

Edited by jshtab
Grammer, Syntax Error correction

I've been working on my Classic bot, written in Java, since April 2023. It has plenty of building commands and neat features like making a top down level render and even multi-bot support for faster building. Below is a top down render of 2d2t, made using my bot. I would have posted a demo video of the functions, however I forgot to change OBS settings and ended up recording everything in 480p, and I'm not in the mood to re-record everything

image.png

Owner and founder of Good old Lava Survival, MCGalaxy plugin developer, Master of evil hacks not supported by UnknownShadow.

2 hours ago, jshtab said:

We should all have some sort of visible marker in our clients that they are cheats/bots

Going to be double-posting to my own thread, but here's a prompt towards some needed discussion, for people who are into that. We should mark our cheats as cheats, especially if we give out source code or binaries. It is polite to allow admins to kick unwelcome cheaters the moment they connect. I have been placing +hax in my AppName for a while now, similar to how plugins advertise themselves.

It's not difficult to brand your cheats in this way. If your cheats are based around ClassiCube, it's as quick as adding this little snippet to Game_Load or the GameComponent OnInit function:

static void OnInit(void) { 
   String_AppendConst(&Server.AppName, " +hax");
   // ...
}

struct IGameComponent PlusHacks_Component = {OnInit};

Simpler still is changing the GAME_APP_NAME macro on src/Constants.h:17

#define GAME_APP_TITLE "ClassiCube 1.3.7 +hax"

The same sort of thinking should apply to proxies and especially bots. They should support the CPE handshake if only to set their AppName to something conspicuous.

Proposed CPE AppName conventions

  • For cheat clients, it should be the vendor of the client, followed by +hax

    • ClassiCube 1.3.7 modified to be a cheat client, should use the AppName: ClassiCube 1.3.7 +hax

    • Some unique vendor which always ignored MOTD controls or HacksControl should include +hax in the name: Mugwort 1.0 +hax

  • For bots, they should be prefixed with Bot followed by the software vendor and/or the author/controller of the bot

    • Bots operated by SuperZPMax should have the AppName: Bot (SuperZPMax)

    • If a bot has a vendor name like "SuperBot" and it is run by a user named Testificate, it should have the AppName Bot/SuperBot (Testificate)

I think there should also be a convention for plugins that enable otherwise normal player clients to "selfbot", being that there could be plugins that blur the lines between an authentic, fully player-controlled ClassiCube client and a dedicated bot client that's to be commanded.

If such plugins are made, I'd propose that developers of these plugins indicate such a status, preferably with a prefix different from Bot, perhaps Assistant, maybe just Selfbot, or if we want to get fancy, Symbiote. Even though selfbots might be rarer, we still should account for them if there's a possibility of them being made.

Similar to RainbowSkeppy, I've also made Bad Apple, but it's server side. Video here, source code here.

Client-side survival (designed for singleplayer): https://github.com/yomcube/ClassiCubeServyvalPlugin. No mobs or HP anything, just block functionality.

Simple command-line ClassiCube launcher written in Python: https://github.com/yomcube/classicube-stuff/blob/main/ClassiCube/CCLaunch.py

Nonfunctional client-side TAS plugin (work-in-progress): https://github.com/yomcube/ClassiCubeTASPlugin. The client's Input.h has to be modified such that NormDevice and Input become CC_VAR (originally extern).

Outdated plugin for C# plugins (and other Mono languages): https://github.com/yomcube/ClassiCubeMonoPlugin. This almost certainly won't compile anymore.

  • Author
2 hours ago, August92014 said:

I think there should also be a convention for plugins that enable otherwise normal player clients to "selfbot", being that there could be plugins that blur the lines between an authentic, fully player-controlled ClassiCube client and a dedicated bot client that's to be commanded.

If such plugins are made, I'd propose that developers of these plugins indicate such a status, preferably with a prefix different from Bot, perhaps Assistant, maybe just Selfbot, or if we want to get fancy, Symbiote. Even though selfbots might be rarer, we still should account for them if there's a possibility of them being made.

I personally draw the line between client and bot based on whether it is primary controlled by a human able to reply to players in the server. Many clients have a cuboid function which takes control over your position and block placement, but do not interrupt your ability to chat or cancel the action. Bots are headless, they're usually controlled text-only interfaces and operate autonomously by default.

It is possible to make a bot that operates on its own, but then its operator can log in and take full control of the bot's session. In that situation, I think it should continue to be considered a Bot, even if there is currently a human at the wheel. There's also the UB in the CPE specification about sending the ExtInfo (packet number 16) outside of the Handshake. In MCGalaxy, sending this packet after the handshake changes your AppName immedately and without a crash. Therefore, when a "Selfbot" switches into being a Bot, it could change its AppName on the fly to clearly be a Bot, and then when the human resumes control, switch back to being a client.

4 minutes ago, TomCube2 said:

Similar to RainbowSkeppy, I've also made Bad Apple, but it's server side. Video here, source code here.

[...]

That's a good Bad Apple, but remember that this thread's main topic is about client-side cheats and hacks.

Your TAS plugin fits the topic very well though. Can you elaborate on it more, how it works, and what sort of state it's in?

I've been working on a bot, called raspian. There can be multiple bots running the same thing, and by the way, cooperating with each other (loading simple binary formats or cuboids). Althought i thought of writing an map render thing, so here it is.

(Map render of 2s1m)

raspian_topdown.jpg

Edited by SuperZPMax
wrong image position

2 hours ago, jshtab said:

Your TAS plugin fits the topic very well though. Can you elaborate on it more, how it works, and what sort of state it's in?

It's supposed to play back a set of inputs when the command is run, sort of like a piano roll for a player piano. It has a packet format, with a length byte and and array of that length of bytes. Each byte in the array corresponds to a value in the InputButtons enum.

Alas, it doesn't load the inputs properly and I haven't the slightest idea why -- it's not an IO thing, so I'll have to do some deeper debugging.

localbedshitter

i've been working on this bot few months ago. it was written and used at the same time as SuperZPMax's raspian, obviously inspired by the previously mentioned bot.

basically, a bot full of various building tools. it's written in c# and i have published its source code on github: https://github.com/danilwhale/localbedshitter

this bot features some amount of building shapes and async job execution, so you can use multiple accounts for executing queued jobs.

Edited by danilwhale

READ THE RULES BEFORE YOU POST

Create an account or sign in to comment