首先我访问直接被重定向到了 /forbidden.html ,后面发现是前端检测,直接找到重定向的js给他重定向机制修改了,直接删除t函数内容
然后修改配置
后面发现正常访问,但是有时白屏,发现这个网页在自动完成turnstile,直接给turnstile请求拦截了会白屏,所以直接拦截cf的turnstile加载器
解决办法:
1.在控制台的 源代码 页面找到这个js,右键 - 替代内容
用下面修补过的js覆盖
!function(e, t) {
"object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || self).DisableDevtool = t()
}(this, function() {
"use strict";
function o(e) {
return (o = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) {
return typeof e
}
: function(e) {
return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
}
)(e)
}
function i(e, t) {
if (!(e instanceof t))
throw new TypeError("Cannot call a class as a function")
}
function r(e, t) {
for (var n = 0; n < t.length; n++) {
var i = t[n];
i.enumerable = i.enumerable || !1,
i.configurable = !0,
"value"in i && (i.writable = !0),
Object.defineProperty(e, i.key, i)
}
}
function u(e, t, n) {
t && r(e.prototype, t),
n && r(e, n),
Object.defineProperty(e, "prototype", {
writable: !1
})
}
function e(e, t, n) {
t in e ? Object.defineProperty(e, t, {
value: n,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[t] = n
}
function n(e, t) {
if ("function" != typeof t && null !== t)
throw new TypeError("Super expression must either be null or a function");
e.prototype = Object.create(t && t.prototype, {
constructor: {
value: e,
writable: !0,
configurable: !0
}
}),
Object.defineProperty(e, "prototype", {
writable: !1
}),
t && a(e, t)
}
function c(e) {
return (c = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(e) {
return e.__proto__ || Object.getPrototypeOf(e)
}
)(e)
}
function a(e, t) {
return (a = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(e, t) {
return e.__proto__ = t,
e
}
)(e, t)
}
function H(e, t) {
if (t && ("object" == typeof t || "function" == typeof t))
return t;
if (void 0 !== t)
throw new TypeError("Derived constructors may only return object or undefined");
t = e;
if (void 0 === t)
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
return t
}
function l(n) {
var i = function() {
if ("undefined" == typeof Reflect || !Reflect.construct)
return !1;
if (Reflect.construct.sham)
return !1;
if ("function" == typeof Proxy)
return !0;
try {
return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {})),
!0
} catch (e) {
return !1
}
}();
return function() {
var e, t = c(n);
return H(this, i ? (e = c(this).constructor,
Reflect.construct(t, arguments, e)) : t.apply(this, arguments))
}
}
function f(e, t) {
(null == t || t > e.length) && (t = e.length);
for (var n = 0, i = new Array(t); n < t; n++)
i[n] = e[n];
return i
}
function s(e, t) {
var n, i = "undefined" != typeof Symbol && e[Symbol.iterator] || e["@@iterator"];
if (!i) {
if (Array.isArray(e) || (i = function(e, t) {
if (e) {
if ("string" == typeof e)
return f(e, t);
var n = Object.prototype.toString.call(e).slice(8, -1);
return "Map" === (n = "Object" === n && e.constructor ? e.constructor.name : n) || "Set" === n ? Array.from(e) : "Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? f(e, t) : void 0
}
}(e)) || t && e && "number" == typeof e.length)
return i && (e = i),
n = 0,
{
s: t = function() {}
,
n: function() {
return n >= e.length ? {
done: !0
} : {
done: !1,
value: e[n++]
}
},
e: function(e) {
throw e
},
f: t
};
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
}
var o, r = !0, u = !1;
return {
s: function() {
i = i.call(e)
},
n: function() {
var e = i.next();
return r = e.done,
e
},
e: function(e) {
u = !0,
o = e
},
f: function() {
try {
r || null == i.return || i.return()
} finally {
if (u)
throw o
}
}
}
}
function t() {
}
var d = {
md5: "",
ondevtoolopen: t,
ondevtoolclose: null,
url: "",
timeOutUrl: "",
tkName: "ddtk",
interval: 500,
disableMenu: !1,
stopIntervalTime: 5e3,
clearIntervalWhenDevOpenTrigger: !1,
detectors: [0, 1, 3, 4, 5, 6, 7],
clearLog: !1,
disableSelect: !1,
disableCopy: !1,
disableCut: !1,
disablePaste: !1,
ignore: null,
disableIframeParents: !1,
seo: !0,
rewriteHTML: ""
}
, U = ["detectors", "ondevtoolclose", "ignore"];
function q(e) {
var t, n = 0 < arguments.length && void 0 !== e ? e : {};
for (t in d) {
var i = t;
void 0 === n[i] || o(d[i]) !== o(n[i]) && -1 === U.indexOf(i) || (d[i] = n[i])
}
"function" == typeof d.ondevtoolclose && !0 === d.clearIntervalWhenDevOpenTrigger && (d.clearIntervalWhenDevOpenTrigger = !1,
console.warn("【DISABLE-DEVTOOL】clearIntervalWhenDevOpenTrigger 在使用 ondevtoolclose 时无效"))
}
function v() {
return (new Date).getTime()
}
function h(e) {
var t = v();
return e(),
v() - t
}
function z(n, i) {
function e(t) {
return function() {
n && n();
var e = t.apply(void 0, arguments);
return i && i(),
e
}
}
var t = window.alert
, o = window.confirm
, r = window.prompt;
try {
window.alert = e(t),
window.confirm = e(o),
window.prompt = e(r)
} catch (e) {}
}
var p, y, B, b = {
iframe: !1,
pc: !1,
qqBrowser: !1,
firefox: !1,
macos: !1,
edge: !1,
oldEdge: !1,
ie: !1,
iosChrome: !1,
iosEdge: !1,
chrome: !1,
seoBot: !1,
mobile: !1
};
function W() {
function e(e) {
return -1 !== t.indexOf(e)
}
var t = navigator.userAgent.toLowerCase()
, n = function() {
var e = navigator
, t = e.platform
, e = e.maxTouchPoints;
if ("number" == typeof e)
return 1 < e;
if ("string" == typeof t) {
e = t.toLowerCase();
if (/(mac|win)/i.test(e))
return !1;
if (/(android|iphone|ipad|ipod|arch)/i.test(e))
return !0
}
return /(iphone|ipad|ipod|ios|android)/i.test(navigator.userAgent.toLowerCase())
}()
, i = !!window.top && window !== window.top
, o = !n
, r = e("qqbrowser")
, u = e("firefox")
, c = e("macintosh")
, a = e("edge")
, l = a && !e("chrome")
, f = l || e("trident") || e("msie")
, s = e("crios")
, d = e("edgios")
, v = e("chrome") || s
, h = !n && /(googlebot|baiduspider|bingbot|applebot|petalbot|yandexbot|bytespider|chrome\-lighthouse|moto g power)/i.test(t);
Object.assign(b, {
iframe: i,
pc: o,
qqBrowser: r,
firefox: u,
macos: c,
edge: a,
oldEdge: l,
ie: f,
iosChrome: s,
iosEdge: d,
chrome: v,
seoBot: h,
mobile: n
})
}
function M() {
for (var e = function() {
for (var e = {}, t = 0; t < 500; t++)
e["".concat(t)] = "".concat(t);
return e
}(), t = [], n = 0; n < 50; n++)
t.push(e);
return t
}
function w() {
B()
}
var K = ""
, V = !1;
function F() {
var e = d.ignore;
if (e) {
if ("function" == typeof e)
return e();
if (0 !== e.length) {
var t = location.href;
if (K === t)
return V;
K = t;
var n, i = !1, o = s(e);
try {
for (o.s(); !(n = o.n()).done; ) {
var r = n.value;
if ("string" == typeof r) {
if (-1 !== t.indexOf(r)) {
i = !0;
break
}
} else if (r.test(t)) {
i = !0;
break
}
}
} catch (e) {
o.e(e)
} finally {
o.f()
}
return V = i
}
}
}
var X = function() {
return !1
};
function g(n) {
var t, e, i = 74, o = 73, r = 85, u = 83, c = 123, a = b.macos ? function(e, t) {
return e.metaKey && e.altKey && (t === o || t === i)
}
: function(e, t) {
return e.ctrlKey && e.shiftKey && (t === o || t === i)
}
, l = b.macos ? function(e, t) {
return e.metaKey && e.altKey && t === r || e.metaKey && t === u
}
: function(e, t) {
return e.ctrlKey && (t === u || t === r)
}
;
n.addEventListener("keydown", function(e) {
var t = (e = e || n.event).keyCode || e.which;
if (t === c || a(e, t) || l(e, t))
return T(n, e)
}, !0),
t = n,
d.disableMenu && t.addEventListener("contextmenu", function(e) {
if ("touch" !== e.pointerType)
return T(t, e)
}),
e = n,
d.disableSelect && m(e, "selectstart"),
e = n,
d.disableCopy && m(e, "copy"),
e = n,
d.disableCut && m(e, "cut"),
e = n,
d.disablePaste && m(e, "paste")
}
function m(t, e) {
t.addEventListener(e, function(e) {
return T(t, e)
})
}
function T(e, t) {
if (!F() && !X())
return (t = t || e.event).returnValue = !1,
t.preventDefault(),
!1
}
var O, D = !1, S = {};
function N(e) {
S[e] = !1
}
function $() {
for (var e in S)
if (S[e])
return D = !0;
return D = !1
}
(_ = O = O || {})[_.Unknown = -1] = "Unknown",
_[_.RegToString = 0] = "RegToString",
_[_.DefineId = 1] = "DefineId",
_[_.Size = 2] = "Size",
_[_.DateToString = 3] = "DateToString",
_[_.FuncToString = 4] = "FuncToString",
_[_.Debugger = 5] = "Debugger",
_[_.Performance = 6] = "Performance",
_[_.DebugLib = 7] = "DebugLib";
var k = function() {
function n(e) {
var t = e.type
, e = e.enabled
, e = void 0 === e || e;
i(this, n),
this.type = O.Unknown,
this.enabled = !0,
this.type = t,
this.enabled = e,
this.enabled && (t = this,
Q.push(t),
this.init())
}
return u(n, [{
key: "onDevToolOpen",
value: function() {
var e;
console.warn("You don't have permission to use DEVTOOL!【type = ".concat(this.type, "】")),
d.clearIntervalWhenDevOpenTrigger && te(),
window.clearTimeout(J),
d.ondevtoolopen(this.type, t),
e = this.type,
S[e] = !0
}
}, {
key: "init",
value: function() {}
}]),
n
}()
, G = function() {
n(t, k);
var e = l(t);
function t() {
return i(this, t),
e.call(this, {
type: O.DebugLib
})
}
return u(t, [{
key: "init",
value: function() {}
}, {
key: "detect",
value: function() {
var e;
(!0 === (null == (e = null == (e = window.eruda) ? void 0 : e._devTools) ? void 0 : e._isShow) || window._vcOrigConsole && window.document.querySelector("#__vconsole.vc-toggle")) && this.onDevToolOpen()
}
}], [{
key: "isUsing",
value: function() {
return !!window.eruda || !!window._vcOrigConsole
}
}]),
t
}()
, Y = 0
, J = 0
, Q = []
, Z = 0;
function ee(o) {
function e() {
l = !0
}
function t() {
l = !1
}
var n, i, r, u, c, a, l = !1;
function f() {
(a[u] === r ? i : n)()
}
z(e, t),
n = t,
i = e,
void 0 !== (a = document).hidden ? (r = "hidden",
c = "visibilitychange",
u = "visibilityState") : void 0 !== a.mozHidden ? (r = "mozHidden",
c = "mozvisibilitychange",
u = "mozVisibilityState") : void 0 !== a.msHidden ? (r = "msHidden",
c = "msvisibilitychange",
u = "msVisibilityState") : void 0 !== a.webkitHidden && (r = "webkitHidden",
c = "webkitvisibilitychange",
u = "webkitVisibilityState"),
a.removeEventListener(c, f, !1),
a.addEventListener(c, f, !1),
Y = window.setInterval(function() {
if (!(o.isSuspend || l || F())) {
var e, t, n = s(Q);
try {
for (n.s(); !(e = n.n()).done; ) {
var i = e.value;
N(i.type),
i.detect(Z++)
}
} catch (e) {
n.e(e)
} finally {
n.f()
}
w(),
"function" == typeof d.ondevtoolclose && (t = D,
!$() && t && d.ondevtoolclose())
}
}, d.interval),
J = setTimeout(function() {
b.pc || G.isUsing() || te()
}, d.stopIntervalTime)
}
function te() {
window.clearInterval(Y)
}
function ne(e) {
return 'd41d8cd98f00b204e9800998ecf8427e'
}
var _ = function() {
n(t, k);
var e = l(t);
function t() {
return i(this, t),
e.call(this, {
type: O.RegToString,
enabled: b.qqBrowser || b.firefox
})
}
return u(t, [{
key: "init",
value: function() {
var t = this;
this.lastTime = 0,
this.reg = /./,
p(this.reg),
this.reg.toString = function() {
var e;
return b.qqBrowser ? (e = (new Date).getTime(),
t.lastTime && e - t.lastTime < 100 ? t.onDevToolOpen() : t.lastTime = e) : b.firefox && t.onDevToolOpen(),
""
}
}
}, {
key: "detect",
value: function() {
p(this.reg)
}
}]),
t
}()
, ie = function() {
n(t, k);
var e = l(t);
function t() {
return i(this, t),
e.call(this, {
type: O.DefineId
})
}
return u(t, [{
key: "init",
value: function() {
var e = this;
this.div = document.createElement("div"),
this.div.__defineGetter__("id", function() {
e.onDevToolOpen()
}),
Object.defineProperty(this.div, "id", {
get: function() {
e.onDevToolOpen()
}
})
}
}, {
key: "detect",
value: function() {
p(this.div)
}
}]),
t
}()
, oe = function() {
n(t, k);
var e = l(t);
function t() {
return i(this, t),
e.call(this, {
type: O.Size,
enabled: !b.iframe && !b.edge
})
}
return u(t, [{
key: "init",
value: function() {
var e = this;
this.checkWindowSizeUneven(),
window.addEventListener("resize", function() {
setTimeout(function() {
e.checkWindowSizeUneven()
}, 100)
}, !0)
}
}, {
key: "detect",
value: function() {}
}, {
key: "checkWindowSizeUneven",
value: function() {
var e = function() {
if (re(window.devicePixelRatio))
return window.devicePixelRatio;
var e = window.screen;
return !(re(e) || !e.deviceXDPI || !e.logicalXDPI) && e.deviceXDPI / e.logicalXDPI
}();
if (!1 !== e) {
var t = 200 < window.outerWidth - window.innerWidth * e
, e = 300 < window.outerHeight - window.innerHeight * e;
if (t || e)
return this.onDevToolOpen(),
!1;
N(this.type)
}
return !0
}
}]),
t
}();
function re(e) {
return null != e
}
var A, ue = function() {
n(t, k);
var e = l(t);
function t() {
return i(this, t),
e.call(this, {
type: O.DateToString,
enabled: !b.iosChrome && !b.iosEdge
})
}
return u(t, [{
key: "init",
value: function() {
var e = this;
this.count = 0,
this.date = new Date,
this.date.toString = function() {
return e.count++,
""
}
}
}, {
key: "detect",
value: function() {
this.count = 0,
p(this.date),
w(),
2 <= this.count && this.onDevToolOpen()
}
}]),
t
}(), ce = function() {
n(t, k);
var e = l(t);
function t() {
return i(this, t),
e.call(this, {
type: O.FuncToString,
enabled: !b.iosChrome && !b.iosEdge
})
}
return u(t, [{
key: "init",
value: function() {
var e = this;
this.count = 0,
this.func = function() {}
,
this.func.toString = function() {
return e.count++,
""
}
}
}, {
key: "detect",
value: function() {
this.count = 0,
p(this.func),
w(),
2 <= this.count && this.onDevToolOpen()
}
}]),
t
}(), ae = function() {
n(t, k);
var e = l(t);
function t() {
return i(this, t),
e.call(this, {
type: O.Debugger,
enabled: b.iosChrome || b.iosEdge
})
}
return u(t, [{
key: "detect",
value: function() {
var e = v();
100 < v() - e && this.onDevToolOpen()
}
}]),
t
}(), le = function() {
n(t, k);
var e = l(t);
function t() {
return i(this, t),
e.call(this, {
type: O.Performance,
enabled: b.chrome || !b.mobile
})
}
return u(t, [{
key: "init",
value: function() {
this.maxPrintTime = 0,
this.largeObjectArray = M()
}
}, {
key: "detect",
value: function() {
var e = this
, t = h(function() {
y(e.largeObjectArray)
})
, n = h(function() {
p(e.largeObjectArray)
});
if (this.maxPrintTime = Math.max(this.maxPrintTime, n),
w(),
0 === t || 0 === this.maxPrintTime)
return !1;
t > 10 * this.maxPrintTime && this.onDevToolOpen()
}
}]),
t
}(), fe = (e(A = {}, O.RegToString, _),
e(A, O.DefineId, ie),
e(A, O.Size, oe),
e(A, O.DateToString, ue),
e(A, O.FuncToString, ce),
e(A, O.Debugger, ae),
e(A, O.Performance, le),
e(A, O.DebugLib, G),
A);
var R = Object.assign(function(e) {
function t() {
var e = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : "";
return {
success: !e,
reason: e
}
}
var n;
if (R.isRunning)
return t("already running");
if (W(),
n = {
log: function() {},
table: function() {},
clear: function() {}
},
B = b.ie ? (p = function() {
return n.log.apply(n, arguments)
}
,
y = function() {
return n.table.apply(n, arguments)
}
,
function() {
return n.clear()
}
) : (p = n.log,
y = n.table,
n.clear),
q(e),
d.md5 && ne(function(e) {
var t = window.location.search
, n = window.location.hash;
if ("" !== (t = "" === t && "" !== n ? "?".concat(n.split("?")[1]) : t) && void 0 !== t) {
n = new RegExp("(^|&)" + e + "=([^&]*)(&|$)","i"),
e = t.substr(1).match(n);
if (null != e)
return unescape(e[2])
}
return ""
}(d.tkName)) === d.md5)
return t("token passed");
if (d.seo && b.seoBot)
return t("seobot");
R.isRunning = !0,
ee(R);
var i = R
, o = (X = function() {
return i.isSuspend
}
,
window.top)
, r = window.parent;
if (g(window),
d.disableIframeParents && o && r && o !== window) {
for (; r !== o; )
g(r),
r = r.parent;
g(o)
}
return ("all" === d.detectors ? Object.keys(fe) : d.detectors).forEach(function(e) {
new fe[e]
}),
t()
}, {
isRunning: !1,
isSuspend: !1,
md5: ne,
version: "0.3.8",
DetectorType: O,
isDevToolOpened: $
});
_ = function() {
if ("undefined" == typeof window || !window.document)
return null;
var n = document.querySelector("[disable-devtool-auto]");
if (!n)
return null;
var i = ["disable-menu", "disable-select", "disable-copy", "disable-cut", "disable-paste", "clear-log"]
, o = ["interval"]
, r = {};
return ["md5", "url", "tk-name", "detectors"].concat(i, o).forEach(function(e) {
var t = n.getAttribute(e);
null !== t && (-1 !== o.indexOf(e) ? t = parseInt(t) : -1 !== i.indexOf(e) ? t = "false" !== t : "detector" === e && "all" !== t && (t = t.split(" ")),
r[function(e) {
if (-1 === e.indexOf("-"))
return e;
var t = !1;
return e.split("").map(function(e) {
return "-" === e ? (t = !0,
"") : t ? (t = !1,
e.toUpperCase()) : e
}).join("")
}(e)] = t)
}),
r
}();
return _ && R(_),
R
});
然后屏蔽这个请求(我这个已经屏蔽过所以显示的 取消阻止)
刷新,就正常了,不过脚本还是用不了,应该是有识别脚本特征
不过这样子修补过还是有时白屏,而且操作麻烦,需要有一定技术基础
如果说的不对还请指出,本人菜鸟一只