Skip to content

Instantly share code, notes, and snippets.

@neko-neko-nyan
Created December 24, 2025 08:29
Show Gist options
  • Select an option

  • Save neko-neko-nyan/208945e38ba7292ba7422af080ac37fa to your computer and use it in GitHub Desktop.

Select an option

Save neko-neko-nyan/208945e38ba7292ba7422af080ac37fa to your computer and use it in GitHub Desktop.
Filian ARG website contents with curl headers
* Host www.blackfile-index.org:443 was resolved.
* IPv6: (none)
* IPv4: 216.150.1.129, 216.150.16.129
* Trying 216.150.1.129:443...
* ALPN: curl offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* CAfile: /etc/ssl/certs/ca-certificates.crt
* CApath: none
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / RSASSA-PSS
* ALPN: server accepted h2
* Server certificate:
* subject: CN=www.blackfile-index.org
* start date: Dec 17 10:51:39 2025 GMT
* expire date: Mar 17 10:51:38 2026 GMT
* subjectAltName: host "www.blackfile-index.org" matched cert's "www.blackfile-index.org"
* issuer: C=US; O=Let's Encrypt; CN=R13
* SSL certificate verify ok.
* Certificate level 0: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
* Certificate level 1: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
* Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Established connection to www.blackfile-index.org (216.150.1.129 port 443) from #local IP hidden# port 51860
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://www.blackfile-index.org/
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: www.blackfile-index.org]
* [HTTP/2] [1] [:path: /]
* [HTTP/2] [1] [user-agent: curl/8.16.0]
* [HTTP/2] [1] [accept: */*]
> GET / HTTP/2
> Host: www.blackfile-index.org
> User-Agent: curl/8.16.0
> Accept: */*
>
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* Request completely sent off
< HTTP/2 200
< accept-ranges: bytes
< access-control-allow-origin: *
< age: 512793
< cache-control: public, max-age=0, must-revalidate
< content-disposition: inline
< content-type: text/html; charset=utf-8
< date: Wed, 24 Dec 2025 08:26:10 GMT
< etag: "34a35538d94d74f49f2485d9f3f5f0ed"
< last-modified: Thu, 18 Dec 2025 09:59:36 GMT
< server: Vercel
< strict-transport-security: max-age=63072000
< x-vercel-cache: HIT
< x-vercel-id: arn1::4b956-1766564770094-4025c9128c4a
< content-length: 1103
<
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>TERMINAL_ACCESS</title>
<link rel="stylesheet" href="style.css">
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 64 64%22><rect width=%2264%22 height=%2264%22 fill=%22%23000%22/><path d=%22M2 32 C 20 10, 44 10, 62 32 C 44 54, 20 54, 2 32 Z%22 fill=%22none%22 stroke=%22%2333ff00%22 stroke-width=%224%22/><circle cx=%2232%22 cy=%2232%22 r=%2210%22 fill=%22%2333ff00%22/></svg>">
</head>
<body>
<!-- BACKGROUND LAYERS -->
<canvas id="noise-canvas"></canvas>
<div class="crt-overlay"></div>
<div class="container">
<div id="output">SYSTEM READY...</div>
<form id="terminal-form" autocomplete="off">
<span class="prompt">></span>
<input type="text" id="password-input" autofocus spellcheck="false">
<button type="submit" id="mobile-submit">ENTER</button>
</form>
</div>
<script src="script.js"></script>
</body>
</html>
* Host www.blackfile-index.org:443 was resolved.
* IPv6: (none)
* IPv4: 216.150.1.129, 216.150.16.129
* Trying 216.150.1.129:443...
* ALPN: curl offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* CAfile: /etc/ssl/certs/ca-certificates.crt
* CApath: none
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / RSASSA-PSS
* ALPN: server accepted h2
* Server certificate:
* subject: CN=www.blackfile-index.org
* start date: Dec 17 10:51:39 2025 GMT
* expire date: Mar 17 10:51:38 2026 GMT
* subjectAltName: host "www.blackfile-index.org" matched cert's "www.blackfile-index.org"
* issuer: C=US; O=Let's Encrypt; CN=R13
* SSL certificate verify ok.
* Certificate level 0: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
* Certificate level 1: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
* Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Established connection to www.blackfile-index.org (216.150.1.129 port 443) from #local IP hidden# port 50758
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://www.blackfile-index.org/script.js
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: www.blackfile-index.org]
* [HTTP/2] [1] [:path: /script.js]
* [HTTP/2] [1] [user-agent: curl/8.16.0]
* [HTTP/2] [1] [accept: */*]
> GET /script.js HTTP/2
> Host: www.blackfile-index.org
> User-Agent: curl/8.16.0
> Accept: */*
>
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* Request completely sent off
< HTTP/2 200
< accept-ranges: bytes
< access-control-allow-origin: *
< age: 19733
< cache-control: public, max-age=0, must-revalidate
< content-disposition: inline; filename="script.js"
< content-type: application/javascript; charset=utf-8
< date: Wed, 24 Dec 2025 08:28:23 GMT
< etag: "3d1242c70e2b161dde35e87070b902b7"
< last-modified: Wed, 24 Dec 2025 02:59:30 GMT
< server: Vercel
< strict-transport-security: max-age=63072000
< x-vercel-cache: HIT
< x-vercel-id: fra1::vw2dh-1766564903782-93fb5677ccad
< content-length: 6081
<
const form = document.getElementById('terminal-form');
const input = document.getElementById('password-input');
const output = document.getElementById('output');
// 1. SETUP AUDIO CONTEXT & MASTER GAIN
const AudioContext = window.AudioContext || window.webkitAudioContext;
const audioCtx = new AudioContext();
// Create a master gain node to control overall volume
const masterGain = audioCtx.createGain();
masterGain.gain.value = 0.5; // Set volume to 50%
masterGain.connect(audioCtx.destination);
// 2. GENERATE WHITE NOISE BUFFER (Do this once to save CPU)
// We create 1 second of static noise to use as our raw material
const bufferSize = audioCtx.sampleRate; // 1 second buffer
const buffer = audioCtx.createBuffer(1, bufferSize, audioCtx.sampleRate);
const data = buffer.getChannelData(0);
for (let i = 0; i < bufferSize; i++) {
// Fill with random noise between -1 and 1
data[i] = Math.random() * 2 - 1;
}
function ensureAudioContext() {
if (audioCtx.state === 'suspended') {
audioCtx.resume();
}
}
// 3. THE MECHANICAL KEY SWITCH SOUND
function playMechanicalClick() {
ensureAudioContext();
const t = audioCtx.currentTime;
// --- PART A: The "Click" (High frequency snap) ---
// We filter the noise to only hear the high crispy parts
const clickSrc = audioCtx.createBufferSource();
clickSrc.buffer = buffer;
const clickFilter = audioCtx.createBiquadFilter();
clickFilter.type = 'highpass';
clickFilter.frequency.value = 2000; // Only frequencies above 2kHz
const clickGain = audioCtx.createGain();
clickGain.gain.setValueAtTime(0, t);
clickGain.gain.linearRampToValueAtTime(1, t + 0.001); // Instant attack
clickGain.gain.exponentialRampToValueAtTime(0.01, t + 0.03); // Super fast decay
clickSrc.connect(clickFilter);
clickFilter.connect(clickGain);
clickGain.connect(masterGain);
// Play a random slice of the noise buffer so every click sounds slightly unique
const randomOffset = Math.random() * 0.5;
clickSrc.start(t, randomOffset);
clickSrc.stop(t + 0.03);
// --- PART B: The "Clack" (Low frequency thud) ---
// We filter the noise to only hear the low thud parts
const clackSrc = audioCtx.createBufferSource();
clackSrc.buffer = buffer;
const clackFilter = audioCtx.createBiquadFilter();
clackFilter.type = 'lowpass';
clackFilter.frequency.value = 600; // Only frequencies below 600Hz
const clackGain = audioCtx.createGain();
clackGain.gain.setValueAtTime(0, t);
clackGain.gain.linearRampToValueAtTime(0.6, t + 0.001);
clackGain.gain.exponentialRampToValueAtTime(0.01, t + 0.08); // Slightly longer decay
clackSrc.connect(clackFilter);
clackFilter.connect(clackGain);
clackGain.connect(masterGain);
clackSrc.start(t, randomOffset);
clackSrc.stop(t + 0.08);
}
// 4. THE ERROR BUZZER (Retained from previous version)
function playErrorSound() {
ensureAudioContext();
const t = audioCtx.currentTime;
const oscillator = audioCtx.createOscillator();
const gainNode = audioCtx.createGain();
oscillator.connect(gainNode);
gainNode.connect(masterGain);
oscillator.type = 'sawtooth'; // Sawtooth sounds more "alert-like" than square
oscillator.frequency.setValueAtTime(110, t);
oscillator.frequency.linearRampToValueAtTime(50, t + 0.3);
gainNode.gain.setValueAtTime(0.5, t);
gainNode.gain.exponentialRampToValueAtTime(0.01, t + 0.3);
oscillator.start(t);
oscillator.stop(t + 0.3);
}
// 5. EVENT LISTENERS
input.addEventListener('keydown', (e) => {
if (e.key === 'Enter') return;
playMechanicalClick();
});
// Variable to track the reset timer so we can clear it if needed
let resetTimeout;
form.addEventListener('submit', (e) => {
e.preventDefault();
const password = input.value.trim().toUpperCase();
// 1. CLEAR EXISTING TIMEOUT
// If a user types wrong twice fast, we don't want the text resetting
// comfortably in the middle of their second attempt.
if (resetTimeout) clearTimeout(resetTimeout);
// LOGIC FOR FUTURE PASSWORDS
if (password === "THE_TRUTH") {
output.innerText = "ACCESS GRANTED. LOADING...";
output.style.color = "cyan";
// Success sound logic...
} else {
// WRONG PASSWORD LOGIC
playErrorSound();
output.innerText = `ACCESS DENIED: '${password}'`;
output.style.color = "red";
// Shake effect
document.body.classList.add('shake');
setTimeout(() => document.body.classList.remove('shake'), 500);
input.value = '';
// 2. SET TIMER TO RESET MESSAGE
resetTimeout = setTimeout(() => {
output.innerText = "SYSTEM READY...";
output.style.color = "#33ff00"; // Reset color to green
}, 2000);
}
});
// Focus helper
document.addEventListener('click', () => {
input.focus();
ensureAudioContext();
});
/* ===========================
BACKGROUND NOISE ANIMATION
=========================== */
const canvas = document.getElementById('noise-canvas');
const ctx = canvas.getContext('2d');
const resizeCanvas = () => {
// We render at low resolution for that "chunky" retro look
// and for better performance.
canvas.width = window.innerWidth / 4;
canvas.height = window.innerHeight / 4;
};
resizeCanvas();
window.addEventListener('resize', resizeCanvas);
function drawNoise() {
const w = canvas.width;
const h = canvas.height;
const idata = ctx.createImageData(w, h);
const buffer32 = new Uint32Array(idata.data.buffer);
const len = buffer32.length;
for (let i = 0; i < len; i++) {
// Random chance to be a white pixel
if (Math.random() < 0.1) {
// 0xffffffff is white (ABGR format)
// You can change color here to make green static: 0xff00ff00
buffer32[i] = 0xffffffff;
}
}
ctx.putImageData(idata, 0, 0);
// Loop the animation
requestAnimationFrame(drawNoise);
}
// Start the static
drawNoise();
* Host www.blackfile-index.org:443 was resolved.
* IPv6: (none)
* IPv4: 216.150.1.129, 216.150.16.129
* Trying 216.150.1.129:443...
* ALPN: curl offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* CAfile: /etc/ssl/certs/ca-certificates.crt
* CApath: none
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / X25519MLKEM768 / RSASSA-PSS
* ALPN: server accepted h2
* Server certificate:
* subject: CN=www.blackfile-index.org
* start date: Dec 17 10:51:39 2025 GMT
* expire date: Mar 17 10:51:38 2026 GMT
* subjectAltName: host "www.blackfile-index.org" matched cert's "www.blackfile-index.org"
* issuer: C=US; O=Let's Encrypt; CN=R13
* SSL certificate verify ok.
* Certificate level 0: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
* Certificate level 1: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
* Certificate level 2: Public key type RSA (4096/152 Bits/secBits), signed using sha256WithRSAEncryption
* Established connection to www.blackfile-index.org (216.150.1.129 port 443) from #local IP hidden# port 44232
* using HTTP/2
* [HTTP/2] [1] OPENED stream for https://www.blackfile-index.org/style.css
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: www.blackfile-index.org]
* [HTTP/2] [1] [:path: /style.css]
* [HTTP/2] [1] [user-agent: curl/8.16.0]
* [HTTP/2] [1] [accept: */*]
> GET /style.css HTTP/2
> Host: www.blackfile-index.org
> User-Agent: curl/8.16.0
> Accept: */*
>
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* Request completely sent off
< HTTP/2 200
< accept-ranges: bytes
< access-control-allow-origin: *
< age: 19665
< cache-control: public, max-age=0, must-revalidate
< content-disposition: inline; filename="style.css"
< content-type: text/css; charset=utf-8
< date: Wed, 24 Dec 2025 08:27:15 GMT
< etag: "ecd98eaae0204d422aa983788016d2b6"
< last-modified: Wed, 24 Dec 2025 02:59:30 GMT
< server: Vercel
< strict-transport-security: max-age=63072000
< x-vercel-cache: HIT
< x-vercel-id: fra1::6tn2p-1766564835408-07cd35159445
< content-length: 4116
<
/* --- RESET & BASICS --- */
* {
box-sizing: border-box;
}
body {
background-color: #050505; /* Deep black-grey */
color: #33ff00; /* Terminal Green */
font-family: 'Courier New', Courier, monospace;
/* Use dvh (Dynamic Viewport Height) for better mobile support */
min-height: 100vh;
min-height: 100dvh;
margin: 0;
display: flex;
justify-content: center;
align-items: center;
overflow: hidden; /* Keeps the static background contained */
/* Prevent text selection to feel more like an interface */
user-select: none;
-webkit-user-select: none;
}
/* --- LAYOUT CONTAINER --- */
.container {
width: 90%; /* 90% width on mobile */
max-width: 650px; /* Max width on desktop */
padding: 20px;
/* Slight adjustment up visually looks better */
transform: translateY(-5%);
}
/* --- OUTPUT TEXT --- */
#output {
margin-bottom: 30px;
white-space: pre-wrap;
min-height: 1.5em;
font-size: 1.1rem;
line-height: 1.4;
text-shadow: 0 0 5px rgba(51, 255, 0, 0.5); /* Glowing text effect */
}
/* --- THE FORM ROW --- */
form {
display: flex;
align-items: center;
border-bottom: 2px solid #33ff00;
padding-bottom: 5px;
position: relative;
transition: border-color 0.2s;
}
/* Glow effect on the bottom border when focused */
form:focus-within {
border-bottom-color: #33ff00;
/* Offset-Y (10px) pushes it down, Negative Spread (-10px) hides it from sides/top */
/* This makes it look like just the line is glowing, not the box */
box-shadow: 0 10px 20px -10px rgba(51, 255, 0, 0.8);
}
.prompt {
margin-right: 15px;
font-weight: bold;
font-size: 1.2rem;
}
/* --- INPUT FIELD --- */
input {
background: transparent;
border: none;
color: #33ff00;
font-family: inherit;
/* 16px minimum prevents iOS from zooming in when you tap it */
font-size: 16px;
flex-grow: 1;
outline: none;
text-transform: uppercase;
caret-color: #33ff00; /* Cursor color */
border-radius: 0; /* Remove rounded corners on iOS */
}
/* Larger font on desktop */
@media (min-width: 768px) {
input {
font-size: 1.5rem;
}
#output {
font-size: 1.3rem;
}
}
/* --- BACKGROUND LAYERS --- */
#noise-canvas {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -2;
opacity: 0.12;
}
.crt-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
pointer-events: none;
background: linear-gradient(
rgba(18, 16, 16, 0) 50%,
rgba(0, 0, 0, 0.25) 50%
), linear-gradient(
90deg,
rgba(255, 0, 0, 0.06),
rgba(0, 255, 0, 0.02),
rgba(0, 0, 255, 0.06)
);
background-size: 100% 4px, 6px 100%;
box-shadow: inset 0 0 100px rgba(0,0,0,0.9);
}
/* --- MOBILE SUBMIT BUTTON --- */
#mobile-submit {
display: none; /* Hidden on Desktop */
}
@media (max-width: 768px) {
#mobile-submit {
display: block;
background: rgba(51, 255, 0, 0.1);
border: 1px solid #33ff00;
color: #33ff00;
font-family: inherit;
font-size: 0.9rem;
font-weight: bold;
letter-spacing: 1px;
/* Nice spacing */
padding: 10px 15px;
margin-left: 10px;
text-transform: uppercase;
cursor: pointer;
border-radius: 0;
-webkit-appearance: none;
transition: all 0.1s ease;
}
#mobile-submit:active {
background: #33ff00;
color: #000;
transform: scale(0.98);
}
/* Ensure input doesn't get squashed too small */
input {
width: 100%;
min-width: 0; /* Flexbox fix */
}
}
/* --- ANIMATIONS --- */
.shake {
animation: shake 0.5s cubic-bezier(.36,.07,.19,.97) both;
}
@keyframes shake {
10%, 90% { transform: translate3d(-1px, 0, 0); }
20%, 80% { transform: translate3d(2px, 0, 0); }
30%, 50%, 70% { transform: translate3d(-4px, 0, 0); }
40%, 60% { transform: translate3d(4px, 0, 0); }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment