These are some simple binary patches to Prism Launcher that allow using offline accounts without restrictions in the official release builds, for those too lazy to recompile but also don't want to risk forks that could contain malware. Most patches are less than 10 bytes (the ones for older versions are as little as four!) so they should be easily verified as safe.
You can use something like hexed.it to apply the patches.
- Open the main
prismlauncher.exe(Windows) orprismlauncher1 (Linux) binary from the official build in your hex editor. - Paste the location of the patch into the "Go to" box and click enter (or something like G or Ctrl+G on other hex editors)
- With the cursor at the right location, type in the patch bytes or paste them as hexidecimal. They should overwrite the bytes that used to be there.
- Export the modified binary and replace the uncracked EXE/binary with the one you just patched.
1 For versions 10.0.0 and later, make sure open the binary in shared/bin/prismlauncher, which is the real main binary, and not the one in bin/prismlauncher, which is just a stub that launches the main binary.
In MacOS, the ".app" file is actually not a file, but a folder! To find the actual binary you need to edit, you need to right click on the "Prism Launcher.app", then click View Contents, then go to the Contents/MacOS folder where you should see the actual binary named prismlauncher.
Due to the way code signing works on MacOS, you will need to remove and re-add the ad-hoc signature after you edit the binary:
codesign --remove-signature <path to Prism Launcher.app folder>
codesign -s - -f --deep <path to Prism Launcher.app folder>
You might also need to make sure the binary is executable by running chmod +x <path to Prism Launcher.app>/Contents/MacOS/prismlauncher
This is an older version, but it only requires AccountList::anyAccountIsValid() to be patched and is thus very easy to do. If you don't need the newer versions, this will probably give you the best exprience.
| Build | Location / Go to | Patch |
|---|---|---|
| 9.4 Portable MSVC x64 | 0x139b40 |
b8 01 00 00 00 c3 |
| 9.4 Portable MinGW x64 | 0x10acc0 |
b0 01 c3 |
| 9.4 Portable MSVC ARM64 | 0x16aa98 |
20 00 80 52 c0 03 5f d6 |
| Build | Location / Go to | Patch |
|---|---|---|
| 9.4 Portable Qt6 x64 | 0x36a910 |
b8 01 00 00 00 c3 |
| Build | Location / Go to | Patch |
|---|---|---|
| 9.4 (ARM64) | 0xf0abd4 (ARM64+0x122bd4) |
20 00 80 d2 |
I've only done patches for Linux on 10.0.1 for now, since these patches are a bit more involved. 11.x will make further changes and should be coming sometime soon, so I've decided to just wait until that comes out.
| Location | Patch | Info |
|---|---|---|
0x4ffd50 |
b8 01 00 00 00 c3 |
Forces anyAccountIsValid() to return true |
0x38cb16 |
48 e9 |
Makes the jump to launchInstance() unconditional to ignore aborting launch when not in demo mode |
0x7fd920 |
b8 00 00 00 00 c3 |
Forces askPlayDemo() to return false (technically optional) |
This version has some refactoring that is more favourable to binary patching, though the patch I use partially breaks MS accounts in favour of simplifying patch creation - though supporting them would be moot anyway, so I'm mostly fine with that.
NOTE: This patch also results in the launcher crashing if no account is selected and an account is started in normal/offline mode, though that shouldn't be a hard fix to do once I'm willing to polish it up more.
| Location | Patch |
|---|---|
0x3dcd40 |
B8 01 00 00 00 C3 |
0x551970 |
8B 87 9C 00 00 00 89 87 A0 00 00 00 B8 01 00 00 00 C3 |
| Location | Patch |
|---|---|
0x3d7840 |
B8 01 00 00 00 C3 |
0x54bd60 |
8B 87 9C 00 00 00 89 87 A0 00 00 00 B8 01 00 00 00 C3 |
The patch for decideLaunchMode replaces it enitrely with the following assembly:
MOV EAX, dword ptr [rdi + 0x9c] ; Load m_wantedLaunchMode into EAX
MOV dword ptr [rdi + 0xa0], EAX ; Save EAX into m_actualLaunchMode
MOV EAX, 0x1 ; Set EAX to 1 (EAX contains the return value by convention)
RET ; Return
You can verify that here.
This is eqivlent to replacing the function with:
this->m_actualLaunchMode = this->m_wantedLaunchMode;
return LaunchDecision::Continue;For 9.x: These patches simpily modify AccountList::anyAccountIsValid() to always return true. From my exprience this seems to be enough to bypass the DRM in Prism Launcher as of 9.4.
For 10.x: In addition to patching anyAccountIsValid(), it is now required to patch an if statement in LauncherController::login() that prevents launching if no microsoft accounts that own minecraft are added, and optionally to patch LaunchController::askPlayDemo() to remove the annoying "Do you want to play in demo mode?" pop-up.
For 11.x: It seems like the code has been refactored, moving the account checking out to LaunchController::decideLaunchMode(). We actually benefit from this, since we can just replace decideLaunchMode and we don't need to patch out Demo-related stuff anymore.
It seems possible there are issues related to offline LAN servers still trying to authenticate anyway, but I'm not exactly sure. It mainly seems to affect Windows AMD64 builds, but I have gotten it once under Linux. This is also known to occur with source cracks where this mod has been suggested as a fix.
- For Linux:
- In 9.x the portable build main binary is
<launcher root>/bin/prismlauncher. - In 10.x it has changed to
<launcher root>/shared/bin/prismlauncherand the original<launcher root>/bin/prismlauncherappears to be some kind of stub.
- In 9.x the portable build main binary is
- In 10.x, some changes were made to always check for a Microsoft account in offline mode. Multiple patches are now required.
- For 9.x, it's most likely possible to write an automated script for Linux and Windows MinGW versions to find the symbol location and patch it, even in versions that aren't yet supported, since they ship with the symbol table.
- To answer the question "Why not just edit the source code?": Because for me, it's more fun than trying to make 3 build sytems work and installing 760 depencies just to change a few instructions. ;P
For fun here is a list of source forks of Prism that I am aware of which allow using offline accounts freely:
- Freesm Launcher
- Shattered Prism
- PollyMC (discontinued)
- Unbranded forks: [1] [2]
I haven't tested or verified any of them as safe, but they look legit, and if you're comfortable using them they will probably be updated faster than these patches.
I've made a patch file for 10.x that reverts these commits. No bypass are required, just add an offline account and play.
It's not for binary, you must clone PrismLauncher, apply the patch and compile.
https://codeberg.org/JoseskVolpe/PrismLauncher-Patch