make icons
This commit is contained in:
		
							parent
							
								
									8cccb0f4a9
								
							
						
					
					
						commit
						c01a73bbb7
					
				@ -146,10 +146,26 @@
 | 
				
			|||||||
            box-shadow: 0 8px 15px rgba(0,0,0,0.15);
 | 
					            box-shadow: 0 8px 15px rgba(0,0,0,0.15);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        .tool-card.method {
 | 
				
			||||||
 | 
					            border-left: 4px solid #9b59b6;
 | 
				
			||||||
 | 
					            background: linear-gradient(135deg, #f8f9fa 0%, #f4f1ff 100%);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        .tool-card.software {
 | 
				
			||||||
 | 
					            border-left: 4px solid #3498db;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        .tool-card h3 {
 | 
					        .tool-card h3 {
 | 
				
			||||||
            color: #2c3e50;
 | 
					            color: #2c3e50;
 | 
				
			||||||
            margin-bottom: 10px;
 | 
					            margin-bottom: 10px;
 | 
				
			||||||
            font-size: 1.3em;
 | 
					            font-size: 1.3em;
 | 
				
			||||||
 | 
					            display: flex;
 | 
				
			||||||
 | 
					            align-items: center;
 | 
				
			||||||
 | 
					            gap: 8px;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        .tool-icon {
 | 
				
			||||||
 | 
					            font-size: 1.4em;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        .tool-card p {
 | 
					        .tool-card p {
 | 
				
			||||||
@ -169,6 +185,12 @@
 | 
				
			|||||||
            margin: 2px;
 | 
					            margin: 2px;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        .tag.method-tag {
 | 
				
			||||||
 | 
					            background: #e8e4ff;
 | 
				
			||||||
 | 
					            color: #9b59b6;
 | 
				
			||||||
 | 
					            font-weight: bold;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        .tag.domain-agnostic {
 | 
					        .tag.domain-agnostic {
 | 
				
			||||||
            background: #e8f5e8;
 | 
					            background: #e8f5e8;
 | 
				
			||||||
            color: #27ae60;
 | 
					            color: #27ae60;
 | 
				
			||||||
@ -426,6 +448,42 @@
 | 
				
			|||||||
            margin: 10px 0;
 | 
					            margin: 10px 0;
 | 
				
			||||||
            border: 1px solid #c3e6cb;
 | 
					            border: 1px solid #c3e6cb;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        .type-badge {
 | 
				
			||||||
 | 
					            display: inline-block;
 | 
				
			||||||
 | 
					            padding: 4px 8px;
 | 
				
			||||||
 | 
					            border-radius: 12px;
 | 
				
			||||||
 | 
					            font-size: 0.75em;
 | 
				
			||||||
 | 
					            font-weight: bold;
 | 
				
			||||||
 | 
					            text-transform: uppercase;
 | 
				
			||||||
 | 
					            margin-left: 10px;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        .type-software {
 | 
				
			||||||
 | 
					            background: #3498db;
 | 
				
			||||||
 | 
					            color: white;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        .type-method {
 | 
				
			||||||
 | 
					            background: #9b59b6;
 | 
				
			||||||
 | 
					            color: white;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        .conditional-fields {
 | 
				
			||||||
 | 
					            transition: opacity 0.3s ease;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        .conditional-fields.disabled {
 | 
				
			||||||
 | 
					            opacity: 0.5;
 | 
				
			||||||
 | 
					            pointer-events: none;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        .icon-input {
 | 
				
			||||||
 | 
					            font-size: 1.5em;
 | 
				
			||||||
 | 
					            text-align: center;
 | 
				
			||||||
 | 
					            padding: 10px;
 | 
				
			||||||
 | 
					            width: 80px;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    </style>
 | 
					    </style>
 | 
				
			||||||
</head>
 | 
					</head>
 | 
				
			||||||
<body>
 | 
					<body>
 | 
				
			||||||
@ -458,6 +516,14 @@
 | 
				
			|||||||
                        <div class="stat-number" id="totalTools">0</div>
 | 
					                        <div class="stat-number" id="totalTools">0</div>
 | 
				
			||||||
                        <div class="stat-label">Total Tools</div>
 | 
					                        <div class="stat-label">Total Tools</div>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
 | 
					                    <div class="stat-card">
 | 
				
			||||||
 | 
					                        <div class="stat-number" id="softwareCount">0</div>
 | 
				
			||||||
 | 
					                        <div class="stat-label">Software</div>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                    <div class="stat-card">
 | 
				
			||||||
 | 
					                        <div class="stat-number" id="methodCount">0</div>
 | 
				
			||||||
 | 
					                        <div class="stat-label">Methods</div>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
                    <div class="stat-card">
 | 
					                    <div class="stat-card">
 | 
				
			||||||
                        <div class="stat-number" id="totalDomains">0</div>
 | 
					                        <div class="stat-number" id="totalDomains">0</div>
 | 
				
			||||||
                        <div class="stat-label">Domains</div>
 | 
					                        <div class="stat-label">Domains</div>
 | 
				
			||||||
@ -496,7 +562,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        <!-- Tools Tab -->
 | 
					        <!-- Tools Tab -->
 | 
				
			||||||
        <div id="tools" class="tab-content">
 | 
					        <div id="tools" class="tab-content">
 | 
				
			||||||
            <input type="text" class="search-bar" id="searchBar" placeholder="🔍 Search tools by name, description, tags, domains, phases, or domain-agnostic categories..." onkeyup="filterTools()" />
 | 
					            <input type="text" class="search-bar" id="searchBar" placeholder="🔍 Search tools by name, description, tags, domains, phases, or type..." onkeyup="filterTools()" />
 | 
				
			||||||
            <div class="tools-grid" id="toolsGrid"></div>
 | 
					            <div class="tools-grid" id="toolsGrid"></div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -506,11 +572,31 @@
 | 
				
			|||||||
                <h3 id="editorTitle">Add New Tool</h3>
 | 
					                <h3 id="editorTitle">Add New Tool</h3>
 | 
				
			||||||
                <div id="messageArea"></div>
 | 
					                <div id="messageArea"></div>
 | 
				
			||||||
                <form id="toolForm">
 | 
					                <form id="toolForm">
 | 
				
			||||||
                    <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 20px;">
 | 
					                    <div style="display: grid; grid-template-columns: 1fr 1fr 100px; gap: 20px;">
 | 
				
			||||||
                        <div class="form-group">
 | 
					                        <div class="form-group">
 | 
				
			||||||
                            <label for="toolName">Tool Name *</label>
 | 
					                            <label for="toolName">Tool Name *</label>
 | 
				
			||||||
                            <input type="text" id="toolName" required />
 | 
					                            <input type="text" id="toolName" required />
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
 | 
					                        <div class="form-group">
 | 
				
			||||||
 | 
					                            <label for="toolType">Type *</label>
 | 
				
			||||||
 | 
					                            <select id="toolType" required onchange="handleTypeChange()">
 | 
				
			||||||
 | 
					                                <option value="">Select Type</option>
 | 
				
			||||||
 | 
					                                <option value="software">Software</option>
 | 
				
			||||||
 | 
					                                <option value="method">Method</option>
 | 
				
			||||||
 | 
					                            </select>
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                        <div class="form-group">
 | 
				
			||||||
 | 
					                            <label for="toolIcon">Icon <small style="color: #7f8c8d; cursor: pointer;" onclick="showIconSuggestions()" title="Click for suggestions">💡 suggestions</small></label>
 | 
				
			||||||
 | 
					                            <input type="text" id="toolIcon" class="icon-input" placeholder="🔧" maxlength="2" />
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    <div class="form-group">
 | 
				
			||||||
 | 
					                        <label for="description">Description *</label>
 | 
				
			||||||
 | 
					                        <textarea id="description" rows="3" required></textarea>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 20px;">
 | 
				
			||||||
                        <div class="form-group">
 | 
					                        <div class="form-group">
 | 
				
			||||||
                            <label for="skillLevel">Skill Level *</label>
 | 
					                            <label for="skillLevel">Skill Level *</label>
 | 
				
			||||||
                            <select id="skillLevel" required>
 | 
					                            <select id="skillLevel" required>
 | 
				
			||||||
@ -522,74 +608,75 @@
 | 
				
			|||||||
                                <option value="expert">Expert</option>
 | 
					                                <option value="expert">Expert</option>
 | 
				
			||||||
                            </select>
 | 
					                            </select>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                    </div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    <div class="form-group">
 | 
					 | 
				
			||||||
                        <label for="description">Description *</label>
 | 
					 | 
				
			||||||
                        <textarea id="description" rows="3" required></textarea>
 | 
					 | 
				
			||||||
                    </div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 20px;">
 | 
					 | 
				
			||||||
                        <div class="form-group">
 | 
					                        <div class="form-group">
 | 
				
			||||||
                            <label for="url">URL</label>
 | 
					                            <label for="url">URL</label>
 | 
				
			||||||
                            <input type="url" id="url" />
 | 
					                            <input type="url" id="url" />
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                        <div class="form-group">
 | 
					 | 
				
			||||||
                            <label for="projectUrl">Project URL</label>
 | 
					 | 
				
			||||||
                            <input type="url" id="projectUrl" />
 | 
					 | 
				
			||||||
                        </div>
 | 
					 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    <div style="display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 20px;">
 | 
					                    <!-- Software-specific fields -->
 | 
				
			||||||
                        <div class="form-group">
 | 
					                    <div id="softwareFields" class="conditional-fields">
 | 
				
			||||||
                            <label for="license">License</label>
 | 
					                        <div style="display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 20px;">
 | 
				
			||||||
                            <input type="text" id="license" />
 | 
					                            <div class="form-group">
 | 
				
			||||||
 | 
					                                <label for="projectUrl">Project URL</label>
 | 
				
			||||||
 | 
					                                <input type="url" id="projectUrl" />
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                            <div class="form-group">
 | 
				
			||||||
 | 
					                                <label for="license">License</label>
 | 
				
			||||||
 | 
					                                <input type="text" id="license" />
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                            <div class="form-group">
 | 
				
			||||||
 | 
					                                <label for="accessType">Access Type</label>
 | 
				
			||||||
 | 
					                                <select id="accessType">
 | 
				
			||||||
 | 
					                                    <option value="">Select Type</option>
 | 
				
			||||||
 | 
					                                    <option value="download">Download</option>
 | 
				
			||||||
 | 
					                                    <option value="server-based">CC24-Server</option>
 | 
				
			||||||
 | 
					                                    <option value="commercial">Commercial</option>
 | 
				
			||||||
 | 
					                                    <option value="built-in">Built-in</option>
 | 
				
			||||||
 | 
					                                </select>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                        <div class="form-group">
 | 
					 | 
				
			||||||
                            <label for="accessType">Access Type</label>
 | 
					 | 
				
			||||||
                            <select id="accessType">
 | 
					 | 
				
			||||||
                                <option value="">Select Type</option>
 | 
					 | 
				
			||||||
                                <option value="download">Download</option>
 | 
					 | 
				
			||||||
                                <option value="server-based">CC24-Server</option>
 | 
					 | 
				
			||||||
                                <option value="commercial">Commercial</option>
 | 
					 | 
				
			||||||
                                <option value="OS">Operating System</option>
 | 
					 | 
				
			||||||
                            </select>
 | 
					 | 
				
			||||||
                        </div>
 | 
					 | 
				
			||||||
                        <div class="form-group">
 | 
					 | 
				
			||||||
                            <label for="statusUrl">Status URL</label>
 | 
					 | 
				
			||||||
                            <input type="url" id="statusUrl" />
 | 
					 | 
				
			||||||
                        </div>
 | 
					 | 
				
			||||||
                    </div>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    <div class="form-group">
 | 
					                        <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 20px;">
 | 
				
			||||||
                        <div class="checkbox-item">
 | 
					                            <div class="form-group">
 | 
				
			||||||
                            <input type="checkbox" id="knowledgebase" />
 | 
					                                <label for="statusUrl">Status URL</label>
 | 
				
			||||||
                            <label for="knowledgebase">📚 Knowledgebase Tool</label>
 | 
					                                <input type="url" id="statusUrl" />
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                            <div class="form-group">
 | 
				
			||||||
 | 
					                                <div class="checkbox-item">
 | 
				
			||||||
 | 
					                                    <input type="checkbox" id="knowledgebase" />
 | 
				
			||||||
 | 
					                                    <label for="knowledgebase">📚 Knowledgebase Tool</label>
 | 
				
			||||||
 | 
					                                </div>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                    </div>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    <div class="form-group">
 | 
					                        <div class="form-group">
 | 
				
			||||||
                        <label>Platforms</label>
 | 
					                            <label>Platforms</label>
 | 
				
			||||||
                        <div class="checkbox-group" id="platformsCheckbox">
 | 
					                            <div class="checkbox-group" id="platformsCheckbox">
 | 
				
			||||||
                            <div class="checkbox-item">
 | 
					                                <div class="checkbox-item">
 | 
				
			||||||
                                <input type="checkbox" id="platform-windows" value="Windows">
 | 
					                                    <input type="checkbox" id="platform-windows" value="Windows">
 | 
				
			||||||
                                <label for="platform-windows">Windows</label>
 | 
					                                    <label for="platform-windows">Windows</label>
 | 
				
			||||||
                            </div>
 | 
					                                </div>
 | 
				
			||||||
                            <div class="checkbox-item">
 | 
					                                <div class="checkbox-item">
 | 
				
			||||||
                                <input type="checkbox" id="platform-linux" value="Linux">
 | 
					                                    <input type="checkbox" id="platform-linux" value="Linux">
 | 
				
			||||||
                                <label for="platform-linux">Linux</label>
 | 
					                                    <label for="platform-linux">Linux</label>
 | 
				
			||||||
                            </div>
 | 
					                                </div>
 | 
				
			||||||
                            <div class="checkbox-item">
 | 
					                                <div class="checkbox-item">
 | 
				
			||||||
                                <input type="checkbox" id="platform-macos" value="macOS">
 | 
					                                    <input type="checkbox" id="platform-macos" value="macOS">
 | 
				
			||||||
                                <label for="platform-macos">macOS</label>
 | 
					                                    <label for="platform-macos">macOS</label>
 | 
				
			||||||
                            </div>
 | 
					                                </div>
 | 
				
			||||||
                            <div class="checkbox-item">
 | 
					                                <div class="checkbox-item">
 | 
				
			||||||
                                <input type="checkbox" id="platform-web" value="Web">
 | 
					                                    <input type="checkbox" id="platform-web" value="Web">
 | 
				
			||||||
                                <label for="platform-web">Web</label>
 | 
					                                    <label for="platform-web">Web</label>
 | 
				
			||||||
                            </div>
 | 
					                                </div>
 | 
				
			||||||
                            <div class="checkbox-item">
 | 
					                                <div class="checkbox-item">
 | 
				
			||||||
                                <input type="checkbox" id="platform-os" value="OS">
 | 
					                                    <input type="checkbox" id="platform-os" value="OS">
 | 
				
			||||||
                                <label for="platform-os">Operating System</label>
 | 
					                                    <label for="platform-os">Operating System</label>
 | 
				
			||||||
 | 
					                                </div>
 | 
				
			||||||
 | 
					                                <div class="checkbox-item">
 | 
				
			||||||
 | 
					                                    <input type="checkbox" id="platform-hardware" value="Hardware">
 | 
				
			||||||
 | 
					                                    <label for="platform-hardware">Hardware</label>
 | 
				
			||||||
 | 
					                                </div>
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
@ -633,6 +720,8 @@
 | 
				
			|||||||
                
 | 
					                
 | 
				
			||||||
                <div style="margin: 20px 0;">
 | 
					                <div style="margin: 20px 0;">
 | 
				
			||||||
                    <button class="btn" onclick="selectAllTools()">Select All</button>
 | 
					                    <button class="btn" onclick="selectAllTools()">Select All</button>
 | 
				
			||||||
 | 
					                    <button class="btn" onclick="selectByType('software')">Select Software</button>
 | 
				
			||||||
 | 
					                    <button class="btn" onclick="selectByType('method')">Select Methods</button>
 | 
				
			||||||
                    <button class="btn" onclick="clearSelection()">Clear Selection</button>
 | 
					                    <button class="btn" onclick="clearSelection()">Clear Selection</button>
 | 
				
			||||||
                    <span id="selectionCount" style="margin-left: 20px; font-weight: bold;">0 selected</span>
 | 
					                    <span id="selectionCount" style="margin-left: 20px; font-weight: bold;">0 selected</span>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
@ -643,11 +732,14 @@
 | 
				
			|||||||
                    <button class="btn btn-warning" onclick="bulkUpdatePhases()">Update Phases</button>
 | 
					                    <button class="btn btn-warning" onclick="bulkUpdatePhases()">Update Phases</button>
 | 
				
			||||||
                    <button class="btn btn-warning" onclick="bulkUpdateDomainAgnostic()">Update Domain-Agnostic</button>
 | 
					                    <button class="btn btn-warning" onclick="bulkUpdateDomainAgnostic()">Update Domain-Agnostic</button>
 | 
				
			||||||
                    <button class="btn btn-warning" onclick="bulkUpdateTags()">Update Tags</button>
 | 
					                    <button class="btn btn-warning" onclick="bulkUpdateTags()">Update Tags</button>
 | 
				
			||||||
 | 
					                    <button class="btn btn-warning" onclick="bulkUpdateType()">Update Type</button>
 | 
				
			||||||
 | 
					                    <button class="btn btn-warning" onclick="bulkUpdateIcons()">🎨 Update Icons</button>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 15px; margin-top: 15px;">
 | 
					                <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 15px; margin-top: 15px;">
 | 
				
			||||||
                    <button class="btn" onclick="bulkSetKnowledgebase(true)">📚 Set as Knowledgebase</button>
 | 
					                    <button class="btn" onclick="bulkSetKnowledgebase(true)">📚 Set as Knowledgebase</button>
 | 
				
			||||||
                    <button class="btn" onclick="bulkSetKnowledgebase(false)">📖 Remove Knowledgebase</button>
 | 
					                    <button class="btn" onclick="bulkSetKnowledgebase(false)">📖 Remove Knowledgebase</button>
 | 
				
			||||||
 | 
					                    <button class="btn" onclick="bulkClearField('icon')">🗑️ Clear Icons</button>
 | 
				
			||||||
                    <button class="btn" onclick="bulkClearField('tags')">🗑️ Clear All Tags</button>
 | 
					                    <button class="btn" onclick="bulkClearField('tags')">🗑️ Clear All Tags</button>
 | 
				
			||||||
                    <button class="btn" onclick="bulkClearField('domains')">🗑️ Clear All Domains</button>
 | 
					                    <button class="btn" onclick="bulkClearField('domains')">🗑️ Clear All Domains</button>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
@ -724,6 +816,25 @@
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        function handleTypeChange() {
 | 
				
			||||||
 | 
					            const type = document.getElementById('toolType').value;
 | 
				
			||||||
 | 
					            const softwareFields = document.getElementById('softwareFields');
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            if (type === 'method') {
 | 
				
			||||||
 | 
					                softwareFields.classList.add('disabled');
 | 
				
			||||||
 | 
					                // Clear software-specific fields for methods
 | 
				
			||||||
 | 
					                document.getElementById('projectUrl').value = '';
 | 
				
			||||||
 | 
					                document.getElementById('license').value = '';
 | 
				
			||||||
 | 
					                document.getElementById('accessType').value = '';
 | 
				
			||||||
 | 
					                document.getElementById('statusUrl').value = '';
 | 
				
			||||||
 | 
					                document.getElementById('knowledgebase').checked = false;
 | 
				
			||||||
 | 
					                // Clear platform checkboxes
 | 
				
			||||||
 | 
					                document.querySelectorAll('#platformsCheckbox input').forEach(cb => cb.checked = false);
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                softwareFields.classList.remove('disabled');
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        function showMessage(message, type = 'success') {
 | 
					        function showMessage(message, type = 'success') {
 | 
				
			||||||
            const messageArea = document.getElementById('messageArea');
 | 
					            const messageArea = document.getElementById('messageArea');
 | 
				
			||||||
            const className = type === 'error' ? 'error-message' : 'success-message';
 | 
					            const className = type === 'error' ? 'error-message' : 'success-message';
 | 
				
			||||||
@ -757,24 +868,56 @@
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        function loadSampleData() {
 | 
					        function loadSampleData() {
 | 
				
			||||||
            // This would load from your existing YAML data
 | 
					 | 
				
			||||||
            // For brevity, I'll just show the structure
 | 
					 | 
				
			||||||
            try {
 | 
					            try {
 | 
				
			||||||
                const sampleData = {
 | 
					                const sampleData = {
 | 
				
			||||||
                    tools: [], // Your existing tools
 | 
					                    tools: [
 | 
				
			||||||
                    domains: [], // Your existing domains  
 | 
					 | 
				
			||||||
                    phases: [], // Your existing phases
 | 
					 | 
				
			||||||
                    "domain-agnostic-software": [
 | 
					 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            id: "collaboration-general",
 | 
					                            name: "Autopsy",
 | 
				
			||||||
                            name: "Übergreifend & Kollaboration",
 | 
					                            icon: "📱",
 | 
				
			||||||
                            description: "Cross-cutting tools and collaboration platforms"
 | 
					                            type: "software",
 | 
				
			||||||
 | 
					                            description: "The leading open-source digital forensics platform.",
 | 
				
			||||||
 | 
					                            domains: ["incident-response", "law-enforcement"],
 | 
				
			||||||
 | 
					                            phases: ["examination", "analysis"],
 | 
				
			||||||
 | 
					                            platforms: ["Windows", "Linux"],
 | 
				
			||||||
 | 
					                            skillLevel: "intermediate",
 | 
				
			||||||
 | 
					                            accessType: "download",
 | 
				
			||||||
 | 
					                            url: "https://www.autopsy.com/",
 | 
				
			||||||
 | 
					                            projectUrl: "",
 | 
				
			||||||
 | 
					                            license: "Apache 2.0",
 | 
				
			||||||
 | 
					                            knowledgebase: false,
 | 
				
			||||||
 | 
					                            tags: ["gui", "filesystem", "timeline-analysis", "carving"]
 | 
				
			||||||
                        },
 | 
					                        },
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            id: "specific-os", 
 | 
					                            name: "Live Memory Acquisition Procedure",
 | 
				
			||||||
                            name: "Betriebssysteme",
 | 
					                            icon: "🧠",
 | 
				
			||||||
                            description: "Operating Systems which focus on forensics"
 | 
					                            type: "method",
 | 
				
			||||||
 | 
					                            description: "Standardized procedure for forensically sound memory acquisition.",
 | 
				
			||||||
 | 
					                            domains: ["incident-response", "law-enforcement"],
 | 
				
			||||||
 | 
					                            phases: ["data-collection"],
 | 
				
			||||||
 | 
					                            platforms: [],
 | 
				
			||||||
 | 
					                            skillLevel: "advanced",
 | 
				
			||||||
 | 
					                            accessType: null,
 | 
				
			||||||
 | 
					                            url: "https://www.nist.gov/publications/guide-integrating-forensic-techniques-incident-response",
 | 
				
			||||||
 | 
					                            projectUrl: null,
 | 
				
			||||||
 | 
					                            license: null,
 | 
				
			||||||
 | 
					                            knowledgebase: false,
 | 
				
			||||||
 | 
					                            tags: ["memory-acquisition", "volatile-evidence", "procedure"]
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					                    ],
 | 
				
			||||||
 | 
					                    domains: [
 | 
				
			||||||
 | 
					                        { id: "incident-response", name: "Incident Response & Breach Investigation" },
 | 
				
			||||||
 | 
					                        { id: "law-enforcement", name: "Law Enforcement & Criminal Investigation" },
 | 
				
			||||||
 | 
					                        { id: "malware-analysis", name: "Malware Analysis & Reverse Engineering" }
 | 
				
			||||||
 | 
					                    ],
 | 
				
			||||||
 | 
					                    phases: [
 | 
				
			||||||
 | 
					                        { id: "data-collection", name: "Data Collection", description: "Imaging, Acquisition, Remote Collection Tools" },
 | 
				
			||||||
 | 
					                        { id: "examination", name: "Examination", description: "Parsing, Extraction, Initial Analysis Tools" },
 | 
				
			||||||
 | 
					                        { id: "analysis", name: "Analysis", description: "Deep Analysis, Correlation, Visualization Tools" },
 | 
				
			||||||
 | 
					                        { id: "reporting", name: "Reporting", description: "Documentation, Visualization, Presentation Tools" }
 | 
				
			||||||
 | 
					                    ],
 | 
				
			||||||
 | 
					                    "domain-agnostic-software": [
 | 
				
			||||||
 | 
					                        { id: "collaboration-general", name: "Collaboration & General", description: "Cross-cutting tools and collaboration platforms" },
 | 
				
			||||||
 | 
					                        { id: "specific-os", name: "Operating Systems", description: "Operating Systems which focus on forensics" }
 | 
				
			||||||
                    ]
 | 
					                    ]
 | 
				
			||||||
                };
 | 
					                };
 | 
				
			||||||
                yamlData = sampleData;
 | 
					                yamlData = sampleData;
 | 
				
			||||||
@ -808,6 +951,12 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            const tools = yamlData.tools;
 | 
					            const tools = yamlData.tools;
 | 
				
			||||||
            document.getElementById('totalTools').textContent = tools.length;
 | 
					            document.getElementById('totalTools').textContent = tools.length;
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            const softwareCount = tools.filter(tool => tool.type === 'software').length;
 | 
				
			||||||
 | 
					            const methodCount = tools.filter(tool => tool.type === 'method').length;
 | 
				
			||||||
 | 
					            document.getElementById('softwareCount').textContent = softwareCount;
 | 
				
			||||||
 | 
					            document.getElementById('methodCount').textContent = methodCount;
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
            document.getElementById('totalDomains').textContent = yamlData.domains ? yamlData.domains.length : 0;
 | 
					            document.getElementById('totalDomains').textContent = yamlData.domains ? yamlData.domains.length : 0;
 | 
				
			||||||
            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;
 | 
				
			||||||
@ -973,11 +1122,12 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        function createToolCard(tool, index) {
 | 
					        function createToolCard(tool, index) {
 | 
				
			||||||
            const card = document.createElement('div');
 | 
					            const card = document.createElement('div');
 | 
				
			||||||
            card.className = 'tool-card';
 | 
					            card.className = `tool-card ${tool.type || 'software'}`;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            const skillClass = `skill-${tool.skillLevel || 'intermediate'}`;
 | 
					            const skillClass = `skill-${tool.skillLevel || 'intermediate'}`;
 | 
				
			||||||
            const tags = (tool.tags || []).map(tag => `<span class="tag">${tag}</span>`).join('');
 | 
					            const tags = (tool.tags || []).map(tag => `<span class="tag">${tag}</span>`).join('');
 | 
				
			||||||
            const knowledgebaseIndicator = tool.knowledgebase ? '<span class="tag" style="background: #e8f5e8; color: #27ae60; font-weight: bold;">📚 Knowledgebase</span>' : '';
 | 
					            const knowledgebaseIndicator = tool.knowledgebase ? '<span class="tag" style="background: #e8f5e8; color: #27ae60; font-weight: bold;">📚 Knowledgebase</span>' : '';
 | 
				
			||||||
 | 
					            const typeIndicator = `<span class="type-badge type-${tool.type || 'software'}">${tool.type || 'software'}</span>`;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            // Add domain-agnostic indicators
 | 
					            // Add domain-agnostic indicators
 | 
				
			||||||
            const domainAgnosticTags = (tool['domain-agnostic-software'] || []).map(cat => {
 | 
					            const domainAgnosticTags = (tool['domain-agnostic-software'] || []).map(cat => {
 | 
				
			||||||
@ -986,7 +1136,11 @@
 | 
				
			|||||||
            }).join('');
 | 
					            }).join('');
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            card.innerHTML = `
 | 
					            card.innerHTML = `
 | 
				
			||||||
                <h3>${tool.name}</h3>
 | 
					                <h3>
 | 
				
			||||||
 | 
					                    ${tool.icon ? `<span class="tool-icon">${tool.icon}</span>` : ''}
 | 
				
			||||||
 | 
					                    ${tool.name}
 | 
				
			||||||
 | 
					                    ${typeIndicator}
 | 
				
			||||||
 | 
					                </h3>
 | 
				
			||||||
                <div style="margin: 5px 0;">
 | 
					                <div style="margin: 5px 0;">
 | 
				
			||||||
                    <div class="skill-badge ${skillClass}">${tool.skillLevel || 'intermediate'}</div>
 | 
					                    <div class="skill-badge ${skillClass}">${tool.skillLevel || 'intermediate'}</div>
 | 
				
			||||||
                    ${knowledgebaseIndicator}
 | 
					                    ${knowledgebaseIndicator}
 | 
				
			||||||
@ -1004,16 +1158,21 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        function createBulkToolCard(tool, index) {
 | 
					        function createBulkToolCard(tool, index) {
 | 
				
			||||||
            const card = document.createElement('div');
 | 
					            const card = document.createElement('div');
 | 
				
			||||||
            card.className = 'tool-card';
 | 
					            card.className = `tool-card ${tool.type || 'software'}`;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            const skillClass = `skill-${tool.skillLevel || 'intermediate'}`;
 | 
					            const skillClass = `skill-${tool.skillLevel || 'intermediate'}`;
 | 
				
			||||||
            const isSelected = selectedTools.has(index);
 | 
					            const isSelected = selectedTools.has(index);
 | 
				
			||||||
            const knowledgebaseIndicator = tool.knowledgebase ? '<span class="tag" style="background: #e8f5e8; color: #27ae60; font-weight: bold; margin-left: 10px;">📚 KB</span>' : '';
 | 
					            const knowledgebaseIndicator = tool.knowledgebase ? '<span class="tag" style="background: #e8f5e8; color: #27ae60; font-weight: bold; margin-left: 10px;">📚 KB</span>' : '';
 | 
				
			||||||
 | 
					            const typeIndicator = `<span class="type-badge type-${tool.type || 'software'}" style="margin-left: 10px;">${tool.type || 'software'}</span>`;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            card.innerHTML = `
 | 
					            card.innerHTML = `
 | 
				
			||||||
                <div style="display: flex; align-items: center; gap: 10px; margin-bottom: 10px;">
 | 
					                <div style="display: flex; align-items: center; gap: 10px; margin-bottom: 10px;">
 | 
				
			||||||
                    <input type="checkbox" ${isSelected ? 'checked' : ''} onchange="toggleToolSelection(${index})" />
 | 
					                    <input type="checkbox" ${isSelected ? 'checked' : ''} onchange="toggleToolSelection(${index})" />
 | 
				
			||||||
                    <h3 style="margin: 0;">${tool.name}</h3>
 | 
					                    <h3 style="margin: 0; display: flex; align-items: center; gap: 8px;">
 | 
				
			||||||
 | 
					                        ${tool.icon ? `<span class="tool-icon">${tool.icon}</span>` : ''}
 | 
				
			||||||
 | 
					                        ${tool.name}
 | 
				
			||||||
 | 
					                    </h3>
 | 
				
			||||||
 | 
					                    ${typeIndicator}
 | 
				
			||||||
                    ${knowledgebaseIndicator}
 | 
					                    ${knowledgebaseIndicator}
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
                <div class="skill-badge ${skillClass}">${tool.skillLevel || 'intermediate'}</div>
 | 
					                <div class="skill-badge ${skillClass}">${tool.skillLevel || 'intermediate'}</div>
 | 
				
			||||||
@ -1046,6 +1205,7 @@
 | 
				
			|||||||
                const searchableText = [
 | 
					                const searchableText = [
 | 
				
			||||||
                    tool.name || '',
 | 
					                    tool.name || '',
 | 
				
			||||||
                    tool.description || '',
 | 
					                    tool.description || '',
 | 
				
			||||||
 | 
					                    tool.type || '',
 | 
				
			||||||
                    ...(tool.tags || []),
 | 
					                    ...(tool.tags || []),
 | 
				
			||||||
                    ...(tool.domains || []),
 | 
					                    ...(tool.domains || []),
 | 
				
			||||||
                    ...(tool.phases || []),
 | 
					                    ...(tool.phases || []),
 | 
				
			||||||
@ -1077,6 +1237,8 @@
 | 
				
			|||||||
            
 | 
					            
 | 
				
			||||||
            // Populate form fields
 | 
					            // Populate form fields
 | 
				
			||||||
            document.getElementById('toolName').value = tool.name || '';
 | 
					            document.getElementById('toolName').value = tool.name || '';
 | 
				
			||||||
 | 
					            document.getElementById('toolType').value = tool.type || 'software';
 | 
				
			||||||
 | 
					            document.getElementById('toolIcon').value = tool.icon || '';
 | 
				
			||||||
            document.getElementById('description').value = tool.description || '';
 | 
					            document.getElementById('description').value = tool.description || '';
 | 
				
			||||||
            document.getElementById('skillLevel').value = tool.skillLevel || '';
 | 
					            document.getElementById('skillLevel').value = tool.skillLevel || '';
 | 
				
			||||||
            document.getElementById('url').value = tool.url || '';
 | 
					            document.getElementById('url').value = tool.url || '';
 | 
				
			||||||
@ -1086,6 +1248,9 @@
 | 
				
			|||||||
            document.getElementById('statusUrl').value = tool.statusUrl || '';
 | 
					            document.getElementById('statusUrl').value = tool.statusUrl || '';
 | 
				
			||||||
            document.getElementById('knowledgebase').checked = tool.knowledgebase || false;
 | 
					            document.getElementById('knowledgebase').checked = tool.knowledgebase || false;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
 | 
					            // Handle conditional fields
 | 
				
			||||||
 | 
					            handleTypeChange();
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
            // Set checkboxes
 | 
					            // Set checkboxes
 | 
				
			||||||
            setCheckboxValues('#platformsCheckbox input', tool.platforms || []);
 | 
					            setCheckboxValues('#platformsCheckbox input', tool.platforms || []);
 | 
				
			||||||
            setCheckboxValues('#domainsCheckbox input', tool.domains || []);
 | 
					            setCheckboxValues('#domainsCheckbox input', tool.domains || []);
 | 
				
			||||||
@ -1149,36 +1314,70 @@
 | 
				
			|||||||
                    yamlData.tools = [];
 | 
					                    yamlData.tools = [];
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                const toolType = document.getElementById('toolType').value;
 | 
				
			||||||
                const tool = {
 | 
					                const tool = {
 | 
				
			||||||
                    name: document.getElementById('toolName').value,
 | 
					                    name: document.getElementById('toolName').value,
 | 
				
			||||||
 | 
					                    type: toolType,
 | 
				
			||||||
                    description: document.getElementById('description').value,
 | 
					                    description: document.getElementById('description').value,
 | 
				
			||||||
                    domains: getCheckedValues('#domainsCheckbox input:checked'),
 | 
					                    domains: getCheckedValues('#domainsCheckbox input:checked'),
 | 
				
			||||||
                    phases: getCheckedValues('#phasesCheckbox input:checked'),
 | 
					                    phases: getCheckedValues('#phasesCheckbox input:checked'),
 | 
				
			||||||
                    platforms: getCheckedValues('#platformsCheckbox input:checked'),
 | 
					 | 
				
			||||||
                    'domain-agnostic-software': getCheckedValues('#domainAgnosticCheckbox input:checked'),
 | 
					 | 
				
			||||||
                    skillLevel: document.getElementById('skillLevel').value,
 | 
					                    skillLevel: document.getElementById('skillLevel').value,
 | 
				
			||||||
                    accessType: document.getElementById('accessType').value,
 | 
					 | 
				
			||||||
                    url: document.getElementById('url').value,
 | 
					                    url: document.getElementById('url').value,
 | 
				
			||||||
                    projectUrl: document.getElementById('projectUrl').value,
 | 
					 | 
				
			||||||
                    license: document.getElementById('license').value,
 | 
					 | 
				
			||||||
                    knowledgebase: document.getElementById('knowledgebase').checked,
 | 
					 | 
				
			||||||
                    tags: getTags()
 | 
					                    tags: getTags()
 | 
				
			||||||
                };
 | 
					                };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // Add icon if provided
 | 
				
			||||||
 | 
					                const icon = document.getElementById('toolIcon').value.trim();
 | 
				
			||||||
 | 
					                if (icon) {
 | 
				
			||||||
 | 
					                    tool.icon = icon;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // Add software-specific fields
 | 
				
			||||||
 | 
					                if (toolType === 'software') {
 | 
				
			||||||
 | 
					                    tool.platforms = getCheckedValues('#platformsCheckbox input:checked');
 | 
				
			||||||
 | 
					                    tool.accessType = document.getElementById('accessType').value;
 | 
				
			||||||
 | 
					                    tool.projectUrl = document.getElementById('projectUrl').value;
 | 
				
			||||||
 | 
					                    tool.license = document.getElementById('license').value;
 | 
				
			||||||
 | 
					                    tool.knowledgebase = document.getElementById('knowledgebase').checked;
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                    const statusUrl = document.getElementById('statusUrl').value;
 | 
				
			||||||
 | 
					                    if (statusUrl) {
 | 
				
			||||||
 | 
					                        tool.statusUrl = statusUrl;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    // For methods, set appropriate defaults
 | 
				
			||||||
 | 
					                    tool.platforms = [];
 | 
				
			||||||
 | 
					                    tool.accessType = null;
 | 
				
			||||||
 | 
					                    tool.projectUrl = null;
 | 
				
			||||||
 | 
					                    tool.license = null;
 | 
				
			||||||
 | 
					                    tool.knowledgebase = false;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // Add domain-agnostic software if selected
 | 
				
			||||||
 | 
					                const domainAgnostic = getCheckedValues('#domainAgnosticCheckbox input:checked');
 | 
				
			||||||
 | 
					                if (domainAgnostic.length > 0) {
 | 
				
			||||||
 | 
					                    tool['domain-agnostic-software'] = domainAgnostic;
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    tool['domain-agnostic-software'] = null;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                // Clean up empty arrays and null values
 | 
					                // Clean up empty arrays and null values
 | 
				
			||||||
                Object.keys(tool).forEach(key => {
 | 
					                Object.keys(tool).forEach(key => {
 | 
				
			||||||
                    if (Array.isArray(tool[key]) && tool[key].length === 0) {
 | 
					                    if (Array.isArray(tool[key]) && tool[key].length === 0) {
 | 
				
			||||||
                        delete tool[key];
 | 
					                        if (key === 'platforms' && toolType === 'method') {
 | 
				
			||||||
 | 
					                            tool[key] = []; // Keep empty array for methods
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                            delete tool[key];
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    } else if (tool[key] === '' || tool[key] === null) {
 | 
					                    } else if (tool[key] === '' || tool[key] === null) {
 | 
				
			||||||
                        delete tool[key];
 | 
					                        if ((key === 'accessType' || key === 'projectUrl' || key === 'license') && toolType === 'method') {
 | 
				
			||||||
 | 
					                            tool[key] = null; // Keep null for methods
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                            delete tool[key];
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                const statusUrl = document.getElementById('statusUrl').value;
 | 
					 | 
				
			||||||
                if (statusUrl) {
 | 
					 | 
				
			||||||
                    tool.statusUrl = statusUrl;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (currentEditingIndex >= 0) {
 | 
					                if (currentEditingIndex >= 0) {
 | 
				
			||||||
                    yamlData.tools[currentEditingIndex] = tool;
 | 
					                    yamlData.tools[currentEditingIndex] = tool;
 | 
				
			||||||
                    showMessage('Tool updated successfully!');
 | 
					                    showMessage('Tool updated successfully!');
 | 
				
			||||||
@ -1213,6 +1412,7 @@
 | 
				
			|||||||
            document.getElementById('tagContainer').querySelectorAll('.removable-tag').forEach(tag => tag.remove());
 | 
					            document.getElementById('tagContainer').querySelectorAll('.removable-tag').forEach(tag => tag.remove());
 | 
				
			||||||
            document.getElementById('editorTitle').textContent = 'Add New Tool';
 | 
					            document.getElementById('editorTitle').textContent = 'Add New Tool';
 | 
				
			||||||
            document.getElementById('deleteBtn').style.display = 'none';
 | 
					            document.getElementById('deleteBtn').style.display = 'none';
 | 
				
			||||||
 | 
					            document.getElementById('softwareFields').classList.remove('disabled');
 | 
				
			||||||
            currentEditingIndex = -1;
 | 
					            currentEditingIndex = -1;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1251,6 +1451,18 @@
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        function selectByType(type) {
 | 
				
			||||||
 | 
					            if (yamlData && yamlData.tools) {
 | 
				
			||||||
 | 
					                yamlData.tools.forEach((tool, index) => {
 | 
				
			||||||
 | 
					                    if (tool.type === type) {
 | 
				
			||||||
 | 
					                        selectedTools.add(index);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					                updateSelectionCount();
 | 
				
			||||||
 | 
					                renderBulkGrid();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        function clearSelection() {
 | 
					        function clearSelection() {
 | 
				
			||||||
            selectedTools.clear();
 | 
					            selectedTools.clear();
 | 
				
			||||||
            updateSelectionCount();
 | 
					            updateSelectionCount();
 | 
				
			||||||
@ -1261,6 +1473,111 @@
 | 
				
			|||||||
            document.getElementById('selectionCount').textContent = `${selectedTools.size} selected`;
 | 
					            document.getElementById('selectionCount').textContent = `${selectedTools.size} selected`;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        function showIconSuggestions() {
 | 
				
			||||||
 | 
					            const suggestions = `DFIR Tool Icons by Operational Mode:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					📦 Downloaded/Installed    🌐 Web Application    ☁️ Cloud Service
 | 
				
			||||||
 | 
					🖥️ Operating System       ⌨️ Command Line      📡 Server/Self-hosted
 | 
				
			||||||
 | 
					🔧 Hardware Tool          💰 Commercial        ⚙️ Built-in/System  
 | 
				
			||||||
 | 
					📱 Mobile Application     🔗 API/Library       📋 Method/Procedure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					🖲️ Remote Access         💻 Desktop GUI       🛠️ Utility/Helper
 | 
				
			||||||
 | 
					🏢 Enterprise Platform   🔓 Open Source       🎯 Specialized Tool
 | 
				
			||||||
 | 
					📊 Analysis Platform     🗄️ Database/Storage  🔄 Processing Engine
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Most common combinations:
 | 
				
			||||||
 | 
					📦 + 🔓 = Open Source Desktop Software
 | 
				
			||||||
 | 
					🌐 + ☁️ = Cloud Web Application  
 | 
				
			||||||
 | 
					🖥️ + 🔓 = Forensic Live OS
 | 
				
			||||||
 | 
					⌨️ + 🔧 = Command Line Utility
 | 
				
			||||||
 | 
					📋 + 🎯 = Specialized Method
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Click any emoji to copy it, then paste into the icon field.`;
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            alert(suggestions);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        function bulkUpdateIcons() {
 | 
				
			||||||
 | 
					            if (selectedTools.size === 0) {
 | 
				
			||||||
 | 
					                showMessage('No tools selected', 'error');
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Show operational mode-focused icon suggestions
 | 
				
			||||||
 | 
					            const suggestedIcons = `
 | 
				
			||||||
 | 
					DFIR Tool Icons by Operational Mode:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					📦 Downloaded/Installed    🌐 Web Application    ☁️ Cloud Service
 | 
				
			||||||
 | 
					🖥️ Operating System       ⌨️ Command Line      📡 Server/Self-hosted
 | 
				
			||||||
 | 
					🔧 Hardware Tool          💰 Commercial        ⚙️ Built-in/System  
 | 
				
			||||||
 | 
					📱 Mobile Application     🔗 API/Library       📋 Method/Procedure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					🖲️ Remote Access         💻 Desktop GUI       🛠️ Utility/Helper
 | 
				
			||||||
 | 
					🏢 Enterprise Platform   🔓 Open Source       🎯 Specialized Tool
 | 
				
			||||||
 | 
					📊 Analysis Platform     🗄️ Database/Storage  🔄 Processing Engine
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Quick suggestions by access type:
 | 
				
			||||||
 | 
					• Downloaded Software: 📦
 | 
				
			||||||
 | 
					• Web Applications: 🌐  
 | 
				
			||||||
 | 
					• Cloud Services: ☁️
 | 
				
			||||||
 | 
					• Operating Systems: 🖥️
 | 
				
			||||||
 | 
					• Command Line: ⌨️
 | 
				
			||||||
 | 
					• Hardware: 🔧
 | 
				
			||||||
 | 
					• Methods/Procedures: 📋`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            const icon = prompt(`Enter emoji icon (single character) or leave empty to remove:\n\n${suggestedIcons}`);
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            if (icon !== null) { // Allow empty string to remove icons
 | 
				
			||||||
 | 
					                const trimmedIcon = icon.trim();
 | 
				
			||||||
 | 
					                if (trimmedIcon.length > 2) {
 | 
				
			||||||
 | 
					                    showMessage('Icon should be a single emoji character', 'error');
 | 
				
			||||||
 | 
					                    return;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                selectedTools.forEach(index => {
 | 
				
			||||||
 | 
					                    if (trimmedIcon === '') {
 | 
				
			||||||
 | 
					                        delete yamlData.tools[index].icon; // Remove icon field entirely
 | 
				
			||||||
 | 
					                    } else {
 | 
				
			||||||
 | 
					                        yamlData.tools[index].icon = trimmedIcon;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                const action = trimmedIcon === '' ? 'removed icons from' : 'updated icons for';
 | 
				
			||||||
 | 
					                showMessage(`Successfully ${action} ${selectedTools.size} tools`);
 | 
				
			||||||
 | 
					                renderBulkGrid();
 | 
				
			||||||
 | 
					                renderToolsGrid(); // Update tools view if visible
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        function bulkUpdateType() {
 | 
				
			||||||
 | 
					            if (selectedTools.size === 0) {
 | 
				
			||||||
 | 
					                showMessage('No tools selected', 'error');
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            const type = prompt('Enter type (software/method):');
 | 
				
			||||||
 | 
					            if (type && ['software', 'method'].includes(type)) {
 | 
				
			||||||
 | 
					                selectedTools.forEach(index => {
 | 
				
			||||||
 | 
					                    yamlData.tools[index].type = type;
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                    // Handle method-specific cleanup
 | 
				
			||||||
 | 
					                    if (type === 'method') {
 | 
				
			||||||
 | 
					                        yamlData.tools[index].platforms = [];
 | 
				
			||||||
 | 
					                        yamlData.tools[index].accessType = null;
 | 
				
			||||||
 | 
					                        yamlData.tools[index].projectUrl = null;
 | 
				
			||||||
 | 
					                        yamlData.tools[index].license = null;
 | 
				
			||||||
 | 
					                        yamlData.tools[index].knowledgebase = false;
 | 
				
			||||||
 | 
					                        if (yamlData.tools[index].statusUrl) {
 | 
				
			||||||
 | 
					                            delete yamlData.tools[index].statusUrl;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					                showMessage(`Updated type for ${selectedTools.size} tools`);
 | 
				
			||||||
 | 
					                updateStats();
 | 
				
			||||||
 | 
					                renderBulkGrid();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        function bulkUpdateSkillLevel() {
 | 
					        function bulkUpdateSkillLevel() {
 | 
				
			||||||
            if (selectedTools.size === 0) {
 | 
					            if (selectedTools.size === 0) {
 | 
				
			||||||
                showMessage('No tools selected', 'error');
 | 
					                showMessage('No tools selected', 'error');
 | 
				
			||||||
@ -1352,19 +1669,29 @@
 | 
				
			|||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            const action = value ? 'set as knowledgebase' : 'remove knowledgebase flag from';
 | 
					            // Only apply to software tools
 | 
				
			||||||
            if (!confirm(`Are you sure you want to ${action} ${selectedTools.size} selected tools?`)) {
 | 
					            const softwareTools = Array.from(selectedTools).filter(index => 
 | 
				
			||||||
 | 
					                yamlData.tools[index].type === 'software'
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (softwareTools.length === 0) {
 | 
				
			||||||
 | 
					                showMessage('No software tools selected (knowledgebase only applies to software)', 'error');
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            selectedTools.forEach(index => {
 | 
					            const action = value ? 'set as knowledgebase' : 'remove knowledgebase flag from';
 | 
				
			||||||
 | 
					            if (!confirm(`Are you sure you want to ${action} ${softwareTools.length} selected software tools?`)) {
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            softwareTools.forEach(index => {
 | 
				
			||||||
                if (yamlData.tools[index]) {
 | 
					                if (yamlData.tools[index]) {
 | 
				
			||||||
                    yamlData.tools[index].knowledgebase = value;
 | 
					                    yamlData.tools[index].knowledgebase = value;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            const actionCompleted = value ? 'marked as knowledgebase' : 'removed knowledgebase flag from';
 | 
					            const actionCompleted = value ? 'marked as knowledgebase' : 'removed knowledgebase flag from';
 | 
				
			||||||
            showMessage(`Successfully ${actionCompleted} ${selectedTools.size} tools`);
 | 
					            showMessage(`Successfully ${actionCompleted} ${softwareTools.length} software tools`);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            updateStats();
 | 
					            updateStats();
 | 
				
			||||||
            renderBulkGrid();
 | 
					            renderBulkGrid();
 | 
				
			||||||
@ -1383,11 +1710,23 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            selectedTools.forEach(index => {
 | 
					            selectedTools.forEach(index => {
 | 
				
			||||||
                if (yamlData.tools[index]) {
 | 
					                if (yamlData.tools[index]) {
 | 
				
			||||||
 | 
					                    const tool = yamlData.tools[index];
 | 
				
			||||||
                    const arrayFields = ['tags', 'domains', 'phases', 'platforms', 'domain-agnostic-software'];
 | 
					                    const arrayFields = ['tags', 'domains', 'phases', 'platforms', 'domain-agnostic-software'];
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
                    if (arrayFields.includes(fieldName)) {
 | 
					                    if (arrayFields.includes(fieldName)) {
 | 
				
			||||||
                        yamlData.tools[index][fieldName] = [];
 | 
					                        if (fieldName === 'platforms' && tool.type === 'method') {
 | 
				
			||||||
 | 
					                            tool[fieldName] = []; // Keep empty array for methods
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                            tool[fieldName] = [];
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    } else if (fieldName === 'icon') {
 | 
				
			||||||
 | 
					                        delete tool.icon; // Remove icon field entirely
 | 
				
			||||||
                    } else {
 | 
					                    } else {
 | 
				
			||||||
                        yamlData.tools[index][fieldName] = '';
 | 
					                        if ((fieldName === 'projectUrl' || fieldName === 'accessType' || fieldName === 'license') && tool.type === 'method') {
 | 
				
			||||||
 | 
					                            tool[fieldName] = null; // Keep null for methods
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                            tool[fieldName] = '';
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
@ -1399,6 +1738,9 @@
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            renderBulkGrid();
 | 
					            renderBulkGrid();
 | 
				
			||||||
 | 
					            if (fieldName === 'icon') {
 | 
				
			||||||
 | 
					                renderToolsGrid(); // Update tools view to reflect icon changes
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        function bulkDelete() {
 | 
					        function bulkDelete() {
 | 
				
			||||||
@ -1438,6 +1780,25 @@
 | 
				
			|||||||
                    if (!tool.name) validationResults.push(`❌ Tool ${index + 1}: Missing name`);
 | 
					                    if (!tool.name) validationResults.push(`❌ Tool ${index + 1}: Missing name`);
 | 
				
			||||||
                    if (!tool.description) validationResults.push(`❌ Tool ${index + 1}: Missing description`);
 | 
					                    if (!tool.description) validationResults.push(`❌ Tool ${index + 1}: Missing description`);
 | 
				
			||||||
                    if (!tool.skillLevel) validationResults.push(`❌ Tool ${index + 1}: Missing skillLevel`);
 | 
					                    if (!tool.skillLevel) validationResults.push(`❌ Tool ${index + 1}: Missing skillLevel`);
 | 
				
			||||||
 | 
					                    if (!tool.type) validationResults.push(`❌ Tool ${index + 1}: Missing type`);
 | 
				
			||||||
 | 
					                    if (tool.type && !['software', 'method'].includes(tool.type)) {
 | 
				
			||||||
 | 
					                        validationResults.push(`❌ Tool ${index + 1}: Invalid type (must be 'software' or 'method')`);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                    // Software-specific validation
 | 
				
			||||||
 | 
					                    if (tool.type === 'software') {
 | 
				
			||||||
 | 
					                        if (!tool.platforms || tool.platforms.length === 0) {
 | 
				
			||||||
 | 
					                            validationResults.push(`❌ Tool ${index + 1}: Software must have platforms`);
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        if (!tool.license) validationResults.push(`❌ Tool ${index + 1}: Software should have license`);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                    // Method-specific validation
 | 
				
			||||||
 | 
					                    if (tool.type === 'method') {
 | 
				
			||||||
 | 
					                        if (tool.platforms && tool.platforms.length > 0) {
 | 
				
			||||||
 | 
					                            validationResults.push(`⚠️ Tool ${index + 1}: Methods should not have platforms`);
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,60 +0,0 @@
 | 
				
			|||||||
<svg width="400" height="400" viewBox="0 0 400 400" xmlns="http://www.w3.org/2000/svg">
 | 
					 | 
				
			||||||
  <!-- Blue background -->
 | 
					 | 
				
			||||||
  <rect width="400" height="400" fill="#1e40af"/>
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  <!-- Screen/monitor frame -->
 | 
					 | 
				
			||||||
  <rect x="20" y="20" width="360" height="360" fill="none" stroke="#ffffff" stroke-width="8" rx="10"/>
 | 
					 | 
				
			||||||
  <rect x="35" y="35" width="330" height="330" fill="none" stroke="#ffffff" stroke-width="4" rx="5"/>
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  <!-- Scope outer circle -->
 | 
					 | 
				
			||||||
  <circle cx="200" cy="200" r="140" fill="none" stroke="#ffffff" stroke-width="6"/>
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  <!-- Crosshairs -->
 | 
					 | 
				
			||||||
  <!-- Horizontal line -->
 | 
					 | 
				
			||||||
  <line x1="60" y1="200" x2="340" y2="200" stroke="#ffffff" stroke-width="3"/>
 | 
					 | 
				
			||||||
  <!-- Vertical line -->
 | 
					 | 
				
			||||||
  <line x1="200" y1="60" x2="200" y2="340" stroke="#ffffff" stroke-width="3"/>
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  <!-- Crosshair markers -->
 | 
					 | 
				
			||||||
  <line x1="120" y1="195" x2="120" y2="205" stroke="#ffffff" stroke-width="2"/>
 | 
					 | 
				
			||||||
  <line x1="280" y1="195" x2="280" y2="205" stroke="#ffffff" stroke-width="2"/>
 | 
					 | 
				
			||||||
  <line x1="195" y1="120" x2="205" y2="120" stroke="#ffffff" stroke-width="2"/>
 | 
					 | 
				
			||||||
  <line x1="195" y1="280" x2="205" y2="280" stroke="#ffffff" stroke-width="2"/>
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  <!-- Inner scope circle -->
 | 
					 | 
				
			||||||
  <circle cx="200" cy="200" r="90" fill="none" stroke="#ffffff" stroke-width="2"/>
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  <!-- Stylized fingerprint -->
 | 
					 | 
				
			||||||
  <g stroke="#ffffff" stroke-width="2.5" fill="none">
 | 
					 | 
				
			||||||
    <!-- Center spiral -->
 | 
					 | 
				
			||||||
    <ellipse cx="200" cy="200" rx="12" ry="15"/>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <!-- Fingerprint ridges -->
 | 
					 | 
				
			||||||
    <ellipse cx="200" cy="200" rx="22" ry="28"/>
 | 
					 | 
				
			||||||
    <ellipse cx="200" cy="200" rx="32" ry="40"/>
 | 
					 | 
				
			||||||
    <ellipse cx="200" cy="200" rx="42" ry="52"/>
 | 
					 | 
				
			||||||
    <ellipse cx="200" cy="200" rx="52" ry="64"/>
 | 
					 | 
				
			||||||
    <ellipse cx="200" cy="200" rx="62" ry="75"/>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <!-- Fingerprint pattern breaks for realism -->
 | 
					 | 
				
			||||||
    <path d="M 160 180 Q 180 175 200 180" stroke-width="2"/>
 | 
					 | 
				
			||||||
    <path d="M 200 220 Q 220 225 240 220" stroke-width="2"/>
 | 
					 | 
				
			||||||
    <path d="M 175 240 Q 190 245 205 240" stroke-width="2"/>
 | 
					 | 
				
			||||||
    <path d="M 180 160 Q 190 155 200 160" stroke-width="2"/>
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    <!-- Additional ridge details -->
 | 
					 | 
				
			||||||
    <path d="M 170 200 Q 185 190 200 200" stroke-width="1.5"/>
 | 
					 | 
				
			||||||
    <path d="M 200 200 Q 215 210 230 200" stroke-width="1.5"/>
 | 
					 | 
				
			||||||
  </g>
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  <!-- Scope corner markers -->
 | 
					 | 
				
			||||||
  <g stroke="#ffffff" stroke-width="2" fill="none">
 | 
					 | 
				
			||||||
    <path d="M 80 80 L 90 80 L 90 90"/>
 | 
					 | 
				
			||||||
    <path d="M 320 80 L 310 80 L 310 90"/>
 | 
					 | 
				
			||||||
    <path d="M 80 320 L 90 320 L 90 310"/>
 | 
					 | 
				
			||||||
    <path d="M 320 320 L 310 320 L 310 310"/>
 | 
					 | 
				
			||||||
  </g>
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  <!-- Center dot -->
 | 
					 | 
				
			||||||
  <circle cx="200" cy="200" r="3" fill="#ffffff"/>
 | 
					 | 
				
			||||||
</svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 2.4 KiB  | 
@ -461,7 +461,10 @@ document.addEventListener('DOMContentLoaded', () => {
 | 
				
			|||||||
                        <div class="tool-recommendation ${tool.type === 'method' ? 'method' : hasValidProjectUrl ? 'hosted' : (tool.license !== 'Proprietary' ? 'oss' : '')}"
 | 
					                        <div class="tool-recommendation ${tool.type === 'method' ? 'method' : hasValidProjectUrl ? 'hosted' : (tool.license !== 'Proprietary' ? 'oss' : '')}"
 | 
				
			||||||
                             onclick="window.showToolDetails('${tool.name}')">
 | 
					                             onclick="window.showToolDetails('${tool.name}')">
 | 
				
			||||||
                          <div class="tool-rec-header">
 | 
					                          <div class="tool-rec-header">
 | 
				
			||||||
                            <h4 class="tool-rec-name">${tool.name}</h4>
 | 
					                            <h4 class="tool-rec-name">
 | 
				
			||||||
 | 
					                              ${tool.icon ? `<span style="margin-right: 0.5rem;">${tool.icon}</span>` : ''}
 | 
				
			||||||
 | 
					                              ${tool.name}
 | 
				
			||||||
 | 
					                            </h4>
 | 
				
			||||||
                            <span class="tool-rec-priority ${tool.recommendation.priority}" 
 | 
					                            <span class="tool-rec-priority ${tool.recommendation.priority}" 
 | 
				
			||||||
                                  style="background-color: ${priorityColors[tool.recommendation.priority]};">
 | 
					                                  style="background-color: ${priorityColors[tool.recommendation.priority]};">
 | 
				
			||||||
                              ${tool.recommendation.priority}
 | 
					                              ${tool.recommendation.priority}
 | 
				
			||||||
@ -474,9 +477,8 @@ 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;">
 | 
				
			||||||
                              ${tool.type === 'method' ? '<span class="badge" style="background-color: var(--color-method); color: white;">Methode</span>' : ''}
 | 
					 | 
				
			||||||
                              ${tool.type !== 'method' && hasValidProjectUrl ? '<span class="badge badge-primary">CC24-Server</span>' : ''}
 | 
					                              ${tool.type !== 'method' && hasValidProjectUrl ? '<span class="badge badge-primary">CC24-Server</span>' : ''}
 | 
				
			||||||
                              ${tool.type !== 'method' && tool.license !== 'Proprietary' ? '<span class="badge badge-success">Open Source</span>' : ''}
 | 
					                              ${tool.knowledgebase === true ? '<span class="badge badge-error">📖</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>
 | 
				
			||||||
                            <div style="font-size: 0.8125rem; color: var(--color-text-secondary);">
 | 
					                            <div style="font-size: 0.8125rem; color: var(--color-text-secondary);">
 | 
				
			||||||
 | 
				
			|||||||
@ -2,6 +2,7 @@
 | 
				
			|||||||
export interface Props {
 | 
					export interface Props {
 | 
				
			||||||
  tool: {
 | 
					  tool: {
 | 
				
			||||||
    name: string;
 | 
					    name: string;
 | 
				
			||||||
 | 
					    icon?: string;
 | 
				
			||||||
    type?: string;
 | 
					    type?: string;
 | 
				
			||||||
    description: string;
 | 
					    description: string;
 | 
				
			||||||
    domains: string[];
 | 
					    domains: string[];
 | 
				
			||||||
@ -38,16 +39,18 @@ const cardClass = isMethod ? 'card card-method tool-card' :
 | 
				
			|||||||
                  (tool.license !== 'Proprietary' ? 'card card-oss tool-card' : 'card tool-card');
 | 
					                  (tool.license !== 'Proprietary' ? 'card card-oss tool-card' : 'card tool-card');
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <div class={cardClass} onclick={`window.showToolDetails('${tool.name}')`} style="cursor: pointer; border-left: 4px solid ${isMethod ? 'var(--color-method)' : hasValidProjectUrl ? 'var(--color-hosted)' : tool.license !== 'Proprietary' ? 'var(--color-oss)' : 'var(--color-border)'};">
 | 
					<div class={cardClass} onclick={`window.showToolDetails('${tool.name}')`} style="cursor: pointer; border-left: 4px solid {isMethod ? 'var(--color-method)' : hasValidProjectUrl ? 'var(--color-hosted)' : tool.license !== 'Proprietary' ? 'var(--color-oss)' : 'var(--color-border)'};">
 | 
				
			||||||
    <!-- Card Header with Fixed Height -->
 | 
					  <!-- Card Header with Fixed Height -->
 | 
				
			||||||
  <div class="tool-card-header">
 | 
					  <div class="tool-card-header">
 | 
				
			||||||
    <h3>{tool.name}</h3>
 | 
					    <h3>
 | 
				
			||||||
      <div class="tool-card-badges">
 | 
					      {tool.icon && <span style="margin-right: 0.5rem; font-size: 1.125rem;">{tool.icon}</span>}
 | 
				
			||||||
        {isMethod && <span class="badge" style="background-color: var(--color-method); color: white;">Methode</span>}
 | 
					      {tool.name}
 | 
				
			||||||
        {!isMethod && hasValidProjectUrl && <span class="badge badge-primary">CC24-Server</span>}
 | 
					    </h3>
 | 
				
			||||||
        {!isMethod && tool.license !== 'Proprietary' && <span class="badge badge-success">OSS</span>}
 | 
					    <div class="tool-card-badges">
 | 
				
			||||||
        {hasKnowledgebase && <span class="badge badge-error">📖</span>}
 | 
					      <!-- Only show CC24-Server and Knowledgebase badges -->
 | 
				
			||||||
      </div>
 | 
					      {!isMethod && hasValidProjectUrl && <span class="badge badge-primary">CC24-Server</span>}
 | 
				
			||||||
 | 
					      {hasKnowledgebase && <span class="badge badge-error">📖</span>}
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  <!-- Description - Truncated to 2 lines -->
 | 
					  <!-- Description - Truncated to 2 lines -->
 | 
				
			||||||
 | 
				
			|||||||
@ -65,11 +65,13 @@ domains.forEach((domain: any) => {
 | 
				
			|||||||
              <div class={`collaboration-tool-compact ${hasValidProjectUrl ? 'hosted' : tool.license !== 'Proprietary' ? 'oss' : ''}`}
 | 
					              <div class={`collaboration-tool-compact ${hasValidProjectUrl ? 'hosted' : tool.license !== 'Proprietary' ? 'oss' : ''}`}
 | 
				
			||||||
                   onclick={`window.showToolDetails('${tool.name}')`}>
 | 
					                   onclick={`window.showToolDetails('${tool.name}')`}>
 | 
				
			||||||
                <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.icon && <span style="margin-right: 0.5rem;">{tool.icon}</span>}
 | 
				
			||||||
 | 
					                    {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">CC24-Server</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.knowledgebase === true && <span class="badge badge--mini badge-error">📖</span>}
 | 
				
			||||||
                    {tool.knowledgebase === true && <span class="badge badge--mini badge-error">Infos 📖</span>}
 | 
					 | 
				
			||||||
                  </div>
 | 
					                  </div>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
                <p class="text-muted">              
 | 
					                <p class="text-muted">              
 | 
				
			||||||
@ -249,29 +251,25 @@ domains.forEach((domain: any) => {
 | 
				
			|||||||
    const isMethod = tool.type === 'method';
 | 
					    const isMethod = tool.type === 'method';
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // Update modal content
 | 
					    // Update modal content
 | 
				
			||||||
    document.getElementById('tool-name').textContent = tool.name;
 | 
					    const toolNameElement = document.getElementById('tool-name');
 | 
				
			||||||
 | 
					    const iconHtml = tool.icon ? `<span style="margin-right: 0.75rem; font-size: 1.5rem;">${tool.icon}</span>` : '';
 | 
				
			||||||
 | 
					    toolNameElement.innerHTML = `${iconHtml}${tool.name}`;
 | 
				
			||||||
    document.getElementById('tool-description').textContent = tool.description;
 | 
					    document.getElementById('tool-description').textContent = tool.description;
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    // Badges
 | 
					    // Badges - Only CC24-Server and Knowledgebase
 | 
				
			||||||
    const badgesContainer = document.getElementById('tool-badges');
 | 
					    const badgesContainer = document.getElementById('tool-badges');
 | 
				
			||||||
    const hasValidProjectUrl = tool.projectUrl !== undefined && 
 | 
					    const hasValidProjectUrl = tool.projectUrl !== undefined && 
 | 
				
			||||||
                              tool.projectUrl !== null && 
 | 
					                              tool.projectUrl !== null && 
 | 
				
			||||||
                              tool.projectUrl !== "" && 
 | 
					                              tool.projectUrl !== "" && 
 | 
				
			||||||
                              tool.projectUrl.trim() !== "";
 | 
					                              tool.projectUrl.trim() !== "";
 | 
				
			||||||
    
 | 
					
 | 
				
			||||||
    badgesContainer.innerHTML = '';
 | 
					    badgesContainer.innerHTML = '';
 | 
				
			||||||
    if (isMethod) {
 | 
					    // Only show CC24-Server and Knowledgebase badges
 | 
				
			||||||
      badgesContainer.innerHTML += '<span class="badge" style="background-color: var(--color-method); color: white;">Methode</span>';
 | 
					    if (!isMethod && hasValidProjectUrl) {
 | 
				
			||||||
    } else {
 | 
					      badgesContainer.innerHTML += '<span class="badge badge-primary">CC24-Server</span>';
 | 
				
			||||||
      if (hasValidProjectUrl) {
 | 
					 | 
				
			||||||
        badgesContainer.innerHTML += '<span class="badge badge-primary">CC24-Server</span>';
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      if (tool.license !== 'Proprietary') {
 | 
					 | 
				
			||||||
        badgesContainer.innerHTML += '<span class="badge badge-success">Open Source</span>';
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (tool.knowledgebase === true) {
 | 
					    if (tool.knowledgebase === true) {
 | 
				
			||||||
      badgesContainer.innerHTML += '<span class="badge badge-error">Infos 📖</span>';
 | 
					      badgesContainer.innerHTML += '<span class="badge badge-error">📖</span>';
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    // Metadata - safe array handling
 | 
					    // Metadata - safe array handling
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,6 @@
 | 
				
			|||||||
tools:
 | 
					tools:
 | 
				
			||||||
  - name: Autopsy
 | 
					  - name: Autopsy
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Die führende Open-Source-Alternative zu kommerziellen Forensik-Suiten mit
 | 
					      Die führende Open-Source-Alternative zu kommerziellen Forensik-Suiten mit
 | 
				
			||||||
@ -35,10 +36,11 @@ tools:
 | 
				
			|||||||
      - artifact-extraction
 | 
					      - artifact-extraction
 | 
				
			||||||
      - keyword-search
 | 
					      - keyword-search
 | 
				
			||||||
  - name: Volatility 3
 | 
					  - name: Volatility 3
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Das Schweizer Taschenmesser der Memory-Forensik, unverzichtbar für die
 | 
					      Das Universalwerkzeug der Live-Forensik, unverzichtbar für die Analyse von
 | 
				
			||||||
      Analyse von RAM-Dumps. Mit über 100 Plugins extrahiert es Prozesse,
 | 
					      RAM-Dumps. Mit über 100 Plugins extrahiert es Prozesse,
 | 
				
			||||||
      Netzwerkverbindungen, Registry-Keys und versteckte Malware aus dem
 | 
					      Netzwerkverbindungen, Registry-Keys und versteckte Malware aus dem
 | 
				
			||||||
      Arbeitsspeicher. Die Python-basierte Architektur macht es flexibel
 | 
					      Arbeitsspeicher. Die Python-basierte Architektur macht es flexibel
 | 
				
			||||||
      erweiterbar, erfordert aber solide Kommandozeilen-Kenntnisse. Version 3
 | 
					      erweiterbar, erfordert aber solide Kommandozeilen-Kenntnisse. Version 3
 | 
				
			||||||
@ -71,6 +73,7 @@ tools:
 | 
				
			|||||||
      - scripting
 | 
					      - scripting
 | 
				
			||||||
      - process-analysis
 | 
					      - process-analysis
 | 
				
			||||||
  - name: TheHive 5
 | 
					  - name: TheHive 5
 | 
				
			||||||
 | 
					    icon: 🌐
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Moderne Security-Orchestrierungs-Plattform für die koordinierte
 | 
					      Moderne Security-Orchestrierungs-Plattform für die koordinierte
 | 
				
			||||||
@ -106,6 +109,7 @@ tools:
 | 
				
			|||||||
      - incident-tracking
 | 
					      - incident-tracking
 | 
				
			||||||
    statusUrl: https://uptime.example.lab/api/badge/1/status
 | 
					    statusUrl: https://uptime.example.lab/api/badge/1/status
 | 
				
			||||||
  - name: MISP
 | 
					  - name: MISP
 | 
				
			||||||
 | 
					    icon: 🌐
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Das Rückgrat des modernen Threat-Intelligence-Sharings mit über 40.000
 | 
					      Das Rückgrat des modernen Threat-Intelligence-Sharings mit über 40.000
 | 
				
			||||||
@ -140,6 +144,7 @@ tools:
 | 
				
			|||||||
      - automation
 | 
					      - automation
 | 
				
			||||||
    statusUrl: https://status.mikoshi.de/api/badge/34/status
 | 
					    statusUrl: https://status.mikoshi.de/api/badge/34/status
 | 
				
			||||||
  - name: Timesketch
 | 
					  - name: Timesketch
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Google's Open-Source-Lösung für kollaborative Timeline-Analyse großer
 | 
					      Google's Open-Source-Lösung für kollaborative Timeline-Analyse großer
 | 
				
			||||||
@ -173,6 +178,7 @@ tools:
 | 
				
			|||||||
      - correlation
 | 
					      - correlation
 | 
				
			||||||
    statusUrl: https://uptime.example.lab/api/badge/3/status
 | 
					    statusUrl: https://uptime.example.lab/api/badge/3/status
 | 
				
			||||||
  - name: Wireshark
 | 
					  - name: Wireshark
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Der unangefochtene König der Netzwerk-Protokoll-Analyse mit Support für
 | 
					      Der unangefochtene König der Netzwerk-Protokoll-Analyse mit Support für
 | 
				
			||||||
@ -209,6 +215,7 @@ tools:
 | 
				
			|||||||
      - visualization
 | 
					      - visualization
 | 
				
			||||||
      - filtering
 | 
					      - filtering
 | 
				
			||||||
  - name: Magnet AXIOM
 | 
					  - name: Magnet AXIOM
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Die Rolls-Royce unter den kommerziellen Forensik-Suiten mit
 | 
					      Die Rolls-Royce unter den kommerziellen Forensik-Suiten mit
 | 
				
			||||||
@ -244,6 +251,7 @@ tools:
 | 
				
			|||||||
      - automated-analysis
 | 
					      - automated-analysis
 | 
				
			||||||
      - reporting
 | 
					      - reporting
 | 
				
			||||||
  - name: Cellebrite UFED
 | 
					  - name: Cellebrite UFED
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Der Goldstandard der mobilen Forensik mit legendären
 | 
					      Der Goldstandard der mobilen Forensik mit legendären
 | 
				
			||||||
@ -276,6 +284,7 @@ tools:
 | 
				
			|||||||
      - hardware-interface
 | 
					      - hardware-interface
 | 
				
			||||||
      - automated-analysis
 | 
					      - automated-analysis
 | 
				
			||||||
  - name: Cuckoo Sandbox 3
 | 
					  - name: Cuckoo Sandbox 3
 | 
				
			||||||
 | 
					    icon: 🌐
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Die führende Open-Source-Sandbox für automatisierte Malware-Analyse in
 | 
					      Die führende Open-Source-Sandbox für automatisierte Malware-Analyse in
 | 
				
			||||||
@ -308,6 +317,7 @@ tools:
 | 
				
			|||||||
      - virtualization
 | 
					      - virtualization
 | 
				
			||||||
      - automated-analysis
 | 
					      - automated-analysis
 | 
				
			||||||
  - name: Ghidra
 | 
					  - name: Ghidra
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      NSAs Geschenk an die Reverse-Engineering-Community als mächtige
 | 
					      NSAs Geschenk an die Reverse-Engineering-Community als mächtige
 | 
				
			||||||
@ -340,6 +350,7 @@ tools:
 | 
				
			|||||||
      - scripting
 | 
					      - scripting
 | 
				
			||||||
      - static-analysis
 | 
					      - static-analysis
 | 
				
			||||||
  - name: Plaso (log2timeline)
 | 
					  - name: Plaso (log2timeline)
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Der industrielle Staubsauger für Zeitstempel - extrahiert aus hunderten
 | 
					      Der industrielle Staubsauger für Zeitstempel - extrahiert aus hunderten
 | 
				
			||||||
@ -375,6 +386,7 @@ tools:
 | 
				
			|||||||
      - artifact-extraction
 | 
					      - artifact-extraction
 | 
				
			||||||
      - scripting
 | 
					      - scripting
 | 
				
			||||||
  - name: CyberChef
 | 
					  - name: CyberChef
 | 
				
			||||||
 | 
					    icon: 🌐
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Das digitale Schweizer Taschenmesser für Daten-Manipulation mit über 300
 | 
					      Das digitale Schweizer Taschenmesser für Daten-Manipulation mit über 300
 | 
				
			||||||
@ -407,6 +419,7 @@ tools:
 | 
				
			|||||||
      - visualization
 | 
					      - visualization
 | 
				
			||||||
      - parsing
 | 
					      - parsing
 | 
				
			||||||
  - name: Velociraptor
 | 
					  - name: Velociraptor
 | 
				
			||||||
 | 
					    icon: 🌐
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Die nächste Evolution der Endpoint-Forensik mit skalierbarer
 | 
					      Die nächste Evolution der Endpoint-Forensik mit skalierbarer
 | 
				
			||||||
@ -447,6 +460,7 @@ tools:
 | 
				
			|||||||
      - hunting
 | 
					      - hunting
 | 
				
			||||||
    statusUrl: https://status.mikoshi.de/api/badge/33/status
 | 
					    statusUrl: https://status.mikoshi.de/api/badge/33/status
 | 
				
			||||||
  - name: GRR Rapid Response
 | 
					  - name: GRR Rapid Response
 | 
				
			||||||
 | 
					    icon: 🌐
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Googles Antwort auf Enterprise-Scale-Forensik für die Untersuchung von
 | 
					      Googles Antwort auf Enterprise-Scale-Forensik für die Untersuchung von
 | 
				
			||||||
@ -483,6 +497,7 @@ tools:
 | 
				
			|||||||
      - live-forensics
 | 
					      - live-forensics
 | 
				
			||||||
      - fleet-management
 | 
					      - fleet-management
 | 
				
			||||||
  - name: Arkime
 | 
					  - name: Arkime
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Das Heavy-Metal-Tool für Full-Packet-Capture mit der Fähigkeit, Petabytes
 | 
					      Das Heavy-Metal-Tool für Full-Packet-Capture mit der Fähigkeit, Petabytes
 | 
				
			||||||
@ -517,6 +532,7 @@ tools:
 | 
				
			|||||||
      - api
 | 
					      - api
 | 
				
			||||||
      - big-data
 | 
					      - big-data
 | 
				
			||||||
  - name: NetworkMiner
 | 
					  - name: NetworkMiner
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Der benutzerfreundliche kleine Bruder von Wireshark mit Fokus auf Forensik
 | 
					      Der benutzerfreundliche kleine Bruder von Wireshark mit Fokus auf Forensik
 | 
				
			||||||
@ -550,6 +566,7 @@ tools:
 | 
				
			|||||||
      - parsing
 | 
					      - parsing
 | 
				
			||||||
      - session-reconstruction
 | 
					      - session-reconstruction
 | 
				
			||||||
  - name: ExifTool
 | 
					  - name: ExifTool
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Der Metadaten-Maestro, der aus über 1000 Dateiformaten verborgene
 | 
					      Der Metadaten-Maestro, der aus über 1000 Dateiformaten verborgene
 | 
				
			||||||
@ -585,6 +602,7 @@ tools:
 | 
				
			|||||||
      - scripting
 | 
					      - scripting
 | 
				
			||||||
      - batch-processing
 | 
					      - batch-processing
 | 
				
			||||||
  - name: Chainalysis
 | 
					  - name: Chainalysis
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Der Platzhirsch der Blockchain-Forensik mit Zugriff auf die größte
 | 
					      Der Platzhirsch der Blockchain-Forensik mit Zugriff auf die größte
 | 
				
			||||||
@ -616,6 +634,7 @@ tools:
 | 
				
			|||||||
      - api
 | 
					      - api
 | 
				
			||||||
      - reporting
 | 
					      - reporting
 | 
				
			||||||
  - name: Neo4j
 | 
					  - name: Neo4j
 | 
				
			||||||
 | 
					    icon: 🌐
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Die führende Graph-Datenbank verwandelt komplexe Beziehungsgeflechte in
 | 
					      Die führende Graph-Datenbank verwandelt komplexe Beziehungsgeflechte in
 | 
				
			||||||
@ -654,6 +673,7 @@ tools:
 | 
				
			|||||||
      - query-language
 | 
					      - query-language
 | 
				
			||||||
    statusUrl: https://status.mikoshi.de/api/badge/32/status
 | 
					    statusUrl: https://status.mikoshi.de/api/badge/32/status
 | 
				
			||||||
  - name: QGIS
 | 
					  - name: QGIS
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Das Open-Source-GIS-Kraftpaket für die Visualisierung von Geodaten in
 | 
					      Das Open-Source-GIS-Kraftpaket für die Visualisierung von Geodaten in
 | 
				
			||||||
@ -687,6 +707,7 @@ tools:
 | 
				
			|||||||
      - scripting
 | 
					      - scripting
 | 
				
			||||||
      - reporting
 | 
					      - reporting
 | 
				
			||||||
  - name: Nextcloud
 | 
					  - name: Nextcloud
 | 
				
			||||||
 | 
					    icon: 🌐
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Die Open-Source-Cloud-Suite als sichere Kollaborations-Zentrale für
 | 
					      Die Open-Source-Cloud-Suite als sichere Kollaborations-Zentrale für
 | 
				
			||||||
@ -724,6 +745,7 @@ tools:
 | 
				
			|||||||
      - document-management
 | 
					      - document-management
 | 
				
			||||||
    statusUrl: https://status.mikoshi.de/api/badge/11/status
 | 
					    statusUrl: https://status.mikoshi.de/api/badge/11/status
 | 
				
			||||||
  - name: Gitea
 | 
					  - name: Gitea
 | 
				
			||||||
 | 
					    icon: 🌐
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Das leichtgewichtige Git-Repository für die Versionierung von
 | 
					      Das leichtgewichtige Git-Repository für die Versionierung von
 | 
				
			||||||
@ -755,6 +777,7 @@ tools:
 | 
				
			|||||||
      - ci-cd
 | 
					      - ci-cd
 | 
				
			||||||
    statusUrl: https://status.mikoshi.de/api/badge/18/status
 | 
					    statusUrl: https://status.mikoshi.de/api/badge/18/status
 | 
				
			||||||
  - name: Binwalk
 | 
					  - name: Binwalk
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Der Firmware-Flüsterer, der aus IoT-Geräten und Routern ihre Geheimnisse
 | 
					      Der Firmware-Flüsterer, der aus IoT-Geräten und Routern ihre Geheimnisse
 | 
				
			||||||
@ -786,6 +809,7 @@ tools:
 | 
				
			|||||||
      - extraction
 | 
					      - extraction
 | 
				
			||||||
      - scripting
 | 
					      - scripting
 | 
				
			||||||
  - name: LibreOffice
 | 
					  - name: LibreOffice
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Die freie Office-Suite, die mehr kann als nur Berichte schreiben. Calc
 | 
					      Die freie Office-Suite, die mehr kann als nur Berichte schreiben. Calc
 | 
				
			||||||
@ -847,18 +871,8 @@ tools:
 | 
				
			|||||||
      - examination
 | 
					      - examination
 | 
				
			||||||
      - analysis
 | 
					      - analysis
 | 
				
			||||||
      - reporting
 | 
					      - reporting
 | 
				
			||||||
    platforms:
 | 
					 | 
				
			||||||
      - Windows
 | 
					 | 
				
			||||||
      - macOS
 | 
					 | 
				
			||||||
      - Web
 | 
					 | 
				
			||||||
    domain-agnostic-software:
 | 
					 | 
				
			||||||
      - collaboration-general
 | 
					 | 
				
			||||||
    skillLevel: novice
 | 
					    skillLevel: novice
 | 
				
			||||||
    accessType: commercial
 | 
					 | 
				
			||||||
    url: https://www.office.com/
 | 
					    url: https://www.office.com/
 | 
				
			||||||
    projectUrl: ''
 | 
					 | 
				
			||||||
    license: Proprietary
 | 
					 | 
				
			||||||
    knowledgebase: false
 | 
					 | 
				
			||||||
    tags:
 | 
					    tags:
 | 
				
			||||||
      - gui
 | 
					      - gui
 | 
				
			||||||
      - document-creation
 | 
					      - document-creation
 | 
				
			||||||
@ -866,7 +880,18 @@ tools:
 | 
				
			|||||||
      - collaboration
 | 
					      - collaboration
 | 
				
			||||||
      - cloud-based
 | 
					      - cloud-based
 | 
				
			||||||
      - reporting
 | 
					      - reporting
 | 
				
			||||||
 | 
					    icon: ☁️
 | 
				
			||||||
 | 
					    platforms:
 | 
				
			||||||
 | 
					      - Windows
 | 
				
			||||||
 | 
					      - macOS
 | 
				
			||||||
 | 
					      - Web
 | 
				
			||||||
 | 
					    accessType: commercial
 | 
				
			||||||
 | 
					    license: Proprietary
 | 
				
			||||||
 | 
					    knowledgebase: false
 | 
				
			||||||
 | 
					    domain-agnostic-software:
 | 
				
			||||||
 | 
					      - collaboration-general
 | 
				
			||||||
  - name: GraphSense
 | 
					  - name: GraphSense
 | 
				
			||||||
 | 
					    icon: 🌐
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Die europäische Alternative zu Chainalysis mit Open-Source-Kern und Fokus
 | 
					      Die europäische Alternative zu Chainalysis mit Open-Source-Kern und Fokus
 | 
				
			||||||
@ -898,14 +923,15 @@ tools:
 | 
				
			|||||||
      - api
 | 
					      - api
 | 
				
			||||||
      - big-data
 | 
					      - big-data
 | 
				
			||||||
  - name: FTK Imager
 | 
					  - name: FTK Imager
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Der Oldtimer unter den Imaging-Tools, aber immer noch zuverlässig wie ein
 | 
					      Der Oldtimer unter den Imaging-Tools, aber immer noch zuverlässig wie ein
 | 
				
			||||||
      Schweizer Uhrwerk. Erstellt bit-genaue Kopien von Festplatten mit
 | 
					      Uhrwerk. Erstellt bit-genaue Kopien von Festplatten mit integrierter
 | 
				
			||||||
      integrierter Hash-Verifizierung für die Beweiskette. Die kostenlose
 | 
					      Hash-Verifizierung für die Beweiskette. Die kostenlose Version reicht für
 | 
				
			||||||
      Version reicht für die meisten Aufgaben, unterstützt alle gängigen
 | 
					      die meisten Aufgaben, unterstützt alle gängigen Image-Formate. Etwas
 | 
				
			||||||
      Image-Formate. Etwas angestaubt in der Oberfläche, aber bewährt in
 | 
					      angestaubt in der Oberfläche, aber bewährt in tausenden Gerichtsverfahren.
 | 
				
			||||||
      tausenden Gerichtsverfahren. Freeware, aber nicht open source.
 | 
					      Freeware, aber nicht open source.
 | 
				
			||||||
    domains:
 | 
					    domains:
 | 
				
			||||||
      - law-enforcement
 | 
					      - law-enforcement
 | 
				
			||||||
      - incident-response
 | 
					      - incident-response
 | 
				
			||||||
@ -928,6 +954,7 @@ tools:
 | 
				
			|||||||
      - verification
 | 
					      - verification
 | 
				
			||||||
      - write-blocking
 | 
					      - write-blocking
 | 
				
			||||||
  - name: Guymager
 | 
					  - name: Guymager
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Das schlanke Linux-Imaging-Tool mit Fokus auf Performance und
 | 
					      Das schlanke Linux-Imaging-Tool mit Fokus auf Performance und
 | 
				
			||||||
@ -957,6 +984,7 @@ tools:
 | 
				
			|||||||
      - multi-threading
 | 
					      - multi-threading
 | 
				
			||||||
      - write-blocking
 | 
					      - write-blocking
 | 
				
			||||||
  - name: Fuji
 | 
					  - name: Fuji
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Der Geheimtipp für macOS-Forensiker - Live-Imaging ohne
 | 
					      Der Geheimtipp für macOS-Forensiker - Live-Imaging ohne
 | 
				
			||||||
@ -986,6 +1014,7 @@ tools:
 | 
				
			|||||||
      - filesystem
 | 
					      - filesystem
 | 
				
			||||||
      - macos-specific
 | 
					      - macos-specific
 | 
				
			||||||
  - name: ALEAPP
 | 
					  - name: ALEAPP
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Android-Forensik leicht gemacht - parst dutzende Apps und System-Artefakte
 | 
					      Android-Forensik leicht gemacht - parst dutzende Apps und System-Artefakte
 | 
				
			||||||
@ -1019,6 +1048,7 @@ tools:
 | 
				
			|||||||
      - reporting
 | 
					      - reporting
 | 
				
			||||||
      - timeline-analysis
 | 
					      - timeline-analysis
 | 
				
			||||||
  - name: iLEAPP
 | 
					  - name: iLEAPP
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Das iOS-Pendant zu ALEAPP mit Fokus auf Apple's geschlossenem Ökosystem.
 | 
					      Das iOS-Pendant zu ALEAPP mit Fokus auf Apple's geschlossenem Ökosystem.
 | 
				
			||||||
@ -1052,6 +1082,7 @@ tools:
 | 
				
			|||||||
      - reporting
 | 
					      - reporting
 | 
				
			||||||
      - ios-specific
 | 
					      - ios-specific
 | 
				
			||||||
  - name: VLEAPP
 | 
					  - name: VLEAPP
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Die Zukunft der Fahrzeug-Forensik für vernetzte Autos und
 | 
					      Die Zukunft der Fahrzeug-Forensik für vernetzte Autos und
 | 
				
			||||||
@ -1086,7 +1117,7 @@ tools:
 | 
				
			|||||||
  - name: Kali Linux
 | 
					  - name: Kali Linux
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Die Schweizer Armee-Messer-Distribution mit über 600 vorinstallierten
 | 
					      Die wohlbekannte Hacker-Distribution mit über 600 vorinstallierten
 | 
				
			||||||
      Security-Tools. Von Forensik über Penetration Testing bis Reverse
 | 
					      Security-Tools. Von Forensik über Penetration Testing bis Reverse
 | 
				
			||||||
      Engineering ist alles an Bord. Die Live-Boot-Option ermöglicht forensische
 | 
					      Engineering ist alles an Bord. Die Live-Boot-Option ermöglicht forensische
 | 
				
			||||||
      Untersuchungen ohne Installation. Regelmäßige Updates halten die
 | 
					      Untersuchungen ohne Installation. Regelmäßige Updates halten die
 | 
				
			||||||
@ -1100,17 +1131,8 @@ tools:
 | 
				
			|||||||
      - mobile-forensics
 | 
					      - mobile-forensics
 | 
				
			||||||
      - cloud-forensics
 | 
					      - cloud-forensics
 | 
				
			||||||
      - ics-forensics
 | 
					      - ics-forensics
 | 
				
			||||||
    phases: []
 | 
					 | 
				
			||||||
    platforms:
 | 
					 | 
				
			||||||
      - OS
 | 
					 | 
				
			||||||
    domain-agnostic-software:
 | 
					 | 
				
			||||||
      - specific-os
 | 
					 | 
				
			||||||
    skillLevel: intermediate
 | 
					    skillLevel: intermediate
 | 
				
			||||||
    accessType: download
 | 
					 | 
				
			||||||
    url: https://kali.org/
 | 
					    url: https://kali.org/
 | 
				
			||||||
    projectUrl: null
 | 
					 | 
				
			||||||
    license: GPL-3.0
 | 
					 | 
				
			||||||
    knowledgebase: true
 | 
					 | 
				
			||||||
    tags:
 | 
					    tags:
 | 
				
			||||||
      - live-boot
 | 
					      - live-boot
 | 
				
			||||||
      - tool-collection
 | 
					      - tool-collection
 | 
				
			||||||
@ -1118,7 +1140,16 @@ tools:
 | 
				
			|||||||
      - forensics-suite
 | 
					      - forensics-suite
 | 
				
			||||||
      - virtualization
 | 
					      - virtualization
 | 
				
			||||||
      - arm-support
 | 
					      - arm-support
 | 
				
			||||||
 | 
					    icon: 🖥
 | 
				
			||||||
 | 
					    platforms:
 | 
				
			||||||
 | 
					      - OS
 | 
				
			||||||
 | 
					    accessType: download
 | 
				
			||||||
 | 
					    license: GPL-3.0
 | 
				
			||||||
 | 
					    knowledgebase: true
 | 
				
			||||||
 | 
					    domain-agnostic-software:
 | 
				
			||||||
 | 
					      - specific-os
 | 
				
			||||||
  - name: dd
 | 
					  - name: dd
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Das Unix-Urgestein für bit-genaues Kopieren von Datenträgern seit 1974.
 | 
					      Das Unix-Urgestein für bit-genaues Kopieren von Datenträgern seit 1974.
 | 
				
			||||||
@ -1149,6 +1180,7 @@ tools:
 | 
				
			|||||||
      - unix-tool
 | 
					      - unix-tool
 | 
				
			||||||
      - scripting
 | 
					      - scripting
 | 
				
			||||||
  - name: dcfldd
 | 
					  - name: dcfldd
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Die forensische Weiterentwicklung von dd mit eingebauter
 | 
					      Die forensische Weiterentwicklung von dd mit eingebauter
 | 
				
			||||||
@ -1178,6 +1210,7 @@ tools:
 | 
				
			|||||||
      - progress-monitoring
 | 
					      - progress-monitoring
 | 
				
			||||||
      - split-output
 | 
					      - split-output
 | 
				
			||||||
  - name: ewfacquire
 | 
					  - name: ewfacquire
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Das Kommandozeilen-Tool für Expert Witness Format (E01) Images mit
 | 
					      Das Kommandozeilen-Tool für Expert Witness Format (E01) Images mit
 | 
				
			||||||
@ -1208,6 +1241,7 @@ tools:
 | 
				
			|||||||
      - metadata
 | 
					      - metadata
 | 
				
			||||||
      - verification
 | 
					      - verification
 | 
				
			||||||
  - name: PhotoRec
 | 
					  - name: PhotoRec
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Der Datenretter in der Not - findet gelöschte Dateien ohne
 | 
					      Der Datenretter in der Not - findet gelöschte Dateien ohne
 | 
				
			||||||
@ -1240,6 +1274,7 @@ tools:
 | 
				
			|||||||
      - signature-based
 | 
					      - signature-based
 | 
				
			||||||
      - cross-platform
 | 
					      - cross-platform
 | 
				
			||||||
  - name: Kismet
 | 
					  - name: Kismet
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Der WLAN-Schnüffler der Extraklasse für Wireless-Forensik und
 | 
					      Der WLAN-Schnüffler der Extraklasse für Wireless-Forensik und
 | 
				
			||||||
@ -1270,6 +1305,7 @@ tools:
 | 
				
			|||||||
      - passive-scanning
 | 
					      - passive-scanning
 | 
				
			||||||
      - api
 | 
					      - api
 | 
				
			||||||
  - name: OSFMount
 | 
					  - name: OSFMount
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Mountet Disk-Images als virtuelle Laufwerke unter Windows für komfortable
 | 
					      Mountet Disk-Images als virtuelle Laufwerke unter Windows für komfortable
 | 
				
			||||||
@ -1300,6 +1336,7 @@ tools:
 | 
				
			|||||||
      - format-support
 | 
					      - format-support
 | 
				
			||||||
      - freeware
 | 
					      - freeware
 | 
				
			||||||
  - name: Thumbcache Viewer
 | 
					  - name: Thumbcache Viewer
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Spezialist für Windows Thumbnail-Caches mit Zugriff auf gelöschte
 | 
					      Spezialist für Windows Thumbnail-Caches mit Zugriff auf gelöschte
 | 
				
			||||||
@ -1330,6 +1367,7 @@ tools:
 | 
				
			|||||||
      - thumbnail-extraction
 | 
					      - thumbnail-extraction
 | 
				
			||||||
      - deleted-data
 | 
					      - deleted-data
 | 
				
			||||||
  - name: RegRipper
 | 
					  - name: RegRipper
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Der Windows-Registry-Experte mit hunderten Plugins für automatisierte
 | 
					      Der Windows-Registry-Experte mit hunderten Plugins für automatisierte
 | 
				
			||||||
@ -1368,24 +1406,15 @@ tools:
 | 
				
			|||||||
      Regelbasierte Suche nach Strings, Byte-Sequenzen und regulären Ausdrücken.
 | 
					      Regelbasierte Suche nach Strings, Byte-Sequenzen und regulären Ausdrücken.
 | 
				
			||||||
      De-facto Standard für Malware-Signaturen mit riesiger
 | 
					      De-facto Standard für Malware-Signaturen mit riesiger
 | 
				
			||||||
      Community-Rule-Sammlung. Integration in viele Forensik-Tools macht es zum
 | 
					      Community-Rule-Sammlung. Integration in viele Forensik-Tools macht es zum
 | 
				
			||||||
      universellen Schweizer Messer.
 | 
					      Marktstandard.
 | 
				
			||||||
    domains:
 | 
					    domains:
 | 
				
			||||||
      - incident-response
 | 
					      - incident-response
 | 
				
			||||||
      - malware-analysis
 | 
					      - malware-analysis
 | 
				
			||||||
    phases:
 | 
					    phases:
 | 
				
			||||||
      - examination
 | 
					      - examination
 | 
				
			||||||
      - analysis
 | 
					      - analysis
 | 
				
			||||||
    platforms:
 | 
					 | 
				
			||||||
      - Windows
 | 
					 | 
				
			||||||
      - Linux
 | 
					 | 
				
			||||||
      - macOS
 | 
					 | 
				
			||||||
    domain-agnostic-software: null
 | 
					 | 
				
			||||||
    skillLevel: intermediate
 | 
					    skillLevel: intermediate
 | 
				
			||||||
    accessType: download
 | 
					 | 
				
			||||||
    url: https://virustotal.github.io/yara/
 | 
					    url: https://virustotal.github.io/yara/
 | 
				
			||||||
    projectUrl: ''
 | 
					 | 
				
			||||||
    license: BSD-3-Clause
 | 
					 | 
				
			||||||
    knowledgebase: false
 | 
					 | 
				
			||||||
    tags:
 | 
					    tags:
 | 
				
			||||||
      - commandline
 | 
					      - commandline
 | 
				
			||||||
      - pattern-matching
 | 
					      - pattern-matching
 | 
				
			||||||
@ -1393,7 +1422,16 @@ tools:
 | 
				
			|||||||
      - rule-engine
 | 
					      - rule-engine
 | 
				
			||||||
      - library
 | 
					      - library
 | 
				
			||||||
      - signature-based
 | 
					      - signature-based
 | 
				
			||||||
 | 
					    icon: 🛠
 | 
				
			||||||
 | 
					    platforms:
 | 
				
			||||||
 | 
					      - Windows
 | 
				
			||||||
 | 
					      - Linux
 | 
				
			||||||
 | 
					      - macOS
 | 
				
			||||||
 | 
					    accessType: download
 | 
				
			||||||
 | 
					    license: BSD-3-Clause
 | 
				
			||||||
 | 
					    knowledgebase: false
 | 
				
			||||||
  - name: Strings
 | 
					  - name: Strings
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Das simple Tool mit großer Wirkung - extrahiert lesbare Texte aus
 | 
					      Das simple Tool mit großer Wirkung - extrahiert lesbare Texte aus
 | 
				
			||||||
@ -1434,21 +1472,12 @@ tools:
 | 
				
			|||||||
      Anreicherung großer Datensätze.
 | 
					      Anreicherung großer Datensätze.
 | 
				
			||||||
    domains:
 | 
					    domains:
 | 
				
			||||||
      - incident-response
 | 
					      - incident-response
 | 
				
			||||||
      - network-forensics
 | 
					 | 
				
			||||||
      - fraud-investigation
 | 
					      - fraud-investigation
 | 
				
			||||||
 | 
					      - network-forensics
 | 
				
			||||||
    phases:
 | 
					    phases:
 | 
				
			||||||
      - analysis
 | 
					      - analysis
 | 
				
			||||||
    platforms:
 | 
					 | 
				
			||||||
      - Windows
 | 
					 | 
				
			||||||
      - Linux
 | 
					 | 
				
			||||||
      - macOS
 | 
					 | 
				
			||||||
    domain-agnostic-software: null
 | 
					 | 
				
			||||||
    skillLevel: beginner
 | 
					    skillLevel: beginner
 | 
				
			||||||
    accessType: download
 | 
					 | 
				
			||||||
    url: https://www.maxmind.com/
 | 
					    url: https://www.maxmind.com/
 | 
				
			||||||
    projectUrl: ''
 | 
					 | 
				
			||||||
    license: GeoLite2 EULA / Commercial
 | 
					 | 
				
			||||||
    knowledgebase: false
 | 
					 | 
				
			||||||
    tags:
 | 
					    tags:
 | 
				
			||||||
      - api
 | 
					      - api
 | 
				
			||||||
      - geolocation
 | 
					      - geolocation
 | 
				
			||||||
@ -1456,6 +1485,14 @@ tools:
 | 
				
			|||||||
      - database
 | 
					      - database
 | 
				
			||||||
      - enrichment
 | 
					      - enrichment
 | 
				
			||||||
      - library
 | 
					      - library
 | 
				
			||||||
 | 
					    icon: 🗄
 | 
				
			||||||
 | 
					    platforms:
 | 
				
			||||||
 | 
					      - Windows
 | 
				
			||||||
 | 
					      - Linux
 | 
				
			||||||
 | 
					      - macOS
 | 
				
			||||||
 | 
					    accessType: download
 | 
				
			||||||
 | 
					    license: GeoLite2 EULA / Commercial
 | 
				
			||||||
 | 
					    knowledgebase: false
 | 
				
			||||||
  - name: SIFT Workstation
 | 
					  - name: SIFT Workstation
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
@ -1470,17 +1507,8 @@ tools:
 | 
				
			|||||||
      - malware-analysis
 | 
					      - malware-analysis
 | 
				
			||||||
      - network-forensics
 | 
					      - network-forensics
 | 
				
			||||||
      - mobile-forensics
 | 
					      - mobile-forensics
 | 
				
			||||||
    phases: []
 | 
					 | 
				
			||||||
    platforms:
 | 
					 | 
				
			||||||
      - OS
 | 
					 | 
				
			||||||
    domain-agnostic-software:
 | 
					 | 
				
			||||||
      - specific-os
 | 
					 | 
				
			||||||
    skillLevel: intermediate
 | 
					    skillLevel: intermediate
 | 
				
			||||||
    accessType: download
 | 
					 | 
				
			||||||
    url: https://www.sans.org/tools/sift-workstation/
 | 
					    url: https://www.sans.org/tools/sift-workstation/
 | 
				
			||||||
    projectUrl: ''
 | 
					 | 
				
			||||||
    license: Free / Mixed
 | 
					 | 
				
			||||||
    knowledgebase: false
 | 
					 | 
				
			||||||
    tags:
 | 
					    tags:
 | 
				
			||||||
      - virtual-machine
 | 
					      - virtual-machine
 | 
				
			||||||
      - tool-collection
 | 
					      - tool-collection
 | 
				
			||||||
@ -1488,6 +1516,14 @@ tools:
 | 
				
			|||||||
      - training-focused
 | 
					      - training-focused
 | 
				
			||||||
      - documentation
 | 
					      - documentation
 | 
				
			||||||
      - ubuntu-based
 | 
					      - ubuntu-based
 | 
				
			||||||
 | 
					    icon: 🖥
 | 
				
			||||||
 | 
					    platforms:
 | 
				
			||||||
 | 
					      - OS
 | 
				
			||||||
 | 
					    accessType: download
 | 
				
			||||||
 | 
					    license: Free / Mixed
 | 
				
			||||||
 | 
					    knowledgebase: false
 | 
				
			||||||
 | 
					    domain-agnostic-software:
 | 
				
			||||||
 | 
					      - specific-os
 | 
				
			||||||
  - name: Tsurugi Linux
 | 
					  - name: Tsurugi Linux
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
@ -1503,21 +1539,22 @@ tools:
 | 
				
			|||||||
      - law-enforcement
 | 
					      - law-enforcement
 | 
				
			||||||
      - malware-analysis
 | 
					      - malware-analysis
 | 
				
			||||||
      - mobile-forensics
 | 
					      - mobile-forensics
 | 
				
			||||||
    platforms:
 | 
					 | 
				
			||||||
      - OS
 | 
					 | 
				
			||||||
    domain-agnostic-software:
 | 
					 | 
				
			||||||
      - specific-os
 | 
					 | 
				
			||||||
    skillLevel: intermediate
 | 
					    skillLevel: intermediate
 | 
				
			||||||
    accessType: download
 | 
					 | 
				
			||||||
    url: https://tsurugi-linux.org/
 | 
					    url: https://tsurugi-linux.org/
 | 
				
			||||||
    license: GPL / Mixed
 | 
					 | 
				
			||||||
    knowledgebase: false
 | 
					 | 
				
			||||||
    tags:
 | 
					    tags:
 | 
				
			||||||
      - live-boot
 | 
					      - live-boot
 | 
				
			||||||
      - tool-collection
 | 
					      - tool-collection
 | 
				
			||||||
      - forensics-suite
 | 
					      - forensics-suite
 | 
				
			||||||
      - mobile-focus
 | 
					      - mobile-focus
 | 
				
			||||||
      - lightweight
 | 
					      - lightweight
 | 
				
			||||||
 | 
					    icon: 🖥
 | 
				
			||||||
 | 
					    platforms:
 | 
				
			||||||
 | 
					      - OS
 | 
				
			||||||
 | 
					    accessType: download
 | 
				
			||||||
 | 
					    license: GPL / Mixed
 | 
				
			||||||
 | 
					    knowledgebase: false
 | 
				
			||||||
 | 
					    domain-agnostic-software:
 | 
				
			||||||
 | 
					      - specific-os
 | 
				
			||||||
  - name: Parrot Security OS
 | 
					  - name: Parrot Security OS
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
@ -1531,17 +1568,8 @@ tools:
 | 
				
			|||||||
      - law-enforcement
 | 
					      - law-enforcement
 | 
				
			||||||
      - malware-analysis
 | 
					      - malware-analysis
 | 
				
			||||||
      - network-forensics
 | 
					      - network-forensics
 | 
				
			||||||
    phases: []
 | 
					 | 
				
			||||||
    platforms:
 | 
					 | 
				
			||||||
      - OS
 | 
					 | 
				
			||||||
    domain-agnostic-software:
 | 
					 | 
				
			||||||
      - specific-os
 | 
					 | 
				
			||||||
    skillLevel: intermediate
 | 
					    skillLevel: intermediate
 | 
				
			||||||
    accessType: download
 | 
					 | 
				
			||||||
    url: https://parrotsec.org/
 | 
					    url: https://parrotsec.org/
 | 
				
			||||||
    projectUrl: ''
 | 
					 | 
				
			||||||
    license: GPL-3.0
 | 
					 | 
				
			||||||
    knowledgebase: false
 | 
					 | 
				
			||||||
    tags:
 | 
					    tags:
 | 
				
			||||||
      - live-boot
 | 
					      - live-boot
 | 
				
			||||||
      - privacy-focused
 | 
					      - privacy-focused
 | 
				
			||||||
@ -1549,7 +1577,16 @@ tools:
 | 
				
			|||||||
      - rolling-release
 | 
					      - rolling-release
 | 
				
			||||||
      - lightweight
 | 
					      - lightweight
 | 
				
			||||||
      - anonymization
 | 
					      - anonymization
 | 
				
			||||||
 | 
					    icon: 🖥
 | 
				
			||||||
 | 
					    platforms:
 | 
				
			||||||
 | 
					      - OS
 | 
				
			||||||
 | 
					    accessType: download
 | 
				
			||||||
 | 
					    license: GPL-3.0
 | 
				
			||||||
 | 
					    knowledgebase: false
 | 
				
			||||||
 | 
					    domain-agnostic-software:
 | 
				
			||||||
 | 
					      - specific-os
 | 
				
			||||||
  - name: Eric Zimmerman Tools
 | 
					  - name: Eric Zimmerman Tools
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Die Tool-Sammlung des Windows-Forensik-Gurus für Artefakt-Analyse. Von
 | 
					      Die Tool-Sammlung des Windows-Forensik-Gurus für Artefakt-Analyse. Von
 | 
				
			||||||
@ -1579,6 +1616,7 @@ tools:
 | 
				
			|||||||
      - tool-collection
 | 
					      - tool-collection
 | 
				
			||||||
      - artifact-extraction
 | 
					      - artifact-extraction
 | 
				
			||||||
  - name: Impacket
 | 
					  - name: Impacket
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Python-Bibliothek für Netzwerk-Protokoll-Manipulation und
 | 
					      Python-Bibliothek für Netzwerk-Protokoll-Manipulation und
 | 
				
			||||||
@ -1612,6 +1650,7 @@ tools:
 | 
				
			|||||||
      - scripting
 | 
					      - scripting
 | 
				
			||||||
      - api
 | 
					      - api
 | 
				
			||||||
  - name: RSA NetWitness
 | 
					  - name: RSA NetWitness
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Enterprise-Grade SIEM und Forensik-Plattform für große Netzwerke.
 | 
					      Enterprise-Grade SIEM und Forensik-Plattform für große Netzwerke.
 | 
				
			||||||
@ -1644,6 +1683,7 @@ tools:
 | 
				
			|||||||
      - machine-learning
 | 
					      - machine-learning
 | 
				
			||||||
      - enterprise
 | 
					      - enterprise
 | 
				
			||||||
  - name: X-Ways Forensics
 | 
					  - name: X-Ways Forensics
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Der deutsche Präzisionsskalpell unter den Forensik-Tools mit
 | 
					      Der deutsche Präzisionsskalpell unter den Forensik-Tools mit
 | 
				
			||||||
@ -1674,6 +1714,7 @@ tools:
 | 
				
			|||||||
      - german-made
 | 
					      - german-made
 | 
				
			||||||
      - hex-editor
 | 
					      - hex-editor
 | 
				
			||||||
  - name: EnCase
 | 
					  - name: EnCase
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Der Veteran der kommerziellen Forensik-Tools mit 25 Jahren
 | 
					      Der Veteran der kommerziellen Forensik-Tools mit 25 Jahren
 | 
				
			||||||
@ -1705,6 +1746,7 @@ tools:
 | 
				
			|||||||
      - certification
 | 
					      - certification
 | 
				
			||||||
      - scripting
 | 
					      - scripting
 | 
				
			||||||
  - name: FRED
 | 
					  - name: FRED
 | 
				
			||||||
 | 
					    icon: 🔧
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Forensic Recovery of Evidence Device - spezialisierte Hardware für
 | 
					      Forensic Recovery of Evidence Device - spezialisierte Hardware für
 | 
				
			||||||
@ -1745,20 +1787,22 @@ tools:
 | 
				
			|||||||
      - data-collection
 | 
					      - data-collection
 | 
				
			||||||
      - examination
 | 
					      - examination
 | 
				
			||||||
      - analysis
 | 
					      - analysis
 | 
				
			||||||
    platforms:
 | 
					 | 
				
			||||||
      - Windows
 | 
					 | 
				
			||||||
      - Linux
 | 
					 | 
				
			||||||
      - macOS
 | 
					 | 
				
			||||||
    skillLevel: advanced
 | 
					    skillLevel: advanced
 | 
				
			||||||
    accessType: download
 | 
					 | 
				
			||||||
    url: https://github.com/microsoft/ics-forensics-tools
 | 
					    url: https://github.com/microsoft/ics-forensics-tools
 | 
				
			||||||
    license: MIT
 | 
					 | 
				
			||||||
    knowledgebase: false
 | 
					 | 
				
			||||||
    tags:
 | 
					    tags:
 | 
				
			||||||
      - python
 | 
					      - python
 | 
				
			||||||
      - binary
 | 
					      - binary
 | 
				
			||||||
      - scripting
 | 
					      - scripting
 | 
				
			||||||
  - name: "Live Memory Acquisition Procedure"
 | 
					    icon: 🛠
 | 
				
			||||||
 | 
					    platforms:
 | 
				
			||||||
 | 
					      - Windows
 | 
				
			||||||
 | 
					      - Linux
 | 
				
			||||||
 | 
					      - macOS
 | 
				
			||||||
 | 
					    accessType: download
 | 
				
			||||||
 | 
					    license: MIT
 | 
				
			||||||
 | 
					    knowledgebase: false
 | 
				
			||||||
 | 
					  - name: Live Memory Acquisition Procedure
 | 
				
			||||||
 | 
					    icon: 📋
 | 
				
			||||||
    type: method
 | 
					    type: method
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Standardisiertes Verfahren zur forensisch korrekten Akquisition des
 | 
					      Standardisiertes Verfahren zur forensisch korrekten Akquisition des
 | 
				
			||||||
@ -1777,8 +1821,9 @@ tools:
 | 
				
			|||||||
    domain-agnostic-software: null
 | 
					    domain-agnostic-software: null
 | 
				
			||||||
    skillLevel: advanced
 | 
					    skillLevel: advanced
 | 
				
			||||||
    accessType: null
 | 
					    accessType: null
 | 
				
			||||||
    url: https://www.nist.gov/publications/guide-integrating-forensic-techniques-incident-response
 | 
					    url: >-
 | 
				
			||||||
    projectUrl: 
 | 
					      https://www.nist.gov/publications/guide-integrating-forensic-techniques-incident-response
 | 
				
			||||||
 | 
					    projectUrl: null
 | 
				
			||||||
    license: null
 | 
					    license: null
 | 
				
			||||||
    knowledgebase: false
 | 
					    knowledgebase: false
 | 
				
			||||||
    tags:
 | 
					    tags:
 | 
				
			||||||
@ -1788,7 +1833,8 @@ tools:
 | 
				
			|||||||
      - ram-dump
 | 
					      - ram-dump
 | 
				
			||||||
      - evidence-preservation
 | 
					      - evidence-preservation
 | 
				
			||||||
      - procedure
 | 
					      - procedure
 | 
				
			||||||
  - name: "Rapid Incident Response Triage on macOS"
 | 
					  - name: Rapid Incident Response Triage on macOS
 | 
				
			||||||
 | 
					    icon: 📋
 | 
				
			||||||
    type: method
 | 
					    type: method
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Spezialisierte Methodik für die schnelle Incident Response auf
 | 
					      Spezialisierte Methodik für die schnelle Incident Response auf
 | 
				
			||||||
@ -1796,8 +1842,8 @@ tools:
 | 
				
			|||||||
      Artefakte in unter einer Stunde. Adressiert die Lücke zwischen
 | 
					      Artefakte in unter einer Stunde. Adressiert die Lücke zwischen
 | 
				
			||||||
      Windows-zentrierten IR-Prozessen und macOS-spezifischen
 | 
					      Windows-zentrierten IR-Prozessen und macOS-spezifischen
 | 
				
			||||||
      Sicherheitsarchitekturen. Nutzt Tools wie Aftermath für effiziente
 | 
					      Sicherheitsarchitekturen. Nutzt Tools wie Aftermath für effiziente
 | 
				
			||||||
      Datensammlung ohne zeitaufwändige Full-Disk-Images. Besonders wertvoll
 | 
					      Datensammlung ohne zeitaufwändige Full-Disk-Images. Besonders wertvoll für
 | 
				
			||||||
      für Unternehmensumgebungen mit gemischten Betriebssystem-Landschaften.
 | 
					      Unternehmensumgebungen mit gemischten Betriebssystem-Landschaften.
 | 
				
			||||||
    domains:
 | 
					    domains:
 | 
				
			||||||
      - incident-response
 | 
					      - incident-response
 | 
				
			||||||
      - law-enforcement
 | 
					      - law-enforcement
 | 
				
			||||||
@ -1809,10 +1855,11 @@ tools:
 | 
				
			|||||||
    domain-agnostic-software: null
 | 
					    domain-agnostic-software: null
 | 
				
			||||||
    skillLevel: intermediate
 | 
					    skillLevel: intermediate
 | 
				
			||||||
    accessType: null
 | 
					    accessType: null
 | 
				
			||||||
    url: https://www.sans.org/white-papers/rapid-incident-response-on-macos-actionable-insights-under-hour/
 | 
					    url: >-
 | 
				
			||||||
    projectUrl: 
 | 
					      https://www.sans.org/white-papers/rapid-incident-response-on-macos-actionable-insights-under-hour/
 | 
				
			||||||
 | 
					    projectUrl: null
 | 
				
			||||||
    license: null
 | 
					    license: null
 | 
				
			||||||
    knowledgebase: 
 | 
					    knowledgebase: null
 | 
				
			||||||
    tags:
 | 
					    tags:
 | 
				
			||||||
      - macos
 | 
					      - macos
 | 
				
			||||||
      - rapid-response
 | 
					      - rapid-response
 | 
				
			||||||
@ -1822,14 +1869,15 @@ tools:
 | 
				
			|||||||
      - enterprise
 | 
					      - enterprise
 | 
				
			||||||
      - methodology
 | 
					      - methodology
 | 
				
			||||||
      - apple
 | 
					      - apple
 | 
				
			||||||
  - name: "Aftermath"
 | 
					  - name: Aftermath
 | 
				
			||||||
 | 
					    icon: 📦
 | 
				
			||||||
    type: software
 | 
					    type: software
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      Jamf's Open-Source-Tool für die schnelle Sammlung forensischer Artefakte
 | 
					      Jamf's Open-Source-Tool für die schnelle Sammlung forensischer Artefakte
 | 
				
			||||||
      auf macOS-Systemen. Sammelt kritische Daten wie Prozessinformationen,
 | 
					      auf macOS-Systemen. Sammelt kritische Daten wie Prozessinformationen,
 | 
				
			||||||
      Netzwerkverbindungen, Dateisystem-Metadaten und Systemkonfigurationen
 | 
					      Netzwerkverbindungen, Dateisystem-Metadaten und Systemkonfigurationen ohne
 | 
				
			||||||
      ohne Full-Disk-Imaging. Speziell entwickelt für die Rapid-Response-Triage
 | 
					      Full-Disk-Imaging. Speziell entwickelt für die Rapid-Response-Triage in
 | 
				
			||||||
      in Enterprise-Umgebungen mit macOS-Geräten. Normalisiert Zeitstempel und
 | 
					      Enterprise-Umgebungen mit macOS-Geräten. Normalisiert Zeitstempel und
 | 
				
			||||||
      erstellt durchsuchbare Ausgabeformate für effiziente Analyse.
 | 
					      erstellt durchsuchbare Ausgabeformate für effiziente Analyse.
 | 
				
			||||||
    domains:
 | 
					    domains:
 | 
				
			||||||
      - incident-response
 | 
					      - incident-response
 | 
				
			||||||
 | 
				
			|||||||
@ -353,13 +353,12 @@ function createToolCard(tool) {
 | 
				
			|||||||
  cardDiv.style.cursor = 'pointer';
 | 
					  cardDiv.style.cursor = 'pointer';
 | 
				
			||||||
  cardDiv.onclick = () => (window as any).showToolDetails(tool.name);
 | 
					  cardDiv.onclick = () => (window as any).showToolDetails(tool.name);
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  cardDiv.innerHTML = `
 | 
					  cardDiv.innerHTML = `
 | 
				
			||||||
    <div class="tool-card-header">
 | 
					    <div class="tool-card-header">
 | 
				
			||||||
      <h3>${tool.name}</h3>
 | 
					      <h3>${tool.icon ? `<span style="margin-right: 0.5rem; font-size: 1.125rem;">${tool.icon}</span>` : ''}${tool.name}</h3>
 | 
				
			||||||
      <div class="tool-card-badges">
 | 
					      <div class="tool-card-badges">
 | 
				
			||||||
        ${isMethod ? '<span class="badge" style="background-color: var(--color-method); color: white;">Methode</span>' : ''}
 | 
					        ${!isMethod && hasValidProjectUrl ? '<span class="badge badge-primary">Self-Hosted</span>' : ''}
 | 
				
			||||||
        ${!isMethod && hasValidProjectUrl ? '<span class="badge badge-primary">CC24-Server</span>' : ''}
 | 
					 | 
				
			||||||
        ${!isMethod && 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>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,7 @@ import { z } from 'zod';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const ToolSchema = z.object({
 | 
					const ToolSchema = z.object({
 | 
				
			||||||
  name: z.string(),
 | 
					  name: z.string(),
 | 
				
			||||||
  icon: z.string().optional(), 
 | 
					  icon: z.string().optional().nullable(),
 | 
				
			||||||
  type: z.string(),
 | 
					  type: z.string(),
 | 
				
			||||||
  description: z.string(),
 | 
					  description: z.string(),
 | 
				
			||||||
  domains: z.array(z.string()).optional().nullable().default([]),
 | 
					  domains: z.array(z.string()).optional().nullable().default([]),
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user