调试别家网站的 JS 的技巧

背景

我们有时需要分析和抓取别人的网站。有时候,我们也需要调试别人的网站上的 JS 代码,找出其中的核心代码,比如接口加密算法。但是,直接在浏览器上查看和修改别人的 JS 代码是很困难的,因为它们通常被压缩、混淆或者加密过。那么,有没有什么方法可以让我们更方便地调试别家网站的 JS 代码呢?[^1]

正文

  1. 使用 Charlse 工具将远程 JS 映射成本地的,这样就可以在本地修改远程 JS 代码,接下来有请 Bing AI 来介绍一下如何配置:

Charles工具是一款可以用来查看和修改HTTP和HTTPS请求的代理软件。它可以实现Map Remote功能,即将指定的网络请求重定向到另一个网址请求地址。这样,我们就可以将远程js文件映射成本地的文件,方便调试和开发。

要使用Map Remote功能,我们需要先在Charles的菜单中选择“Tools”->”Map Remote”,然后点击“Add”按钮,添加一条映射规则。在弹出的对话框中,我们需要填写以下信息:

  • Map From:这里填写要重定向的原始请求地址,比如example.com/js/script.js
  • Map To:这里填写要映射的目标请求地址,比如localhost:8080/js/script.js
  • Protocol:这里选择要使用的协议,比如HTTP或HTTPS
  • Port:这里填写要使用的端口号,比如80或443

完成后,点击“OK”按钮保存规则。然后,在Charles的主界面中,勾选“Enable Map Remote”选项。这样,当我们访问example.com/js/script.js 时,Charles会自动将其重定向到localhost:8080/js/script.js ,并返回本地文件的内容。

注意:如果要使用HTTPS协议,请确保在Charles设置中启用SSL代理,并安装相应的证书。

[^1]

  1. 使用匿名函数的方式获取参数以及返回值
{
    a: fa(x),
    b: fb()
}
{
    a: (function (x) {
        const res = fa(x)
        console.log(x, res)
        return res
    })(x),
    b: fb()
}
  1. 使用 Object.defineProperty,并定义 get 和 set 方法,来监听 Object 的属性变化

// 假如我们想知道 sign 的值是哪段程序赋值上去的,可以在 set 中打印调用栈
const o = {
    sign: 'abc',
    key: '123'
}

let bValue = o.sign;
Object.defineProperty(o, 'sign', {
    set (value) {
        console.log(value)
        console.trace()  // 使用 console.trace 打印调用栈
        bValue = value
    },

    get () {
        return bValue
    }
})

n(o)

参考:developer.mozilla.org/en-US/docs/w...

原文:github.com/woodongwong/notes/issue...

[^1]: 突出的文字使用 Bing AI 编写

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 1

不错,涨姿势了

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!