Bypass Multiple Screen Detection
- Published on
- 4 mins read
Bypass Multiple Screen Detection with Tampermonkey Script
// ==UserScript==
// @name Override Screen and Copy-Paste Detection
// @namespace http://tampermonkey.net/
// @version 2025-06-15
// @description Override screen detection and bypass copy-paste restrictions
// @author 7dpk
// @match https://assessment.tamayaz.sa/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=testlify.com
// @grant none
// @run-at document-start
// ==/UserScript==
;(function () {
'use strict'
console.log('Detection override script loaded')
// ========================
// Screen Detection Override
// ========================
function overrideScreenAPI() {
if (window.getScreenDetails) {
console.log('Found getScreenDetails, overriding...')
const originalGetScreenDetails = window.getScreenDetails
window.getScreenDetails = async function () {
console.log('getScreenDetails called, returning single screen')
try {
const originalDetails = await originalGetScreenDetails.call(this)
const modifiedDetails = {
...originalDetails,
screens: [originalDetails.screens[0]],
currentScreen: originalDetails.screens[0],
}
return modifiedDetails
} catch (error) {
console.error('Error in getScreenDetails override:', error)
return {
screens: [
{
availHeight: 1080,
availWidth: 1920,
colorDepth: 24,
height: 1080,
width: 1920,
pixelDepth: 24,
left: 0,
top: 0,
isPrimary: true,
isInternal: true,
},
],
currentScreen: {
availHeight: 1080,
availWidth: 1920,
colorDepth: 24,
height: 1080,
width: 1920,
pixelDepth: 24,
left: 0,
top: 0,
isPrimary: true,
isInternal: true,
},
}
}
}
}
}
// Screen API interception logic
let originalDescriptor = Object.getOwnPropertyDescriptor(window, 'getScreenDetails')
Object.defineProperty(window, 'getScreenDetails', {
configurable: true,
enumerable: true,
set: function (value) {
const wrappedFunction = async function () {
try {
const originalDetails = await value.call(this)
return {
...originalDetails,
screens: [originalDetails.screens[0]],
currentScreen: originalDetails.screens[0],
}
} catch (error) {
return {
screens: [
{
availHeight: 1080,
availWidth: 1920,
colorDepth: 24,
height: 1080,
width: 1920,
pixelDepth: 24,
left: 0,
top: 0,
isPrimary: true,
isInternal: true,
},
],
currentScreen: {
availHeight: 1080,
availWidth: 1920,
colorDepth: 24,
height: 1080,
width: 1920,
pixelDepth: 24,
left: 0,
top: 0,
isPrimary: true,
isInternal: true,
},
}
}
}
this._getScreenDetails = wrappedFunction
},
get: function () {
return this._getScreenDetails || originalDescriptor?.value
},
})
// ========================
// Copy-Paste Detection Bypass
// ========================
const blockEvent = (event) => {
event.stopImmediatePropagation()
event.stopPropagation()
}
// Block clipboard event detection
const clipboardEvents = ['copy', 'paste', 'cut']
clipboardEvents.forEach((eventType) => {
window.addEventListener(eventType, blockEvent, true)
})
window.addEventListener(
'keydown',
function (event) {
if ((event.ctrlKey || event.metaKey) && event.key === 'c') {
blockEvent(event)
}
if ((event.ctrlKey || event.metaKey) && event.key === 'v') {
blockEvent(event)
}
},
true
)
document.addEventListener(
'paste',
function (event) {
if (event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement) {
event.stopImmediatePropagation()
}
},
true
)
// ========================
// Execution Logic
// ========================
// Initial override attempts
overrideScreenAPI()
document.readyState === 'loading'
? document.addEventListener('DOMContentLoaded', overrideScreenAPI)
: overrideScreenAPI()
// Periodic API check
let checkCount = 0
const checkInterval = setInterval(() => {
if (window.getScreenDetails || checkCount > 50) {
clearInterval(checkInterval)
if (window.getScreenDetails) overrideScreenAPI()
}
checkCount++
}, 100)
})()
this script overrides the getScreenDetails function to always return a single screen configuration, effectively bypassing multiple screen detection. It also blocks clipboard events to prevent copy-paste detection mechanisms. We use several strategies to ensure the overrides are applied, including immediate execution, DOMContentLoaded event handling, and periodic checks.