js逆向心路历程(三):xhr的断点技巧,利用函数流

第一个网站

https://translate.google.cn/

前置步骤,不懂的话看回之前的文章https://blog.csdn.net/chaopicrawl/article/details/107935239
在这里插入图片描述在这里插入图片描述
经过分析我们发现只有 tk q (q是翻译的词) 是变换的,而且直接复制url到浏览器是无法访问的,这就说明了这个 tk 必不可少了
正常全局搜索发现有很多tk
在这里插入图片描述
然后 这个 url 又是 xhr 形式的
所以我们可以用 xhr断点技巧去断点
在这里插入图片描述

点击上方的 Sources 然后添加 xhr断点
在这里插入图片描述
再次回到页面翻译就发现断住了,

这里断住的意思是 页面即将要生成 tk (tk现在仍未生成)

在这里插入图片描述
这种 xhr断点方式 查找生成值最好的方式是利用函数流
右侧的 Call Stack
在这里插入图片描述
send这个函数停住 然后后面的函数是 send函数之后的函数是做什么的
我们点击pj 函数中的 a变量,发现 Form Data 数据在里面 (因为这个js文档用了 函数名混淆 所以每隔一段时间访问函数名就会变,但逻辑是一样的)

在这里插入图片描述
我们在这打个断点 (目前为止我们什么都不知道,只知道这里有我们想要的)

再点击下一个函数 ( ZE函数 )又发现了 Form Data 数据在里面,同样的打个断点

在这里插入图片描述

继续下一个函数
在这里插入图片描述
再后面的函数就没有了,当然了settimeout 上面的都点一遍检查后发现的
在这里插入图片描述
( setTimeout 很大概率已经不是我们想要的,所以先排除,如果后面无法找到 tk 的话再回来看 )

接下来,我们取消之前的 xhr断点 然后打开我们刚刚断的三个点
在这里插入图片描述
然后点右上角蓝色图标 在这里插入图片描述(恢复脚本 跟f5 刷新不一样,他是在我们之前停住的 xhr 断点处恢复 所以仍然保持翻译这个动作,因为我们的断点都是 在函数流后面断的 所以自然可以断住了)

发现停在第一个断点处
在这里插入图片描述
但没有后面的 Form Data 数据 ( 没有我们要的 tk ) 所以这个断点排除 然后重新翻译 ( 这里可能第一个断点处恢复后就执行完了,所以到不了后面的断点)

在这里插入图片描述
同样没有我们想要的 所以排除 然后重新翻译
在这里插入图片描述

我们发现 第二个断点有我们想要的 Form Data 数据了 我们就可以开始分析了 ( 经过了之前的所有步骤,在这个函数中突然生成了 Form Data 跟函数里面的代码有关系 )

在这里插入图片描述

这里我们只关注 变量 c 因为有我们想要的 然后发现 c 是上面产生的

c = c.toString() 这个就是将c变成字符串 主要是后面的 YE函数
他是生成我们要的 c 的 所以点击进入 YE函数

在这里插入图片描述
他就在上面 然后这个 YE函数里 return tu(a)
我们要知道 a 是什么
在这里插入图片描述
我们不知道这是个什么东西 没办法 只能 在这打个断点了
在这里插入图片描述
然后再次翻译
发现断住了 且 a 是我们翻译的内容
在这里插入图片描述
接下来就去找 tu 函数
在这里插入图片描述
我们不知道他能 return 什么 那么还是 打个断点看看
在这里插入图片描述
在这里插入图片描述
我们发现 这个 tu 函数 就是返回我们要的 tk 了 那么就可以去构造 js代码了

在这里插入图片描述
已经初步成型了我们要的东西了
最后一步就是看看这个 tu函数 里面 有什么我们是缺少的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们缺少这三样东西 最后面的 su 这个多次运行后发现其实都是一样的 所以我们可以照搬 ,至于上面那两个函数 其实就是在 tu函数上面的 ( 因为是独立的函数,所以我们可以照搬 )

最后成型的 js代码

 YE = function(a) {
    a = a.Kb("q").join("");
    return tu(a)
}
ru = function(a, b) {
    for (var c = 0; c < b.length - 2; c += 3) {
        var d = b.charAt(c + 2);
        d = "a" <= d ? d.charCodeAt(0) - 87 : Number(d);
        d = "+" == b.charAt(c + 1) ? a >>> d : a << d;
        a = "+" == b.charAt(c) ? a + d & 4294967295 : a ^ d
    }
    return a
}
var qu = function(a) {
    return function() {
        return a
    }
}
su = "443895.3105296473"
gettk = function(a) {
    if (null !== su)
        var b = su;
    else {
        b = qu(String.fromCharCode(84));
        var c = qu(String.fromCharCode(75));
        b = [b(), b()];
        b[1] = c();
        b = (su = window[b.join(c())] || "") || ""
    }
    var d = qu(String.fromCharCode(116));
    c = qu(String.fromCharCode(107));
    d = [d(), d()];
    d[1] = c();
    c = "&" + d.join("") + "=";
    d = b.split(".");
    b = Number(d[0]) || 0;
    for (var e = [], f = 0, g = 0; g < a.length; g++) {
        var h = a.charCodeAt(g);
        128 > h ? e[f++] = h : (2048 > h ? e[f++] = h >> 6 | 192 : (55296 == (h & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (h = 65536 + ((h & 1023) << 10) + (a.charCodeAt(++g) & 1023),
        e[f++] = h >> 18 | 240,
        e[f++] = h >> 12 & 63 | 128) : e[f++] = h >> 12 | 224,
        e[f++] = h >> 6 & 63 | 128),
        e[f++] = h & 63 | 128)
    }
    a = b;
    for (f = 0; f < e.length; f++)
        a += e[f],
        a = ru(a, "+-a^+6");
    a = ru(a, "+-3^+b+-f");
    a ^= Number(d[1]) || 0;
    0 > a && (a = (a & 2147483647) + 2147483648);
    a %= 1E6;
    return c + (a.toString() + "." + (a ^ b))
}

在这里插入图片描述
最后运行结果

最后就是检测了 ( Console 台检测 )

在这里插入图片描述

第二个网站

https://dynamic2.scrape.center/page/1
在上篇文章中有介绍如何 js 逆向他的 Form Data数据https://blog.csdn.net/chaopicrawl/article/details/107935239 这里只介绍怎么利用 xhr断点技巧去找到我们想要的

上篇文章中我们知道了 在哪个包,而且我们需要的是token
在这里插入图片描述
那么同样的 在 Source中 填写 token 增加xhr断点
在这里插入图片描述
再次刷新页面发现断住了
在这里插入图片描述
同样也是找 函数流 ( Call Stack )
一个一个找
最后发现 在第二个 ( anonymous ) 函数中找到了 token
在这里插入图片描述
然后根据上篇文章就能得到我们想要的了 。

总结:
  1. 发现 获取数据的 url 是 xhr 的 我们大可以利用 xhr断点技巧去找我们要的 ( 如果全局搜索一下子就能确定的话 那么其实没有必要用这种方法 ) 适合 全局搜索无法搜索的时候
  2. 多利用 Call Stack ( 函数流,观察数据产生的方式,还是地方然后进行断点,一个一个排除后最终发现我们要的函数 )
  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Resolver error: Error: XHR failed 是一个常见的错误信息,通常在进行网络请求时出现。它表示在发送 XMLHttpRequest(XHR)请求时发生了错误。 XHR 是一种用于在浏览器和服务器之间进行数据交换的技术,通常用于异步加载数据或与服务器进行通信。当出现 Resolver error: Error: XHR failed 错误时,可能有以下几个原因: 1. 网络连接问题:可能是由于网络连接不稳定或中断导致的。请检查您的网络连接是否正常,并尝试重新加载页面或重新发送请求。 2. 跨域请求问题:浏览器有一种安全机制,称为同源策略,它限制了从一个源加载的文档或脚本如何与来自另一个源的资源进行交互。如果您的请求涉及跨域操作(即从一个域名向另一个域名发送请求),并且服务器没有正确配置跨域资源共享(CORS),则会导致此错误。 3. 服务器错误:可能是由于服务器端的问题导致的。请检查服务器是否正常运行,并确保服务器端代码没有错误。 解决此错误的方法包括: 1. 检查网络连接:确保您的网络连接正常,并尝试重新加载页面或重新发送请求。 2. 检查跨域请求配置:如果涉及到跨域请求,请确保服务器端已正确配置跨域资源共享(CORS)。 3. 检查服务器端代码:如果问题是由服务器端引起的,请检查服务器端代码是否正确,并确保服务器正常运行。 4. 使用其他网络请求方式:如果使用的是 XMLHttpRequest(XHR),可以尝试使用其他网络请求方式,如 Fetch API 或 axios 等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值