forked from hacks-guide/Guide_3DS
-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #4 from miceoroni/master
Modernize the whole thing
- Loading branch information
Showing
6 changed files
with
196 additions
and
90 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
--- | ||
title: "BadRecovery/OlyBmmer" | ||
--- | ||
|
||
{% include toc title="Table of Contents" %} | ||
|
||
## Prerequisites | ||
- A USB drive, preferably 8gb or larger, for the modded recovery image. | ||
|
||
## Section I - Downloading a Recovery image | ||
|
||
First things first, you need to grab a recovery image lower than v125 for your board. | ||
|
||
- https://chrome100.dev | ||
|
||
## Section II - Mod the Recovery image | ||
|
||
Vist the [BadRecovery Web Bulider](https://binbashbanana.github.io/badrecovery) and upload the RAW recovery image. choose auto and wait a couple of minute and it should download automatically. | ||
|
||
## Section III - Flashing the image | ||
|
||
Did it download automatically? Amazing! Please follow the next instructions for | ||
flashing. | ||
|
||
### Across all platforms (ChromeOS, Mac, Windows, Linux, etc.) | ||
|
||
If you are using a Chromium browser, Download the Chromebook Recovery Utility and click on "Use Local Image" on the dropdown menu. | ||
|
||
Select your modded recovery image you made earlier and click Continue. | ||
|
||
WARNING: All data on this USB will be lost. Consider making a backup of the USB | ||
if this is the only one laying around you. | ||
{: .notice--danger} | ||
|
||
Once done, you should plug the USB into your chromebook and hit ESC+REFRESH+POWER. | ||
Recovery should now start. Sit back and relax until the BadRecovery screen pops up. | ||
|
||
### Linux | ||
|
||
Run | ||
```dd if=/path/to/yourmoddedrecoimage.bin of=/dev/sdWHATEVERYOURUSBIS``` | ||
|
||
MAKE SURE YOU ARE NOT FLASHING TO YOUR INTERNAL DISK! DOING SO WILL | ||
RESULT IN LOSS OF DATA! | ||
{: .notice--danger} | ||
|
||
If all goes well, the command will finish with no errors. | ||
A 0 exit code is not a error, please ignore that. | ||
|
||
### Windows | ||
Download [Rufus](https://rufus.ie), run the exe and select the raw image. Choose DD mode if prompted. Click START to Continue. | ||
|
||
### MacOS | ||
Download [Etcher](https://www.balena.io/etcher) and run the executable/appimage. Click allow for everything. Select the modded reco image and your USB drive. | ||
|
||
## Section IV - Booting BadRecovery | ||
|
||
Unlike SH1MMER, DO NOT enter devmode unless you have a ancient board (pre-CR50). | ||
|
||
Instead simply press ESC+REFRESH+POWER and plug in your USB. | ||
|
||
The recovery process should start. | ||
|
||
After a while you should get kicked to a BadRecovery screen. Let it remove | ||
FWMP and enable dev mode. If it shows a error of tpmc failing to remove FWMP, your chromebook is incompatible to the exploit. (This issue is not really common anymore since the latest version patched this.) | ||
|
||
Now press Refresh and Power. | ||
|
||
Please note that your admin can see that your device is offline. If you are not allowed to do this, set your kernver to 0 and reenroll using KVS. | ||
{: .notice--danger} | ||
|
||
## Section VI- Postmodem | ||
|
||
If you want to reenroll but want to unenroll at anytime, continue to [kvs](kvs) | ||
{: .notice--success} | ||
|
||
If you want to run things like linux on your chromebook, consult the chrultrabook wiki. | ||
|
||
...or you can just use it like a normal chromebook and run things like Crostini. The choices are endless. | ||
{: .nnotice--primary} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,86 +1,90 @@ | ||
const otherArchBoards = ["asurada", "bob", "cherry", "daisy", "daisy-skate", "daisy-spring", "elm", "hana", "jacuzzi", "kevin", "kukui", "nyan-big", "nyan-blaze", "nyan-kitty", "peach-pi", "peach-pit", "scarlet", "strongbad", "trogdor", "veyron-fievel", "veyron-jaq", "veyron-jerry", "veyron-mickey", "veyron-mighty", "veyron-minnie", "veyron-speedy", "veyron-tiger", "x86-alex-he", "x86-mario", "x86-zgb-he"]; | ||
const shimBoards = ["brask", "brya", "clapper", "coral", "dedede", "enguarde", "glimmer", "grunt", "hana", "hatch", "jacuzzi", "kukui", "nami", "octopus", "orco", "pyro", "reks", "sentry", "stout", "strongbad", "tidus", "ultima", "volteer", "zork", "kindred"]; | ||
const shimBoards = ["ambassador", "banon", "brask", "brya", "clapper", "coral", "consola", "cyan", "dedede", "enguarde", "edgar", "elm", "endguarde", "fizz", "glimmer", "grunt", "hana", "hatch", "jacuzzi", "kalista", "kukui", "kefka", "lulu", "nami", "nissa", "octopus", "orco", "puff", "pyro", "reef", "reks", "relm", "sand", "sentry", "snappy", "stout", "strongbad", "tidus", "trogdor", "ultima", "volteer", "zork"]; | ||
const rangeComp = (a, b, c) => { | ||
return b <= a && a <= c; | ||
return b <= a && a <= c; | ||
} | ||
const prettyNames = {"80": "v80 (v75-83)"}; | ||
const prettyNames = { "80": "v80 (v75-83)" }; | ||
|
||
let canRootBoard = (supplied_board) => { | ||
let BOARD = chrome100.find(board => board.target == supplied_board); | ||
if (!BOARD) { | ||
alert("Invalid board!"); | ||
return; | ||
} | ||
let hasLegacyCrosh = document.getElementById("hasLegacyCrosh").checked, | ||
hasCrosh = document.getElementById("hasCrosh").checked, | ||
hasCroshBlock99 = document.getElementById("hasCroshBlock99").checked, | ||
hasDriveFS = document.getElementById("hasDriveFS").checked, | ||
hasARC = document.getElementById("hasARC").checked, | ||
hasKiosk = document.getElementById("hasKiosk").checked && BOARD.images.find(image => parseInt(image.params.chrome.split(".")[0]) <= 81); | ||
let downgradable = { | ||
"80": !!BOARD.images.find(image => rangeComp(parseInt(image.params.chrome.split(".")[0]), 75, 83)), | ||
"87": !!BOARD.images.find(image => image.params.chrome.split(".")[0] == "87"), | ||
"91": !!BOARD.images.find(image => (image.params.chrome.split(".")[0] == "91" && parseInt(image.params.platform.split(".")[1]) <= 64)), | ||
"101": !!BOARD.images.find(image => image.params.chrome.split(".")[0] == "101") | ||
} | ||
let pwnable = Object.assign({"SH1MMER": shimBoards.includes(supplied_board)}, downgradable); | ||
let BOARD = chrome100.find(board => board.target == supplied_board); | ||
if (!BOARD) { | ||
alert("Invalid board!"); | ||
return; | ||
} | ||
let hasLegacyCrosh = document.getElementById("hasLegacyCrosh").checked, | ||
hasCrosh = document.getElementById("hasCrosh").checked, | ||
hasCroshBlock99 = document.getElementById("hasCroshBlock99").checked, | ||
hasDriveFS = document.getElementById("hasDriveFS").checked, | ||
hasARC = document.getElementById("hasARC").checked, | ||
hasKiosk = document.getElementById("hasKiosk").checked && BOARD.images.find(image => parseInt(image.params.chrome.split(".")[0]) <= 81); | ||
let downgradable = { | ||
"80": !!BOARD.images.find(image => rangeComp(parseInt(image.params.chrome.split(".")[0]), 75, 83)), | ||
"87": !!BOARD.images.find(image => image.params.chrome.split(".")[0] == "87"), | ||
"91": !!BOARD.images.find(image => (image.params.chrome.split(".")[0] == "91" && parseInt(image.params.platform.split(".")[1]) <= 64)), | ||
"101": !!BOARD.images.find(image => image.params.chrome.split(".")[0] == "101") | ||
} | ||
let pwnable = Object.assign({ "SH1MMER": shimBoards.includes(supplied_board) }, downgradable); | ||
|
||
if (otherArchBoards.includes(supplied_board)) { | ||
// maybe these will work in the future? | ||
pwnable["87"] = false; | ||
pwnable["91"] = false; | ||
pwnable["101"] = false; | ||
} | ||
if (!hasDriveFS) { | ||
// same for these | ||
pwnable["91"] = false; | ||
pwnable["101"] = false; | ||
} | ||
if (!hasARC) { | ||
pwnable["87"] = false; | ||
} | ||
if (!hasLegacyCrosh && !hasKiosk) { | ||
pwnable["80"] = false; | ||
if (otherArchBoards.includes(supplied_board)) { | ||
// maybe these will work in the future? | ||
pwnable["87"] = false; | ||
pwnable["91"] = false; | ||
pwnable["101"] = false; | ||
} | ||
if (!hasDriveFS) { | ||
// same for these | ||
pwnable["91"] = false; | ||
pwnable["101"] = false; | ||
} | ||
if (!hasARC) { | ||
pwnable["87"] = false; | ||
} | ||
if (!hasLegacyCrosh && !hasKiosk) { | ||
pwnable["80"] = false; | ||
} | ||
if (!hasCrosh && !hasCroshBlock99) { | ||
pwnable["87"] = false; | ||
pwnable["91"] = false; | ||
} | ||
if (!hasCrosh || hasCroshBlock99) { | ||
pwnable["101"] = false; | ||
} | ||
let canRoot = false; | ||
var waysToRoot = []; | ||
Object.keys(pwnable).forEach(pwn => { | ||
if (pwnable[pwn]) { | ||
canRoot = true; | ||
waysToRoot.push(pwn); | ||
} | ||
if (!hasCrosh && !hasCroshBlock99) { | ||
pwnable["87"] = false; | ||
pwnable["91"] = false; | ||
} | ||
if (!hasCrosh || hasCroshBlock99) { | ||
pwnable["101"] = false; | ||
} | ||
let canRoot = false; | ||
var waysToRoot = []; | ||
Object.keys(pwnable).forEach(pwn => { | ||
if (pwnable[pwn]) { | ||
canRoot = true; | ||
waysToRoot.push(pwn); | ||
} | ||
}) | ||
return waysToRoot; | ||
}) | ||
return waysToRoot; | ||
} | ||
|
||
function redirect() { | ||
var waysToRoot = canRootBoard(document.getElementById("board").value); | ||
console.log(waysToRoot); | ||
if (waysToRoot.includes("SH1MMER") && document.getElementById("curVersion").value >= 111) { | ||
window.location.href="https://chromebook-guide.github.io/choose-halcyon"; | ||
} else if (document.getElementById("curVersion").value >= 112){ | ||
alert("No exploits are available for your platform, since you're updated past v112 and are incompatible with SH1MMER."); | ||
return; | ||
} | ||
if (waysToRoot.includes("80")){ | ||
window.location.href="https://chromebook-guide.github.io/v81"; | ||
} else if (waysToRoot.includes("SH1MMER")){ | ||
// v81 provides more options then sh1mmer, sh1mmer is more of a second-best option here | ||
window.location.href="https://chromebook-guide.github.io/sh1mmer" | ||
} else if (waysToRoot.includes("87")) { | ||
window.location.href="https://chromebook-guide.github.io/v87"; | ||
} else if (waysToRoot.includes("91")) { | ||
window.location.href="https://chromebook-guide.github.io/v91"; | ||
} else if (waysToRoot.includes("101")) { | ||
window.location.href="https://chromebook-guide.github.io/v101"; | ||
} else { | ||
alert("No exploits are available for your platform :("); | ||
} | ||
} | ||
var waysToRoot = canRootBoard(document.getElementById("board").value); | ||
console.log(waysToRoot); | ||
if (waysToRoot.includes("SH1MMER") && document.getElementById("curVersion").value >= 111) { | ||
window.location.href = "https://chromebook-guide.github.io/cryptosmite"; | ||
} else if (document.getElementById("curVersion").value >= 112) { | ||
window.location.href = "https://chromebook-guide.github.io/badrecovery" | ||
} | ||
if (document.getElementById(curVersion).value >= 125) { | ||
alert("Wait for ICARUS.") | ||
} else if (waysToRoot.includes("SH1MMER") && document.getElementById(curVersion).value >= 125) { | ||
window.location.href = "https://chromebook-guide.github.io/pencilmethod" //last resort for repair shops or skids looking to unenroll chromebooks. | ||
} | ||
if (waysToRoot.includes("80")) { | ||
window.location.href = "https://chromebook-guide.github.io/v81"; | ||
} else if (waysToRoot.includes("SH1MMER")) { | ||
// v81 provides more options then sh1mmer, sh1mmer is more of a second-best option here | ||
window.location.href = "https://chromebook-guide.github.io/sh1mmer" | ||
} else if (waysToRoot.includes("87")) { | ||
window.location.href = "https://chromebook-guide.github.io/v87"; | ||
} else if (waysToRoot.includes("91")) { | ||
window.location.href = "https://chromebook-guide.github.io/v91"; | ||
} else if (waysToRoot.includes("101")) { | ||
window.location.href = "https://chromebook-guide.github.io/v101"; | ||
} else { | ||
alert("No exploits are available for your platform :("); | ||
} | ||
} |