本文章主要分享爬虫的js方面的知识和特别的知识点 文末有惊喜,最近Chat GPT很火,有想体验的小伙伴文末提供一个GPT体验地址。如果想经常使用可以加入我的知识星球 星球链接地址知识星球
基础部分
js基础知识点
关于js中一些很基础的东西不在去详细介绍了,有兴趣的可以去js教学网 去学习了解(后面的补环境也需要用到这个网站),本文讲解一写比较重要和特殊的知识点。
原型链
在js中不管是一个实例还是一个原型都存在原型链这个说法(其实就是浏览器中各种对象之间的继承关系,不管是原型还是实例最终都会指向null)
实例访问原型链的方法 实例.__proto__ 访问到第一个原型对象,可以通过不断地.__proto__ 访问原型对象直到最后为null为止。
示例 document 访问原型链的过程
document.__proto__ //HTMLDocument
document.__proto__.__proto__ //Document
document.__proto__.__proto__.__proto__ //Node
document.__proto__.__proto__.__proto__.__proto__ //EventTarget
document.__proto__.__proto__.__proto__.__proto__.__proto__ // EventTarget 下面的方法 __proto__ 指向为null
原型访问原型链的方法 原型.prototype 访问到第一个原型对象,然后可以通过.__proto__访问原型链。
//例如Element 原型对象访问原型链的方法 并且能看到该原型链下所包含的方法
Element.prototype //访问到 第一个原型对象 Node
Element.prototype.__proto__ //访问到 第二个原型对象 EventTarget
Element.prototype.__proto__.__proto__ //访问到 第三个个原型对象 Object
Element.prototype.__proto__.__proto__.__proto__ // 查看Object 下拥有的方法 并且在这看到 他的__proto指向null
特殊的方法的调用
//函数的定义
关键词 function 函数名(参数){
函数内部处理
}
(function(){})--匿名方法 可以直接用变量接受
自执行方法--在脚本文件一被加载就会执行。
定义方式:在匿名方法后面加个()即(function(){})()
arguments 获得函数参数数组
其他
true+"" 返回 true 任何类型和文本类型相加返回的是文本类型 除文本类型以外的任何类型和整数相加返回的是整数类型
工具的介绍(浏览器)
浏览器是js逆向中经常用到的工具,笔者在这里建议使用360极速浏览器进行js逆向(360极速浏览器是基于v8引擎开发的和谷歌使用同一款引擎)。
浏览器的布局设置---保留日志和停用缓存一定要勾上
笔者的浏览器布局
js调试基础
js中的断点分为以下几种断点:条件断点、页面元素断点 、dom断点、事件断点(XHR 断点)
反调试基础
常见的反调试:格式化检测、无限debugger、禁止控制台调试、
高级部分
如何补环境
将扣下来的代码,在node环境中运行,缺啥补啥。
两个原则要么删要么补。
删 --删除的代码没有参与最后的计算
补 --参与了本地计算或者提交到服务器
vmp原理讲解
浏览器的vmp一般是基于栈式虚拟机,找到总栈,对他进行输出能很快的定位到一些很
vmp 基于栈式虚拟机 或 寄存器虚拟机(有栈)
性能更快 可以简化复杂语法
需要找到总栈、op、局部栈
在vmp中不容忽视的关键词:eval、apply、call
还有两个不容忽视的API charCodeAt()、String.fromCharCode()
js逆向无他为手熟尔,多调多练。