update web based and resouses

This commit is contained in:
Jieyab89
2026-01-23 13:37:12 +07:00
parent 3e7ffd89ae
commit 8d83c253b6
3 changed files with 289 additions and 127 deletions

View File

@@ -1,5 +1,9 @@
# OSINT CHEAT SHEET - List OSINT Tools [![Github Badge](https://img.shields.io/badge/-Jieyab89-black?style=flat&logo=github&logoColor=white&link=https://github.com/Jieyab89/)](https://github.com/Jieyab89)
![image](https://github.com/user-attachments/assets/6f1fbfe1-11a4-4c1b-b5fd-669107197ca2)
Contains a list of OSINT tools, OSINT tips, datasets, Maltego transform and others. There are free and paid tools you can use and owner is not responsible (take your own risks), only for knowledge or educational purposes. Apologies if some of the resources are no longer available or contain errors, as the owner does not regularly check the status of these resources, If there is new information, the owner will add it to this repo along with the category. If you want to read about techniques and intelligence some have already been added to the Wiki page [Jieyaboo Wiki](https://github.com/Jieyab89/OSINT-Cheat-sheet/wiki) The owner will add them back. If there are any errors let us know thank you.
# See Jieyab Wiki pages
Contains information about OSINT tips, OSINT branches and knowledge about intelligence
@@ -10,12 +14,15 @@ Contains information about OSINT tips, OSINT branches and knowledge about intell
Contains information about OSINT tips, write up usage resouces and more tips about OSINT and OSINT branch
[![Wiki](https://img.shields.io/badge/GitHub_Wiki-📖%20Jieyab89-blue?style=for-the-badge)](https://jieyab89-osint.gitbook.io/jieyab89-osint-cheat-sheet-wiki-tips)
![image](https://github.com/user-attachments/assets/37d7d761-c1f3-40f5-9ecd-d79457ee8a6e)
Contains a list of OSINT tools, OSINT tips, datasets, Maltego transform and others. There are free and paid tools you can use and owner is not responsible (take your own risks), only for knowledge or educational purposes. Apologies if some of the resources are no longer available or contain errors, as the owner does not regularly check the status of these resources, If there is new information, the owner will add it to this repo along with the category. If you want to read about techniques and intelligence some have already been added to the Wiki page [Jieyaboo Wiki](https://github.com/Jieyab89/OSINT-Cheat-sheet/wiki) The owner will add them back. If there are any errors let us know thank you.
- [Intelligence Base & Knowledge Base](https://jieyab89-osint.gitbook.io/jieyab89-osint-cheat-sheet-wiki-tips/intelligence-base/intelligence-base-and-knowledge-base)
- [All About Doxing](https://jieyab89-osint.gitbook.io/jieyab89-osint-cheat-sheet-wiki-tips/intelligence-base/all-about-doxing)
- [All About OSINT Matters Things in OSINT](https://jieyab89-osint.gitbook.io/jieyab89-osint-cheat-sheet-wiki-tips/intelligence-base/all-about-osint-thing-in-osint)
- [All About SIGINT Signal Intelligence](https://jieyab89-osint.gitbook.io/jieyab89-osint-cheat-sheet-wiki-tips/intelligence-base/all-about-sigint-signal-intelligence)
- [Cell Investigations](https://jieyab89-osint.gitbook.io/jieyab89-osint-cheat-sheet-wiki-tips/intelligence-base/intelligence-cell-phone)
- [Geospatial Intelligence](https://jieyab89-osint.gitbook.io/jieyab89-osint-cheat-sheet-wiki-tips/intelligence-base/geospatial-intelligence)
- [What is Data Enrichment & Pivoting](https://jieyab89-osint.gitbook.io/jieyab89-osint-cheat-sheet-wiki-tips/intelligence-base/what-is-data-enrichment-and-pivoting)
- [How to Spot a Deepfake](https://jieyab89-osint.gitbook.io/jieyab89-osint-cheat-sheet-wiki-tips/osint-tool-resouces-usage/how-to-spot-a-deepfake)
- [OSINT Inside About Data Breach](https://jieyab89-osint.gitbook.io/jieyab89-osint-cheat-sheet-wiki-tips/intelligence-base/inside-about-data-breach-in-osint)
# Tips & Trick Safe Guide Using Resources
@@ -1219,6 +1226,7 @@ Web Defacement Archive
# Data Breached OSINT
- [telegra.ph](https://telegra.ph/) You can use dork for search data
- [leakix](https://leakix.net/)
- [leakScraper](https://github.com/Acceis/leakScraper)
- [clatscope](https://github.com/clats97/clatscope)
@@ -1661,6 +1669,7 @@ If you has found the person phone number you can check at data breach, e wallet,
# Finding Usernames
- [dmeta](https://dmeta.me/)
- [360username](https://360username.com/)
- [TraceFind](https://tracefind.info)
- [Snusbase](https://snusbase.com/)
@@ -2166,6 +2175,7 @@ Google queries for MySpace
# Email Tracking
- [dmeta](https://dmeta.me/)
- [mosint](https://github.com/alpkeskin/mosint)
- [TraceFind](https://tracefind.info)
- [intelbase](https://intelbase.is/)
@@ -2480,6 +2490,7 @@ Telegram tips. Change the hash value, username, phone number on the endpoint or
- [Web Archive](https://web.archive.org/)
- [documentcloud](https://www.documentcloud.org/)
- [meawfy - mega.nz search engine](https://meawfy.com/)
- [telegra.ph](https://telegra.ph/) You can use dork for search data
Scribd viewer
@@ -2706,6 +2717,7 @@ Scribd viewer
- [unscreen](https://www.unscreen.com/)
- [shutterstock](https://www.shutterstock.com/royalty-free/reverse-image-search-for-video)
- [invid-project](https://www.invid-project.eu/tools-and-services/invid-verification-plugin/)
- [asciinema](https://asciinema.org/)
# Geospatial Research and Mapping Tools
@@ -6145,6 +6157,7 @@ You can search nickname, hacker team and hacker archive like web defacement data
- [tubeoffline - Tools and media downloader](https://www.tubeoffline.com/)
- [humantraffickingsearch](https://humantraffickingsearch.org/)
- [turboscribe - YT Tools and downloander and conveter](https://turboscribe.ai/)
- [telegra.ph](https://telegra.ph/) You can use dork for search data
List available data source OSINT for other country

View File

@@ -1,4 +1,4 @@
![image](https://github.com/user-attachments/assets/37d7d761-c1f3-40f5-9ecd-d79457ee8a6e)
![image](https://github.com/user-attachments/assets/6f1fbfe1-11a4-4c1b-b5fd-669107197ca2)
# USAGE
@@ -34,4 +34,16 @@ Then access it with your IP or localhost into web browser
# Search
You can seaerch on search box with name category example "Jieyab89 Wiki"
You can search on search box with name category example "Jieyab89 Wiki" and hit the enter
# Expand Node
Double click the parent node the color is red after that there is child node was appear the color is blue
# Example Result
![image](https://github.com/user-attachments/assets/55876d38-3a3b-4099-8813-4ee5d3a84e89)
Here the result
![image](https://github.com/user-attachments/assets/08898d28-f5d3-4e22-b3a7-544800bb7c1a)

View File

@@ -70,6 +70,24 @@
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>
@@ -78,133 +96,252 @@
<input type="text" id="search" placeholder="Search by Category Name and Jieyab89 Wiki's">
<svg></svg>
<script>
let allNodes = [], allLinks = [];
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(response => response.json())
.then(data => {
allNodes = [];
allLinks = [];
const nodeMap = new Map();
data.forEach(category => {
let catNode = { id: category.category, type: 'category' };
allNodes.push(catNode);
nodeMap.set(category.category, catNode);
category.items.forEach(item => {
let toolNode = { id: item.name, url: item.url, type: 'tool' };
allNodes.push(toolNode);
allLinks.push({ source: category.category, target: item.name });
nodeMap.set(item.name, toolNode);
});
});
updateGraph(allNodes, allLinks);
})
.catch(error => console.error("Error loading JSON:", error));
function updateGraph(nodes, links) {
d3.select("svg").selectAll("*").remove();
const width = window.innerWidth;
const height = window.innerHeight;
const svg = d3.select("svg")
.attr("width", width)
.attr("height", height)
.call(d3.zoom().on("zoom", (event) => {
svgGroup.attr("transform", event.transform);
}));
let svgGroup = svg.append("g");
const simulation = d3.forceSimulation(nodes)
.force("link", d3.forceLink(links).id(d => d.id).distance(150))
.force("charge", d3.forceManyBody().strength(-300))
.force("center", d3.forceCenter(width / 2, height / 2))
.force("collision", d3.forceCollide().radius(40));
const link = svgGroup.append("g")
.selectAll("line")
.data(links)
.enter().append("line")
.attr("class", "link");
const node = svgGroup.append("g")
.selectAll("g")
.data(nodes)
.enter().append("g");
node.append("circle")
.attr("r", d => d.type === 'category' ? 12 : 8)
.attr("fill", d => d.type === 'category' ? "#FF5733" : "#1E90FF")
.call(d3.drag()
.on("start", dragstarted)
.on("drag", dragged)
.on("end", dragended));
node.append("text")
.attr("dy", -15)
.attr("text-anchor", "middle")
.text(d => d.id);
node.on("click", (event, d) => {
if (d.url) {
window.open(d.url, "_blank");
}
});
simulation.on("tick", () => {
link
.attr("x1", d => d.source.x)
.attr("y1", d => d.source.y)
.attr("x2", d => d.target.x)
.attr("y2", d => d.target.y);
node
.attr("transform", d => `translate(${d.x},${d.y})`);
});
}
document.getElementById("search").addEventListener("input", function() {
const searchTerm = this.value.toLowerCase();
if (searchTerm === "") {
updateGraph(allNodes, allLinks);
return;
}
const filteredNodes = [];
const filteredLinks = [];
allNodes.forEach(node => {
if (node.type === 'category' && node.id.toLowerCase().includes(searchTerm)) {
filteredNodes.push(node);
allLinks.forEach(link => {
if (link.source.id === node.id) {
filteredNodes.push(link.target);
filteredLinks.push(link);
}
});
}
});
updateGraph(filteredNodes, filteredLinks);
.then(r => r.json())
.then(data => {
rawData = data;
initCategories();
requestAnimationFrame(idleMotion);
});
function dragstarted(event, d) {
if (!event.active) event.sourceEvent.stopPropagation();
d.fx = d.x;
d.fy = d.y;
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 dragged(event, d) {
d.fx = event.x;
d.fy = event.y;
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 dragended(event, d) {
d.fx = null;
d.fy = null;
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>