New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
1.9 Flying by using boats #152
Comments
Hi. Thank you for the info. Do you have any more information about this? Like NC+ version, logs, name of hack client etc. |
https://yadi.sk/d/RAwAufEgqZA7A - client. Menu key is M. |
Horrible .... now we have to add moving checks for boats !? Can they also ride through walls !? |
It actually applies to every vehicle such as pigs, horses, boats, etc - except minecarts (I haven't personally tested them.) |
Check blocks under boat. |
Please verify which ones have been observed :) - so far 'boats'. Horses are much different, though i don't know the internals well either. Checking blocks under boats .... it's going to be a fully fledged moving check that way, due to the possibility of false positives for all those nasty edge cases... gravity, velocity, moving out of water sideways, ... This is already so horrible only with boats. |
Sorry. But I do not understand what you wrote :( . My english is bad. |
@asofold Anything that is technically a "vehicle" (ridden pigs, minecarts, horses, boats) is controlled by the client as of 1.9; which allows this exploit. Traditionally the client sent the Steer Vehicle packet which the server would acknowledge and move the player and vehicle correspondingly. This meant movement was round-trip latency dependent; which meant anything that required acknowledgement (horse movement for example) was quite glitchy. As of 1.9, instead of sending the steering direction, the client itself informs the server of it's new location via the Vehicle Move packet and doesn't require a movement acknowledge from the server. As such the client is now authoritative over movement in 1.9. Without proper validation of the vehicle movements, they effectively have free range movement (assuming existing protections ignore vehicles.) |
So it's much about smooth client-side movement - can't blame Mojang for that, though it's getting potentially nasty to support on our side. We're touching the question, if we have to implement (almost) fully featured moving checks for horses, boats, boats on horses, pigs...
To avoid overly complex redesigns at first, we might try something comparably simple first, which also could serve as a fly/hover check for players (can't tell if it would mean a simplification or an extension rather...), like counting in-air time/phases and relating such to damage events and velocity amounts dealt, including basic accounting for gravity. All quite coarse, but possibly allowing to detect hover/fly while also preventing abusing small velocity amounts, such as are dealt with ordinary damage. Still speeding and medium-affinity are not so small points to cover, so i am not convinced that this would be fun in the first place. Unfortunately we just had some data loss incident, so some progress is lost. With rather complex changes at stake, it's perhaps time to make some kind of transition to a more flexible and inviting check system, in order to get more developers involved - not sure the old checks can be transformed at low cost. The options that i see right now are:
Without achieving a balance of 'getting somewhere' vs. time spent, this is done. |
Even separating checks into smaller, more manageable (and debuggable) pieces would be greatly beneficial for people getting started on the platform. I've recently started diving into the NCP source to try and debug specific issues between edge cases with our servers and the checks. However the size and complexity of the checks is vast; which makes it difficult to edit and debug them without breaking many other things. Being able to prototype potential fixes/new checks with NCP is incredibly important, but seemingly difficult unless you're deeply familiar with the structure. Would something like "rewriting the core" while providing a legacy layer for unmigrated checks be a possibility? Just my 2c. |
Possibly details in here: https://gist.github.com/asofold/dde86d65604c8cb4cdb5461e9a48642c All in all the amount of things we need to both cover essential cheats and maintain playability (reduce/prevent false positives) is extensive. So what will i do:
During the transition to the next project phase i'll attempt the following:
|
Issues:
Current focus:
|
This is critical for progress, thus the CRITICAL tag. Important questions:
|
A deleted comment indicated that the cheats seem to "work" on horses as well, but players using it on horses might get kicked by the built-in vanilla fly check. The issue with that might be, if the vanilla fly check for players is interfering with the NCP fly checks for players, so it gets disabled. If that switch also controls the vehicle part, we'll have the same kind of problem. For now i'll do the boat thing then and see what other input we get.
|
Build 961 contains an attempt to prevent some of boat flying. It's marked as 'failed' on the Jenkins server, due to not being able to deploy the artifacts to the maven repository , but the jar file is there. |
Fly still work. Compiled from latest source on my computer. And on Build 961 from Jenkins. |
@Dimatert9 Only boats are covered right now. Has this been with boats? (I switched to another method after preliminary success, due to false positives, but will try with accounting for some obviously necessary workaround-ism.) |
Hi @Dimatert9 I am not able to reproduce the bypass like it is shown on that video with NC+ 962. Have you tried to test it on a clear setup? Did you do modifications on the config? |
@Dimatert9 Please post the output of /ncp version Attaching another Log with 964 here (flying up a waterfall but not able to leave water with a boat): |
Looks like @Dimatert9 has a variant of flying that bypasses VehicleMoveEventS in total. In addition to the trouble there is no teleport events for vehicles. All this is pretty ridiculous, as that seems to be the vanilla checks allowing them to fly, bypassing plugins. This hardly will be going anywhere, if plugins aren't allowed to take control over vehicle moving (useful information on events, all events, teleport events, ability to reliably detect vanilla/server-side set-backs and ability to cancel them out). Look at this: (Note the vanilla messages like 'moved wrongly' or 'moved too quickly' in the server log.) The current implementation doesn't account for that type of bypass, but we'll eventually switch to giving the vehicle update event priority, assuming from->to ourselves, mostly skipping VehicleMoveEvent processing. We still can't know when vehicles are teleported by other plugins or the server, which means all sorts of trouble. (And yes, i am not considering queuing incoming packets via protocollib and then process ALL QUEUED PACKETS ON ANY BUKKIT EVENT TO SEE IF SOMETHING NEEDS TO BE DONE THAT CAN'T BE DONE VIA BUKKIT, just yet.) |
I don't want this to look like being overly pessimistic or looking down on Mojang/Spigot in any way. The stuff to cover is not really (beginner-) friendly, in addition it is time consuming to test changes both for effectivity on cheats and for false positives, and all the anti cheating plugins i have come to have heard about, have been struggling to even support "basic" features of vanilla Minecraft, even after being there for years, or they have been resorting to obscure methods not fit for open source (much snake oil potential). Things keep adding up, and we/i are/am lacking the man power (me*(2...3]) to cover basic aspects within reasonably short time (for free, while not spending obscene amounts of time). So of course we all have already arranged with switching from 'reasonably short' to 'reasonable amounts of' time, thus i'll attempt to keep going with adding in potentially future-savvy internals while potentially patching things. This means that i am slower than with the hands-on-fix-it-now approach, but i hope to cover some ground within (...) reasonable time. Since typing takes so long, i'll state what i'll do:
|
Build 970 represents an attempt to track positions for all types of vehicles. An actual fly check is only implemented for boats (a weak version, but it might work). This implementation exclusively relies on our own vehicle past move tracking, and it ...
So i'd be interested if/how the check covers current boat fly cheats and if there are false positives. |
Should be build 971, if you're not on 1.9.4 yet. |
Switched to teleport from within event handling on vehicle set backs with build 972. Looks like that helps with set-back loops. There's work left with not erasing our own set-backs, so we'll need to somehow detect them on vehicle enter. Feedback on boat-fly much welcome, needed for progress. |
Test results of BoatFly with 972 on Hambörger: 15:19:35 INFO: ---- Version information ---- 15:19:35 INFO: blocks: BlocksMC1_4 | BlocksMC1_5 | BlocksMC1_6_1 | BlocksMC1_7_2 | BlocksMC1_8 | BlocksMC1_9 Results:
|
Build 975 represents the current state of things. Not much change check-wise, but set-back handling is altered to directly teleport from within event handling, in order to prevent set-back loops under certain conditions. |
BoatFly.txt 18:47:50 INFO: blocks: BlocksMC1_4 | BlocksMC1_5 | BlocksMC1_6_1 | BlocksMC1_7_2 | BlocksMC1_8 | BlocksMC1_9 EDIT: |
Speeding is interesting - i hoped for vanilla stopping that, but if we include reports about noclip with boats... it really looks like we have to provide almost the entire set of moving checks for vehicles, just like for players. Currently NCP would prevent horizontal speed above 4, because i didn't want to cause false positives, hoping for 'moved wrongly' or so. (Fly: not possible on 1.9.2/1.9.4 - need to add a warning if 1.9 is used, as we won't patch missing events, that have been added with 1.9.2.) |
Profane flying seems to be fixed, closing in favor of new tickets:
|
https://youtu.be/uVk-Bn1QbBY
The text was updated successfully, but these errors were encountered: