编写js脚本实现某文档站破解VIP限制

前言

博客发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

起因

事情的起因是因为查看某文档站的文档时,发现之前的验证码方式改成跳转到某星球验证了,于是就想着写个脚本来破解这个限制。

实现思路

网站 ZG9jLmlvY29kZXIuY24=
首先F12打开开发者工具,找到app.js,查看编译后的源码
搜索关键字 找到关键代码处

刷新网页 断点后发现html上的dom节点也被替换删除了,看到断点上面有个

1
$(".content-wrapper").html('<div style="color: red;">仅 VIP 可见!</div>')

再往上看

发现他会判断Cookie,比对Cookie内容,比对后还会创建定时器进行接口验证
到了这里开始尝试编写脚本
开始的思路是将jq给拦截掉 让他方法失效
新建一个油猴脚本

1
2
3
 window.$ = function () {
console.log("jQuery is disabled on this page.");
};

然后拦截定时器,因为他会每隔一段时间就会调用接口验证

1
2
3
4
5
6
7
8
9
 // 保存原始的setTimeout引用
const originalSetTimeout = window.setTimeout;

// 重写setTimeout函数
window.setTimeout = function (callback, delay) {
return;
// 这里我直接就return了,也可以在这里做一些其他的事情
return originalSetTimeout(callback, delay);
};

@match 为匹配的网站所以填入对应的网站
这里我用xxx.cn代替了,表示你要填入的网站 *号代表通配符

1
//@match        https://*.xxx.cn/*

至此解决了该网站大部分页面的限制,但是还有一些页面是通过跳转到某星球验证的(经过测试是页面刷新会有弹窗,但是通过其他页面跳转没有弹窗),继续往上分析
在Cookie操作处打上断点,查看设置的Cookie
然后发现设置Cookie后可以绕过后续的一些验证,于是写一个设置Cookie的函数

1
2
3
4
5
6
7
8
9
10
11
 function setCookies(cookieName, cookieValue, expirationDays) {
deleteCookie(cookieName);
const date = new Date();
date.setTime(date.getTime() + (expirationDays * 24 * 60 * 60 * 1000));
const expires = "expires=" + date.toUTCString();
document.cookie = cookieName + "=" + cookieValue + ";" + expires + ";path=/";
}

function deleteCookie(name) {
document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';
}

然后再往上分析和往下一点分析 发现了判断了一些关键的Cookie
将这些Cookie设置上去就可以绕过验证了

1
2
3
4
setCookies("username", "admin", 7);
setCookies("88974ed8-6aff-48ab-a7d1-4af5ffea88bb", "admin", 7);
setCookies("repository", "https://gitee.com/zhijiantianya/yudao-cloud", 7);
setCookies("irV8jfnifwlj9o0Y20200815", "iGL4OvQbzTfToq5m20200815", 7);

完整代码
xxx.cn代表你要填入的网站

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
    // ==UserScript==
// @name New Userscript
// @namespace http://tampermonkey.net/
// @version 1.0.2
// @description try to take over the world!
// @author Star
// @match https://*.xxx.cn/*
// @grant none
// @run-at document-start
// ==/UserScript==

(function () {
'use strict';

// Function to set cookies
function setCookies(cookieName, cookieValue, expirationDays) {
deleteCookie(cookieName);
const date = new Date();
date.setTime(date.getTime() + (expirationDays * 24 * 60 * 60 * 1000));
const expires = "expires=" + date.toUTCString();
document.cookie = cookieName + "=" + cookieValue + ";" + expires + ";path=/";
}

function deleteCookie(name) {
document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';
}

// Set cookies when user visits the specific page
setCookies("username", "admin", 7);
setCookies("88974ed8-6aff-48ab-a7d1-4af5ffea88bb", "admin", 7);
setCookies("repository", "https://gitee.com/zhijiantianya/yudao-cloud", 7);
setCookies("irV8jfnifwlj9o0Y20200815", "iGL4OvQbzTfToq5m20200815", 7);

console.log("%c 拦截注入成功 | Powered by Star", "color:#fff;background:linear-gradient(270deg,#986fee,#8695e6,#68b7dd,#18d7d3);padding:8px 15px;border-radius:15px");

window.$ = function () {
console.log("jQuery is disabled on this page.");
};

window.jQuery = window.$; // Ensure jQuery functions correctly (assuming they don't rely on $)
// 保存原始的setTimeout引用
const originalSetTimeout = window.setTimeout;

// 重写setTimeout函数
window.setTimeout = function (callback, delay) {
return;
// 在这里添加你的拦截逻辑
return originalSetTimeout(callback, delay);
};
// 保存原始的 location 对象
const originalLocation = Object.assign({}, location);
//下面这部分报错 暂时不用理会。
// 重写 location.href
Object.defineProperty(window, 'location', {
get: function () {
return originalLocation;
},
set: function (value) {
// 在这里添加你的拦截逻辑
return;
originalLocation.href = value;
}
});

})();