rephrasing, prepare for methods implementation
This commit is contained in:
parent
ba3a5461b4
commit
1d048e816c
@ -14,7 +14,7 @@ CC24-Hub ist eine statische Website, die eine strukturierte Übersicht über bew
|
|||||||
- **Tool-Katalog**: Umfassende Sammlung von Open-Source und kommerziellen Forensik-Tools
|
- **Tool-Katalog**: Umfassende Sammlung von Open-Source und kommerziellen Forensik-Tools
|
||||||
- **Matrix-Ansicht**: Visualisierung der Tools nach Domänen und Prozess-Phasen
|
- **Matrix-Ansicht**: Visualisierung der Tools nach Domänen und Prozess-Phasen
|
||||||
- **Erweiterte Filterung**: Suche nach Name, Beschreibung, Tags, Domäne und Phase
|
- **Erweiterte Filterung**: Suche nach Name, Beschreibung, Tags, Domäne und Phase
|
||||||
- **Self-Hosted Integration**: Direkte Links zu gehosteten Tool-Instanzen
|
- **CC24-Server Integration**: Direkte Links zu gehosteten Tool-Instanzen
|
||||||
- **Status-Monitoring**: Live-Überwachung der verfügbaren Services
|
- **Status-Monitoring**: Live-Überwachung der verfügbaren Services
|
||||||
- **Responsive Design**: Optimiert für Desktop und Mobile
|
- **Responsive Design**: Optimiert für Desktop und Mobile
|
||||||
- **Dark/Light Mode**: Automatische Theme-Erkennung mit manueller Überschreibung
|
- **Dark/Light Mode**: Automatische Theme-Erkennung mit manueller Überschreibung
|
||||||
|
@ -472,7 +472,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="stat-card">
|
<div class="stat-card">
|
||||||
<div class="stat-number" id="selfHostedCount">0</div>
|
<div class="stat-number" id="selfHostedCount">0</div>
|
||||||
<div class="stat-label">Self-Hosted</div>
|
<div class="stat-label">CC24-Server</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="stat-card">
|
<div class="stat-card">
|
||||||
<div class="stat-number" id="knowledgebaseCount">0</div>
|
<div class="stat-number" id="knowledgebaseCount">0</div>
|
||||||
@ -550,7 +550,7 @@
|
|||||||
<select id="accessType">
|
<select id="accessType">
|
||||||
<option value="">Select Type</option>
|
<option value="">Select Type</option>
|
||||||
<option value="download">Download</option>
|
<option value="download">Download</option>
|
||||||
<option value="self-hosted">Self-Hosted</option>
|
<option value="server-based">CC24-Server</option>
|
||||||
<option value="commercial">Commercial</option>
|
<option value="commercial">Commercial</option>
|
||||||
<option value="OS">Operating System</option>
|
<option value="OS">Operating System</option>
|
||||||
</select>
|
</select>
|
||||||
@ -812,7 +812,7 @@
|
|||||||
document.getElementById('totalPhases').textContent = yamlData.phases ? yamlData.phases.length : 0;
|
document.getElementById('totalPhases').textContent = yamlData.phases ? yamlData.phases.length : 0;
|
||||||
document.getElementById('totalDomainAgnostic').textContent = yamlData['domain-agnostic-software'] ? yamlData['domain-agnostic-software'].length : 0;
|
document.getElementById('totalDomainAgnostic').textContent = yamlData['domain-agnostic-software'] ? yamlData['domain-agnostic-software'].length : 0;
|
||||||
|
|
||||||
const selfHosted = tools.filter(tool => tool.accessType === 'self-hosted').length;
|
const selfHosted = tools.filter(tool => tool.accessType === 'server-based').length;
|
||||||
document.getElementById('selfHostedCount').textContent = selfHosted;
|
document.getElementById('selfHostedCount').textContent = selfHosted;
|
||||||
|
|
||||||
const knowledgebaseTools = tools.filter(tool => tool.knowledgebase === true).length;
|
const knowledgebaseTools = tools.filter(tool => tool.knowledgebase === true).length;
|
||||||
|
@ -18,10 +18,10 @@ const domainAgnosticSoftware = data['domain-agnostic-software'] || [];
|
|||||||
<path d="M9 11H5a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7a2 2 0 0 0-2-2h-4"/>
|
<path d="M9 11H5a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7a2 2 0 0 0-2-2h-4"/>
|
||||||
<path d="M9 11V7a3 3 0 0 1 6 0v4"/>
|
<path d="M9 11V7a3 3 0 0 1 6 0v4"/>
|
||||||
</svg>
|
</svg>
|
||||||
KI-gestützte Tool-Empfehlungen
|
KI-gestützte Workflow-Empfehlungen
|
||||||
</h2>
|
</h2>
|
||||||
<p id="ai-description" class="text-muted" style="max-width: 700px; margin: 0 auto; line-height: 1.6;">
|
<p id="ai-description" class="text-muted" style="max-width: 700px; margin: 0 auto; line-height: 1.6;">
|
||||||
Beschreiben Sie Ihr forensisches Szenario und erhalten Sie maßgeschneiderte Tool-Empfehlungen
|
Beschreiben Sie Ihr forensisches Szenario und erhalten Sie maßgeschneiderte Workflow-Empfehlungen
|
||||||
basierend auf bewährten DFIR-Workflows und der verfügbaren Software-Datenbank.
|
basierend auf bewährten DFIR-Workflows und der verfügbaren Software-Datenbank.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@ -45,7 +45,7 @@ const domainAgnosticSoftware = data['domain-agnostic-software'] || [];
|
|||||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="margin-right: 0.5rem; vertical-align: middle;">
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="margin-right: 0.5rem; vertical-align: middle;">
|
||||||
<path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/>
|
<path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/>
|
||||||
</svg>
|
</svg>
|
||||||
Spezifisches Tool
|
Spezifische Software oder Methode
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -145,15 +145,15 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
const modeConfig = {
|
const modeConfig = {
|
||||||
workflow: {
|
workflow: {
|
||||||
placeholder: "Beschreiben Sie Ihr forensisches Szenario... z.B. 'Verdacht auf Ransomware-Angriff auf Windows-Domänencontroller mit verschlüsselten Dateien und verdächtigen Netzwerkverbindungen'",
|
placeholder: "Beschreiben Sie Ihr forensisches Szenario... z.B. 'Verdacht auf Ransomware-Angriff auf Windows-Domänencontroller mit verschlüsselten Dateien und verdächtigen Netzwerkverbindungen'",
|
||||||
description: "Beschreiben Sie Ihr forensisches Szenario und erhalten Sie maßgeschneiderte Tool-Empfehlungen basierend auf bewährten DFIR-Workflows und der verfügbaren Software-Datenbank.",
|
description: "Beschreiben Sie Ihr forensisches Szenario und erhalten Sie maßgeschneiderte Empfehlungen basierend auf bewährten DFIR-Workflows und der verfügbaren Software-Datenbank.",
|
||||||
submitText: "Empfehlungen generieren",
|
submitText: "Empfehlungen generieren",
|
||||||
loadingText: "Analysiere Szenario und generiere Empfehlungen..."
|
loadingText: "Analysiere Szenario und generiere Empfehlungen..."
|
||||||
},
|
},
|
||||||
tool: {
|
tool: {
|
||||||
placeholder: "Beschreiben Sie Ihr spezifisches Problem oder Ihre Anforderung... z.B. 'Ich benötige ein Tool zur Analyse von Android-Backups mit WhatsApp-Nachrichten und GPS-Daten'",
|
placeholder: "Beschreiben Sie Ihr spezifisches Problem oder Ihre Anforderung... z.B. 'Ich benötige eine Anwendung zur Analyse von Android-Backups mit WhatsApp-Nachrichten und GPS-Daten'",
|
||||||
description: "Beschreiben Sie Ihr spezifisches Problem oder Ihre Anforderung und erhalten Sie 1-3 gezielt passende Tool-Empfehlungen mit detaillierten Erklärungen zur optimalen Anwendung.",
|
description: "Beschreiben Sie Ihr spezifisches Problem oder Ihre Anforderung und erhalten Sie 1-3 gezielt passende Empfehlungen mit detaillierten Erklärungen zur optimalen Anwendung.",
|
||||||
submitText: "Tool-Empfehlungen finden",
|
submitText: "Empfehlungen finden",
|
||||||
loadingText: "Analysiere Anforderungen und suche passende Tools..."
|
loadingText: "Analysiere Anforderungen und suche passende Methode..."
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -261,7 +261,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
|
|
||||||
// Disable submit button
|
// Disable submit button
|
||||||
aiSubmitBtn.disabled = true;
|
aiSubmitBtn.disabled = true;
|
||||||
submitBtnText.textContent = currentMode === 'workflow' ? 'Generiere Empfehlungen...' : 'Suche passende Tools...';
|
submitBtnText.textContent = currentMode === 'workflow' ? 'Generiere Empfehlungen...' : 'Suche passende Methode...';
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await fetch('/api/ai/query', {
|
const response = await fetch('/api/ai/query', {
|
||||||
@ -474,7 +474,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
|
|
||||||
<div class="tool-rec-metadata">
|
<div class="tool-rec-metadata">
|
||||||
<div style="display: flex; flex-wrap: wrap; gap: 0.25rem; margin-bottom: 0.5rem;">
|
<div style="display: flex; flex-wrap: wrap; gap: 0.25rem; margin-bottom: 0.5rem;">
|
||||||
${hasValidProjectUrl ? '<span class="badge badge-primary">Self-Hosted</span>' : ''}
|
${hasValidProjectUrl ? '<span class="badge badge-primary">CC24-Server</span>' : ''}
|
||||||
${tool.license !== 'Proprietary' ? '<span class="badge badge-success">Open Source</span>' : ''}
|
${tool.license !== 'Proprietary' ? '<span class="badge badge-success">Open Source</span>' : ''}
|
||||||
<span class="badge" style="background-color: var(--color-bg-tertiary); color: var(--color-text);">${tool.skillLevel}</span>
|
<span class="badge" style="background-color: var(--color-bg-tertiary); color: var(--color-text);">${tool.skillLevel}</span>
|
||||||
</div>
|
</div>
|
||||||
@ -631,7 +631,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
<span class="badge" style="background-color: ${suitabilityColors[toolRec.suitability_score]}; color: white; font-size: 0.8125rem;">
|
<span class="badge" style="background-color: ${suitabilityColors[toolRec.suitability_score]}; color: white; font-size: 0.8125rem;">
|
||||||
${getSuitabilityText(toolRec.suitability_score)}
|
${getSuitabilityText(toolRec.suitability_score)}
|
||||||
</span>
|
</span>
|
||||||
${hasValidProjectUrl ? '<span class="badge badge-primary">Self-Hosted</span>' : ''}
|
${hasValidProjectUrl ? '<span class="badge badge-primary">CC24-Server</span>' : ''}
|
||||||
${fullTool.license !== 'Proprietary' ? '<span class="badge badge-success">Open Source</span>' : ''}
|
${fullTool.license !== 'Proprietary' ? '<span class="badge badge-success">Open Source</span>' : ''}
|
||||||
${fullTool.knowledgebase === true ? '<span class="badge badge-error">📖</span>' : ''}
|
${fullTool.knowledgebase === true ? '<span class="badge badge-error">📖</span>' : ''}
|
||||||
</div>
|
</div>
|
||||||
@ -658,7 +658,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
<path d="M9 11H5a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7a2 2 0 0 0-2-2h-4"/>
|
<path d="M9 11H5a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7a2 2 0 0 0-2-2h-4"/>
|
||||||
<path d="M9 11V7a3 3 0 0 1 6 0v4"/>
|
<path d="M9 11V7a3 3 0 0 1 6 0v4"/>
|
||||||
</svg>
|
</svg>
|
||||||
Warum dieses Tool?
|
Warum diese Methode?
|
||||||
</h4>
|
</h4>
|
||||||
${formatWorkflowSuggestion(toolRec.detailed_explanation)}
|
${formatWorkflowSuggestion(toolRec.detailed_explanation)}
|
||||||
${toolRec.implementation_approach ? `
|
${toolRec.implementation_approach ? `
|
||||||
|
@ -37,7 +37,7 @@ const cardClass = hasValidProjectUrl ? 'card card-hosted tool-card' : (tool.lice
|
|||||||
<div class="tool-card-header">
|
<div class="tool-card-header">
|
||||||
<h3>{tool.name}</h3>
|
<h3>{tool.name}</h3>
|
||||||
<div class="tool-card-badges">
|
<div class="tool-card-badges">
|
||||||
{hasValidProjectUrl && <span class="badge badge-primary">Self-Hosted</span>}
|
{hasValidProjectUrl && <span class="badge badge-primary">CC24-Server</span>}
|
||||||
{tool.license !== 'Proprietary' && <span class="badge badge-success">OSS</span>}
|
{tool.license !== 'Proprietary' && <span class="badge badge-success">OSS</span>}
|
||||||
{hasKnowledgebase && <span class="badge badge-error">📖</span>}
|
{hasKnowledgebase && <span class="badge badge-error">📖</span>}
|
||||||
</div>
|
</div>
|
||||||
|
@ -337,7 +337,7 @@ const sortedTags = Object.entries(tagFrequency)
|
|||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Sort filtered results: self-hosted first, proprietary last
|
// Sort filtered results: server-based first, proprietary last
|
||||||
filtered.sort((a, b) => {
|
filtered.sort((a, b) => {
|
||||||
const aHosted = isToolHosted(a);
|
const aHosted = isToolHosted(a);
|
||||||
const bHosted = isToolHosted(b);
|
const bHosted = isToolHosted(b);
|
||||||
|
@ -67,7 +67,7 @@ domains.forEach((domain: any) => {
|
|||||||
<div class="tool-compact-header">
|
<div class="tool-compact-header">
|
||||||
<h4 style="margin: 0; font-size: 0.875rem; font-weight: 600;">{tool.name}</h4>
|
<h4 style="margin: 0; font-size: 0.875rem; font-weight: 600;">{tool.name}</h4>
|
||||||
<div style="display: flex; gap: 0.25rem;">
|
<div style="display: flex; gap: 0.25rem;">
|
||||||
{hasValidProjectUrl && <span class="badge badge--mini badge-primary">Self-Hosted</span>}
|
{hasValidProjectUrl && <span class="badge badge--mini badge-primary">CC24-Server</span>}
|
||||||
{tool.license !== 'Proprietary' && <span class="badge badge--mini badge-success">OSS</span>}
|
{tool.license !== 'Proprietary' && <span class="badge badge--mini badge-success">OSS</span>}
|
||||||
{tool.knowledgebase === true && <span class="badge badge--mini badge-error">Infos 📖</span>}
|
{tool.knowledgebase === true && <span class="badge badge--mini badge-error">Infos 📖</span>}
|
||||||
</div>
|
</div>
|
||||||
@ -90,7 +90,7 @@ domains.forEach((domain: any) => {
|
|||||||
|
|
||||||
<!-- DFIR Tools Matrix -->
|
<!-- DFIR Tools Matrix -->
|
||||||
<div id="dfir-matrix-section">
|
<div id="dfir-matrix-section">
|
||||||
<h2 style="margin-bottom: 1rem; color: var(--color-text);">DFIR Tools Matrix</h2>
|
<h2 style="margin-bottom: 1rem; color: var(--color-text);">MATRIX</h2>
|
||||||
<table class="matrix-table">
|
<table class="matrix-table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
@ -255,7 +255,7 @@ domains.forEach((domain: any) => {
|
|||||||
|
|
||||||
badgesContainer.innerHTML = '';
|
badgesContainer.innerHTML = '';
|
||||||
if (hasValidProjectUrl) {
|
if (hasValidProjectUrl) {
|
||||||
badgesContainer.innerHTML += '<span class="badge badge-primary">Self-Hosted</span>';
|
badgesContainer.innerHTML += '<span class="badge badge-primary">CC24-Server</span>';
|
||||||
}
|
}
|
||||||
if (tool.license !== 'Proprietary') {
|
if (tool.license !== 'Proprietary') {
|
||||||
badgesContainer.innerHTML += '<span class="badge badge-success">Open Source</span>';
|
badgesContainer.innerHTML += '<span class="badge badge-success">Open Source</span>';
|
||||||
|
@ -89,7 +89,7 @@ tools:
|
|||||||
domain-agnostic-software:
|
domain-agnostic-software:
|
||||||
- collaboration-general
|
- collaboration-general
|
||||||
skillLevel: intermediate
|
skillLevel: intermediate
|
||||||
accessType: self-hosted
|
accessType: server-based
|
||||||
url: https://github.com/TheHive-Project/TheHive
|
url: https://github.com/TheHive-Project/TheHive
|
||||||
projectUrl: ''
|
projectUrl: ''
|
||||||
license: Community Edition (Free) / Commercial
|
license: Community Edition (Free) / Commercial
|
||||||
@ -122,7 +122,7 @@ tools:
|
|||||||
platforms:
|
platforms:
|
||||||
- Web
|
- Web
|
||||||
skillLevel: intermediate
|
skillLevel: intermediate
|
||||||
accessType: self-hosted
|
accessType: server-based
|
||||||
url: https://misp-project.org/
|
url: https://misp-project.org/
|
||||||
projectUrl: https://misp.cc24.dev
|
projectUrl: https://misp.cc24.dev
|
||||||
license: AGPL-3.0
|
license: AGPL-3.0
|
||||||
@ -154,7 +154,7 @@ tools:
|
|||||||
- Web
|
- Web
|
||||||
domain-agnostic-software: null
|
domain-agnostic-software: null
|
||||||
skillLevel: intermediate
|
skillLevel: intermediate
|
||||||
accessType: self-hosted
|
accessType: server-based
|
||||||
url: https://timesketch.org/
|
url: https://timesketch.org/
|
||||||
projectUrl: ''
|
projectUrl: ''
|
||||||
license: Apache 2.0
|
license: Apache 2.0
|
||||||
@ -286,7 +286,7 @@ tools:
|
|||||||
- Web
|
- Web
|
||||||
domain-agnostic-software: null
|
domain-agnostic-software: null
|
||||||
skillLevel: advanced
|
skillLevel: advanced
|
||||||
accessType: self-hosted
|
accessType: server-based
|
||||||
url: https://github.com/cert-ee/cuckoo3
|
url: https://github.com/cert-ee/cuckoo3
|
||||||
projectUrl: ''
|
projectUrl: ''
|
||||||
license: GPL-3.0
|
license: GPL-3.0
|
||||||
@ -382,7 +382,7 @@ tools:
|
|||||||
- Web
|
- Web
|
||||||
domain-agnostic-software: null
|
domain-agnostic-software: null
|
||||||
skillLevel: beginner
|
skillLevel: beginner
|
||||||
accessType: self-hosted
|
accessType: server-based
|
||||||
url: https://gchq.github.io/CyberChef/
|
url: https://gchq.github.io/CyberChef/
|
||||||
projectUrl: ''
|
projectUrl: ''
|
||||||
license: Apache 2.0
|
license: Apache 2.0
|
||||||
@ -420,7 +420,7 @@ tools:
|
|||||||
- Web
|
- Web
|
||||||
domain-agnostic-software: null
|
domain-agnostic-software: null
|
||||||
skillLevel: advanced
|
skillLevel: advanced
|
||||||
accessType: self-hosted
|
accessType: server-based
|
||||||
url: https://www.velociraptor.app/
|
url: https://www.velociraptor.app/
|
||||||
projectUrl: https://raptor.cc24.dev
|
projectUrl: https://raptor.cc24.dev
|
||||||
license: Apache 2.0
|
license: Apache 2.0
|
||||||
@ -456,7 +456,7 @@ tools:
|
|||||||
- Web
|
- Web
|
||||||
domain-agnostic-software: null
|
domain-agnostic-software: null
|
||||||
skillLevel: advanced
|
skillLevel: advanced
|
||||||
accessType: self-hosted
|
accessType: server-based
|
||||||
url: https://github.com/google/grr
|
url: https://github.com/google/grr
|
||||||
projectUrl: ''
|
projectUrl: ''
|
||||||
license: Apache 2.0
|
license: Apache 2.0
|
||||||
@ -489,7 +489,7 @@ tools:
|
|||||||
- Linux
|
- Linux
|
||||||
domain-agnostic-software: null
|
domain-agnostic-software: null
|
||||||
skillLevel: expert
|
skillLevel: expert
|
||||||
accessType: self-hosted
|
accessType: server-based
|
||||||
url: https://arkime.com/
|
url: https://arkime.com/
|
||||||
projectUrl: ''
|
projectUrl: ''
|
||||||
license: Apache 2.0
|
license: Apache 2.0
|
||||||
@ -621,7 +621,7 @@ tools:
|
|||||||
- Web
|
- Web
|
||||||
domain-agnostic-software: null
|
domain-agnostic-software: null
|
||||||
skillLevel: intermediate
|
skillLevel: intermediate
|
||||||
accessType: self-hosted
|
accessType: server-based
|
||||||
url: https://neo4j.com/
|
url: https://neo4j.com/
|
||||||
projectUrl: https://graph.cc24.dev
|
projectUrl: https://graph.cc24.dev
|
||||||
license: GPL-3.0 / Commercial
|
license: GPL-3.0 / Commercial
|
||||||
@ -689,7 +689,7 @@ tools:
|
|||||||
domain-agnostic-software:
|
domain-agnostic-software:
|
||||||
- collaboration-general
|
- collaboration-general
|
||||||
skillLevel: novice
|
skillLevel: novice
|
||||||
accessType: self-hosted
|
accessType: server-based
|
||||||
url: https://nextcloud.com/
|
url: https://nextcloud.com/
|
||||||
projectUrl: https://cloud.cc24.dev
|
projectUrl: https://cloud.cc24.dev
|
||||||
license: AGPL-3.0
|
license: AGPL-3.0
|
||||||
@ -719,7 +719,7 @@ tools:
|
|||||||
domain-agnostic-software:
|
domain-agnostic-software:
|
||||||
- collaboration-general
|
- collaboration-general
|
||||||
skillLevel: beginner
|
skillLevel: beginner
|
||||||
accessType: self-hosted
|
accessType: server-based
|
||||||
url: https://gitea.io/
|
url: https://gitea.io/
|
||||||
projectUrl: https://git.cc24.dev
|
projectUrl: https://git.cc24.dev
|
||||||
license: MIT
|
license: MIT
|
||||||
@ -859,7 +859,7 @@ tools:
|
|||||||
- Web
|
- Web
|
||||||
domain-agnostic-software: null
|
domain-agnostic-software: null
|
||||||
skillLevel: intermediate
|
skillLevel: intermediate
|
||||||
accessType: self-hosted
|
accessType: server-based
|
||||||
url: https://graphsense.org/
|
url: https://graphsense.org/
|
||||||
projectUrl: ''
|
projectUrl: ''
|
||||||
license: MIT
|
license: MIT
|
||||||
|
@ -177,9 +177,9 @@ import BaseLayout from '../layouts/BaseLayout.astro';
|
|||||||
|
|
||||||
<div style="display: grid; gap: 1.25rem;">
|
<div style="display: grid; gap: 1.25rem;">
|
||||||
<div style="background-color: var(--color-bg-secondary); padding: 1.25rem; border-radius: 0.5rem;">
|
<div style="background-color: var(--color-bg-secondary); padding: 1.25rem; border-radius: 0.5rem;">
|
||||||
<h4 style="margin: 0 0 0.5rem 0; color: var(--color-accent);">🔍 Tool-Vorschläge</h4>
|
<h4 style="margin: 0 0 0.5rem 0; color: var(--color-accent);">🔍 Vorschläge</h4>
|
||||||
<p style="margin: 0;">
|
<p style="margin: 0;">
|
||||||
Ich suche stets nach Ergänzungen für die Liste. Falls euch interessante Tools einfallen –
|
Ich suche stets nach Ergänzungen für die Liste. Falls euch interessante Tools oder Methoden einfallen –
|
||||||
schreibt mir gerne auf Signal!
|
schreibt mir gerne auf Signal!
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@ -219,8 +219,8 @@ import BaseLayout from '../layouts/BaseLayout.astro';
|
|||||||
<!-- Footer Note -->
|
<!-- Footer Note -->
|
||||||
<div style="text-align: center; padding: 2rem; background-color: var(--color-bg-secondary); border-radius: 0.75rem; border: 1px solid var(--color-border);">
|
<div style="text-align: center; padding: 2rem; background-color: var(--color-bg-secondary); border-radius: 0.75rem; border: 1px solid var(--color-border);">
|
||||||
<p style="margin: 0; color: var(--color-text-secondary); font-size: 0.875rem;">
|
<p style="margin: 0; color: var(--color-text-secondary); font-size: 0.875rem;">
|
||||||
<strong>Akademisches Projekt</strong> | Seminargruppe CC24-w1 |
|
<strong>Inoffizielles Studienprojekt</strong> | Seminargruppe CC24-w1 |
|
||||||
Alle Tools und Dienste dienen ausschließlich Bildungs- und Forschungszwecken
|
Alle dargestellte Software, Dienste und Methoden dienen Bildungs- und Forschungszwecken sowie der Weiterentwicklung der IT-forensischen Methodik.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
@ -119,12 +119,12 @@ function createWorkflowSystemPrompt(toolsData: any): string {
|
|||||||
|
|
||||||
// Build dynamic phase descriptions for tool selection
|
// Build dynamic phase descriptions for tool selection
|
||||||
const phaseDescriptions = regularPhases.map((phase: any) =>
|
const phaseDescriptions = regularPhases.map((phase: any) =>
|
||||||
`- ${phase.name}: ${phase.description || 'Tools for this phase'}`
|
`- ${phase.name}: ${phase.description || 'Tools/Methods for this phase'}`
|
||||||
).join('\n');
|
).join('\n');
|
||||||
|
|
||||||
// Add domain-agnostic software descriptions
|
// Add domain-agnostic software descriptions
|
||||||
const domainAgnosticDescriptions = domainAgnosticSoftware.map((section: any) =>
|
const domainAgnosticDescriptions = domainAgnosticSoftware.map((section: any) =>
|
||||||
`- ${section.name}: ${section.description || 'Cross-cutting tools and platforms'}`
|
`- ${section.name}: ${section.description || 'Cross-cutting software and platforms'}`
|
||||||
).join('\n');
|
).join('\n');
|
||||||
|
|
||||||
// Create valid phase values for JSON schema
|
// Create valid phase values for JSON schema
|
||||||
@ -133,9 +133,9 @@ function createWorkflowSystemPrompt(toolsData: any): string {
|
|||||||
...domainAgnosticSoftware.map((s: any) => s.id)
|
...domainAgnosticSoftware.map((s: any) => s.id)
|
||||||
].join('|');
|
].join('|');
|
||||||
|
|
||||||
return `Du bist ein DFIR (Digital Forensics and Incident Response) Experte, der Ermittlern bei der Toolauswahl hilft.
|
return `Du bist ein DFIR (Digital Forensics and Incident Response) Experte, der Ermittlern bei der Auswahl von Software und Methoden hilft.
|
||||||
|
|
||||||
VERFÜGBARE TOOLS DATABASE:
|
VERFÜGBARE DATENBASIS:
|
||||||
${JSON.stringify(toolsList, null, 2)}
|
${JSON.stringify(toolsList, null, 2)}
|
||||||
|
|
||||||
UNTERSUCHUNGSPHASEN (NIST Framework):
|
UNTERSUCHUNGSPHASEN (NIST Framework):
|
||||||
@ -145,18 +145,18 @@ FORENSISCHE DOMÄNEN:
|
|||||||
${domainsDescription}
|
${domainsDescription}
|
||||||
|
|
||||||
WICHTIGE REGELN:
|
WICHTIGE REGELN:
|
||||||
1. Pro Phase 1-3 Tools empfehlen (immer mindestens 1 wenn verfügbar)
|
1. Pro Phase 1-3 Tools/Methoden empfehlen (immer mindestens 1 wenn verfügbar)
|
||||||
2. Tools können in MEHREREN Phasen empfohlen werden wenn sinnvoll - versuche ein Tool für jede Phase zu empfehlen, selbst wenn die Priorität "low" ist.
|
2. Tools/Methoden können in MEHREREN Phasen empfohlen werden wenn sinnvoll - versuche ein Tool/Methode für jede Phase zu empfehlen, selbst wenn die Priorität "low" ist.
|
||||||
3. Für Reporting-Phase: Visualisierungs- und Dokumentationstools einschließen
|
3. Für Reporting-Phase: Visualisierungs- und Dokumentationssoftware einschließen
|
||||||
4. Gib stets dem spezieller für den Fall geeigneten Werkzeug den Vorzug.
|
4. Gib stets dem spezieller für den Fall geeigneten Werkzeug den Vorzug.
|
||||||
5. Deutsche Antworten für deutsche Anfragen, English for English queries
|
5. Deutsche Antworten für deutsche Anfragen, English for English queries
|
||||||
6. Bewerbe NIEMALS Proprietäre Software fälschlicherweise als Open-Source-Tools, erkenne aber an, falls diese besser geeignet sein könnte.
|
6. Bewerbe NIEMALS Proprietäre Software fälschlicherweise als Open-Source-Software, erkenne aber an, falls diese besser geeignet sein könnte.
|
||||||
7. Bevorzuge alles, was nicht proprietär ist (license != "Proprietary"), aber erkenne an wenn ein proprietäres Tool besser geeignet ist.
|
7. Bevorzuge alles, was nicht proprietär ist (license != "Proprietary"), aber erkenne an, wenn proprietäre Software besser geeignet ist.
|
||||||
|
|
||||||
TOOL-AUSWAHL NACH PHASE:
|
SOFTWARE/METHODEN-AUSWAHL NACH PHASE:
|
||||||
${phaseDescriptions}
|
${phaseDescriptions}
|
||||||
|
|
||||||
DOMAIN-AGNOSTIC SOFTWARE:
|
DOMÄNENAGNOSTISCHE SOFTWARE/METHODEN:
|
||||||
${domainAgnosticDescriptions}
|
${domainAgnosticDescriptions}
|
||||||
|
|
||||||
ANTWORT-FORMAT (strict JSON):
|
ANTWORT-FORMAT (strict JSON):
|
||||||
@ -167,7 +167,7 @@ ANTWORT-FORMAT (strict JSON):
|
|||||||
"name": "EXAKTER Name aus der Database",
|
"name": "EXAKTER Name aus der Database",
|
||||||
"priority": "high|medium|low",
|
"priority": "high|medium|low",
|
||||||
"phase": "${validPhases}",
|
"phase": "${validPhases}",
|
||||||
"justification": "Warum dieses Tool für diese Phase und Szenario geeignet ist"
|
"justification": "Warum diese Methode für diese Phase und Szenario geeignet ist"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"workflow_suggestion": "Vorgeschlagener Untersuchungsablauf",
|
"workflow_suggestion": "Vorgeschlagener Untersuchungsablauf",
|
||||||
@ -192,9 +192,9 @@ function createToolSystemPrompt(toolsData: any): string {
|
|||||||
projectUrl: tool.projectUrl
|
projectUrl: tool.projectUrl
|
||||||
}));
|
}));
|
||||||
|
|
||||||
return `Du bist ein DFIR (Digital Forensics and Incident Response) Experte, der bei der Auswahl spezifischer Tools für konkrete Probleme hilft.
|
return `Du bist ein DFIR (Digital Forensics and Incident Response) Experte, der bei der Auswahl spezifischer Software/Methoden für konkrete Probleme hilft.
|
||||||
|
|
||||||
VERFÜGBARE TOOLS DATABASE:
|
VERFÜGBARE DATENBASIS:
|
||||||
${JSON.stringify(toolsList, null, 2)}
|
${JSON.stringify(toolsList, null, 2)}
|
||||||
|
|
||||||
WICHTIGE REGELN:
|
WICHTIGE REGELN:
|
||||||
@ -216,11 +216,11 @@ ANTWORT-FORMAT (strict JSON):
|
|||||||
"name": "EXAKTER Name aus der Database",
|
"name": "EXAKTER Name aus der Database",
|
||||||
"rank": 1,
|
"rank": 1,
|
||||||
"suitability_score": "high|medium|low",
|
"suitability_score": "high|medium|low",
|
||||||
"detailed_explanation": "Detaillierte Erklärung, warum dieses Tool das Problem löst",
|
"detailed_explanation": "Detaillierte Erklärung, warum dieses Tool/diese Methode das Problem löst",
|
||||||
"implementation_approach": "Konkrete Schritte/Ansatz zur Anwendung für dieses spezifische Problem",
|
"implementation_approach": "Konkrete Schritte/Ansatz zur Anwendung für dieses spezifische Problem",
|
||||||
"pros": ["Spezifische Vorteile für diesen Anwendungsfall", "Weitere Vorteile"],
|
"pros": ["Spezifische Vorteile für diesen Anwendungsfall", "Weitere Vorteile"],
|
||||||
"cons": ["Potentielle Nachteile oder Limitationen", "Weitere Einschränkungen"],
|
"cons": ["Potentielle Nachteile oder Limitationen", "Weitere Einschränkungen"],
|
||||||
"alternatives": "Alternative Ansätze oder ergänzende Tools, falls relevant"
|
"alternatives": "Alternative Ansätze oder ergänzende Tools/Methoden, falls relevant"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"additional_considerations": "Wichtige Überlegungen, Voraussetzungen oder Warnungen"
|
"additional_considerations": "Wichtige Überlegungen, Voraussetzungen oder Warnungen"
|
||||||
|
@ -23,7 +23,7 @@ const tools = data.tools;
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p class="text-muted" style="font-size: 1.125rem; margin-bottom: 1.5rem; line-height: 1.7;">
|
<p class="text-muted" style="font-size: 1.125rem; margin-bottom: 1.5rem; line-height: 1.7;">
|
||||||
Unser kuratiertes Verzeichnis bietet euch eine strukturierte Übersicht über bewährte DFIR-Tools,
|
Unser kuratiertes Verzeichnis bietet euch eine strukturierte Übersicht über bewährte Methoden und Tools,
|
||||||
kategorisiert nach forensischen Domänen und Untersuchungsphasen nach Kent, Chevalier, Grance & Dang.
|
kategorisiert nach forensischen Domänen und Untersuchungsphasen nach Kent, Chevalier, Grance & Dang.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ const tools = data.tools;
|
|||||||
<path d="M12 16v-4"></path>
|
<path d="M12 16v-4"></path>
|
||||||
<path d="M12 8h.01"></path>
|
<path d="M12 8h.01"></path>
|
||||||
</svg>
|
</svg>
|
||||||
SSO & Zugang erfahren
|
Infos zu SSO & Zugang
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<!-- AI Query Button -->
|
<!-- AI Query Button -->
|
||||||
@ -59,7 +59,7 @@ const tools = data.tools;
|
|||||||
<polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline>
|
<polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline>
|
||||||
<line x1="12" y1="22.08" x2="12" y2="12"></line>
|
<line x1="12" y1="22.08" x2="12" y2="12"></line>
|
||||||
</svg>
|
</svg>
|
||||||
Tools entdecken
|
Entdecken
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -354,7 +354,7 @@ function createToolCard(tool) {
|
|||||||
<div class="tool-card-header">
|
<div class="tool-card-header">
|
||||||
<h3>${tool.name}</h3>
|
<h3>${tool.name}</h3>
|
||||||
<div class="tool-card-badges">
|
<div class="tool-card-badges">
|
||||||
${hasValidProjectUrl ? '<span class="badge badge-primary">Self-Hosted</span>' : ''}
|
${hasValidProjectUrl ? '<span class="badge badge-primary">CC24-Server</span>' : ''}
|
||||||
${tool.license !== 'Proprietary' ? '<span class="badge badge-success">OSS</span>' : ''}
|
${tool.license !== 'Proprietary' ? '<span class="badge badge-success">OSS</span>' : ''}
|
||||||
${hasKnowledgebase ? '<span class="badge badge-error">📖</span>' : ''}
|
${hasKnowledgebase ? '<span class="badge badge-error">📖</span>' : ''}
|
||||||
</div>
|
</div>
|
||||||
|
@ -56,7 +56,7 @@ knowledgebaseTools.sort((a: any, b: any) => a.name.localeCompare(b.name));
|
|||||||
</svg>
|
</svg>
|
||||||
<h3 style="color: var(--color-text-secondary); margin-bottom: 0.5rem;">Noch keine Knowledgebase-Einträge</h3>
|
<h3 style="color: var(--color-text-secondary); margin-bottom: 0.5rem;">Noch keine Knowledgebase-Einträge</h3>
|
||||||
<p class="text-muted">
|
<p class="text-muted">
|
||||||
Knowledgebase-Einträge werden automatisch angezeigt, sobald Tools das Attribut "knowledgebase: true" haben.
|
Knowledgebase-Einträge werden automatisch angezeigt, sobald Datenbankeinträge das Attribut "knowledgebase: true" haben. Wenn hier noch nichts drinsteht, habe ich noch nichts dazu geschrieben.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
@ -76,7 +76,7 @@ knowledgebaseTools.sort((a: any, b: any) => a.name.localeCompare(b.name));
|
|||||||
tool.projectUrl.trim() !== "";
|
tool.projectUrl.trim() !== "";
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{hasValidProjectUrl && <span class="badge badge-primary">Self-Hosted</span>}
|
{hasValidProjectUrl && <span class="badge badge-primary">CC24-Server</span>}
|
||||||
{tool.license !== 'Proprietary' && <span class="badge badge-success">Open Source</span>}
|
{tool.license !== 'Proprietary' && <span class="badge badge-success">Open Source</span>}
|
||||||
<span class="badge badge-error">Infos 📖</span>
|
<span class="badge badge-error">Infos 📖</span>
|
||||||
</>
|
</>
|
||||||
|
@ -3,7 +3,7 @@ import BaseLayout from '../layouts/BaseLayout.astro';
|
|||||||
import { getToolsData } from '../utils/dataService.js';
|
import { getToolsData } from '../utils/dataService.js';
|
||||||
|
|
||||||
|
|
||||||
// Load tools data to get self-hosted services
|
// Load tools data to get server-based services
|
||||||
const data = await getToolsData();
|
const data = await getToolsData();
|
||||||
|
|
||||||
// Filter for hosted services based on projectUrl presence
|
// Filter for hosted services based on projectUrl presence
|
||||||
|
Loading…
x
Reference in New Issue
Block a user