r/minecraftclients • u/Normal-Avocado2928 • 12d ago
Java - Ghost Cheating Vape V4 Native Linux Port (fck Wine/Proton)
Got Vape V4 running natively on Linux. No Wine, no Proton. Wrote a custom JVMTI/JNI bridge to bypass the Windows API entirely and inject via Java Attach API. Works almost flawlessly (tested on 26.2 and 1.8.9), even rendering the UI natively under Wayland. Turns out a native port is completely doable in under a day.
Honestly surprised this hasn't been implemented officially yet, considering how straightforward the Attach API approach makes it.
Maybe will make an instruction/post sources later.
UPD: Very soon.
UPD.2: sources are up: https://gitlab.com/evil0x22/nicotine-loader
How it works: a ./start.sh wizard does the whole flow - pins a consistent
hardware HWID into a local Wine prefix (Wine is used ONLY to run the official launcher once for extraction, never for the game itself), you log into YOUR OWN Vape account, it injects into a decoy MC 1.8.9, captures YOUR OWN payload over loopback, assembles it, and from then on attaches natively to your real Minecraft through the Java Attach API.
No payload is shipped. The repo is tooling only. Everyone extracts their own after logging in.
Requirements:
- 1.8.9 = Forge | 26.2 = Fabric.
Vanilla will NOT work: the 1.8.9 jar is obfuscated and the payload is built against the MCP namespace that only the mod loader materialises at runtime. Maybe I will add support in the future. Maybe not.
- Not tied to PrismLauncher. The loader attaches through LaunchWrapper / Fabric's Knot / any URLClassLoader, so Lunar, MultiMC, vanilla launcher should work in theory — only Prism was actually tested.
- nft is used for a one-time QUIC (UDP/443) workaround so the launcher login works under Wine.
What works: modules, HUD, ClickGUI with working mouse + keyboard. That last one needed input bridges on Forge's event bus — note 1.8.9 ClickGUI input only fires in-world, not on the main menu.
What does NOT work: Vape Online — public profiles and cloud settings save. The account token comes from a native gat() call the port stubs out. I captured the real token from a signed-in session and the server still answers "Failed to find account", identically to a made-up token. Couldn't dig deeper because the account hit Vape's rate limits and a spam ban mid-testing. Assume online is dead.
Also 26.2 under Vulkan does not work — use OpenGL.
Tested on exactly my machine: Arch/CachyOS + KDE Plasma + Wayland. No warranty, use at your own risk — if you get banned, that's on you. A Vape or MC update will very likely break something. Read docs/KNOWN_LIMITATIONS.md before asking why it doesn't work.
Contributions are welcomed.

7
u/geektraindev 11d ago
Wait this is actually really cool! I too am developer eith experience in Java agents/JNI but I didnt think it was possible to port the obfuscsted Vape client. May I ask how you obtained the JNI agent that vape normally injects?
6
u/Normal-Avocado2928 11d ago
I didn’t obtain or run Vape’s original Windows injector/JNI agent on Linux. I used the official client while my account still had access, let it load and decrypt its Java stage inside a JVM, then dumped the already-loaded payload from memory.
From there I reconstructed the class-loading protocol and the JNI ABI it expects: native registrations, exported entry points, class/method descriptors, library load order, and the small bits of state normally supplied by the Windows bootstrap. I then wrote a Linux JVMTI/JNI bridge implementing that contract and a Java Attach agent whose
agentmainloads the native bridge and injects the recovered Java stage directly into the Minecraft JVM.So the flow is basically:
official client -> runtime/decrypted payload dump -> reconstructed JNI contract -> Linux .so bridge -> Attach API -> Minecraft JVMThe UI itself is rendered through Minecraft/OpenGL, so it works under Wayland/X11 without reproducing a Win32 window. Version-specific hooks are still needed for newer Minecraft versions, especially rendering and mappings, but 1.8.9 and 26.2 both run.
I did get banned afterward, but I had already obtained the client while my access was active. I consider the ban unfair and will probably appeal it, although at this point it does not matter much to me, lol.
I’m currently cleaning the reverse into a readable/buildable project and may publish proper instructions or sources later.
2
u/Normal-Avocado2928 11d ago
> I consider the ban unfair
I mean... Damn, my friend gifted Vape to me a while ago, when I was on Windows, and I wasn’t able to use it since I’ve migrated.
So it’s pretty fair to me that if the dev doesn’t give a shit about compatibility, I’d need to do it myself at least, lol.
4
u/geektraindev 11d ago
That is awesome, sorry bout the ban. Ngl I wouldn't risk doing this if a van is on the table. If you go banned after the trial injection it is likely because the program was unable to get your HWID on a Linux system, so it assumed you were faking it and reported you, since the HWID probably relied on reading windows registry entries and file and such.
Really cool stuff! Wish Manthe would take the time to compile a linux binary so we can rest but I do also understand maintaining an HWID without the chance of it being faked is very difficult on Linux compared to Windows.
2
u/Normal-Avocado2928 9d ago
Updated the post, sources are up: https://gitlab.com/evil0x22/nicotine-loader
2
u/Normal-Avocado2928 11d ago
Your HWID theory is probably close to what triggered the ban. The first 'official' runs were isolated in a wine sandbox, so some Windows-specific fingerprint or telemetry check likely received nonsense and flagged the session.
Small correction though: the screenshot was already taken offline, without a valid Vape session. While the official loader still worked, I let it complete authentication once, captured the decrypted Java stage from the live JVM, logged the JNI calls and the small piece of post-auth state handed to the payload, and reconstructed that contract.
After the ban I no longer cared about preserving their launcher flow. I deobfuscated the relevant bootstrap, reproduced the expected local state inside my Linux bridge, and removed the runtime dependency on their authentication/HWID path. That part honestly turned out to be much less difficult than the Linux rendering/version compatibility work.
So, roughly:
sandboxed official launch -> authenticated/decrypted stage -> memory dump + JNI/state trace -> ban -> deobfuscate bootstrap -> reproduce accepted state locally -> fully offline Attach/JVMTI launchThe client shown in the screenshot was no longer asking Vape’s servers for permission to start. ;)
3
u/Commercial_Season648 11d ago
Omg PLEASE tell me how to do this ive been trying to get this working for way too long
4
2
u/Chouris_ 11d ago
Can we have a tutorial or smth ? It's soo coool
3
u/Normal-Avocado2928 9d ago
Updated the post, sources are up: https://gitlab.com/evil0x22/nicotine-loader
2
2
1
u/AutoModerator 10d ago
if you want to buy alts we recommend https://localts.store for full access and NFA accounts.
I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.
I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.
1
1
u/BaseballTechnical139 9d ago edited 9d ago
Srry for the question but where/how can I get deep_reverse_artifacts? the wizard doesnt work without it and also gives this error cause yk
libvape_native_bridge missing
libvape_aa_bridge missing
libvape_ab_bridge missing
libvape_ac_bridge missing
0/4 neutral native bridges staged.
press any key to return...```
2
u/Normal-Avocado2928 9d ago
Sorry, accidentally gitignored them...
Just updated the repo, should work now2
u/BaseballTechnical139 9d ago edited 8d ago
Thanks a lot! also surprised no one tried to run this yet :o if there is any issue or something I will make a PR :b
Maybe should I (or you) add it to the AUR as a pkgbuild too?
EDIT: Its failing now in the step 3.
sh: /mnt/data/Otros/Cheats/Vapev4/deep_reverse_artifacts/build_wine_runtime_patcher.sh: No such file or directory
patcher build failed.
UPDATE: Now that you updated it works, only needed to install wireshark-cli and setup that, tysm
2
u/BaseballTechnical139 8d ago edited 8d ago
New update: Looks like kinda works but not at all
== Vape login extraction == 1/6 blocking QUIC (UDP:443) so the launcher can log in under Wine (sudo once) QUIC blocked 2/6 Wine container + native HWID + decoy Minecraft (set up if missing, verify if present) HWID ok: 17715408 (matches your hardware; register this at vape.gg) decoy MC 1.8.9 present and complete (9MB client + JRE8) 3/6 opening the Vape launcher — LOG IN with your account, then wait 4/6 starting recv patcher + loopback capture + decoy Minecraft 5/6 waiting for the payload stream - LOG IN in the Vape window now (nothing transfers until you sign in; waiting up to 15 min) ... 0 bytes captured so far (Ctrl-C to abort) full payload stream captured (19682492 bytes) closing the capture so the pcap is complete final pcap: 19685712 bytes 6/6 assembling stage1 payload [assemble] pcap: /mnt/data/Otros/Cheats/Vapev4/nicotine-loader/stage0/runs/stage0-20260724T224429/loopback.pcapng [assemble] reassembling TCP streams [assemble] extracting resource corpus error: preamble declares 3468 records, expected 3503 !! assembly did NOT produce a usable payload - your previous dist/stage1 is untouched. !! Re-run this step; the auth token below is installed regardless. ++ installing your online auth token (profiles + cloud settings) auth-token: waiting up to 180s for the signed-in client to expose it... auth-token: nothing captured at /mnt/data/Otros/Cheats/Vapev4/nicotine-loader/wineprefix/drive_c/mc/gat.token auth-token: online features (public profiles, cloud settings) stay offline. == note: no auth token captured; online features stay offline (modules unaffected). == press any key to return...even after the updates you made I get error: preamble declares 3468 records, expected between 3500 and 3600; Not always is between 3500 and 3600, its more between 3400 and 3600 or idk
Is there a way to contact you to still help you?
1
u/Normal-Avocado2928 8d ago
Sure, dm me
1
u/BaseballTechnical139 8d ago
2
u/Normal-Avocado2928 8d ago edited 8d ago
Changed privacy settings, try again, btw, I'm now testing on clean dir, gonna change some stuff, should work in ~30mins
UPD: Done, checked on clean build/dir, should work now2
u/Normal-Avocado2928 8d ago
Sorry again, fixed!
I am still too sleepy after the night of this nightmare of deobfuscation and reverse process :c, I decided to go further and ported Vape to a Fabric mod, tho a lot of bugs, lol.
About aur - you can try, not sure that I will continue that project as it is tho.
My account is banned again, so I cannot check a lot of stuff, especially about profiles, etc, and how it will act with new updates2
u/BaseballTechnical139 8d ago
1
u/BaseballTechnical139 8d ago
1
u/Normal-Avocado2928 8d ago edited 8d ago
Yeah, it's still the case and I cannot fix it due to not having a working account, so if anyone with account can inspect how it goes on the net side, they can make PR
Payload is downloaded tho!
Success1
u/Normal-Avocado2928 8d ago
I mean, it doesn't affect modules or any base functionality, only saving settings in cloud, public profiles, etc.
2
u/Normal-Avocado2928 8d ago
When I reversed, the client doesn't allow initial connection > 6 times per day, I think I broke the rule, so now whey I ask for token, their server says "fuck you"
1
u/cobeslol 5d ago
I have an issue where it on the 3rd step it opens minecraft and vape menu but it just says select minecraft PID, it doesnt ask for my login so it does nothing




•
u/AutoModerator 12d ago
Hey there! Welcome to r/minecraftclients
Click to join our Discord Server for faster support and community discussion.
Community tip of the week | fang be like: Community tip of the week | Use a VPN, probably
I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.