-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbasic.html
More file actions
78 lines (70 loc) · 3.04 KB
/
basic.html
File metadata and controls
78 lines (70 loc) · 3.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Sybil Detection System</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://cdn.tailwindcss.com"></script>
<link href="https://fonts.googleapis.com/css2?family=Dosis&family=Doto&display=swap" rel="stylesheet">
<style>
body { font-family: 'Doto', sans-serif; }
.honeypot { position: absolute; left: -9999px; }
</style>
</head>
<body class="bg-[#0a0a0a] text-white p-6 min-h-screen flex items-center justify-center">
<div class="bg-[#1a1a1a] p-6 rounded-2xl shadow-lg max-w-xl w-full space-y-4 border border-yellow-400">
<h1 class="text-2xl text-yellow-400 font-bold">SYBIL DETECTOR V2</h1>
<p class="text-sm text-gray-400">This will detect multiple advanced Sybil traits using uncommon methods.</p>
<button onclick="runSybilCheck()" class="bg-yellow-500 hover:bg-yellow-600 text-black px-4 py-2 rounded">Run Detection</button>
<pre id="output" class="text-xs bg-black p-3 rounded mt-4 border border-gray-700 overflow-x-auto h-72"></pre>
</div>
<!-- Honeypot traps -->
<input class="honeypot" autocomplete="off" id="trap1" />
<input class="honeypot" autocomplete="off" id="trap2" />
<script>
async function runSybilCheck() {
const getIP = async () => {
try {
const res = await fetch("https://api64.ipify.org?format=json");
const data = await res.json();
return data.ip;
} catch { return "Unknown"; }
};
const getBattery = async () => {
try {
const battery = await navigator.getBattery();
return { level: battery.level, charging: battery.charging };
} catch { return "Unavailable"; }
};
const isEmulator = () => {
return /Headless|PhantomJS|Nightmare|Puppeteer|jsdom/.test(navigator.userAgent);
};
const fingerprint = [
navigator.userAgent,
navigator.language,
screen.width + "x" + screen.height,
navigator.hardwareConcurrency,
navigator.deviceMemory,
Intl.DateTimeFormat().resolvedOptions().timeZone,
navigator.connection ? navigator.connection.effectiveType : "Unknown",
navigator.platform
].join('||');
const trapsTriggered = document.getElementById('trap1').value || document.getElementById('trap2').value ? true : false;
const result = {
ip: await getIP(),
fingerprintHash: btoa(fingerprint),
userAgent: navigator.userAgent,
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
isEmulator: isEmulator(),
battery: await getBattery(),
ram: navigator.deviceMemory || "Unknown",
cpuThreads: navigator.hardwareConcurrency || "Unknown",
connection: navigator.connection ? navigator.connection.effectiveType : "Unknown",
honeypotTrapTriggered: trapsTriggered,
timestamp: new Date().toLocaleString(),
};
document.getElementById("output").textContent = JSON.stringify(result, null, 2);
}
</script>
</body>
</html>