diff --git a/assets/js/selecting.js b/assets/js/selecting.js index c56d2d0ff7..8a823c3153 100644 --- a/assets/js/selecting.js +++ b/assets/js/selecting.js @@ -5,49 +5,149 @@ SPDX-License-Identifier: MIT */ -// CVer:NVer map for U/E/J regions -function sslothable(s, n) { - if - ( - (s == 4 && n == 37) || - (s == 5 && n == 38) || - (s == 6 && n == 39) || - (s == 7 && n == 40) || - (s == 8 && n == 41) || - (s == 9 && n == 42) || - (s == 10 && n == 43) || - (s == 11 && n == 43) || - (s == 12 && n == 44) || - (s == 13 && n == 45) - ) { - return true; - } - else { - return false; +// Soundhax +// 1.0-11.3, all regions, all consoles +function can_soundhax(major, minor, native, region, model) { + let do_redirect = false; + if(major <= 10) do_redirect = true; + else if(major == 11 && minor <= 3) do_redirect = true; + + if(do_redirect) { + window.location.href = "installing-boot9strap-(soundhax)"; + return true; } + return false; } -// CVer:NVer map for KOR region +// SSLoth +// U/E/J has different version table than KOR // KOR/CHN/TWN Old 3DS browser (spider) 1.7630 (v10240, shipped with 11.1~11.8) isn't supported by browserhax // CHN/TWN isn't validated for now as those cannot exploit atm -function sslothablekor(s, n, o) { - if - ( - (!o && s == 4 && n == 33) || - (!o && s == 5 && n == 34) || - (!o && s == 6 && n == 35) || - (!o && s == 7 && n == 35) || - (!o && s == 8 && n == 35) || - (s == 9 && n == 36) || - (s == 10 && n == 37) || - (s == 12 && n == 38) || - (s == 13 && n == 39) - ) { - return true; +function can_ssloth(major, minor, native, region, model) { + let do_redirect = false; + if(major == 11) { + if(["U", "E", "J"].includes(region)) { + if + ( + (minor == 4 && native == 37) || + (minor == 5 && native == 38) || + (minor == 6 && native == 39) || + (minor == 7 && native == 40) || + (minor == 8 && native == 41) || + (minor == 9 && native == 42) || + (minor == 10 && native == 43) || + (minor == 11 && native == 43) || + (minor == 12 && native == 44) || + (minor == 13 && native == 45) + ) { + do_redirect = true; + } + } else if (region == "K") { + if + ( + (!model && minor == 4 && native == 33) || + (!model && minor == 5 && native == 34) || + (!model && minor == 6 && native == 35) || + (!model && minor == 7 && native == 35) || + (!model && minor == 8 && native == 35) || + (minor == 9 && native == 36) || + (minor == 10 && native == 37) || + (minor == 12 && native == 38) || + (minor == 13 && native == 39) + ) { + do_redirect = true; + } + } } - else { - return false; + + if(do_redirect) { + window.location.href = "installing-boot9strap-(ssloth-browser)"; + return true; } + return false; +} + +// safecerthax +// O3DS only, all regions +// Works on 1.0 to 11.14 +// Soundhax and SSLoth should be validated before this +function can_safecerthax(major, minor, native, region, model) { + let do_redirect = false; + if (model == 0) { + if (major <= 10) do_redirect = true; + else if (major == 11 && minor <= 14) do_redirect = true; + } + + if(do_redirect) { + window.location.href = "installing-boot9strap-(safecerthax)"; + return true; + } + return false; +} + +// super-skaterhax +// EUR/JPN: 11.17 only, USA has no working otherapp on 11.17 +// KOR: 11.16 only, KOR does not have 11.17 +// CHN/TWN has no N3DS +function can_superskaterhax(major, minor, native, region, model) { + let do_redirect_sysupdate = false; + let do_redirect = false; + // N3DS only + if(model == 1) { + if (major == 11) { + if (["E", "J"].includes(region)) { + if (minor == 17) do_redirect = true; + // Since this exploit works on latest, + // if no other exploit exists for that version, update + else do_redirect_sysupdate = true; + } + else if(region == "K") { + if (minor == 16) do_redirect = true; + // Since this exploit works on latest, + // if no other exploit exists for that version, update + else do_redirect_sysupdate = true; + } + } + } + + if (do_redirect_sysupdate) { + window.location.href = "updating-firmware-(new-3ds)"; + return true; + } + else if (do_redirect) { + window.location.href = "homebrew-launcher-(super-skaterhax)"; + return true; + } + return false; +} + +// Seedminer, U/E/J/K region +// only 11.16 can run Seedminer +function can_seedminer(major, minor, native, region, model) { + let do_redirect_sysupdate = false; + let do_redirect_twn = false; + let do_redirect = false; + // 11.16 should always do seedminer on 3DS + if (major == 11 && minor == 16) { + if (["U", "E", "J", "K"].includes(region)) do_redirect = true; + else if (region == "T") do_redirect_twn = true; + } + // KOR O3DS on any version should update to 11.16 + else if (model == 0 && region == "K") do_redirect_sysupdate = true; + + if (do_redirect_sysupdate) { + window.location.href = "updating-firmware-(kor-twn)"; + return true; + } + else if (do_redirect_twn) { + window.location.href = "seedminer-(twn)"; + return true; + } + else if (do_redirect) { + window.location.href = "seedminer"; + return true; + } + return false; } /* @@ -58,20 +158,22 @@ function sslothablekor(s, n, o) { General exploits are as follows: - 1.0 - 11.3 - - Soundhax, compatible in all regions + - Soundhax, compatible in all regions, all models - 11.4 - 11.13 with matching NVer for each version: - SSLoth-Browser, doesn't work on cart-updated FW - O3DS & 11.4 - 11.14 & any cart-updated FW between said version: - safecerthax, compatible in all regions, O3DS only - This way O3DS still gets an easy way to install something if browser isn't functional - - 11.15 - 11.16: + - N3DS & 11.14 - 11.15 (EUR / JPN) + - Update and do 11.17 guide + - O3DS & 11.15: + - Not implemented in this guide + - 11.16 (KOR is O3DS only): - Seedminer - - N3DS has a somewhat better page below - - N3DS & 11.16: - - super-skaterhax, compatible with 11.15 - 11.16 but browser itself doesn't work on 11.15 - - This way N3DS users don't have to think too much about the slightly long Seedminer steps - - 11.17: - - unhackable + - KOR N3DS 11.16, N3DS & 11.17 (EUR / JPN): + - super-skaterhax (currently not working on USA) + - O3DS & 11.17: + - Unhackable */ function redirect() { var major = document.getElementById("major"); @@ -85,107 +187,28 @@ function redirect() { document.getElementById("result_methodUnavailable").style.display = "none"; if ((!isN3DS) && (!isO3DS)) { document.getElementById("result_noneSelected").style.display = "block"; + return; } else if (major.value == 0) { document.getElementById("result_invalidVersion").style.display = "block"; + return; } - // only do things if major isnt 0, which would be invalid - else { - // USA/EUR/JPN things - if (["U", "E", "J"].includes(region.value)) { - // soundhax works on all consoles for 1.0-11.3 - if (major.value < 11 || minor.value < 4) { - window.location.href = "installing-boot9strap-(soundhax)"; - } - // check for versions that are not cartupdated, cartupdated consoles cannot access the browser, see troubleshooting for solution - else if (sslothable(minor.value, nver.value)) { - window.location.href = "installing-boot9strap-(ssloth-browser)"; - } - else if (minor.value < 15 && isO3DS) { - window.location.href = "installing-boot9strap-(safecerthax)"; - } - else if(isN3DS && region.value != "U" && (minor.value == 14 || minor.value == 15)) { - window.location.href = "updating-firmware-(new-3ds)"; - } - // seedminer does still work for the latest version on E/U/J/K/T/C, but can only be chained on E/U/J/K/T - else if (major.value == 11 && minor.value == 16) { - window.location.href = "seedminer"; - } - else if (major.value == 11 && minor.value == 17 && isN3DS && region.value != "U") { - window.location.href = "homebrew-launcher-(super-skaterhax)"; - } - else { - document.getElementById("result_methodUnavailable").style.display = "block"; - } - } - //korea stuff - else if (region.value === "K") { - // soundhax works on all consoles for 1.0-11.3 - if (major.value < 11 || minor.value < 4) { - window.location.href = "installing-boot9strap-(soundhax)"; - } - // check for versions that are not cartupdated, cartupdated consoles cannot access the browser, see troubleshooting for solution - else if (sslothablekor(minor.value, nver.value, isO3DS)) { - window.location.href = "installing-boot9strap-(ssloth-browser)"; - } - else if (minor.value < 15 && isO3DS) { - window.location.href = "installing-boot9strap-(safecerthax)"; - } - else if(minor.value == 15) { - window.location.href = "updating-firmware-(kor-twn)"; - } - // seedminer does still work for the latest version on E/U/J/K/T/C, but can only be chained on E/U/J/K/T - else if (major.value == 11 && minor.value == 16) { - window.location.href = "seedminer"; - } - else { - document.getElementById("result_methodUnavailable").style.display = "block"; - } - } - //taiwan stuff - else if (region.value === "T") { - // soundhax works on all consoles for 1.0-11.3 - if (major.value < 11 || minor.value < 4) { - window.location.href = "installing-boot9strap-(soundhax)"; - } - // check for versions that are not cartupdated, cartupdated consoles cannot access the browser, see troubleshooting for solution - // OTHERAPP BROKEN FOR TWN/CHN 11.4+ ATM - /* - else if (sslothable(minor.value, nver.value)) { - window.location.href = "installing-boot9strap-(ssloth-browser)"; - } - */ - else if (minor.value < 15 && isO3DS) { - window.location.href = "installing-boot9strap-(safecerthax)"; - } - else if (major.value == 11 && minor.value == 16) { //seedminer does still work for the latest version on E/U/J/K/T/C, but can only be chained on E/U/J/K/T - window.location.href = "seedminer-(twn)"; - } - else { - document.getElementById("result_methodUnavailable").style.display = "block"; - } - } - // chn stuff - else if (region.value === "C") { - // soundhax works on all consoles for 1.0-11.3 - if (major.value < 11 || minor.value < 4) { - window.location.href = "installing-boot9strap-(soundhax)"; - } - // check for versions that are not cartupdated, cartupdated consoles cannot access the browser, see troubleshooting for solution - // OTHERAPP BROKEN FOR TWN/CHN 11.4+ ATM - /* - else if (sslothable(minor.value, nver.value)) { - window.location.href = "installing-boot9strap-(ssloth-browser)"; - } - */ - else if (minor.value < 15 && isO3DS) { - window.location.href = "installing-boot9strap-(safecerthax)"; - } - // seedminer itself works on CHN. But no exploit *chain* supports CHN - // so at this point there is no supported method - else { - document.getElementById("result_methodUnavailable").style.display = "block"; - } - } - } + + // O3DS = 0 + // N3DS = 1 + var model = 0; + if(isN3DS) model = 1; + + let redirected = [ + can_soundhax, + can_ssloth, + can_safecerthax, + can_seedminer, + can_superskaterhax, + ].some(func => func(major.value, minor.value, nver.value, region.value, model)); + if (redirected) return true; + + // if it actually got to this point, there is no exploit available. + document.getElementById("result_methodUnavailable").style.display = "block"; + return false; } diff --git a/feed.xml b/feed.xml index 5db0d286ae..bef24e0eff 100644 --- a/feed.xml +++ b/feed.xml @@ -1 +1 @@ -Jekyll2023-05-24T23:57:18+00:00https://3ds.hacks.guide/feed.xml3DS Hacks GuideA complete guide to 3DS custom firmwareNintendo Homebrew \ No newline at end of file +Jekyll2023-05-25T02:08:14+00:00https://3ds.hacks.guide/feed.xml3DS Hacks GuideA complete guide to 3DS custom firmwareNintendo Homebrew \ No newline at end of file