MCPcopy Index your code
hub / github.com/d4c5d1e0/hcaptcha

github.com/d4c5d1e0/hcaptcha @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
578 symbols 1,539 edges 16 files 0 documented · 0% 1 cross-repo links
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

hCaptcha Analysis

Basic Info

This script was introduced early June 2022 with version 1.10.7/b78be28

You can fetch the script at this URL: https://newassets.hcaptcha.com/i/{VERSION_HASH?}/e but it's encrypted, after being fetched it's decrypted inside the WebAssembly and executed.

It collects various device fingerprinting data, most of them are listed below.

Current version 28-10-2022: 1.18.0/bc030dc

Parameters explanation: 1.18.0 (Up to date)

Note:

  • They seem to be running extra checks depending on the "security" parameter enabled eg. when solving AND/OR failing too many captchas in a row, some extra automation checks (worker, proxy spoofing,automation extensions...) are ran

Parameters

101

  • Result: Array
  • Value: [window.screen.width,window.screen.height]
  • Hashed: false

102

  • Result: bool
  • Value: Screen dimensions check more info
  • Hashed: false

103

  • Result: Array
  • Value: s as window.screen [s.width,s.height,s.availWidth,s.availHeight,s.colorDepth,s.pixelDepth,navigator.maxTouchPoints,devicePixelRatio]
  • Hashed: false

104

  • Result: Bool
  • Value: s as window.screen !(s.width - s.availWidth || s.height - s.availHeight);
  • Hashed: false

201

  • Result: Array
  • Value: Looks like some sort of CSS Fingerprinting (Firefox hash is the not the same as the Chrome one)
  • Hashed: true

202

  • Result: Array
  • Value: Don't really know how to explain this one (see script for more info)
  • Hashed: false

203

  • Result: Bool
  • Value: Some sort of CSS fingerprinting see; return false on most browsers
  • Hashed: false

204

  • Result: String
  • Value: Supported emojis (fingerprinting)
  • Hashed: false

205

  • Result: Bool
  • Value: Some sort of CSS fingerprinting see; return false on most browsers
  • Hashed: false

301

  • Result: Array
  • Value: CSS Properties list (hash is different accross browsers but shared between devices)
  • Hashed: true

302

  • Result: Object
  • Value: Looks like some sort of CSS Fingerprinting (hash is different accross browsers but shared between devices)

303

  • Result: Array
  • Value: Fonts but weird // TODO
  • Hashed: false

304

  • Result: Number
  • Value: length of CSS properties
  • Hashed: false

401

  • Result: Array
  • Value: Object.getOwnPropertyNames(window)
  • Hashed: true

402

  • Result: Number
  • Value: Object.getOwnPropertyNames(window).length
  • Hashed: false

501

  • Result: Array
  • Value: Supported media sources
  • Hashed: true

601

  • Result: String
  • Value: User-Agent
  • Hashed: false

602

  • Result: Array
  • Value: n as window.navigator [n.language,n.languages,n.platform,n.oscpu]
  • Hashed: false

603

  • Result: Array
  • Value: [deviceMemory,hardwareConcurrency]
  • Hashed: false

701

  • Result: Bool
  • Value: Firefox only. Purpose: ???
  • Hashed: false

702

  • Result: Array
  • Value: navigator.userAgentData.getHighEntropyValues(["platform","platformVersion","model","bitness","architecture","uaFullVersion"])
  • Hashed: false

703

  • Result: Array
  • Value: navigator.userAgentData.getHighEntropyValues(["platform","platformVersion","model","bitness","architecture"])
  • Hashed: false

801

  • Result: Array
  • Value: matchMedia() CSS Properties info
  • Hashed: false

901

  • Result: Array
  • Value: Some voices fingerprinting data
  • Hashed: true

902

  • Result: Array
  • Value: Enabled voices name
  • Hashed: false

903

  • Result: String
  • Value: First enabled voice locale eg. "en-US"
  • Hashed: false

1001

  • Result: Array
  • Value: Audio Fingerprinting
  • Hashed: true

1002

  • Result: Bool
  • Value: Detect lie about your audio fingerprint (i guess?)
  • Hashed: false

1101

  • Result: String
  • Value: Canvas fingerprinting
  • Hashed: true

1102

  • Result: Bool
  • Value: TBD
  • Hashed: false

1201

  • Result: Array
  • Value: Sort of CSS fingerprinting (not used?)
  • Hashed: true

1301

  • Result: Array
  • Value: Fonts installed on the system
  • Hashed: false

1401

  • Result: String
  • Value: TimeZone
  • Hashed: false

1402

  • Result: Array
  • Value: [Timezone,See script,new Date("1/1/1970").getTimezoneOffset(),See script,See script]
  • Hashed: false

1501

  • Result: Array
  • Value: navigator.mediaDevices.enumerateDevices()
  • Hashed: true

1601

  • Result: Bool
  • Value: TBD (related to bluetooth?)
  • Hashed: false

1701

  • Result: Array
  • Value: WebRTC fingerprinting
  • Hashed: true

1801

  • Result: Array
  • Value: WebRTC fingerprinting
  • Hashed: true

1901

  • Result: Array
  • Value: Math Fingerprinting, Hash is different across browser types
  • Hashed: true

1902

  • Result: Number
  • Value: Some error stack inspection function more here
  • Hashed: false

2001

  • Result: Array
  • Value: Navigator Permissions
  • Hashed: true

2002

  • Result: Array
  • Value: Notification Permissions
  • Hashed: false

2201

  • Result: Array
  • Value: Codecs testing (some sort of audio hash?)
  • Hashed: true

2301

  • Result: String
  • Value: Worker Check: Worker User-Agent
  • Hashed: false

2302

  • Result: Bool
  • Value: Worker Check: Is worker User-Agent same as Browser
  • Hashed: false

2303

  • Result: Array
  • Value: Worker Check: Languages and Locale from Worker + language from browser
  • Hashed: false

2304

  • Result: Array
  • Value: Worker Check: Some errors from the Worker
  • Hashed: false

2401

  • Result: Array
  • Value: WebGL properties hash
  • Hashed: true

2402

  • Result: Array
  • Value: WebGL Vendor & Renderer
  • Hashed: false

2403

  • Result: Array
  • Value: WebGL2 Vendor & Renderer
  • Hashed: false

2501

  • Result: Array
  • Value: WebGL Fingerprinting
  • Hashed: true

2601

  • Result: Array
  • Value: Worker Check: Checks for known automation extensions
  • Hashed: false

2701

  • Result: Array
  • Value: [lengthOfSomeFunctions,Object.getOwnPropertyNames(window.chrome || {}),check if it's a process ?]
  • Hashed: false

2702

  • Result: Array
  • Value: Navigator properties check (brand,mobile,platform)
  • Hashed: false

2703

  • Result: String
  • Value: if ran in electron get the name of the App
  • Hashed: false

2801

  • Result: Array
  • Value: Audio Fingerprinting
  • Hashed: true

2802

  • Result: Number
  • Value: Total length of the properties
  • Hashed: false

2803

  • Result: Array
  • Value: Checks some properties related to the navigator and Window
  • Hashed: false

2901

  • Result: Array
  • Value: Checks some properties related to the navigator and Window
  • Hashed: false

2902

  • Result: Array
  • Value: TBD
  • Hashed: false

2903

  • Result: Bool
  • Value: !!navigator.webdriver
  • Hashed: false

3001

  • Result: Array
  • Value: Checks integrity of all Window functions
  • Hashed: true

3002

  • Result: Number
  • Value: Length of all window function (not sure lol)
  • Hashed: false

3101

  • Result: Array
  • Value: TBD (not actived yet)
  • Hashed: false

3201

  • Result: Number
  • Value: Math.max(Math.floor(n / 1073741824)
  • Hashed: false

3202

  • Result: Number
  • Value: e.sent().quota ?? TBD
  • Hashed: false

Core symbols most depended-on inside this repo

e
called by 67
1.18.0/cleaned.js
e
called by 67
1.17.5/cleaned.js
e
called by 65
1.16.0/cleaned.js
e
called by 64
1.15.3/cleaned.js
e
called by 61
1.15.1/cleaned.js
r
called by 52
1.17.1/cleaned.js
_
called by 46
1.14.3/cleaned.js
n
called by 46
1.15.2/cleaned.js

Shape

Function 578

Languages

TypeScript100%

Modules by API surface

1.17.1/obfuscated.js45 symbols
1.18.0/obfuscated.js44 symbols
1.16.0/obfuscated.js44 symbols
1.15.2/obfucated.js40 symbols
1.15.1/obfuscated.js39 symbols
1.18.0/cleaned.js38 symbols
1.17.5/cleaned.js38 symbols
1.16.0/cleaned.js37 symbols
1.17.1/cleaned.js36 symbols
1.15.3/cleaned.js35 symbols
obfuscated.js33 symbols
1.14.3/obfuscated.js33 symbols

Used by 1 indexed graphs manifest dependencies, hub-wide

For agents

$ claude mcp add hcaptcha \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact