web逆向-补环境笔记
补环境框架的搭建
- js逆向补环境原理及基础知识 - 爬虫之家
- js反爬检测原理及方法 - 爬虫之家
- 补浏览器环境框架之调试环境搭建 - 爬虫之家
- 浏览器环境基本框架设计及补window环境 - 爬虫之家
- js逆向今日头条“补浏览器环境” - 爬虫之家
node、v8和chrome的关系
经常检测的六大属性,浏览器对象查询:https://developer.mozilla.org/zh-CN/docs/Web
- window
- screen
- history
- navigator
- document
- location
- global (node对象)
优质范文
vjstools自动补环境
参考:
插件地址:https://github.com/cilame/v_jstools
安装步骤:直接下载 .zip文件然后解压,在chrome的扩展程序管理界面加载文件夹,就能安装插件了
使用:
然后生成临时环境
常规补环境
有两种设置代理对象的方式
第一种
1 | function getEnvs(proxyObjs) { |
第二种
1 | window = new Proxy(window, { |
对象的 toString 方法检测
1 | var Object_toString = Object.prototype.toString; |
补环境步骤
观察最后获取了哪一个属性值
比对浏览器和node环境 属性值的差异
替换掉属性值,保持和浏览器一致
1 | document.toString = function toString(){ |
直到两边计算结果一致
一些笔记
- location
node环境为 undefined, 补充:
1 | new JSDOM("<!DOCTYPE html><p>Hello world</p>", {"url": "https://www.zhihu.com/search"}); |
- CanvasRenderingContext2D
CanvasRenderingContext2D:cancas的2d绘图对象,可以使用canvas dom对象的 getContext() 方法并把”2d”作为参数,从而获取对象
1 | // 浏览器 console |
hook 代码:
1 | var Object_toString = Object.prototype.toString; |
- 常规属性
补充:
1 | window._resourceLoader = undefined; |
- 原型链
hook 代码:
1 | var Function_toString = Function.prototype.toString; |
工具:
bestV8,用来运行js的V8环境
1
2说明:https://mp.weixin.qq.com/s/8z_Y421AiRDxGtG762ze6g
python版本:https://github.com/wangluozhe/pybestV8
实战:网洛者第十一题(难度:困难)
http://spider.wangluozhe.com/challenge/11
fiddler 抓包 _signature
定位到 get_signature
函数
进入到函数,其实就是 11.js文件, 发现内部是一个自执行函数 + jsvmp
调用方式则是通过 window.get_signature()
,在浏览器试运行一下,可以正常运行
需要注意,只有在 spider.wangluozhe.com 网站能运行
接下来只需确保在node能正常运行就可以啦(作者也明说了,这题考查的是 history 补环境)
首先使用jsdom模拟window环境,执行安装命令: cnpm install jsdom@20.0.0
1 | const { JSDOM} = require("jsdom"); |
报错1:
显示 get_signature
方法没有赋值到 window对象里去,但是浏览器运行就没有这个问题
搜了一下源码,定位到这里
1 | i = typeof global == nn[Vn] ? window : global |
所以在文件头添加 global = window;
报错2:
还是缺少依赖,cnpm install crypto-js
,安装后补充文件头
1 | const CryptoJS = require('crypto-js'); |
还是报一样的错误,回去看网页源码,注意到这里:
好家伙,原来是赋值在 window里面
直接把整个js文件拿下来,补到源码里面,终于运行成功 ✨✨✨