mirror of
https://github.com/Jieyab89/OSINT-Cheat-sheet.git
synced 2026-01-26 19:24:17 -08:00
349 lines
12 KiB
HTML
349 lines
12 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="description" content="Jieyab89 OSINT cheat sheet, list OSINT tools, wiki, dataset, article, book , red team OSINT for hackers and OSINT tips and OSINT branch. This repository will grow every time will research, there is a research, science and technology, tutorial. Please use it wisely.">
|
|
<meta name="keywords" content="OSINT, SOCMINT, SIGINT, cheat sheet, MASINT, jieyab89">
|
|
<meta name="author" content="Jieyab89">
|
|
<meta name="robots" content="index, follow">
|
|
<meta name="revisit-after" content="7 days">
|
|
|
|
<meta property="og:title" content="Jieyab89 OSINT Cheat Sheet">
|
|
<meta property="og:description" content="Jieyab89 OSINT cheat sheet, list OSINT tools, wiki, dataset, article, book , red team OSINT for hackers and OSINT tips and OSINT branch. This repository will grow every time will research, there is a research, science and technology, tutorial. Please use it wisely">
|
|
<meta property="og:image" content="https://private-user-images.githubusercontent.com/71226310/428317009-37d7d761-c1f3-40f5-9ecd-d79457ee8a6e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDMyNTg0OTEsIm5iZiI6MTc0MzI1ODE5MSwicGF0aCI6Ii83MTIyNjMxMC80MjgzMTcwMDktMzdkN2Q3NjEtYzFmMy00MGY1LTllY2QtZDc5NDU3ZWU4YTZlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAzMjklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMzI5VDE0MjMxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTBkNTNlMWQwNmQ4NTNkYjQ0NzBlOTg4NmI1YWZjYzM5OTUyMWE5MDQzMjc1MjBkOTE4YmZiZWUxYTAwZmQxZjAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.qn1nKRcHpLc_b9MH7EwEip5_XFFkWimN_3091SDCvzg">
|
|
<meta property="og:url" content="https://github.com/Jieyab89/OSINT-Cheat-sheet">
|
|
<meta property="og:type" content="website">
|
|
|
|
<meta name="twitter:card" content="summary_large_image">
|
|
<meta name="twitter:title" content="Jieyab89 OSINT Cheat Sheet">
|
|
<meta name="twitter:description" content="Jieyab89 OSINT cheat sheet, list OSINT tools, wiki, dataset, article, book , red team OSINT for hackers and OSINT tips and OSINT branch. This repository will grow every time will research, there is a research, science and technology, tutorial. Please use it wisely">
|
|
<meta name="twitter:image" content="https://private-user-images.githubusercontent.com/71226310/428317009-37d7d761-c1f3-40f5-9ecd-d79457ee8a6e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDMyNTg0OTEsIm5iZiI6MTc0MzI1ODE5MSwicGF0aCI6Ii83MTIyNjMxMC80MjgzMTcwMDktMzdkN2Q3NjEtYzFmMy00MGY1LTllY2QtZDc5NDU3ZWU4YTZlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAzMjklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMzI5VDE0MjMxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTBkNTNlMWQwNmQ4NTNkYjQ0NzBlOTg4NmI1YWZjYzM5OTUyMWE5MDQzMjc1MjBkOTE4YmZiZWUxYTAwZmQxZjAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.qn1nKRcHpLc_b9MH7EwEip5_XFFkWimN_3091SDCvzg">
|
|
<meta name="twitter:site" content="@jieyab89">
|
|
|
|
<meta name="theme-color" content="#ffffff">
|
|
<meta name="format-detection" content="telephone=no">
|
|
|
|
<link rel="canonical" href="https://jieyab89.github.io/OSINT-Cheat-sheet/Web-Based/">
|
|
|
|
<!-- Favicon -->
|
|
<link rel="icon" href="https://avatars.githubusercontent.com/u/71226310?s=96&v=4" type="image/x-icon">
|
|
|
|
<title>Jieyab89 OSINT Cheat Sheet</title>
|
|
|
|
<script src="https://d3js.org/d3.v6.min.js"></script>
|
|
|
|
<style>
|
|
body {
|
|
font-family: 'Courier New', monospace;
|
|
background: radial-gradient(ellipse at center, #000015 0%, #000000 100%);
|
|
color: #ffffff;
|
|
text-align: center;
|
|
margin: 0;
|
|
padding: 0;
|
|
overflow: hidden;
|
|
}
|
|
#search {
|
|
margin: 2px;
|
|
padding: 8px;
|
|
width: 85%;
|
|
max-width: 450px;
|
|
font-size: 16px;
|
|
border-radius: 5px;
|
|
border: none;
|
|
}
|
|
svg {
|
|
width: 100vw;
|
|
height: 100vh;
|
|
}
|
|
.node circle {
|
|
stroke: #ffffff;
|
|
stroke-width: 5px;
|
|
cursor: pointer;
|
|
}
|
|
.link {
|
|
stroke: #888;
|
|
stroke-width: 1.5px;
|
|
}
|
|
text {
|
|
font-size: 15px;
|
|
fill: #ffffff;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.link {
|
|
stroke: #888;
|
|
stroke-width: 1.2;
|
|
fill: none;
|
|
stroke-dasharray: 6 6;
|
|
animation: flow 1.6s linear infinite;
|
|
opacity: 0.9;
|
|
}
|
|
|
|
@keyframes flow {
|
|
from {
|
|
stroke-dashoffset: 0;
|
|
}
|
|
to {
|
|
stroke-dashoffset: -24;
|
|
}
|
|
}
|
|
</style>
|
|
|
|
</head>
|
|
<body>
|
|
<h1>Jieyab89 OSINT Cheat Sheet</h1>
|
|
<input type="text" id="search" placeholder="Search by Category Name and Jieyab89 Wiki's">
|
|
<svg></svg>
|
|
<script>
|
|
const BATCH_SIZE = 5;
|
|
const BASE_RADIUS = 140;
|
|
const DRIFT_SPEED = 0.25;
|
|
const SEPARATION_DIST = 42;
|
|
const SEPARATION_FORCE = 0.015;
|
|
|
|
let rawData = [];
|
|
let nodes = [];
|
|
let links = [];
|
|
let nodeMap = new Map();
|
|
let urlIndex = new Map();
|
|
|
|
function rand(min, max) {
|
|
return Math.random() * (max - min) + min;
|
|
}
|
|
|
|
function normalizeUrl(url) {
|
|
return url.trim().toLowerCase();
|
|
}
|
|
|
|
function linkExists(a, b) {
|
|
return links.some(l =>
|
|
(l.source === a && l.target === b) ||
|
|
(l.source === b && l.target === a)
|
|
);
|
|
}
|
|
|
|
fetch('osint_data.json')
|
|
.then(r => r.json())
|
|
.then(data => {
|
|
rawData = data;
|
|
initCategories();
|
|
requestAnimationFrame(idleMotion);
|
|
});
|
|
|
|
function initCategories(filtered = null) {
|
|
nodes = [];
|
|
links = [];
|
|
nodeMap.clear();
|
|
urlIndex.clear();
|
|
|
|
const data = filtered || rawData;
|
|
const cx = innerWidth / 2;
|
|
const cy = innerHeight / 2;
|
|
|
|
data.forEach(cat => {
|
|
const n = {
|
|
id: cat.category,
|
|
label: cat.category,
|
|
type: 'category',
|
|
_items: cat.items,
|
|
_offset: 0,
|
|
x: cx + rand(-400, 400),
|
|
y: cy + rand(-260, 260),
|
|
vx: rand(-DRIFT_SPEED, DRIFT_SPEED),
|
|
vy: rand(-DRIFT_SPEED, DRIFT_SPEED),
|
|
dragging: false
|
|
};
|
|
nodes.push(n);
|
|
nodeMap.set(n.id, n);
|
|
});
|
|
|
|
render();
|
|
}
|
|
|
|
function handleUrlCorrelation(node) {
|
|
if (!node.url) return;
|
|
const key = normalizeUrl(node.url);
|
|
|
|
if (!urlIndex.has(key)) urlIndex.set(key, new Set());
|
|
|
|
urlIndex.get(key).forEach(otherId => {
|
|
if (!linkExists(node.id, otherId)) {
|
|
links.push({ source: node.id, target: otherId, type: "correlation" });
|
|
}
|
|
});
|
|
|
|
urlIndex.get(key).add(node.id);
|
|
}
|
|
|
|
function expandNode(parent) {
|
|
if (!parent._items || parent._offset >= parent._items.length) return;
|
|
|
|
const start = parent._offset;
|
|
const end = Math.min(start + BATCH_SIZE, parent._items.length);
|
|
const radius = BASE_RADIUS + (parent.type === 'category' ? 80 : 140);
|
|
|
|
for (let i = start; i < end; i++) {
|
|
const item = parent._items[i];
|
|
if (nodeMap.has(item.name)) continue;
|
|
|
|
const c = {
|
|
id: item.name,
|
|
label: item.name,
|
|
type: parent.type === 'category' ? 'tool' : 'subtool',
|
|
url: item.url || null,
|
|
parent: parent.id,
|
|
_items: item.children || [],
|
|
_offset: 0,
|
|
x: parent.x + rand(-radius, radius),
|
|
y: parent.y + rand(-radius, radius),
|
|
vx: rand(-DRIFT_SPEED, DRIFT_SPEED),
|
|
vy: rand(-DRIFT_SPEED, DRIFT_SPEED),
|
|
dragging: false
|
|
};
|
|
|
|
nodes.push(c);
|
|
nodeMap.set(c.id, c);
|
|
links.push({ source: parent.id, target: c.id, type: "parent" });
|
|
handleUrlCorrelation(c);
|
|
}
|
|
|
|
parent._offset = end;
|
|
render();
|
|
}
|
|
|
|
document.getElementById("search").addEventListener("keydown", e => {
|
|
if (e.key !== "Enter") return;
|
|
const q = e.target.value.trim().toLowerCase();
|
|
if (!q) return initCategories();
|
|
|
|
initCategories(rawData.filter(c =>
|
|
c.category.toLowerCase().includes(q)
|
|
));
|
|
});
|
|
|
|
let zoomLayer, graphLayer, nodeSel, linkSel;
|
|
|
|
function render() {
|
|
d3.select("svg").selectAll("*").remove();
|
|
|
|
const svg = d3.select("svg")
|
|
.attr("width", innerWidth)
|
|
.attr("height", innerHeight)
|
|
.call(
|
|
d3.zoom()
|
|
.scaleExtent([0.3, 5])
|
|
.on("zoom", e => {
|
|
zoomLayer.attr("transform", e.transform);
|
|
})
|
|
);
|
|
|
|
zoomLayer = svg.append("g");
|
|
graphLayer = zoomLayer.append("g");
|
|
|
|
linkSel = graphLayer.selectAll("line")
|
|
.data(links)
|
|
.enter()
|
|
.append("line")
|
|
.attr("class", d =>
|
|
d.type === "correlation" ? "link correlation" : "link"
|
|
);
|
|
|
|
nodeSel = graphLayer.selectAll("g")
|
|
.data(nodes)
|
|
.enter()
|
|
.append("g")
|
|
.attr("transform", d => `translate(${d.x},${d.y})`)
|
|
.call(
|
|
d3.drag()
|
|
.on("start", (e, d) => {
|
|
d.dragging = true;
|
|
e.sourceEvent.stopPropagation();
|
|
})
|
|
.on("drag", (e, d) => {
|
|
const dx = e.x - d.x;
|
|
const dy = e.y - d.y;
|
|
d.x = e.x;
|
|
d.y = e.y;
|
|
|
|
nodes.forEach(n => {
|
|
if (n.parent === d.id) {
|
|
n.x += dx;
|
|
n.y += dy;
|
|
}
|
|
});
|
|
update();
|
|
})
|
|
.on("end", (e, d) => d.dragging = false)
|
|
);
|
|
|
|
nodeSel.append("circle")
|
|
.attr("r", d =>
|
|
d.type === 'category' ? 18 :
|
|
d.type === 'tool' ? 11 : 8
|
|
)
|
|
.attr("fill", d =>
|
|
d.type === 'category' ? "#ff5733" :
|
|
d.type === 'tool' ? "#1e90ff" : "#00ffaa"
|
|
);
|
|
|
|
nodeSel.append("text")
|
|
.attr("dy", -20)
|
|
.attr("text-anchor", "middle")
|
|
.attr("font-size", "12px")
|
|
.text(d => d.label);
|
|
|
|
nodeSel
|
|
.on("click", (e, d) => d.url && window.open(d.url, "_blank"))
|
|
.on("dblclick", (e, d) => expandNode(d));
|
|
|
|
update();
|
|
}
|
|
|
|
function update() {
|
|
nodeSel.attr("transform", d => `translate(${d.x},${d.y})`);
|
|
linkSel
|
|
.attr("x1", d => nodeMap.get(d.source).x)
|
|
.attr("y1", d => nodeMap.get(d.source).y)
|
|
.attr("x2", d => nodeMap.get(d.target).x)
|
|
.attr("y2", d => nodeMap.get(d.target).y);
|
|
}
|
|
|
|
function idleMotion() {
|
|
const cx = innerWidth / 2;
|
|
const cy = innerHeight / 2;
|
|
const boundX = innerWidth * 0.45;
|
|
const boundY = innerHeight * 0.35;
|
|
|
|
nodes.forEach((a, i) => {
|
|
if (a.dragging) return;
|
|
|
|
a.x += a.vx;
|
|
a.y += a.vy;
|
|
|
|
if (a.x < cx - boundX || a.x > cx + boundX) a.vx *= -1;
|
|
if (a.y < cy - boundY || a.y > cy + boundY) a.vy *= -1;
|
|
|
|
for (let j = i + 1; j < nodes.length; j++) {
|
|
const b = nodes[j];
|
|
const dx = a.x - b.x;
|
|
const dy = a.y - b.y;
|
|
const dist = Math.sqrt(dx*dx + dy*dy);
|
|
|
|
if (dist > 0 && dist < SEPARATION_DIST) {
|
|
const push = (SEPARATION_DIST - dist) / SEPARATION_DIST * SEPARATION_FORCE;
|
|
a.x += dx * push;
|
|
a.y += dy * push;
|
|
b.x -= dx * push;
|
|
b.y -= dy * push;
|
|
}
|
|
}
|
|
});
|
|
|
|
update();
|
|
requestAnimationFrame(idleMotion);
|
|
}
|
|
</script>
|
|
</body>
|
|
</html>
|