Harder conditions for Sentry patching
This commit is contained in:
parent
5c1c786cf9
commit
2fa56b80ab
|
@ -77,8 +77,7 @@ export default definePlugin({
|
||||||
// Because of that, its WebpackInstance doesnt export wreq.m or wreq.c
|
// Because of that, its WebpackInstance doesnt export wreq.m or wreq.c
|
||||||
|
|
||||||
// To circuvent this and disable Sentry we are gonna hook when wreq.g of its WebpackInstance is set.
|
// To circuvent this and disable Sentry we are gonna hook when wreq.g of its WebpackInstance is set.
|
||||||
// When that happens we are gonna obtain a reference to its internal module cache (wreq.c) and proxy its prototype,
|
// When that happens we are gonna forcefully throw an error and abort everything.
|
||||||
// so, when the first require to initialize the Sentry is attempted, we are gonna forcefully throw an error and abort everything.
|
|
||||||
Object.defineProperty(Function.prototype, "g", {
|
Object.defineProperty(Function.prototype, "g", {
|
||||||
configurable: true,
|
configurable: true,
|
||||||
|
|
||||||
|
@ -93,35 +92,30 @@ export default definePlugin({
|
||||||
// Ensure this is most likely the Sentry WebpackInstance.
|
// Ensure this is most likely the Sentry WebpackInstance.
|
||||||
// Function.g is a very generic property and is not uncommon for another WebpackInstance (or even a React component: <g></g>) to include it
|
// Function.g is a very generic property and is not uncommon for another WebpackInstance (or even a React component: <g></g>) to include it
|
||||||
const { stack } = new Error();
|
const { stack } = new Error();
|
||||||
if (!(stack?.includes("discord.com") || stack?.includes("discordapp.com")) || this.c != null || !String(this).includes("exports:{}")) {
|
if (!(stack?.includes("discord.com") || stack?.includes("discordapp.com")) || !String(this).includes("exports:{}") || this.c != null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const cacheExtractSym = Symbol("vencord.cacheExtract");
|
const assetPath = stack?.match(/\/assets\/.+?\.js/)?.[0];
|
||||||
Object.defineProperty(Object.prototype, cacheExtractSym, {
|
if (!assetPath) {
|
||||||
configurable: true,
|
return;
|
||||||
|
|
||||||
get() {
|
|
||||||
// One more condition to check if this is the Sentry WebpackInstance
|
|
||||||
if (Array.isArray(this)) {
|
|
||||||
return { exports: {} };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
new Logger("NoTrack", "#8caaee").info("Disabling Sentry by proxying its WebpackInstance cache");
|
const srcRequest = new XMLHttpRequest();
|
||||||
Object.setPrototypeOf(this, new Proxy(this, {
|
srcRequest.open("GET", assetPath, false);
|
||||||
get() {
|
srcRequest.send();
|
||||||
throw new Error("Sentry successfully disabled");
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
Reflect.deleteProperty(Object.prototype, cacheExtractSym);
|
// Final condition to see if this is the Sentry WebpackInstance
|
||||||
|
if (!srcRequest.responseText.includes("window.DiscordSentry=")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
new Logger("NoTrack", "#8caaee").info("Disabling Sentry by erroring its WebpackInstance");
|
||||||
|
|
||||||
|
Reflect.deleteProperty(Function.prototype, "g");
|
||||||
Reflect.deleteProperty(window, "DiscordSentry");
|
Reflect.deleteProperty(window, "DiscordSentry");
|
||||||
return { exports: {} };
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// WebpackRequire our fake module id
|
throw new Error("Sentry successfully disabled");
|
||||||
this(cacheExtractSym);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -130,6 +124,8 @@ export default definePlugin({
|
||||||
|
|
||||||
set() {
|
set() {
|
||||||
new Logger("NoTrack", "#8caaee").error("Failed to disable Sentry. Falling back to deleting window.DiscordSentry");
|
new Logger("NoTrack", "#8caaee").error("Failed to disable Sentry. Falling back to deleting window.DiscordSentry");
|
||||||
|
|
||||||
|
Reflect.deleteProperty(Function.prototype, "g");
|
||||||
Reflect.deleteProperty(window, "DiscordSentry");
|
Reflect.deleteProperty(window, "DiscordSentry");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue