2025-04-14
逆向地址:aHR0cHM6Ly9xLjEwanFrYS5jb20uY24v
请求接口:aHR0cHM6Ly9xLjEwanFrYS5jb20uY24vaW5kZXgvaW5kZXgvYm9hcmQvYWxsL2ZpZWxkL3pkZi9vcmRlci9kZXNjL3BhZ2UvMy9hamF4LzEv
请求参数中没有加密,加密的数据是cookie的值
那么我们直接hook cookie
cookie_cache = document.cookie;
Object.defineProperty(document, “cookie”, {
get: function () {
console.log(cookie_cache);
// 在获取document.cookie时,执行你想要的操作
return cookie_cache; // 返回原始的cookie值
},
set: function(value) {
// 在设置document.cookie时,执行你想要的操作
if(value.includes(‘v=’)){
debugger;
}
}
});
重新刷新网页,注入hook的脚本,然后翻到下一页,这时候发现,断点断住了
然后我们往前面跟栈,找到cookie生成的位置.发现其实就是:
var n = rt.update();
这一行代码生成的.我们通过补环境来完成,我们进去这个函数中,将其导出在window对象上,然后调用这个方法。根据报错,将其他环境补上
自动吐环境的原理就是,利用Proxy代理来代理’window’, ‘document’, ‘location’, ‘navigator’, ‘history’,'screen’等这些对象,然后当js代码中用到其中的一些属性的时候,
这个补环境需要注意的点就是:首先我们需要将代码给跑通,这是最基本的点,
举个例子,当环境中报错:
S[R]++,
当这个地方的代码报错的时候,我们就要将浏览器和本地node都在这个地方下个端点,然后此时发现,浏览器环境中的S和本地node环境中的S不一致,那么这个时候说明了本地的S变量的值出现了问题,那么我们就去浏览器中,看S的生成,直接在文件中搜索:S =
然后重新刷新浏览器,很容易可以知道,其实S是通过
S = new qn([a, a, a, a, n, n, n, e, t, t, t, t, t, t, t, a, t, n]),
这一行代码生成的,那么这个时候,我们就要分析,为什么本地没有走这一行代码,这个时候,我们在浏览器这一行中下一个断点,然后从新刷新浏览器,当代码在这一行断住之后
我们就往前面跟栈,然后我们可以在前面的每一个栈都打下断点,并且对比我们本地运行的代码的位置,我们也打上断点,在往前跟栈的过程中,我们发现了如下的代码:
try {
c()
} catch (n) {
return n
}
那么就很有可能是因为本地缺少了环境,导致运行c函数出现了异常,然后就出错了,这个时候我们就跟到c函数当中去,一步一步跟栈,发现本地在执行完Zn.Init()代码的时候报错了,把这个异常给抛出了,那么这个时候我们就跟到这个函数当中去,发现本地在执行else if (l[at(e[66])][at(e[67], a[68])])的时候报错了,这时候我们就定位到了问题出现的地方,然后我们直接对比本地和浏览器这一行代码的执行,发现其实就是对bom对象取值,
document[“documentElement”][“addBehavior”]
那么我们直接在js中将环境补起来即可.
最后成功地出结果