diff --git a/dfir_yaml_editor.html b/dfir_yaml_editor.html index eb445a4..a8a8ebb 100644 --- a/dfir_yaml_editor.html +++ b/dfir_yaml_editor.html @@ -21,6 +21,7 @@ --dark: #2c3e50; --light: #ecf0f1; --border: #dee2e6; + --accent: #9b59b6; } body { @@ -50,6 +51,7 @@ background: var(--light); display: flex; border-bottom: 2px solid var(--border); + overflow-x: auto; } .tab { @@ -58,6 +60,8 @@ border-bottom: 3px solid transparent; transition: all 0.3s ease; font-weight: 500; + white-space: nowrap; + min-width: 120px; } .tab:hover { @@ -99,10 +103,18 @@ box-shadow: 0 4px 12px rgba(52, 152, 219, 0.3); } + .btn:disabled { + opacity: 0.6; + cursor: not-allowed; + transform: none; + box-shadow: none; + } + .btn-secondary { background: var(--secondary); } .btn-danger { background: var(--danger); } .btn-success { background: var(--success); } .btn-warning { background: var(--warning); } + .btn-accent { background: var(--accent); } .search-container { background: var(--light); @@ -167,7 +179,7 @@ } .tool-card.software { border-left: 4px solid var(--primary); } - .tool-card.method { border-left: 4px solid #9b59b6; } + .tool-card.method { border-left: 4px solid var(--accent); } .tool-card.concept { border-left: 4px solid #e67e22; } .form-group { @@ -176,8 +188,8 @@ .form-group label { display: block; - margin-bottom: 5px; - font-weight: 500; + margin-bottom: 8px; + font-weight: 600; color: var(--dark); } @@ -185,54 +197,92 @@ .form-group select, .form-group textarea { width: 100%; - padding: 10px; - border: 1px solid var(--border); - border-radius: 5px; + padding: 12px; + border: 2px solid var(--border); + border-radius: 8px; font-size: 14px; + transition: border-color 0.3s ease; + } + + .form-group input:focus, + .form-group select:focus, + .form-group textarea:focus { + outline: none; + border-color: var(--primary); } .checkbox-group { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); - gap: 10px; + gap: 12px; margin-top: 10px; + padding: 15px; + background: #f8f9fa; + border-radius: 8px; } .checkbox-item { display: flex; align-items: center; gap: 8px; + padding: 8px; + border-radius: 6px; + transition: background-color 0.2s ease; + } + + .checkbox-item:hover { + background: rgba(52, 152, 219, 0.1); + } + + .checkbox-item input[type="checkbox"] { + width: auto; + margin: 0; } .tags-input { display: flex; flex-wrap: wrap; - gap: 5px; - min-height: 40px; - padding: 5px; - border: 1px solid var(--border); - border-radius: 5px; + gap: 8px; + min-height: 50px; + padding: 12px; + border: 2px solid var(--border); + border-radius: 8px; background: white; + transition: border-color 0.3s ease; + } + + .tags-input:focus-within { + border-color: var(--primary); } .tag { background: var(--light); - padding: 4px 8px; - border-radius: 15px; - font-size: 0.85em; + padding: 6px 12px; + border-radius: 20px; + font-size: 0.9em; display: flex; align-items: center; - gap: 5px; + gap: 8px; + border: 1px solid var(--border); } .tag-remove { cursor: pointer; font-weight: bold; color: #666; + background: rgba(231, 76, 60, 0.1); + border-radius: 50%; + width: 18px; + height: 18px; + display: flex; + align-items: center; + justify-content: center; + font-size: 12px; } .tag-remove:hover { - color: var(--danger); + background: var(--danger); + color: white; } .bulk-section { @@ -240,11 +290,12 @@ padding: 20px; border-radius: 10px; margin-bottom: 20px; + border: 2px solid var(--border); } .bulk-controls { display: grid; - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 10px; margin-top: 15px; } @@ -253,6 +304,12 @@ padding: 15px; border-radius: 8px; margin: 10px 0; + position: fixed; + top: 20px; + right: 20px; + z-index: 1000; + min-width: 300px; + box-shadow: 0 4px 12px rgba(0,0,0,0.15); } .message.success { @@ -277,10 +334,61 @@ margin-top: 15px; } + .filter-section select { + min-width: 150px; + } + + .form-section { + background: #f8f9fa; + padding: 20px; + border-radius: 10px; + margin-bottom: 20px; + border-left: 4px solid var(--primary); + } + + .form-section h4 { + margin: 0 0 15px 0; + color: var(--dark); + display: flex; + align-items: center; + gap: 8px; + } + + .loading { + opacity: 0.7; + pointer-events: none; + } + @media (max-width: 768px) { - .tabs { flex-direction: column; } - .stats-grid { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); } - .tools-grid { grid-template-columns: 1fr; } + .tabs { + flex-direction: column; + } + .tab { + min-width: auto; + text-align: center; + } + .stats-grid { + grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); + } + .tools-grid { + grid-template-columns: 1fr; + } + .checkbox-group { + grid-template-columns: 1fr; + } + .bulk-controls { + grid-template-columns: 1fr; + } + .filter-section { + flex-direction: column; + align-items: stretch; + } + .message { + position: relative; + top: auto; + right: auto; + min-width: auto; + } } @@ -328,7 +436,7 @@
@@ -355,63 +463,77 @@
- +

✏️ Add/Edit Tool, Method, or Concept

-
- - +
+

📝 Basic Information

+
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+ +
+ + +
-
- - -
+
+

🎯 Classification

+
+ +
+
-
- - -
+
+ +
+
-
- - -
- -
- - -
- -
- - -
- -
- -
-
- -
- -
+
+ +
+
-
+
+

⚙️ Technical Details

@@ -445,60 +567,75 @@
-
-
- - +
+

💻 Software Specific

+
+
+ + +
+ +
+ + +
-
- - -
+
+
+ + +
-
- - -
- -
- - +
+ + +
-
-
- - +
+

🔗 Relationships

+
+
+ + +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
-
- -
- -
-
- -
- -
- -
-
- -
- - - +
+ + +
@@ -507,52 +644,62 @@

📋 Bulk Operations

-
+
No tools selected
- - - - + + + +
-

Tags Operations

+

🏷️ Tags Operations

- - - + + +
-

Domain & Phase Operations

+

🎯 Classification Operations

- - - - - - + + + + + +
-

Platform Operations

+

🎮 Scenarios Operations

- - - + + +
-

Related Concepts Operations

+

💻 Platform Operations

- - - + + +
-

Dangerous Operations

+

🔗 Relationships Operations

- + + + + + + +
+ +

⚠️ Dangerous Operations

+
+
@@ -588,12 +735,13 @@
+
@@ -604,7 +752,7 @@ let selectedTools = new Set(); let filteredToolsCache = []; - // Initialize with correct YAML structure + // Initialize with correct YAML structure including scenarios function init() { yamlData = { tools: [], @@ -627,6 +775,13 @@ 'domain-agnostic-software': [ { id: 'collaboration-general', name: 'Übergreifend & Kollaboration', description: 'Cross-cutting tools and collaboration platforms' }, { id: 'specific-os', name: 'Betriebssysteme', description: 'Operating Systems which focus on forensics' } + ], + scenarios: [ + { id: 'registry', icon: '🗃️', friendly_name: 'Registry-Analyse' }, + { id: 'memory-forensics', icon: '🧠', friendly_name: 'Memory-Forensik' }, + { id: 'network-analysis', icon: '🌐', friendly_name: 'Netzwerk-Analyse' }, + { id: 'malware-analysis', icon: '🦠', friendly_name: 'Malware-Analyse' }, + { id: 'mobile-forensics', icon: '📱', friendly_name: 'Mobile-Forensik' } ] }; @@ -648,7 +803,7 @@ else if (tabName === 'knowledge') updateKnowledgeToolSelect(); } - // Enhanced Search Functionality + // Enhanced Search Functionality including scenarios and related_software function applySearch() { applyFilters(); } @@ -670,6 +825,15 @@ // Search in related concepts if (tool.related_concepts && tool.related_concepts.some(concept => concept.toLowerCase().includes(term))) return true; + // Search in related software + if (tool.related_software && tool.related_software.some(software => software.toLowerCase().includes(term))) return true; + + // Search in scenarios + if (tool.scenarios && tool.scenarios.some(scenario => { + const scenarioData = yamlData.scenarios.find(s => s.id === scenario); + return scenarioData && scenarioData.friendly_name.toLowerCase().includes(term); + })) return true; + // Search in type if (tool.type && tool.type.toLowerCase().includes(term)) return true; @@ -701,6 +865,16 @@ phasesContainer.appendChild(div); }); + // Populate scenarios + const scenariosContainer = document.getElementById('scenariosCheckbox'); + scenariosContainer.innerHTML = ''; + yamlData.scenarios.forEach(scenario => { + const div = document.createElement('div'); + div.className = 'checkbox-item'; + div.innerHTML = ``; + scenariosContainer.appendChild(div); + }); + // Populate domain-agnostic software const domainAgnosticContainer = document.getElementById('domainAgnosticCheckbox'); domainAgnosticContainer.innerHTML = ''; @@ -750,12 +924,19 @@ } function showMessage(message, type = 'success') { + // Remove existing messages + document.querySelectorAll('.message').forEach(msg => msg.remove()); + const messageDiv = document.createElement('div'); messageDiv.className = `message ${type}`; messageDiv.textContent = message; document.body.appendChild(messageDiv); - setTimeout(() => document.body.removeChild(messageDiv), 3000); + setTimeout(() => { + if (messageDiv.parentNode) { + messageDiv.remove(); + } + }, 4000); } function updateStats() { @@ -766,7 +947,8 @@ software: yamlData.tools.filter(t => t.type === 'software' || !t.type).length, methods: yamlData.tools.filter(t => t.type === 'method').length, concepts: yamlData.tools.filter(t => t.type === 'concept').length, - withKnowledgebase: yamlData.tools.filter(t => t.knowledgebase).length + withKnowledgebase: yamlData.tools.filter(t => t.knowledgebase).length, + withRelatedSoftware: yamlData.tools.filter(t => t.related_software && t.related_software.length > 0).length }; document.getElementById('stats').innerHTML = ` @@ -775,12 +957,14 @@

${stats.methods}

Methods

${stats.concepts}

Concepts

${stats.withKnowledgebase}

With Knowledgebase

+

${stats.withRelatedSoftware}

With Related Software

`; } - // Tag input handlers + // Enhanced tag input handlers for related software function focusTagInput() { document.getElementById('tagInputField').focus(); } function focusRelatedConceptInput() { document.getElementById('relatedConceptInputField').focus(); } + function focusRelatedSoftwareInput() { document.getElementById('relatedSoftwareInputField').focus(); } function handleTagInput(event) { if (event.key === 'Enter' || event.key === ',') { @@ -806,6 +990,18 @@ } } + function handleRelatedSoftwareInput(event) { + if (event.key === 'Enter' || event.key === ',') { + event.preventDefault(); + const input = event.target; + const value = input.value.trim(); + if (value) { + addTag('relatedSoftwareInput', value); + input.value = ''; + } + } + } + function addTag(containerId, value) { const container = document.getElementById(containerId); const input = container.querySelector('input'); @@ -832,6 +1028,12 @@ ).filter(concept => concept); } + function getRelatedSoftware() { + return Array.from(document.querySelectorAll('#relatedSoftwareInput .tag')).map(tag => + tag.textContent.replace('×', '').trim() + ).filter(software => software); + } + function saveTool() { try { if (!yamlData) yamlData = { tools: [] }; @@ -850,17 +1052,23 @@ const icon = document.getElementById('toolIcon').value.trim(); if (icon) tool.icon = icon; - // Add domains and phases + // Add domains, phases, and scenarios tool.domains = getCheckedValues('#domainsCheckbox input:checked'); tool.phases = getCheckedValues('#phasesCheckbox input:checked'); + + const scenarios = getCheckedValues('#scenariosCheckbox input:checked'); + if (scenarios.length > 0) tool.scenarios = scenarios; - // Add tags and related concepts + // Add tags, related concepts, and related software const tags = getTags(); if (tags.length > 0) tool.tags = tags; const relatedConcepts = getRelatedConcepts(); if (relatedConcepts.length > 0) tool.related_concepts = relatedConcepts; + const relatedSoftware = getRelatedSoftware(); + if (relatedSoftware.length > 0) tool.related_software = relatedSoftware; + // Type-specific fields if (toolType === 'software') { tool.platforms = getCheckedValues('#platformsCheckbox input:checked'); @@ -912,6 +1120,7 @@ document.getElementById('toolForm').reset(); document.getElementById('tagsInput').innerHTML = ''; document.getElementById('relatedConceptsInput').innerHTML = ''; + document.getElementById('relatedSoftwareInput').innerHTML = ''; currentEditingIndex = -1; toggleConditionalFields(); } @@ -946,6 +1155,7 @@ // Set checkboxes setCheckboxValues('#domainsCheckbox input', tool.domains || []); setCheckboxValues('#phasesCheckbox input', tool.phases || []); + setCheckboxValues('#scenariosCheckbox input', tool.scenarios || []); setCheckboxValues('#platformsCheckbox input', tool.platforms || []); setCheckboxValues('#domainAgnosticCheckbox input', tool['domain-agnostic-software'] || []); @@ -959,6 +1169,11 @@ conceptsContainer.innerHTML = ''; (tool.related_concepts || []).forEach(concept => addTag('relatedConceptsInput', concept)); + // Set related software + const softwareContainer = document.getElementById('relatedSoftwareInput'); + softwareContainer.innerHTML = ''; + (tool.related_software || []).forEach(software => addTag('relatedSoftwareInput', software)); + toggleConditionalFields(); showTab('editor'); } @@ -1028,12 +1243,14 @@ const tags = (tool.tags || []).map(tag => `${tag}`).join(''); const knowledgebaseIndicator = tool.knowledgebase ? '📚 KB' : ''; + const relatedSoftwareIndicator = (tool.related_software && tool.related_software.length > 0) ? '🔗 SW' : ''; + const scenariosIndicator = (tool.scenarios && tool.scenarios.length > 0) ? '🎮 SC' : ''; card.innerHTML = `

${tool.icon ? tool.icon + ' ' : ''}${tool.name} [${tool.type || 'software'}]

-

${tool.description}

-
${tags} ${knowledgebaseIndicator}
-
+

${tool.description}

+
${tags} ${knowledgebaseIndicator} ${relatedSoftwareIndicator} ${scenariosIndicator}
+
@@ -1051,7 +1268,7 @@ renderToolsGrid(); } - // Enhanced Bulk Operations + // Enhanced Bulk Operations including scenarios and related software function renderBulkGrid() { const container = document.getElementById('bulkToolsGrid'); container.innerHTML = ''; @@ -1074,13 +1291,22 @@ card.style.opacity = isSelected ? '1' : '0.7'; card.style.border = isSelected ? '2px solid var(--primary)' : '1px solid var(--border)'; + const indicators = []; + if (tool.knowledgebase) indicators.push('📚'); + if (tool.related_software?.length > 0) indicators.push('🔗'); + if (tool.scenarios?.length > 0) indicators.push('🎮'); + card.innerHTML = `

${tool.icon ? tool.icon + ' ' : ''}${tool.name}

+
${indicators.join(' ')}
+
+

${tool.description}

+
+ ${tool.type || 'software'} + ${tool.skillLevel}
-

${tool.description}

-
${tool.type || 'software'}
`; return card; @@ -1111,11 +1337,19 @@ function updateSelectionCount() { const count = selectedTools.size; - document.getElementById('selectionInfo').textContent = - count === 0 ? 'No tools selected' : `${count} tool(s) selected`; + const info = document.getElementById('selectionInfo'); + if (count === 0) { + info.textContent = 'No tools selected'; + info.style.background = 'white'; + info.style.borderColor = 'var(--border)'; + } else { + info.textContent = `${count} tool(s) selected`; + info.style.background = '#e3f2fd'; + info.style.borderColor = 'var(--primary)'; + } } - // Enhanced bulk operations with new clear functions + // Enhanced bulk operations with scenarios and related software function bulkSetType() { if (selectedTools.size === 0) return showMessage('No tools selected', 'error'); const newType = prompt('Enter new type (software/method/concept):'); @@ -1186,7 +1420,6 @@ } } - // NEW: Clear field functions function bulkClearTags() { if (selectedTools.size === 0) return showMessage('No tools selected', 'error'); if (confirm(`Are you sure you want to clear ALL tags from ${selectedTools.size} selected tools?`)) { @@ -1198,6 +1431,7 @@ } } + // Domain operations function bulkAddDomains() { if (selectedTools.size === 0) return showMessage('No tools selected', 'error'); const domains = prompt('Enter domain IDs to add (comma-separated):'); @@ -1240,6 +1474,7 @@ } } + // Phase operations function bulkAddPhases() { if (selectedTools.size === 0) return showMessage('No tools selected', 'error'); const phases = prompt('Enter phase IDs to add (comma-separated):'); @@ -1282,7 +1517,50 @@ } } - // NEW: Platform operations + // NEW: Scenario operations + function bulkAddScenarios() { + if (selectedTools.size === 0) return showMessage('No tools selected', 'error'); + const scenarios = prompt('Enter scenario IDs to add (comma-separated):'); + if (scenarios) { + const scenarioList = scenarios.split(',').map(s => s.trim()).filter(s => s); + selectedTools.forEach(index => { + const tool = yamlData.tools[index]; + tool.scenarios = [...new Set([...(tool.scenarios || []), ...scenarioList])]; + }); + showMessage(`Added scenarios to ${selectedTools.size} tools`); + renderBulkGrid(); + } + } + + function bulkRemoveScenarios() { + if (selectedTools.size === 0) return showMessage('No tools selected', 'error'); + const scenarios = prompt('Enter scenario IDs to remove (comma-separated):'); + if (scenarios) { + const scenarioList = scenarios.split(',').map(s => s.trim()).filter(s => s); + selectedTools.forEach(index => { + const tool = yamlData.tools[index]; + if (tool.scenarios) { + tool.scenarios = tool.scenarios.filter(scenario => !scenarioList.includes(scenario)); + if (tool.scenarios.length === 0) delete tool.scenarios; + } + }); + showMessage(`Removed scenarios from ${selectedTools.size} tools`); + renderBulkGrid(); + } + } + + function bulkClearScenarios() { + if (selectedTools.size === 0) return showMessage('No tools selected', 'error'); + if (confirm(`Are you sure you want to clear ALL scenarios from ${selectedTools.size} selected tools?`)) { + selectedTools.forEach(index => { + delete yamlData.tools[index].scenarios; + }); + showMessage(`Cleared scenarios from ${selectedTools.size} tools`); + renderBulkGrid(); + } + } + + // Platform operations function bulkAddPlatforms() { if (selectedTools.size === 0) return showMessage('No tools selected', 'error'); const platforms = prompt('Enter platforms to add (comma-separated, e.g., Windows,Linux,macOS):'); @@ -1325,6 +1603,7 @@ } } + // Related concepts operations function bulkAddRelatedConcepts() { if (selectedTools.size === 0) return showMessage('No tools selected', 'error'); const concepts = prompt('Enter related concept names to add (comma-separated):'); @@ -1367,9 +1646,52 @@ } } + // NEW: Related software operations + function bulkAddRelatedSoftware() { + if (selectedTools.size === 0) return showMessage('No tools selected', 'error'); + const software = prompt('Enter related software names to add (comma-separated):'); + if (software) { + const softwareList = software.split(',').map(s => s.trim()).filter(s => s); + selectedTools.forEach(index => { + const tool = yamlData.tools[index]; + tool.related_software = [...new Set([...(tool.related_software || []), ...softwareList])]; + }); + showMessage(`Added related software to ${selectedTools.size} tools`); + renderBulkGrid(); + } + } + + function bulkRemoveRelatedSoftware() { + if (selectedTools.size === 0) return showMessage('No tools selected', 'error'); + const software = prompt('Enter related software names to remove (comma-separated):'); + if (software) { + const softwareList = software.split(',').map(s => s.trim()).filter(s => s); + selectedTools.forEach(index => { + const tool = yamlData.tools[index]; + if (tool.related_software) { + tool.related_software = tool.related_software.filter(sw => !softwareList.includes(sw)); + if (tool.related_software.length === 0) delete tool.related_software; + } + }); + showMessage(`Removed related software from ${selectedTools.size} tools`); + renderBulkGrid(); + } + } + + function bulkClearRelatedSoftware() { + if (selectedTools.size === 0) return showMessage('No tools selected', 'error'); + if (confirm(`Are you sure you want to clear ALL related software from ${selectedTools.size} selected tools?`)) { + selectedTools.forEach(index => { + delete yamlData.tools[index].related_software; + }); + showMessage(`Cleared related software from ${selectedTools.size} tools`); + renderBulkGrid(); + } + } + function bulkDelete() { if (selectedTools.size === 0) return showMessage('No tools selected', 'error'); - if (confirm(`Are you sure you want to delete ${selectedTools.size} selected tools?`)) { + if (confirm(`Are you sure you want to delete ${selectedTools.size} selected tools? This action cannot be undone!`)) { const indicesToDelete = Array.from(selectedTools).sort((a, b) => b - a); indicesToDelete.forEach(index => yamlData.tools.splice(index, 1)); selectedTools.clear(); @@ -1380,7 +1702,7 @@ } } - // Knowledge Generator - Enhanced for ForensicPathways format + // Knowledge Generator - Enhanced for ForensicPathways format with scenarios and related_software function updateKnowledgeToolSelect() { const select = document.getElementById('knowledgeToolSelect'); select.innerHTML = ''; @@ -1419,86 +1741,91 @@ .replace(/^-|-$/g, ''); return `--- - title: "${tool.name}" - description: "${tool.description.split('\n')[0].trim()}" - last_updated: ${new Date().toISOString().split('T')[0]} - tool_name: "${tool.name}" - related_tools: ${tool.related_concepts ? JSON.stringify(tool.related_concepts) : '[]'} - author: "CC24-Team" - difficulty: "${tool.skillLevel || 'intermediate'}" - categories: ${tool.type === 'concept' ? '["concepts"]' : tool.type === 'method' ? '["methods"]' : '["tools"]'} - tags: ${tool.tags ? JSON.stringify(tool.tags) : '[]'} - published: true - --- +title: "${tool.name}" +description: "${tool.description.split('\n')[0].trim()}" +last_updated: ${new Date().toISOString().split('T')[0]} +tool_name: "${tool.name}" +related_tools: ${JSON.stringify([...(tool.related_concepts || []), ...(tool.related_software || [])])} +author: "CC24-Team" +difficulty: "${tool.skillLevel || 'intermediate'}" +categories: ${tool.type === 'concept' ? '["concepts"]' : tool.type === 'method' ? '["methods"]' : '["tools"]'} +tags: ${tool.tags ? JSON.stringify(tool.tags) : '[]'} +published: true +--- - # ${tool.icon ? tool.icon + ' ' : ''}${tool.name} +# ${tool.icon ? tool.icon + ' ' : ''}${tool.name} - ## Übersicht +## Übersicht - ${tool.description} +${tool.description} - **Typ**: ${tool.type || 'software'} - **Skill Level**: ${tool.skillLevel || 'intermediate'} - **Offizielle URL**: [${tool.name}](${tool.url}) +**Typ**: ${tool.type || 'software'} +**Skill Level**: ${tool.skillLevel || 'intermediate'} +**Offizielle URL**: [${tool.name}](${tool.url}) - ${tool.license ? `**Lizenz**: ${tool.license}\n` : ''}${tool.platforms && tool.platforms.length > 0 ? `**Plattformen**: ${tool.platforms.join(', ')}\n` : ''}${tool.accessType ? `**Zugriff**: ${tool.accessType}\n` : ''} +${tool.license ? `**Lizenz**: ${tool.license}\n` : ''}${tool.platforms && tool.platforms.length > 0 ? `**Plattformen**: ${tool.platforms.join(', ')}\n` : ''}${tool.accessType ? `**Zugriff**: ${tool.accessType}\n` : ''} - ${tool.domains && tool.domains.length > 0 ? `## Anwendungsbereiche +${tool.domains && tool.domains.length > 0 ? `## Anwendungsbereiche - ${tool.domains.map(domain => `- ${domain}`).join('\n')}\n\n` : ''}${tool.phases && tool.phases.length > 0 ? `## Ermittlungsphasen +${tool.domains.map(domain => `- ${domain}`).join('\n')}\n\n` : ''}${tool.phases && tool.phases.length > 0 ? `## Ermittlungsphasen - ${tool.phases.map(phase => `- ${phase}`).join('\n')}\n\n` : ''}## ${tool.type === 'concept' ? 'Grundlagen' : tool.type === 'method' ? 'Vorgehensweise' : 'Installation & Nutzung'} +${tool.phases.map(phase => `- ${phase}`).join('\n')}\n\n` : ''}${tool.scenarios && tool.scenarios.length > 0 ? `## Anwendungsszenarien - ${tool.type === 'concept' ? - `### Kernkonzepte +${tool.scenarios.map(scenario => { + const scenarioData = yamlData.scenarios.find(s => s.id === scenario); + return scenarioData ? `- ${scenarioData.icon} ${scenarioData.friendly_name}` : `- ${scenario}`; +}).join('\n')}\n\n` : ''}## ${tool.type === 'concept' ? 'Grundlagen' : tool.type === 'method' ? 'Vorgehensweise' : 'Installation & Nutzung'} - TODO: Beschreibe die wichtigsten Konzepte und Prinzipien. +${tool.type === 'concept' ? +`### Kernkonzepte - ### Anwendungsbereiche +TODO: Beschreibe die wichtigsten Konzepte und Prinzipien. - TODO: Erkläre, wo und wie dieses Konzept angewendet wird.` : - tool.type === 'method' ? - `### Schritt-für-Schritt Anleitung +### Anwendungsbereiche - 1. TODO: Erster Schritt - 2. TODO: Zweiter Schritt - 3. TODO: Dritter Schritt +TODO: Erkläre, wo und wie dieses Konzept angewendet wird.` : +tool.type === 'method' ? +`### Schritt-für-Schritt Anleitung - ### Voraussetzungen +1. TODO: Erster Schritt +2. TODO: Zweiter Schritt +3. TODO: Dritter Schritt - TODO: Liste die erforderlichen Voraussetzungen auf.` : - `### Installation +### Voraussetzungen - TODO: Beschreibe die Installation für die relevanten Plattformen. +TODO: Liste die erforderlichen Voraussetzungen auf.` : +`### Installation - ### Grundlegende Nutzung +TODO: Beschreibe die Installation für die relevanten Plattformen. - TODO: Erkläre die wichtigsten Funktionen und Befehle. +### Grundlegende Nutzung - ### Workflow-Beispiele +TODO: Erkläre die wichtigsten Funktionen und Befehle. - TODO: Zeige typische Anwendungsfälle und Workflows.`} +### Workflow-Beispiele - ## Best Practices +TODO: Zeige typische Anwendungsfälle und Workflows.`} - TODO: Teile bewährte Praktiken und Tipps für die optimale Nutzung. +## Best Practices - ## Häufige Probleme +TODO: Teile bewährte Praktiken und Tipps für die optimale Nutzung. - TODO: Beschreibe häufige Stolpersteine und deren Lösungen. +## Häufige Probleme - ${tool.related_concepts && tool.related_concepts.length > 0 ? `## Verwandte Tools und Konzepte +TODO: Beschreibe häufige Stolpersteine und deren Lösungen. - ${tool.related_concepts.map(concept => `- ${concept}`).join('\n')}\n\n` : ''}## Weitere Ressourcen +${(tool.related_concepts && tool.related_concepts.length > 0) || (tool.related_software && tool.related_software.length > 0) ? `## Verwandte Tools und Konzepte - - [Offizielle Dokumentation](${tool.url})${tool.projectUrl ? `\n- [CC24 Server Zugang](${tool.projectUrl})` : ''} +${(tool.related_concepts || []).map(concept => `- 💡 ${concept} (Konzept)`).join('\n')}${(tool.related_concepts || []).length > 0 && (tool.related_software || []).length > 0 ? '\n' : ''}${(tool.related_software || []).map(software => `- 🛠️ ${software} (Software)`).join('\n')}\n\n` : ''}## Weitere Ressourcen - TODO: Füge weitere nützliche Links und Ressourcen hinzu. +- [Offizielle Dokumentation](${tool.url})${tool.projectUrl ? `\n- [CC24 Server Zugang](${tool.projectUrl})` : ''} - --- +TODO: Füge weitere nützliche Links und Ressourcen hinzu. - *Zuletzt aktualisiert: ${new Date().toLocaleDateString('de-DE')}* - `; +--- + +*Zuletzt aktualisiert: ${new Date().toLocaleDateString('de-DE')}* +`; } function downloadMarkdown() { @@ -1536,7 +1863,7 @@ }); } - // Validation and Export + // Enhanced Validation including scenarios and related_software function validateYAML() { if (!yamlData) return showMessage('No data to validate', 'error'); @@ -1546,6 +1873,7 @@ if (!yamlData.tools) validationResults.push('❌ Missing tools section'); if (!yamlData.domains) validationResults.push('❌ Missing domains section'); if (!yamlData.phases) validationResults.push('❌ Missing phases section'); + if (!yamlData.scenarios) validationResults.push('⚠️ Missing scenarios section'); // Validate tools yamlData.tools?.forEach((tool, index) => { @@ -1565,6 +1893,26 @@ if (tool.type === 'concept' && tool.platforms?.length > 0) { validationResults.push(`⚠️ Tool ${index + 1}: Concepts should not have platforms`); } + + // Validate related_software references + if (tool.related_software && tool.related_software.length > 0) { + tool.related_software.forEach(relatedName => { + const exists = yamlData.tools.some(t => t.name === relatedName); + if (!exists) { + validationResults.push(`⚠️ Tool ${index + 1}: Related software "${relatedName}" not found in tools`); + } + }); + } + + // Validate scenarios references + if (tool.scenarios && tool.scenarios.length > 0) { + tool.scenarios.forEach(scenarioId => { + const exists = yamlData.scenarios?.some(s => s.id === scenarioId); + if (!exists) { + validationResults.push(`⚠️ Tool ${index + 1}: Scenario "${scenarioId}" not found in scenarios`); + } + }); + } }); const container = document.getElementById('validationContent'); @@ -1603,6 +1951,24 @@ showMessage('YAML file exported successfully!'); } + function exportJSON() { + if (!yamlData) return showMessage('No data to export', 'error'); + + const jsonString = JSON.stringify(yamlData, null, 2); + const blob = new Blob([jsonString], { type: 'application/json' }); + const url = URL.createObjectURL(blob); + + const a = document.createElement('a'); + a.href = url; + a.download = 'tools.json'; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + + showMessage('JSON file exported successfully!'); + } + // Initialize init(); diff --git a/src/data/tags.json b/src/data/tags.json index a7e4165..dd2fe0a 100644 --- a/src/data/tags.json +++ b/src/data/tags.json @@ -3,17 +3,7 @@ "command-line", "web-interface", "cross-platform", - "windows", - "linux", - "macos", - "portable", - "cloud", - "agentless", "live-acquisition", - "deadbox", - "memory-capture", - "ram-analysis", - "disk-imaging", "logical-copy", "physical-copy", "sparse-image", @@ -25,10 +15,9 @@ "chain-of-custody", "file-carving", "metadata-parser", - "registry-viewer", "artifact-parser", "log-parser", - "timeline-builder", + "timeline", "keyword-search", "regex-search", "yara-scan", @@ -93,10 +82,71 @@ "court-admissible", "standards-compliant", "blockchain-analysis", - "ios-backup", - "android-backup", - "ms365", - "google-workspace", - "slack-export", - "teams-export" + "mobile-app-data", + "system-metadata", + "deleted-file-recovery", + "raw-image-support", + "ewf-support", + "compression", + "disk-signature", + "anomaly-detection", + "behavioral-analysis", + "live-process-view", + "memory-timeline", + "string-search", + "packet-filtering", + "encrypted-traffic", + "malware-unpacking", + "sandboxing", + "virtual-analysis", + "memory-map", + "binary-decode", + "firmware-extraction", + "forensic-snapshots", + "historical-analysis", + "app-provenance", + "usb-history", + "dns-resolution", + "session-reconstruction", + "file-reconstruction", + "protocol-decode", + "encrypted-volume-access", + "registry-hives", + "timeline-correlation", + "selective-imaging", + "forensic-scripting", + "macro-analysis", + "macro-automation", + "keyword-highlighting", + "duplicate-elimination", + "timeline-merge", + "multi-user-support", + "version-control", + "git-integration", + "secure-sharing", + "encrypted-reports", + "evidence-tagging", + "alerting", + "threat-scoring", + "IOC-matching", + "correlation-engine", + "elasticsearch-integration", + "data-enrichment", + "IOC-ingestion", + "taxonomies", + "sandbox-reports", + "memory-signatures", + "forensic-templates", + "structured-output", + "json-export", + "yaml-support", + "automation-ready", + "hash-database", + "integrity-checking", + "forensic-indexing", + "disk-hash-comparison", + "time-normalization", + "zero-footprint", + "recovery-report", + "forensic-logging" ] diff --git a/src/data/tools.yaml b/src/data/tools.yaml index d1ac010..80224ac 100644 --- a/src/data/tools.yaml +++ b/src/data/tools.yaml @@ -10,13 +10,6 @@ tools: dafür vollständig transparent und kostenfrei. skillLevel: intermediate url: https://www.autopsy.com/ - tags: - - gui - - filesystem - - timeline-analysis - - carving - - artifact-extraction - - keyword-search icon: 📦 domains: - incident-response @@ -27,13 +20,20 @@ tools: phases: - examination - analysis + tags: + - gui + - filesystem + - timeline-analysis + - carving + - artifact-extraction + - keyword-search related_concepts: - SQL Query Fundamentals - Hash Functions & Digital Signatures platforms: - Windows - Linux - accessType: Download + accessType: download license: Apache 2.0 knowledgebase: false - name: Volatility 3 @@ -62,7 +62,7 @@ tools: related_concepts: - Hash Functions & Digital Signatures - Regular Expressions (Regex) - related_software: + related_software: null domain-agnostic-software: null skillLevel: advanced accessType: download @@ -98,7 +98,7 @@ tools: platforms: - Web related_concepts: null - related_software: + related_software: null domain-agnostic-software: - collaboration-general skillLevel: intermediate @@ -172,7 +172,7 @@ tools: related_concepts: - Regular Expressions (Regex) - SQL Query Fundamentals - related_software: + related_software: null domain-agnostic-software: null skillLevel: intermediate accessType: server-based @@ -212,7 +212,7 @@ tools: - Linux - macOS related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: intermediate accessType: download @@ -250,7 +250,7 @@ tools: platforms: - Windows related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: beginner accessType: commercial @@ -285,7 +285,7 @@ tools: platforms: - Windows related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: beginner accessType: commercial @@ -320,7 +320,7 @@ tools: - Linux - Web related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: advanced accessType: server-based @@ -355,7 +355,7 @@ tools: - Linux - macOS related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: expert accessType: download @@ -393,7 +393,7 @@ tools: - Linux - macOS related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: intermediate accessType: download @@ -428,7 +428,7 @@ tools: platforms: - Web related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: beginner accessType: server-based @@ -470,7 +470,7 @@ tools: - macOS - Web related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: advanced accessType: server-based @@ -510,7 +510,7 @@ tools: - macOS - Web related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: advanced accessType: server-based @@ -547,7 +547,7 @@ tools: platforms: - Linux related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: expert accessType: server-based @@ -583,7 +583,7 @@ tools: - Windows - Linux related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: beginner accessType: download @@ -622,7 +622,7 @@ tools: - macOS related_concepts: - Regular Expressions (Regex) - related_software: + related_software: null domain-agnostic-software: null skillLevel: novice accessType: download @@ -656,7 +656,7 @@ tools: platforms: - Web related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: intermediate accessType: commercial @@ -697,7 +697,7 @@ tools: - Web related_concepts: - SQL Query Fundamentals - related_software: + related_software: null domain-agnostic-software: null skillLevel: intermediate accessType: server-based @@ -734,7 +734,7 @@ tools: - Linux - macOS related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: intermediate accessType: download @@ -772,7 +772,7 @@ tools: platforms: - Web related_concepts: null - related_software: + related_software: null domain-agnostic-software: - collaboration-general skillLevel: novice @@ -806,7 +806,7 @@ tools: platforms: - Web related_concepts: null - related_software: + related_software: null domain-agnostic-software: - collaboration-general skillLevel: beginner @@ -842,7 +842,7 @@ tools: - Linux - macOS related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: advanced accessType: download @@ -884,7 +884,7 @@ tools: - Linux - macOS related_concepts: null - related_software: + related_software: null domain-agnostic-software: - collaboration-general skillLevel: novice @@ -967,7 +967,7 @@ tools: license: Proprietary knowledgebase: false related_concepts: null - related_software: + related_software: null domain-agnostic-software: - collaboration-general - name: GraphSense @@ -989,7 +989,7 @@ tools: platforms: - Web related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: intermediate accessType: server-based @@ -1023,7 +1023,7 @@ tools: - Windows related_concepts: - Hash Functions & Digital Signatures - related_software: + related_software: null domain-agnostic-software: null skillLevel: beginner accessType: download @@ -1056,7 +1056,7 @@ tools: - Linux related_concepts: - Hash Functions & Digital Signatures - related_software: + related_software: null domain-agnostic-software: null skillLevel: novice accessType: download @@ -1088,7 +1088,7 @@ tools: platforms: - macOS related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: intermediate accessType: download @@ -1125,7 +1125,7 @@ tools: - macOS related_concepts: - SQL Query Fundamentals - related_software: + related_software: null domain-agnostic-software: null skillLevel: intermediate accessType: download @@ -1161,7 +1161,7 @@ tools: - Linux - macOS related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: intermediate accessType: download @@ -1196,7 +1196,7 @@ tools: - Linux - macOS related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: intermediate accessType: download @@ -1244,7 +1244,7 @@ tools: license: GPL-3.0 knowledgebase: true related_concepts: null - related_software: + related_software: null domain-agnostic-software: - specific-os - name: dd @@ -1265,7 +1265,7 @@ tools: - Linux - macOS related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: intermediate accessType: built-in @@ -1298,7 +1298,7 @@ tools: - Linux related_concepts: - Hash Functions & Digital Signatures - related_software: + related_software: null domain-agnostic-software: null skillLevel: intermediate accessType: download @@ -1331,7 +1331,7 @@ tools: - Linux - macOS related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: intermediate accessType: download @@ -1366,7 +1366,7 @@ tools: - Linux - macOS related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: beginner accessType: download @@ -1399,7 +1399,7 @@ tools: platforms: - Linux related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: advanced accessType: download @@ -1431,7 +1431,7 @@ tools: platforms: - Windows related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: beginner accessType: download @@ -1465,7 +1465,7 @@ tools: platforms: - Windows related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: beginner accessType: download @@ -1500,7 +1500,7 @@ tools: - Windows - Linux related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: intermediate accessType: download @@ -1569,7 +1569,7 @@ tools: - macOS related_concepts: - Regular Expressions (Regex) - related_software: + related_software: null domain-agnostic-software: null skillLevel: novice accessType: built-in @@ -1645,7 +1645,7 @@ tools: license: Free / Mixed knowledgebase: false related_concepts: null - related_software: + related_software: null domain-agnostic-software: - specific-os - name: Tsurugi Linux @@ -1678,7 +1678,7 @@ tools: license: GPL / Mixed knowledgebase: false related_concepts: null - related_software: + related_software: null domain-agnostic-software: - specific-os - name: Parrot Security OS @@ -1710,7 +1710,7 @@ tools: license: GPL-3.0 knowledgebase: false related_concepts: null - related_software: + related_software: null domain-agnostic-software: - specific-os - name: Eric Zimmerman Tools @@ -1730,7 +1730,7 @@ tools: platforms: - Windows related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: intermediate accessType: download @@ -1766,7 +1766,7 @@ tools: - Windows - macOS related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: advanced accessType: download @@ -1801,7 +1801,7 @@ tools: platforms: - Web related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: expert accessType: commercial @@ -1834,7 +1834,7 @@ tools: platforms: - Windows related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: expert accessType: commercial @@ -1868,7 +1868,7 @@ tools: platforms: - Windows related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: intermediate accessType: commercial @@ -1900,7 +1900,7 @@ tools: platforms: - Hardware related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: intermediate accessType: commercial @@ -1959,7 +1959,7 @@ tools: - data-collection platforms: [] related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: advanced accessType: null @@ -1995,7 +1995,7 @@ tools: - examination platforms: [] related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: intermediate accessType: null @@ -2033,7 +2033,7 @@ tools: platforms: - macOS related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: intermediate accessType: download @@ -2068,7 +2068,7 @@ tools: - analysis platforms: [] related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: intermediate accessType: null @@ -2100,7 +2100,7 @@ tools: - analysis platforms: [] related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: intermediate accessType: null @@ -2132,7 +2132,7 @@ tools: - examination platforms: [] related_concepts: null - related_software: + related_software: null domain-agnostic-software: null skillLevel: advanced accessType: null @@ -2209,33 +2209,27 @@ domain-agnostic-software: name: Betriebssysteme description: Operating Systems which focus on forensics scenarios: - - id: registry - icon: 🗃️ - friendly_name: "Registry-Analyse" - - id: memory-forensics + - id: disk_imaging + icon: 💽 + friendly_name: Datenträgerabbild + - id: memory_dump icon: 🧠 - friendly_name: "Memory-Forensik" - - id: network-traffic - icon: 🌐 - friendly_name: "Netzwerk-Traffic" - - id: mobile-forensik - icon: 📱 - friendly_name: "Mobile Geräte" - - id: malware-analysis - icon: 🦠 - friendly_name: "Malware-Analyse" - - id: timeline-analysis - icon: ⏰ - friendly_name: "Timeline-Erstellung" - - id: file-recovery - icon: 💾 - friendly_name: "Datei-Wiederherstellung" - - id: browser-forensik + friendly_name: RAM-Analyse + - id: file_recovery + icon: 🗑️ + friendly_name: Datenrettung + - id: browser_history icon: 🌍 - friendly_name: "Browser-Forensik" - - id: email-forensik - icon: 📧 - friendly_name: "E-Mail-Forensik" - - id: log-analysis - icon: 📊 - friendly_name: "Log-Analyse" \ No newline at end of file + friendly_name: Browser-Spuren + - id: credential_theft + icon: 🛑 + friendly_name: Zugangsdiebstahl + - id: remote_access + icon: 📡 + friendly_name: Fernzugriffe + - id: persistence + icon: ♻️ + friendly_name: Persistenzsuche + - id: windows-registry + icon: 📜 + friendly_name: Registry-Analyse \ No newline at end of file