js 逆向系列05-浏览器和 js 的关系

admin 2024年2月23日19:54:24评论11 views字数 1328阅读4分25秒阅读模式

打开一个浏览器,其基本的功能如下: 

渲染 DOM 

刷新(重新加载) 

执行 js 脚本

浏览器组成

DOM+BOM+js 引擎 = 浏览器

DOM

文档对象模型(DOM): DOM 是 JavaScript 操作网页内容的接口。当网页加载完成后,浏览器会将网页的结构(HTML 文档)解析成一个由节点组成的树形结构,这个结构就是 DOM。JavaScript 可以通过 DOM 提供的接口来操作网页的结构、内容和样式。

BOM

浏览器对象模型(BOM): BOM 是浏览器提供的 JavaScript 对象集合,它使 JavaScript 可以与浏览器窗口进行交互,比如控制浏览器的导航、获取浏览器窗口的大小和位置等。各个浏览器对 BOM的实现可能有所不同。

js 引擎

js 引擎用于解析和执行 JavaScript 代码。它将 JavaScript 代码转换为计算机能够理解和执行的指令的核心部分。JavaScript 引擎的主要任务是将 JavaScript 代码编译成可执行的机器码,并在运行时执行这些代码。

常见的 js 引擎有:

V8 引擎(google chrome)SpiderMonkey(firefox)Chakra(edge)quickjs(ffg)

JavaScript 通过操作 DOM 来实现对网页内容的动态改变和交互,同时通过 BOM 来控制浏览器的行为和提供与浏览器窗口相关的信息和功能。

简单来说 

DOM负责: 

1、html 增删改查api 

2、html 数据格式 

3、渲染 Canvas...

BOM 负责: 

1、浏览器自己实现的一些类包括 location navigator 

2、ssl btoa AES DES...

而 js 引擎其实就是js 解释器

例如 document.createElement("div")

js 逆向系列05-浏览器和 js 的关系

在浏览器的 console 中可以运行,但是本地无法执行,因为本地没有 BOM。


另外,浏览器实现的对象,会添加一个特性,只读,不可写,但是在本地环境中没有 dom,bom,就可以进行重写。

伪造

伪造环境和前面提到的抠取 js 是两种不同的方法,抠取 js 是删除环境的一些代码,一般简单的网站直接抠代码即可,复杂一点的可能就要进行环境伪造。

特点

支持多线程,爬取速度快,而 selenium 需要开启一个新的进程,并且开放权限太少,资源占用较高。

如何伪造

伪造也分为两种,全部伪造和给指定的网站伪造。 

1、全部伪造 

例如 python 中的 jsdom,实现了完整的 DOM 环境,nodedjs 完整实现了 DOM+BOM ,但是都容易被检测。 

特点:费时费力一劳永逸 

2、给指定网站伪造 这就需要知道网站检测了什么内容,可以通过如下方法:

通过调试全局异常捕获本地环境运行看报错

以 navigator 的 ua 头为例,首先在 console 中查看:

js 逆向系列05-浏览器和 js 的关系

到本地环境中,运行

var navigator = {    userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0"}

执行 navigator.userAgent:

js 逆向系列05-浏览器和 js 的关系


原文始发于微信公众号(Crush Sec):js 逆向系列05-浏览器和 js 的关系

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月23日19:54:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   js 逆向系列05-浏览器和 js 的关系https://cn-sec.com/archives/2518800.html

发表评论

匿名网友 填写信息