js补环境之proxy
1. 补环境是什么
浏览器环境: 是指 JS代码在浏览器中的运行时环境,它包括V8自动构建的对象(即ECMAScript的内容,如Date、Array),浏览器(内置)传递给V8的操作DOM和BOM的对象(如document、navigator);
Node环境:是基于V8引擎的Js运行时环境,它包括V8与其自己的内置API,如fs,http,path;
Node环境 与 浏览器环境 的异同点可以简单概括如图:
简而言之,就是补浏览器有而Node没有的环境,即BOM和DOM的对象。
2. 为什么要补环境
由于浏览器和Node的差异,导致部分JS代码在浏览器中能正常运行,但在Node无法正常运行。如:
1 | function decrypt() { |
所以,我们需要补浏览器的环境,是扣出的js能在node的环境中正常运行。
一般补浏览器BOM和DOM里面的:window,document,history,location,navigator,screen,setTime,setInterval等。
对于反爬弱的网站,一般只需要补第一层,如:
1 | var window = this; |
对于风控严格的网站,不仅要补最外一层,还要补里面的属性对象,如:
1 | Document = function (){} |
这里补了document对象里面的creatElement,以及其中的方法onwheel和getContext,相当于补了三层环境。
3. 如何补环境
3.1 基础
首先,通过分析js代码,找到加密函数所需要的代码,然后复制到本地js文件,
然后把js代码放到js调试工具运行(如vscode),运行后提示缺啥补啥。
3.2 proxy
对于简单网站,vscode够用,对于略微复杂一点的就不太行了。
proxy补环境优点:
- vscode缺点是一次运行一个,若缺少的东西多,一个一个补会非常麻烦,而proxy会一次打印缺少的东西,方便很多。
- 对于一些检测点,vscode无法识别,proxy可以发现检测点
- 开发js逆向补环境框架需要,每个网站的反爬手段是不一样的,在这种情况下,写一个通用的框架是最好的选择,必须要用proxy
proxy:
Proxy 可以对目标对象的读取、函数调用等操作进行拦截,然后进行操作处理。它不直接操作对象,而是像代理模式,对对象的代理对象进行操作,同时,可以添加一些需要的额外操作。
语法
1 | const p = new Proxy(target,handler) |
- target: 被代理的对象
- handller: 是一个对象用来处理target的行为
1 | var target = {url:'pychong.com'} |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 胡侃有料的博客!
评论