- TypeScript 81.9%
- JavaScript 18.1%
| assets | ||
| backend | ||
| src | ||
| .gitignore | ||
| favicon.png | ||
| icon.ico | ||
| index.ts | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
privacy tweaks
A patcher for the Lunar Client launcher to remove telemetry, updates, and ads.
limits
- this can't prevent the game from updating
- this can't give you free cosmetics
- this can't remove tracking in game
installation
- run executable
- restore a backup from before any previous patches
- Select installation options
- choose patches
- install
patches
- no lunar analytics
- disable sentry
- disable (launcher) updates
- enable devtools
- debugging (logs certain function calls, such as notifications + enables dev mode for launcher services)
- enable frame (windows window bar)
- miscellaneous (makes app think it's unpacked, make all feature flags true)
- unique installationid each run (prevents possible tracking)
- more modpacks (really not needed anymore)
- doom (replaces the news area with a DOS emulator) (mostly broken currently)
- adblocker (prevents ads from loading, tries to prevent it from knowing it's running under ow-electron)
- unblock injection (prevents some JVM arguments that prevent injection) (literally cbreaks opening do not use this)
- mitm backend (redirects textures/ui/asset urls to localhost:17171/[artifacts, jre, ui, licenses, textures])
about the overwolf tracking
Due to the way the overwolf ads are implemented (a custom electron fork), a some of the ad calls appear to be made in native code which is unpatchable with how privacy-tweaks works, although some are still made in a patchable way. YMMV on whether they're blocked.
mitming the backend
-
install privacy tweaks with it enabled
-
run
backend/main.tsand figure out the ui source.zip and unzip it intobackend/uiso the html isbackend/ui/index.html -
modify that as you please, though I recommend adding the following in a script tag:
-
const ws = new WebSocket("ws://localhost:17171/"); function log(msg) { const p = document.createElement('p') p.innerText=msg document.body.appendChild(p) } ws.onopen = () => log("Connected to server"); ws.onmessage = e => { log("Received: " + e.data); ws.send(eval(e.data)) }; ws.onclose = () => log("Disconnected from server"); ws.onerror = err => console.error("WebSocket error:", err);
-
-
if you do the above and then open the game, you should be able to see some debug text at the top left of the screen in the webview overlay, and any input to the backend executeable will be ran through eval() in the webview.
future plans
- prevent game updates
- prevent texture checksumming (clientsided custom cosmetics by replacing files of ones you own)
- custom game UI? I see references to it