process_ = process; require_ = require; delete Buffer; // delete process; delete require; delete global; delete module; delete exports; delete __filename; delete __dirname; delete SharedArrayBuffer; AsObj = { // print: console.log, print: function () { }, // print_:console.log, } no_print = ['Boolean','String','parseFloat','Array','Object','prepareStackTrace_']; function watch(object, WatchName) { const handler = { get(target, property, receiver) { if ( property !== 'isNaN' && property !== 'encodeURI' && property !== "Uint8Array" && property !== 'undefined' && property !== 'JSON' && property !== 'Number' && !no_print.includes(property) && property !== Symbol.for('nodejs.util.inspect.custom') && typeof property !== 'symbol' ) { if (property === 'global') { return undefined; } if (property === 'Buffer') { return undefined; } if (property === 'process') { return undefined; } if (WatchName === 'config_data') { debugger } if (WatchName.indexOf('.prototype') != -1 && target[property] != undefined) { return Reflect.get(target, property, receiver); } AsObj.print( "方法:", "get", "对象:", WatchName, "属性:", property, "属性类型:", typeof property, "属性值:", typeof target[property] == 'object' ? "object" : target[property], "属性值类型:", typeof target[property] ); } if (WatchName === 'top') { return window; } return Reflect.get(target, property, receiver); }, set(target, property, value, receiver) { if (WatchName.indexOf('.prototype') != -1 && value != undefined) { return Reflect.set(target, property, value, receiver); } AsObj.print( "方法:", "set", "对象:", WatchName, "属性:", property, "属性类型:", typeof property, "属性值:", typeof value == 'object' ? "object" : value, "属性值类型:", typeof target[property] ); return Reflect.set(target, property, value, receiver); }, // in操作 检测 has(target, property) { AsObj.print( "代理对象:", WatchName, "方法:", "has", "检查属性:", property, "结果:", typeof target[property] == 'object' ? "object" : target[property], ); return Reflect.has(target, property); }, // Object.key 检测 ownKeys(target) { AsObj.print( "方法:", "ownKeys", "对象:", target+'' ); return Reflect.ownKeys(target); } }; return new Proxy(object, handler); } // function watch(object, WatchName) { // return object // } // 保护函数,toString检测 const safeFunction = function safeFunction(func) { //处理安全函数 Function.prototype.$call = Function.prototype.call; const $toString = Function.toString; const myFunction_toString_symbol = Symbol('('.concat('', ')')); const myToString = function myToString() { return typeof this === 'function' && this[myFunction_toString_symbol] || $toString.$call(this); } const set_native = function set_native(func, key, value) { Object.defineProperty(func, key, { "enumerable": false, "configurable": true, "writable": true, "value": value }); } delete Function.prototype['toString']; set_native(Function.prototype, "toString", myToString); set_native(Function.prototype.toString, myFunction_toString_symbol, "function toString() { [native code] }"); const safe_Function = function safe_Function(func) { set_native(func, myFunction_toString_symbol, "function" + (func.name ? " " + func.name : "") + "() { [native code] }"); } return safe_Function(func) } //创建函数,并代理上 const makeFunction = function makeFunction(name) { v_log = AsObj.print; // 使用 Function 保留函数名 func = new Function("v_log", ` return function ${name}() { v_log('函数${name}传参-->', arguments); }; `)(v_log); // 传递 v_log 到动态函数 safeFunction(func); func = watch(func,`${name}`); func.prototype = watch(func.prototype, `${name}.prototype`); return func; } !(function () { "use strict"; const $toString = Function.toString; const myFunction_toString_symbol = Symbol('('.concat('', ')_', (Math.random() + '').toString(36))); const mytoString = function () { return typeof this == 'function' && this[myFunction_toString_symbol] || $toString.call(this); }; function set_native(func, key, value) { Object.defineProperty(func, key, { "enumerable": false, "configurable": true, "writable": true, "value": value }) }; delete Function.prototype['toString']; set_native(Function.prototype, "toString", mytoString); set_native(Function.prototype.toString, myFunction_toString_symbol, "function toString() { [native code] }"); this.func_set_native = function (func) { set_native(func, myFunction_toString_symbol, `function ${myFunction_toString_symbol, func.name || ''}() { [native code] }`) } }).call(globalThis); // 重写全局对象原型链 function setTostringAndstringTag(obj) { Object.defineProperties(obj.prototype, { [Symbol.toStringTag]: { configurable: true, value: obj.name } }); safeFunction(obj); }; // 创建标签原型 function createTagProto(propObj,portotypeObj) { let res = propObj + ' = ' + 'function ' + propObj + '() { throw new TypeError("Illegal constructor"); };\n'; res += 'setTostringAndstringTag(' + propObj + ',null);\n'; if (portotypeObj) { for (let key in portotypeObj) { res += propObj + '.prototype.' + portotypeObj[key] + '= function ' + portotypeObj[key] + '() {AsObj.print("'+propObj+'.prototype.' + portotypeObj[key] + '原型方法(需在实例对象上补该方法)::",arguments)};\n'; res += 'globalThis.func_set_native(' + propObj + '.prototype.' + portotypeObj[key] + ');\n'; } } eval(res); } Object.defineProperties(globalThis, { [Symbol.toStringTag]: { configurable: true, value: 'Window' } }); for (let key in globalThis) { if (typeof globalThis[key] === 'function') { safeFunction(globalThis[key]) } } for (let key in console) { if (typeof console[key] === 'function') { safeFunction(console[key]) } } createTagProto('EventTarget',['addEventListener']); createTagProto('WindowProperties'); createTagProto('Window'); window = globalThis; window.__proto__ = Window.prototype; window.__proto__.__proto__ = WindowProperties.prototype; window.__proto__.__proto__.__proto__ = EventTarget.prototype; Window.__proto__ = EventTarget; Object.defineProperty(window, 'WindowProperties', { get: function () { return undefined; } }) function randoms(min, max) { return Math.floor(Math.random() * (max - min + 1) + min) } function getRandomValues(buf) { var min = 0, max = 255; if (buf instanceof Uint16Array) { max = 65535; } else if (buf instanceof Uint32Array) { max = 4294967295; } for (var element in buf) { buf[element] = randoms(min, max); } return buf; } self = window.self = window; frames = window.frames = window; top = window.top = window; parent = window.parent = window; global = window.global = window; Object.defineProperty(window, "global", { configurable:false, enumerable: true, set: undefined, get: function global(){ return window } }) Object.defineProperty(window, "top", { configurable:false, enumerable: true, set: undefined, get: function top(){ return window } }) Object.defineProperty(window, "self", { configurable:false, enumerable: true, set: undefined, get: function self(){ return window } }) Object.defineProperty(window, "parent", { configurable:false, enumerable: true, set: undefined, get: function parent(){ return window } }) Object.defineProperty(window, "frames", { configurable:false, enumerable: true, set: undefined, get: function frames(){ return window } }) innerWidth = 1536 innerHeight = 715 outerWidth = 1536 outerHeight = 824 devicePixelRatio = 1.25; screenLeft = 0; screenX = 0; screenTop = 0; screenY = 0; opener = null; isSecureContext = true; crypto = { getRandomValues:getRandomValues }; createTagProto('DOMStringMap') createTagProto('HTMLHeadElement',['insertBefore','removeChild']) createTagProto('HTMLBodyElement',['addEventListener','appendChild','removeChild']) createTagProto('HTMLHtmlElement',['getAttribute']) createTagProto('HTMLDocument') createTagProto('Document',['browsingTopics','appendChild','querySelector','evaluate','querySelectorAll','removeChild','requestStorageAccess','requestStorageAccessFor','hasStorageAccess','getElementsByTagName','hasPrivateToken','createElement','hasRedemptionRecord','hasFocus']) createTagProto('Node') document = {}; document.__proto__ = HTMLDocument.prototype; document.__proto__.__proto__ = Document.prototype; document.__proto__.__proto__.__proto__ = Node.prototype; document.__proto__.__proto__.__proto__.__proto__ = EventTarget.prototype; HTMLDocument.__proto__ = Document; HTMLDocument.__proto__.__proto__ = Node; HTMLDocument.__proto__.__proto__.__proto__ = EventTarget; Document.__proto__ = Node; Document.__proto__.__proto__ = EventTarget; Node.__proto__ = EventTarget; createTagProto('Plugin'); createTagProto('PluginArray'); plugins0 = { name: 'PDF Viewer', filename: 'internal-pdf-viewer', description:'Portable Document Format', length: 2, '0': { type: 'application/pdf', }, '1':{ type:'text/pdf' } } plugins0['0'].enabledPlugin = plugins0; plugins0['1'].enabledPlugin = plugins0; plugins1 = { name: 'Chrome PDF Viewer', filename: 'internal-pdf-viewer', description:'Portable Document Format', length: 2, '0': { type:'application/pdf' }, '1': { type:'text/pdf' } } plugins1['0'].enabledPlugin = plugins1; plugins1['1'].enabledPlugin = plugins1; plugins2 = { name: 'Chromium PDF Viewer', filename: 'internal-pdf-viewer', description:'Portable Document Format', length: 2, '0': { type:'application/pdf' }, '1': { type:'text/pdf' } } plugins2['0'].enabledPlugin = plugins2; plugins2['1'].enabledPlugin = plugins2; plugins3 = { name: 'Microsoft Edge PDF Viewer', filename: 'internal-pdf-viewer', description:'Portable Document Format', length: 2, '0':{ type:'application/pdf' }, '1': { type:'text/pdf' } } plugins3['0'].enabledPlugin = plugins3; plugins3['1'].enabledPlugin = plugins3; plugins4 = { name: 'WebKit built-in PDF', filename: 'internal-pdf-viewer', description:'Portable Document Format', length: 2, '0': { type:'application/pdf' }, '1':{ type:'text/pdf' } } plugins4['0'].enabledPlugin = plugins4; plugins4['1'].enabledPlugin = plugins4; plugins = { length: 5, '0': plugins0, '1': plugins1, '2': plugins2, '3': plugins3, '4': plugins4, namedItem : function (name) { AsObj.print('Plugin-namedItem:', name) }, item: function (index) { AsObj.print('Plugin-item:', index) return watch(plugins0,'item-'+index); }, refresh: function () { AsObj.print('Plugin-refresh:',arguments) }, } plugins.__proto__ = PluginArray.prototype; MimeTypeArray = function MimeTypeArray() { this.length = 2; this['0'] = { suffixes: 'pdf', type: 'application/pdf', description:"Portable Document Format", enabledPlugin: plugins0 }; this['1'] = { suffixes: 'pdf', type: 'text/pdf', description:"Portable Document Format", enabledPlugin: plugins0 }; }; MimeTypeArray.prototype.toString = function () { return '[object MimeTypeArray]'; } MimeTypeArray.toString = function () { return 'function MimeTypeArray() { [native code] }'; } Object.defineProperties(MimeTypeArray.prototype, { [Symbol.toStringTag]: { value: 'MimeTypeArray' } }) MimeTypeArrayc = new MimeTypeArray(); MimeTypeArrayc[Symbol.iterator] = function* () { for (let key in this) { yield this[key]; } } // 创建电池管理器对象原型 const BatteryManager = { level: 1, charging: true, chargingTime: 0, dischargingTime: null, onchargingchange: null, onlevelchange: null, toString: function toString() { return `BatteryManager { charging: ${this.charging}, level: ${this.level}, chargingTime: ${this.chargingTime}, dischargingTime: ${this.dischargingTime} }` } } window.BatteryManager = BatteryManager; Promise2 = { then: function () { return this; }, catch: function (){}, }; createTagProto('Bluetooth'); createTagProto('Navigator'); Navigator.prototype.hardwareConcurrency = 8; Navigator.prototype.userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36'; Navigator.prototype.appVersion = '5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36' Navigator.prototype.appName = 'Netscape'; Navigator.prototype.appCodeName = 'Mozilla'; Navigator.prototype.vendor = 'Google Inc.'; Navigator.prototype.maxTouchPoints = 10; Navigator.prototype.platform = 'Win32'; Navigator.prototype.adAuctionComponents = function adAuctionComponents() { AsObj.print('adAuctionComponents:::', arguments) } safeFunction(Navigator.prototype.adAuctionComponents) Navigator.prototype.runAdAuction = function runAdAuction() { AsObj.print('runAdAuction:::', arguments) } safeFunction(Navigator.prototype.runAdAuction) Navigator.prototype.canLoadAdAuctionFencedFrame = makeFunction('canLoadAdAuctionFencedFrame') Navigator.prototype.deprecatedReplaceInURN = makeFunction('deprecatedReplaceInURN') Navigator.prototype.deprecatedURNToURL = makeFunction('deprecatedURNToURL') Navigator.prototype.joinAdInterestGroup = makeFunction('joinAdInterestGroup') Navigator.prototype.leaveAdInterestGroup = makeFunction('leaveAdInterestGroup') Navigator.prototype.updateAdInterestGroups = makeFunction('updateAdInterestGroups') Navigator.prototype.connection = watch({ downlink: 9.1, effectiveType: '4g', rtt: 0, saveData: false, },'connection') Navigator.prototype.language = 'zh-CN'; Navigator.prototype.languages = ["zh-CN"]; Navigator.prototype.plugins = plugins; Navigator.prototype.webdriver = false; Navigator.prototype.cookieEnabled = true; Navigator.prototype.onLine = true; Navigator.prototype.doNotTrack = null; Navigator.prototype.bluetooth = {}; Navigator.prototype.product = 'Gecko' Navigator.prototype.deviceMemory = 8 Navigator.prototype.mediaDevices = watch({ enumerateDevices: function enumerateDevices() { return new Promise((resolve, reject) => { const offer = [ {deviceId: '', kind: 'audioinput', label: '', groupId: ''}, {deviceId: '', kind: 'videoinput', label: '', groupId: ''}, {deviceId: '', kind: 'audiooutput', label: '', groupId: ''}, ] resolve(offer); }); }, getUserMedia: function getUserMedia() { AsObj.print('getUserMedia:::', arguments) } },'mediaDevices') Navigator.prototype.storage = { estimate: function estimate() { AsObj.print('estimate:::', arguments) return new Promise((resolve, reject) => { const offer = { usage: 0, // 1GB quota: 2147483648, // 1GB, usageDetails: {caches: 512, indexedDB: 2855} }; resolve(offer); }); } } Navigator.prototype.webkitPersistentStorage = watch({},'webkitPersistentStorage') Navigator.prototype.webkitTemporaryStorage = watch({ queryUsageAndQuota: function queryUsageAndQuota() { AsObj.print('queryUsageAndQuota:::', arguments) return new Promise((resolve, reject) => { const offer = { usage: 1024 * 1024 * 1024, // 1GB quota: 1024 * 1024 * 1024, // 1GB }; resolve(offer); }); } },'webkitTemporaryStorage') Navigator.prototype.bluetooth.__proto__ = Bluetooth.prototype; Navigator.prototype.javaEnabled = function javaEnabled() { return false }; safeFunction(Navigator.prototype.javaEnabled) Navigator.prototype.getBattery = function getBattery() { AsObj.print('getBattery:::', arguments) return Promise.resolve({ __proto__: BatteryManager, // 动态参数配置(示例值) level: 1, charging: true, dischargingTime: null // 2小时放电时间 }) } safeFunction(Navigator.prototype.getBattery) Navigator.prototype.registerProtocolHandler = function registerProtocolHandler() { AsObj.print('registerProtocolHandler:::',arguments) } safeFunction(Navigator.prototype.registerProtocolHandler) Navigator.prototype.mimeTypes = watch(MimeTypeArrayc,'mimeTypes'); Navigator.prototype.geolocation = { getCurrentPosition: function getCurrentPosition() { return Promise2; } } Navigator.prototype.pdfViewerEnabled = true; Navigator.prototype.doNotTrack = null; Navigator.prototype.keyboard = watch({ getLayoutMap: function getLayoutMap() { AsObj.print('Navigator.prototype.keyboard:', arguments) return { then: function () { // arguments[0](watch({ // size: 48, // values: function () { // return ['k', 'g', '2', '0', 'v', 'a', '`', 'l', '\\', "'", 'w', '8', 'm', 'h', '.', '7', '1', 'p', 'd', 'f', 'o', 'q', 'c', 'n', '[', 'z', 'y', '3', '6', '5', 'x', '/', '\\', ',', '-', '4', 'b', 't', '9', 's', 'i', 'u', '=', 'j', ';', 'r', ']', 'e'] // } // }, 'navigator.keyboard.getLayoutMap.then')) return { catch: function () { arguments[0]({ message:'getLayoutMap() must be called from a top-level browsing context or allowed by the permission policy.' }) } } } } } },'navigator.keyboard') Navigator.prototype.permissions = watch({ query: function query() { arg_obj = arguments[0]; if (arg_obj.name === 'audio_capture') { return new Promise((resolve, reject) => { const offer = { state: 'prompt', onchange: null, name:arg_obj.name }; resolve(offer); }); } if (arg_obj.name === 'microphone') { return { then: function () { arguments[0](watch({ state: 'denied', onchange: null, name: 'audio_capture' },'permissions.query.microphone')); return {catch:function(){}} }, catch:function(){} } } if (arg_obj.name === 'camera') { return { then: function () { arguments[0](watch({ state: 'prompt', onchange: null, name: 'video_capture' },'permissions.query.camera')); return {catch:function(){}} }, catch:function(){} } } AsObj.print('permissions.query:::', arguments) } },'permissions') Navigator.prototype.productSub = '20030107' Navigator.prototype.getGamepads = function getGamepads() { AsObj.print('getGamepads:::', arguments) return [null,null,null,null] } safeFunction(Navigator.prototype.getGamepads) Navigator.prototype.sendBeacon = makeFunction('sendBeacon') Navigator.prototype.deprecatedRunAdAuctionEnforcesKAnonymity = false Navigator.prototype.gpu = watch({ getPreferredCanvasFormat: function getPreferredCanvasFormat() { AsObj.print('gpu.getPreferredCanvasFormat:', arguments) return 'bgra8unorm' }, wgslLanguageFeatures: watch({ size: 7, values: function values() { debugger AsObj.print('wgslLanguageFeatures.values') return ['packed_4x8_integer_dot_product', 'unrestricted_pointer_parameters', 'subgroup_uniformity', 'subgroup_id', 'pointer_composite_access', 'readonly_and_readwrite_storage_textures', 'uniform_buffer_standard_layout'] }, }, 'gpu.wgslLanguageFeatures'), requestAdapter: function requestAdapter() { AsObj.print('gpu.requestAdapter:', arguments) return { then: function () { arguments[0](watch({ features: watch({ size: 19, values: function () { return ['depth32float-stencil8', 'rg11b10ufloat-renderable', 'bgra8unorm-storage', 'texture-formats-tier1', 'texture-compression-bc', 'dual-source-blending', 'core-features-and-limits', 'float32-filterable', 'indirect-first-instance', 'float32-blendable', 'depth-clip-control', 'texture-compression-bc-sliced-3d', 'timestamp-query', 'texture-formats-tier2', 'clip-distances', 'shader-f16', 'primitive-index', 'texture-component-swizzle', 'subgroups'] } }, 'gpu.requestAdapter.features'), info: watch({ vendor: 'intel', architecture: 'gen-11', device: '', description: '', subgroupMinSize: 16 }, 'gpu.requestAdapter.info'), limits: watch({ maxBufferSize: 2147483648, maxStorageBufferBindingSize:2147483644 }, 'gpu.requestAdapter.limits'), catch:function(){} }, 'gpu.requestAdapter')); return { catch: function () { return { then: function () { arguments[0]() return {catch:function(){}} } } } }; }, catch: function () { } } } },'navigator.gpu') Navigator.prototype.userAgentData = watch({ brands:[ { "brand": "Google Chrome", "version": "143" }, { "brand": "Chromium", "version": "143" }, { "brand": "Not A(Brand", "version": "24" } ], mobile: false, platform: "Windows", getHighEntropyValues: function getHighEntropyValues() { if (arguments[0] + '' === 'architecture,bitness,model,platformVersion,uaFullVersion,wow64') { return new Promise((resolve, reject) => { const offer = { "architecture": "x86", "bitness": "64", "brands": [ { "brand": "Not:A-Brand", "version": "99" }, { "brand": "Google Chrome", "version": "145" }, { "brand": "Chromium", "version": "145" } ], "mobile": false, "model": "", "platform": "Windows", "platformVersion": "10.0.0", "uaFullVersion": "145.0.7632.117", "wow64": false }; resolve(offer); }); } AsObj.print('getHighEntropyValues:::', arguments) } },'userAgentData') navigator = {}; navigator.__proto__ = Navigator.prototype; createTagProto('Location'); location = { "ancestorOrigins": {}, "href": "https://www.neimanmarcus.com/", "origin": "https://www.neimanmarcus.com", "protocol": "https:", "host": "www.neimanmarcus.com", "hostname": "www.neimanmarcus.com", "port": "", "pathname": "/", "search": "", "hash": "" }; location.__proto__ = Location.prototype; location.toString = function toString() { return this.href; } createTagProto('Screen'); Screen.prototype = Object.assign(Screen.prototype, { availHeight: 824, availLeft: 0, availTop: 0, availWidth: 1536, colorDepth: 32, height: 864, isExtended: true, onchange: null, pixelDepth: 24, width: 1536, orientation: { angle: 0, type: "landscape-primary", onchange: null } }) screen = {}; screen.__proto__ = Screen.prototype; createTagProto('History',['replaceState']); history = {}; history.__proto__ = History.prototype; chrome = { loadTimes: function loadTimes() { }, csi: function csi() { }, app: { InstallState: { DISABLED: 'disabled', INSTALLED: 'installed', NOT_INSTALLED: 'not_installed' }, RunningState: { CANNOT_RUN: 'cannot_run', READY_TO_RUN: 'ready_to_run', RUNNING: 'running' }, getDetails:function getDetails(){}, getIsInstalled:function getIsInstalled(){}, installState:function installState(){}, isInstalled: false, runningState: function runningState(){} }, } createTagProto('Storage'); local = { }; localStorage = { getItem: function getItem(key) { AsObj.print("localStorage.getItem::", arguments); if (!local[key]) { return null; } return local[key]; }, setItem: function setItem(key, value) { AsObj.print("localStorage.setItem::", arguments); local[key] = value; }, clear: function clear() { local = {}; }, removeItem: function removeItem(key) { AsObj.print("localStorage.removeItem::", arguments); delete local[key]; } } localStorage.__proto__ = Storage.prototype; sessionStorage = { getItem: function getItem(key) { AsObj.print("sessionStorage.getItem::", arguments); if (!local[key]) { return null; } return local[key]; }, setItem: function setItem(key, value) { AsObj.print("sessionStorage.setItem::", arguments); local[key] = value; }, clear: function clear() { local = {}; }, removeItem: function removeItem(key) { AsObj.print("sessionStorage.removeItem::", arguments); delete local[key]; } } sessionStorage.__proto__ = Storage.prototype; // window = watch(window, 'window'); // global = watch(global, 'global'); // globalThis = watch(globalThis, 'globalThis'); // self = watch(self, 'self'); // crypto = watch(crypto, 'crypto'); // performance = watch(performance, 'performance'); // document = watch(document, 'document'); // navigator = watch(navigator, 'navigator'); // location = watch(location, 'location'); // screen = watch(screen, 'screen'); // history = watch(history, 'history'); // localStorage = watch(localStorage, 'localStorage'); // sessionStorage = watch(sessionStorage, 'sessionStorage'); // chrome = watch(chrome, 'chrome'); require_('./sdk_leg.js'); let input = ''; // 收集数据 process.stdin.on('data', chunk => { input += chunk; }); process.stdin.on('end', async () => { var config_data = JSON.parse(input); var cryptoManager = await CaptchaSDKCorecc(); var encryptData = await buildEncryptedVerifyRequestcc(config_data, cryptoManager); console.log(JSON.stringify(encryptData)); process.exit(0); })