Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

调试别家网站的 JS 的技巧 #73

Open
woodongwong opened this issue Feb 23, 2023 · 0 comments
Open

调试别家网站的 JS 的技巧 #73

woodongwong opened this issue Feb 23, 2023 · 0 comments

Comments

@woodongwong
Copy link
Owner

woodongwong commented Feb 23, 2023

背景

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

正文

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

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

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

完成后,点击“OK”按钮保存规则。然后,在Charles的主界面中,勾选“Enable Map Remote”选项。这样,当我们访问https://example.com/js/script.js时,Charles会自动将其重定向到http://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)

参考:https://developer.mozilla.org/en-US/docs/web/javascript/reference/global_objects/object/defineproperty

Footnotes

  1. 突出的文字使用 Bing AI 编写 2

@woodongwong woodongwong changed the title 调试别家网站的js的技巧 调试别家网站的 JS 的技巧 Feb 23, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant