creepjs (reference impl)

bot-detector intel
  • creep.js (full probe)

    [ok]

    https://abrahamjuliot.github.io/creepjs/creep.js

    last ran
    2026-06-29 19:21 utc
    (5d ago)
    last updated
    2026-06-12 15:55 utc
    (22d ago)
    size
    537.2kb
    sha256
    80f43f364bd9
    apis touched
    898
    898 raw
    bot tells
    226
    sinks
    3
    0 leaked
    hazards
    9
    structural
    5
    anti-debug
    0
    L3/L4 hazards
    consistency
    5
    cross-checks
    providers
    0

    categories probed (23)

    click a row to drill into every api the script probes in that category.

    • [+] navigator29 apis · 12 tells · 62 hits
      • [+] *.getHighEntropyValueshigh · bot-tell×4
        details + source hits (4)
      • [+] navigator.userAgentData.getHighEntropyValueshigh · bot-tell×4
        details + source hits (4)
      • [+] navigator.bravehigh · bot-tell×2
        details + source hits (2)
      • [+] navigator.permissionshigh · bot-tell×2
        details + source hits (2)
      • [+] navigator.webdriverhigh · bot-tell×2
        details + source hits (2)
      • [+] *.requestAdapterhigh · bot-tell×1
        details + source hits (1)
      • [+] *.requestAdapterInfohigh · bot-tell×1
        details + source hits (1)
      • [+] navigator.userAgentDatamedium×8
        details + source hits (8)
      • [+] navigator.mediaDevicesmedium×2
        details + source hits (2)
      • [+] navigator.mimeTypesmedium×2
        details + source hits (2)
      • [+] navigator.pluginsmedium · bot-tell×2
        details + source hits (2)
      • [+] navigator.connectionmedium×1
        details + source hits (1)
      • [+] navigator.deviceMemorymedium×1
        details + source hits (1)
      • [+] navigator.getBatterymedium×1
        details + source hits (1)
      • [+] navigator.gpumedium×1
        details + source hits (1)
      • [+] navigator.hardwareConcurrencymedium×1
        details + source hits (1)
      • [+] navigator.maxTouchPointsmedium · bot-tell×1
        details + source hits (1)
      • [+] navigator.userAgentData.platformmedium×1
        details + source hits (1)
      • [+] navigator.userAgentlow×7
        details + source hits (7)
      • [+] navigator.bluetoothlow×3
        details + source hits (3)
      • [+] *.getAvailabilitylow×2
        details + source hits (2)
      • [+] navigator.appVersionlow · bot-tell×2
        details + source hits (2)
      • [+] navigator.storagelow×2
        details + source hits (2)
      • [+] navigator.oscpulow · bot-tell×1
        details + source hits (1)
      • [+] navigator.pdfViewerEnabledlow×1
        details + source hits (1)
      • [+] navigator.platformlow×1
        details + source hits (1)
      • [+] navigator.vendorlow×1
        details + source hits (1)
      • [+] navigator.webkitTemporaryStoragelow · bot-tell×1
        details + source hits (1)
      • [+] navigator.serviceWorkerinfo×4
        details + source hits (4)
    • [+] webgl20 apis · 5 tells · 43 hits
      • [+] *.getParameterhigh · bot-tell×8
        details + source hits (8)
      • [+] *.getContexthigh · bot-tell×4
        details + source hits (4)
      • [+] *.getExtensionhigh · bot-tell×2
        details + source hits (2)
      • [+] *.getSupportedExtensionshigh · bot-tell×1
        details + source hits (1)
      • [+] *.readPixelshigh · bot-tell×1
        details + source hits (1)
      • [+] *.getExtensionmedium×6
        details + source hits (6)
      • [+] *.getShaderPrecisionFormatmedium×4
        details + source hits (4)
      • [+] *.compileShadermedium×2
        details + source hits (2)
      • [+] *.shaderSourcemedium×2
        details + source hits (2)
      • [+] *.drawArraysmedium×1
        details + source hits (1)
      • [+] *.createShaderlow×2
        details + source hits (2)
      • [+] *.getContextAttributeslow×2
        details + source hits (2)
      • [+] *.createProgramlow×1
        details + source hits (1)
      • [+] *.linkProgramlow×1
        details + source hits (1)
      • [+] *.useProgramlow×1
        details + source hits (1)
      • [+] *.bindBufferinfo×1
        details + source hits (1)
      • [+] *.bufferDatainfo×1
        details + source hits (1)
      • [+] *.getAttribLocationinfo×1
        details + source hits (1)
      • [+] *.getUniformLocationinfo×1
        details + source hits (1)
      • [+] *.vertexAttribPointerinfo×1
        details + source hits (1)
    • [+] audio12 apis · 5 tells · 40 hits
      • [+] *.getChannelDatahigh · bot-tell×11
        details + source hits (11)
      • [+] OfflineAudioContexthigh · bot-tell×10
        details + source hits (10)
      • [+] *.copyFromChannelhigh · bot-tell×2
        details + source hits (2)
      • [+] *.createDynamicsCompressorhigh · bot-tell×2
        details + source hits (2)
      • [+] *.startRenderinghigh · bot-tell×2
        details + source hits (2)
      • [+] *.createAnalysermedium×3
        details + source hits (3)
      • [+] *.createOscillatormedium×3
        details + source hits (3)
      • [+] *.getFloatFrequencyDatamedium×3
        details + source hits (3)
      • [+] *.copyToChannelmedium×1
        details + source hits (1)
      • [+] *.createBiquadFiltermedium×1
        details + source hits (1)
      • [+] *.getFloatTimeDomainDatamedium×1
        details + source hits (1)
      • [+] *.sampleRatemedium×1
        details + source hits (1)
    • [+] workers5 apis · 5 tells · 9 hits
      • [+] OffscreenCanvashigh · bot-tell×4
        details + source hits (4)
      • [+] WorkerNavigatorhigh · bot-tell×1
        details + source hits (1)
      • [+] *.registermedium · bot-tell×2
        details + source hits (2)
      • [+] SharedWorkermedium · bot-tell×1
        details + source hits (1)
      • [+] Workermedium · bot-tell×1
        details + source hits (1)
    • [+] css7 apis · 4 tells · 81 hits
      • [+] *.getComputedStylehigh · bot-tell×8
        details + source hits (8)
      • [+] getComputedStylehigh · bot-tell×8
        details + source hits (8)
      • [+] CSS.supportsmedium · bot-tell×8
        details + source hits (8)
      • [+] *.blockSizemedium×1
        details + source hits (1)
      • [+] *.inlineSizemedium · bot-tell×1
        details + source hits (1)
      • [+] *.getPropertyValuelow×15
        details + source hits (15)
      • [+] *.matchesinfo×40
        details + source hits (40)
    • [+] window7 apis · 4 tells · 16 hits
      • [+] chrome.runtimehigh · bot-tell×4
        details + source hits (4)
      • [+] outerHeightmedium · bot-tell×2
        details + source hits (2)
      • [+] *.visualViewportmedium×1
        details + source hits (1)
      • [+] outerWidthmedium · bot-tell×1
        details + source hits (1)
      • [+] devicePixelRatiolow×3
        details + source hits (3)
      • [+] innerWidthlow · bot-tell×3
        details + source hits (3)
      • [+] innerHeightlow×2
        details + source hits (2)
    • [+] document9 apis · 3 tells · 45 hits
      • [+] *.contentWindowhigh · bot-tell×3
        details + source hits (3)
      • [+] document.currentScriptmedium · bot-tell×2
        details + source hits (2)
      • [+] document.fontsmedium×2
        details + source hits (2)
      • [+] document.createRangemedium · bot-tell×1
        details + source hits (1)
      • [+] document.createElementlow×21
        details + source hits (21)
      • [+] document.createEventlow×1
        details + source hits (1)
      • [+] document.styleSheetslow×1
        details + source hits (1)
      • [+] document.bodyinfo×13
        details + source hits (13)
      • [+] document.documentElementinfo×1
        details + source hits (1)
    • [+] intl7 apis · 3 tells · 17 hits
      • [+] Intl.DateTimeFormatmedium · bot-tell×6
        details + source hits (6)
      • [+] *.resolvedOptionsmedium×5
        details + source hits (5)
      • [+] Intl.RelativeTimeFormatmedium · bot-tell×2
        details + source hits (2)
      • [+] Intl.DisplayNamesmedium · bot-tell×1
        details + source hits (1)
      • [+] Intl.ListFormatmedium×1
        details + source hits (1)
      • [+] Intl.NumberFormatmedium×1
        details + source hits (1)
      • [+] Intl.PluralRulesmedium×1
        details + source hits (1)
    • [+] webrtc6 apis · 3 tells · 7 hits
      • [+] RTCPeerConnectionhigh · bot-tell×2
        details + source hits (2)
      • [+] *.localDescriptionhigh · bot-tell×1
        details + source hits (1)
      • [+] *.candidatemedium · bot-tell×1
        details + source hits (1)
      • [+] *.createDataChannelmedium×1
        details + source hits (1)
      • [+] *.createOffermedium×1
        details + source hits (1)
      • [+] *.setLocalDescriptionmedium×1
        details + source hits (1)
    • [+] anti-debug6 apis · 3 tells · 153 hits
      • [+] console.errormedium · bot-tell×21
        details + source hits (21)
      • [+] console.logmedium · bot-tell×16
        details + source hits (16)
      • [+] console.warnmedium · bot-tell×2
        details + source hits (2)
      • [+] consolelow×102
        details + source hits (102)
      • [+] console.groupCollapsedinfo×6
        details + source hits (6)
      • [+] console.groupEndinfo×6
        details + source hits (6)
    • [+] speech4 apis · 3 tells · 20 hits
      • [+] speechSynthesishigh · bot-tell×13
        details + source hits (13)
      • [+] *.getVoiceshigh · bot-tell×3
        details + source hits (3)
      • [+] speechSynthesis.getVoiceshigh · bot-tell×3
        details + source hits (3)
      • [+] speechSynthesis.onvoiceschangedmedium×1
        details + source hits (1)
    • [+] canvas18 apis · 2 tells · 55 hits
      • [+] *.toDataURLhigh · bot-tell×9
        details + source hits (9)
      • [+] *.getImageDatahigh · bot-tell×4
        details + source hits (4)
      • [+] *.getContextmedium×6
        details + source hits (6)
      • [+] *.fillTextmedium×2
        details + source hits (2)
      • [+] *.measureTextmedium×2
        details + source hits (2)
      • [+] *.strokeTextmedium×1
        details + source hits (1)
      • [+] *.createRadialGradientlow×1
        details + source hits (1)
      • [+] *.fillRectinfo×6
        details + source hits (6)
      • [+] *.beginPathinfo×5
        details + source hits (5)
      • [+] *.clearRectinfo×4
        details + source hits (4)
      • [+] *.strokeinfo×4
        details + source hits (4)
      • [+] *.addColorStopinfo×2
        details + source hits (2)
      • [+] *.arcinfo×2
        details + source hits (2)
      • [+] *.fillinfo×2
        details + source hits (2)
      • [+] *.moveToinfo×2
        details + source hits (2)
      • [+] *.bezierCurveToinfo×1
        details + source hits (1)
      • [+] *.ellipseinfo×1
        details + source hits (1)
      • [+] *.quadraticCurveToinfo×1
        details + source hits (1)
    • [+] introspection17 apis · 2 tells · 86 hits
      • [+] *.constructor.toStringhigh · bot-tell×1
        details + source hits (1)
      • [+] Object.getOwnPropertyNamesmedium×11
        details + source hits (11)
      • [+] Object.setPrototypeOfmedium×10
        details + source hits (10)
      • [+] Object.getOwnPropertyDescriptormedium · bot-tell×7
        details + source hits (7)
      • [+] Object.getPrototypeOfmedium×7
        details + source hits (7)
      • [+] Proxymedium×5
        details + source hits (5)
      • [+] Reflect.getOwnPropertyDescriptormedium×5
        details + source hits (5)
      • [+] *.__proto__medium×4
        details + source hits (4)
      • [+] Object.getOwnPropertyDescriptorsmedium×3
        details + source hits (3)
      • [+] Reflect.setPrototypeOfmedium×2
        details + source hits (2)
      • [+] Object.definePropertymedium×1
        details + source hits (1)
      • [+] Reflect.ownKeysmedium×1
        details + source hits (1)
      • [+] *.toStringlow×17
        details + source hits (17)
      • [+] Object.createlow×6
        details + source hits (6)
      • [+] *.hasOwnPropertylow×4
        details + source hits (4)
      • [+] *.constructorlow×1
        details + source hits (1)
      • [+] Reflect.deletePropertylow×1
        details + source hits (1)
    • [+] timing6 apis · 2 tells · 34 hits
      • [+] performance.nowmedium×8
        details + source hits (8)
      • [+] performance.memorymedium · bot-tell×2
        details + source hits (2)
      • [+] *.getTimezoneOffsetmedium · bot-tell×1
        details + source hits (1)
      • [+] requestAnimationFramelow×1
        details + source hits (1)
      • [+] Dateinfo×21
        details + source hits (21)
      • [+] Date.parseinfo×1
        details + source hits (1)
    • [+] svg5 apis · 2 tells · 9 hits
      • [+] *.getComputedTextLengthhigh · bot-tell×5
        details + source hits (5)
      • [+] *.getBBoxhigh · bot-tell×1
        details + source hits (1)
      • [+] *.getExtentOfCharmedium×1
        details + source hits (1)
      • [+] *.getSubStringLengthmedium×1
        details + source hits (1)
      • [+] SVGRectlow×1
        details + source hits (1)
    • [+] media5 apis · 2 tells · 9 hits
      • [+] *.enumerateDeviceshigh · bot-tell×2
        details + source hits (2)
      • [+] *.canPlayTypemedium×2
        details + source hits (2)
      • [+] *.isTypeSupportedmedium×2
        details + source hits (2)
      • [+] Notification.permissionmedium · bot-tell×2
        details + source hits (2)
      • [+] crypto.subtleinfo×1
        details + source hits (1)
    • [+] extensions2 apis · 2 tells · 4 hits
      • [+] chrome.runtime.connecthigh · bot-tell×2
        details + source hits (2)
      • [+] chrome.runtime.sendMessagehigh · bot-tell×2
        details + source hits (2)
    • [+] media-capabilities3 apis · 1 tells · 4 hits
      • [+] MediaSource.isTypeSupportedhigh · bot-tell×1
        details + source hits (1)
      • [+] MediaRecorder.isTypeSupportedmedium×1
        details + source hits (1)
      • [+] MediaSourcelow×2
        details + source hits (2)
    • [+] storage6 apis · 0 tells · 123 hits
      • [+] *.keyslow×72
        details + source hits (72)
      • [+] *.haslow×19
        details + source hits (19)
      • [+] *.matchlow×19
        details + source hits (19)
      • [+] *.estimatelow×2
        details + source hits (2)
      • [+] *.postMessagelow×2
        details + source hits (2)
      • [+] *.deleteinfo×9
        details + source hits (9)
    • [+] screen4 apis · 0 tells · 9 hits
      • [+] screen.widthlow×4
        details + source hits (4)
      • [+] screen.heightlow×3
        details + source hits (3)
      • [+] screen.availHeightlow×1
        details + source hits (1)
      • [+] screen.availWidthlow×1
        details + source hits (1)
    • [+] fonts3 apis · 0 tells · 5 hits
      • [+] *.checkmedium×2
        details + source hits (2)
      • [+] FontFacemedium×2
        details + source hits (2)
      • [+] *.loadlow×1
        details + source hits (1)
    • [+] events3 apis · 0 tells · 13 hits
      • [+] *.datainfo×5
        details + source hits (5)
      • [+] *.addEventListenerinfo×4
        details + source hits (4)
      • [+] *.locationinfo×4
        details + source hits (4)
    • [+] dom-layout3 apis · 0 tells · 54 hits
      • [+] *.getClientRectsmedium×8
        details + source hits (8)
      • [+] *.getBoundingClientRectmedium×4
        details + source hits (4)
      • [+] matchMedialow×42
        details + source hits (42)

    bot-detection tells (63)

    strong indicators of bot-detection intent. drill into the categories section below to inspect description, evasion notes, and source snippets for any tell.

    structural findings (5)

    multi-node patterns the api catalog can't express by itself. vm-bytecode dispatch tables, consistency cross-checks, cognitive honeypots, high-res-timer reconstructions, favicon cache probes. these are the strongest signal a script is doing more than vanilla feature-detection.

    • [+] consistency-checkua-vs-uach-platformhigh · L2045:29

      Pairs `navigator.userAgent` with `navigator.userAgentData.platform`. UA-CH consistency cross-check. A spoofed UA usually leaves UA-CH untouched (or vice versa).

      • members: ["navigator.userAgent","navigator.userAgentData.platform"]
      • witnesses: [{"key":"navigator.userAgent","loc":{"end":{"line":2045,"column":48},"start":{"line":2045,"column":29}},"snippet":"navigator.userAgent"},{"key":"navigator.userA
      navigator.userAgent
    • [+] consistency-checkplatform-vs-uach-platformhigh · L2042:28

      Pairs `navigator.platform` with `navigator.userAgentData.platform`. legacy-platform vs UA-CH-platform consistency.

      • members: ["navigator.platform","navigator.userAgentData.platform"]
      • witnesses: [{"key":"navigator.platform","loc":{"end":{"line":2042,"column":46},"start":{"line":2042,"column":28}},"snippet":"navigator.platform"},{"key":"navigator.userAge
      navigator.platform
    • [+] consistency-checktimezone-cross-checkhigh · L1138:25

      Pairs `Intl.DateTimeFormat().resolvedOptions().timeZone` with `Date.prototype.getTimezoneOffset` (or `Date.toString`). timezone-spoofing consistency check; a known headless tell.

      • members: ["Intl.DateTimeFormat","*.getTimezoneOffset"]
      • witnesses: [{"key":"Intl.DateTimeFormat","loc":{"end":{"line":1138,"column":44},"start":{"line":1138,"column":25}},"snippet":"Intl.DateTimeFormat"},{"key":"*.getTimezoneOf
      Intl.DateTimeFormat
    • [+] consistency-checkgpu-os-consistencyhigh · L1809:33

      Pairs WebGL `UNMASKED_RENDERER_WEBGL` access with `navigator.platform`. GPU/OS cross-check (a Mac claiming an NVIDIA renderer is a strong tell).

      • members: ["*.getExtension","navigator.platform"]
      • witnesses: [{"key":"*.getExtension","loc":{"end":{"line":1809,"column":58},"start":{"line":1809,"column":33}},"snippet":"contextWebgl.getExtension"},{"key":"navigator.plat
      contextWebgl.getExtension
    • [+] consistency-checkgeometry-triangulationhigh · L3748:16

      Pairs screen dimensions with `devicePixelRatio` and `outerWidth`. geometry triangulation for window-size spoofing detection.

      • members: ["screen.width","screen.height","devicePixelRatio"]
      • witnesses: [{"key":"screen.width","loc":{"end":{"line":3748,"column":28},"start":{"line":3748,"column":16}},"snippet":"screen.width"},{"key":"screen.height","loc":{"end":{
      screen.width

    network sinks (3)

    every place the script could ship data off the page. expand a row to see headers and the traced payload entries.

    • [+] workerGET ./creep.jsno leaks

      location · L1958:50

      new Worker(scriptSource)
    • [+] shared-workerGET ./creep.jsno leaks

      location · L1971:47

      new SharedWorker(scriptSource)
    • [+] fetchGET urlno leaks

      url source · url

      location · L7510:15

      fetch(url)

    dynamic-execution hazards (9)

    anywhere the script puts code beyond static reach. eval, function, document.write, dynamic import. these are the holes script2builtins-runtime would fill.

    • FunctionL4311:22

      `new Function` constructor compiles a string into a function. common eval-equivalent in fingerprinting blobs.

      new Function('alert(")')
    • FunctionL4312:22

      `new Function` constructor compiles a string into a function. common eval-equivalent in fingerprinting blobs.

      new Function('const foo;foo.bar')
    • FunctionL4313:22

      `new Function` constructor compiles a string into a function. common eval-equivalent in fingerprinting blobs.

      new Function('null.bar')
    • FunctionL4314:22

      `new Function` constructor compiles a string into a function. common eval-equivalent in fingerprinting blobs.

      new Function('abc.xyz = 123')
    • FunctionL4315:22

      `new Function` constructor compiles a string into a function. common eval-equivalent in fingerprinting blobs.

      new Function('const foo;foo.bar')
    • FunctionL4316:22

      `new Function` constructor compiles a string into a function. common eval-equivalent in fingerprinting blobs.

      new Function('(1).toString(1000)')
    • FunctionL4317:22

      `new Function` constructor compiles a string into a function. common eval-equivalent in fingerprinting blobs.

      new Function('[...undefined].length')
    • FunctionL4318:22

      `new Function` constructor compiles a string into a function. common eval-equivalent in fingerprinting blobs.

      new Function('var x = new Array(-1)')
    • FunctionL4319:22

      `new Function` constructor compiles a string into a function. common eval-equivalent in fingerprinting blobs.

      new Function('const a=1; const a=2;')

related instruments