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.