Web Spider基础 JS逆向 手动补环境(一) 文章目录前言一、资源推荐二、vscode 本地调试三、补环境注意事项四、代码如何被检测五、小知识扩展前言目的在补环境框架中直接运行某JS文件不修改原JS文件难点如何找到缺少的环境如何很好的实现环境代码注意只要能返回正常的数据补什么环境或数据不重要提示以下是本篇文章正文内容下面案例可供参考一、资源推荐Web 开发技术 官方https://developer.mozilla.org/zh-CN/vm2 官方地址https://www.npmjs.com/package/vm2Documenthttps://developer.mozilla.org/zh-CN/docs/Web/API/Document/referrer二、vscode 本地调试由于V8环境不能调试JS代码node环境可以调试(但有一些检测需要安装vm2来执行)vm2网址https://www.npmjs.com/package/vm2命令安装npm install vm2vm2是一个纯净的V8环境1、读取JS代码使用vm2来执行案例var fsrequire(fs);const{VM}require(vm2);constvmnewVM();var codefs.readFileSync(encode.js,utf-8);vm.run(code);2、vm2 vscode浏览器无环境联调// vm2 官方地址https://www.npmjs.com/package/vm2var fsrequire(fs);// 导入读取文件模块var{VM,VMScript}require(vm2);// VMScipt是用于调试的对象var encrypt_code_path./src/js_encrypt.js;// 加密的代码 路径var window_code_path./src/js_window.js;// 补充环境的代码 路径var vmnewVM();// 参数1加密代码和补充环境代码的文件读取对象 参数2正在debugger的名称var scriptnewVMScript(fs.readFileSync(window_code_path)fs.readFileSync(encrypt_code_path),testing js code);debugger;vm.run(script);debugger;3、vscode 配置文件{type:node,request:launch,name:testing js code 启动程序,// 本地运行skipFiles:[node_internals/**],program:${workspaceFolder}\\src\\js_runs.js// 需要运行的代码文件},{type:node,request:launch,name:debugger testing js code ,// 用于与浏览器联调skipFiles:[node_internals/**],runtimeExecutable:node-inspect,// 需要安装模块node-inspectprogram:${workspaceFolder}\\src\\js_runs.js// 需要运行的代码文件},程序启动后会跟下图标红处一致我们可以打开任意浏览器按F12进入开发者模式可以发现一个小绿盒子点击就能进入纯净的无环境V8浏览器调试工具并且本地的代码也会嵌入到浏览器调试当中三、补环境注意事项注意事项1、小知识检测node环境process属性在浏览器环境和V8环境都没有只有node环境有可以delete process 2、小知识canvas指纹检测不是非常严格却一个两个问题不大3、大部分比较标准的代码会把环境检测代码写在一块可以通过控制台打印(插桩)分析到底检测了哪些环境4、本地代码调试遇见bug不显示哪一行报错可通过编程猫调试工具加载代码来确认会停在出错的哪一行5、node环境没有window this有window global6、总结手动补环境遇见未 知属性可以去Web开发官方文档搜索了解该属性的作用以及返回的东西四、代码如何被检测如何被检测1、tostring2、基于原型链的检测3、document4、bom浏览器环境5、navigator用户代理(浏览器)的状态和标识6、location浏览器连接到的对象的位置7、screen屏幕窗口信息8、window全局属性、方法、控制浏览器窗口相关的属性、方法proxy的作用帮助我们对某一个对象的操作进行拦截五、小知识扩展自行研究**补环境框架jsdom env-js **