Merge branch 'master' of github.com:sleuthkit/autopsy

This commit is contained in:
Brian Carrier 2012-06-13 10:31:13 -04:00
commit 96d103a9da
25 changed files with 5251 additions and 5147 deletions

View File

@ -1,3 +1,5 @@
Last Updated: June 12, 2012
This file outlines what it takes to build Autopsy from source.
Note that it currently only works out of the box on Windows. We
@ -5,33 +7,49 @@ are working on getting the process working under non-WIndows systems.
It generally works, but needs some custom mangling to find the
correct C libraries.
STEPS:
1) Download and install 32-bit version of JDK (32-bit is currently
1) Get Java Setup
1a) Download and install 32-bit version of JDK (32-bit is currently
needed even if you have a 64-bit system).
2) Ensure that JDK_HOME is set to the root JDK directory.
1b) Ensure that JDK_HOME is set to the root JDK directory.
3) Download and install Netbeans IDE 7.0.1 (http://netbeans.org/)
1c) Download and install Netbeans IDE 7.0.1 (http://netbeans.org/)
4) Download and build the release version of Libewf2 (20120304 or later). All you need is the dll file. Note that you will get a launching error if you use libewf 1.
2) Get Sleuth Kit Setup
2a) Download and build the release version of Libewf2 (20120304 or later). All you need is the dll file. Note that you will get a launching error if you use libewf 1.
- http://sourceforge.net/projects/libewf/
5) Set LIBEWF_HOME environment variable to root directory of LIBEWF
2b) Set LIBEWF_HOME environment variable to root directory of LIBEWF
6) Download and build release version of Sleuth Kit (TSK) 4.0. You
2c) Download and build release version of Sleuth Kit (TSK) 4.0. You
need to build the tsk_jni project.
- At the time of this writing, 4.0 is not released. You can get it from either
-- GIT: git://github.com/sleuthkit/sleuthkit.git
-- SVN: http://svn.github.com/sleuthkit/sleuthkit.git
7) Build the TSK JAR file by typing 'ant' in bindings/java from a
2d) Build the TSK JAR file by typing 'ant' in bindings/java from a
command line or by opening the project in NetBeans.
8) Set TSK_HOME environment variable to the root directory of TSK
2e) Set TSK_HOME environment variable to the root directory of TSK
9) Start NetBean IDE and open the Autopsy project.
10) Choose to build the Autopsy project / module. It is the highest
3) Get gstreamer Setup
If Autopsy installer is not used, add the following entries to Windows PATH environment variable
(replace GSTREAMER_INSTALL_DIR with the location of the gstreamer root directory):
GSTREAMER_INSTALL_DIR\bin\;
GSTREAMER_INSTALL_DIR\lib\gstreamer-0.10\;
If you don't have gstreamer already, you can find a zipped gstreamer distribution in
AUTOPSYROOT/thirdparty/gstreamer
4) Compile Autopsy
4a) Start NetBean IDE and open the Autopsy project.
4b) Choose to build the Autopsy project / module. It is the highest
level project that will then cause the other modules to be compiled.
@ -55,5 +73,4 @@ rebuild both the dll and the JAR file.
---------------
Brian Carrier
4/6/2012
carrier <at> sleuthkit <dot> org

View File

@ -71,8 +71,7 @@ public final class AddImageAction extends CallableSystemAction implements Presen
static final String LOOKUPFILES_PROP = "lookupFiles";
// boolean: whether or not to skip processing orphan files on FAT filesystems
static final String NOFATORPHANS_PROP = "nofatorphans";
// boolean: whether or not to skip processing of unallocated space
static final String NOUNALLOC_PROP = "nounalloc";
static final Logger logger = Logger.getLogger(AddImageAction.class.getName());

View File

@ -10,7 +10,7 @@
<Dimension value="[559, 328]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[588, 308]"/>
<Dimension value="[588, 328]"/>
</Property>
</Properties>
<AuxValues>
@ -28,9 +28,13 @@
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<Group type="102" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace min="10" pref="10" max="10" attributes="0"/>
<Component id="noFatOrphansCheckbox" min="-2" max="-2" attributes="0"/>
</Group>
<Component id="imgTypeLabel" alignment="0" min="-2" max="-2" attributes="0"/>
<Group type="102" alignment="0" attributes="0">
<EmptySpace min="10" pref="10" max="10" attributes="0"/>
@ -43,15 +47,6 @@
<Component id="multipleSelectLabel" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="imgInfoLabel" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="jLabel1" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="jLabel2" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="optionsLabel1" alignment="0" min="-2" max="-2" attributes="0"/>
<Group type="102" alignment="0" attributes="0">
<EmptySpace min="10" pref="10" max="10" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="noFatOrphansCheckbox" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="noProcessUnallocSpace" alignment="0" min="-2" max="-2" attributes="0"/>
</Group>
</Group>
<Group type="103" alignment="0" groupAlignment="1" max="-2" attributes="0">
<Group type="102" alignment="0" attributes="1">
<Component id="timeZoneLabel" min="-2" max="-2" attributes="0"/>
@ -66,8 +61,10 @@
<Component id="imgPathBrowserButton" min="-2" max="-2" attributes="0"/>
</Group>
</Group>
<Component id="optionsLabel1" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="jLabel2" alignment="0" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace max="32767" attributes="0"/>
<EmptySpace pref="39" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
@ -92,22 +89,21 @@
</Group>
<EmptySpace max="-2" attributes="0"/>
<Component id="multipleSelectLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="timeZoneLabel" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="timeZoneComboBox" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace max="32767" attributes="0"/>
<EmptySpace type="separate" max="-2" attributes="0"/>
<Component id="optionsLabel1" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="noProcessUnallocSpace" min="-2" max="-2" attributes="0"/>
<EmptySpace min="-2" pref="3" max="-2" attributes="0"/>
<Component id="noFatOrphansCheckbox" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="jLabel2" min="-2" max="-2" attributes="0"/>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<EmptySpace pref="18" max="32767" attributes="0"/>
<Group type="103" groupAlignment="1" attributes="0">
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
<Component id="jLabel2" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace min="-2" pref="25" max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
@ -245,16 +241,6 @@
</Property>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="noProcessUnallocSpace">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="AddImageVisualPanel1.noProcessUnallocSpace.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="noProcessUnallocSpaceActionPerformed"/>
</Events>
</Component>
<Component class="javax.swing.JLabel" name="optionsLabel1">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">

View File

@ -116,14 +116,6 @@ final class AddImageVisualPanel1 extends JPanel implements DocumentListener {
return noFatOrphansCheckbox.isSelected();
}
/**
*
* @return true if no unalloc space processing is selected
*/
boolean getNoUnallocSpaceProcess() {
return noProcessUnallocSpace.isSelected();
}
/**
@ -221,11 +213,10 @@ final class AddImageVisualPanel1 extends JPanel implements DocumentListener {
timeZoneLabel = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
noFatOrphansCheckbox = new javax.swing.JCheckBox();
noProcessUnallocSpace = new javax.swing.JCheckBox();
optionsLabel1 = new javax.swing.JLabel();
setMinimumSize(new java.awt.Dimension(559, 328));
setPreferredSize(new java.awt.Dimension(588, 308));
setPreferredSize(new java.awt.Dimension(588, 328));
org.openide.awt.Mnemonics.setLocalizedText(rawSingle, org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.rawSingle.text")); // NOI18N
rawSingle.setRequestFocusEnabled(false);
@ -281,13 +272,6 @@ final class AddImageVisualPanel1 extends JPanel implements DocumentListener {
org.openide.awt.Mnemonics.setLocalizedText(noFatOrphansCheckbox, org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.noFatOrphansCheckbox.text")); // NOI18N
noFatOrphansCheckbox.setToolTipText(org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.noFatOrphansCheckbox.toolTipText")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(noProcessUnallocSpace, org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.noProcessUnallocSpace.text")); // NOI18N
noProcessUnallocSpace.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
noProcessUnallocSpaceActionPerformed(evt);
}
});
org.openide.awt.Mnemonics.setLocalizedText(optionsLabel1, org.openide.util.NbBundle.getMessage(AddImageVisualPanel1.class, "AddImageVisualPanel1.optionsLabel1.text")); // NOI18N
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
@ -297,6 +281,9 @@ final class AddImageVisualPanel1 extends JPanel implements DocumentListener {
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(10, 10, 10)
.addComponent(noFatOrphansCheckbox))
.addComponent(imgTypeLabel)
.addGroup(layout.createSequentialGroup()
.addGap(10, 10, 10)
@ -307,13 +294,6 @@ final class AddImageVisualPanel1 extends JPanel implements DocumentListener {
.addComponent(multipleSelectLabel)
.addComponent(imgInfoLabel)
.addComponent(jLabel1)
.addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(optionsLabel1)
.addGroup(layout.createSequentialGroup()
.addGap(10, 10, 10)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(noFatOrphansCheckbox)
.addComponent(noProcessUnallocSpace)))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addComponent(timeZoneLabel)
@ -324,8 +304,10 @@ final class AddImageVisualPanel1 extends JPanel implements DocumentListener {
.addGap(18, 18, 18)
.addComponent(imgPathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 389, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(imgPathBrowserButton))))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addComponent(imgPathBrowserButton)))
.addComponent(optionsLabel1)
.addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(39, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
@ -347,21 +329,19 @@ final class AddImageVisualPanel1 extends JPanel implements DocumentListener {
.addComponent(imgPathBrowserButton))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(multipleSelectLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(timeZoneLabel)
.addComponent(timeZoneComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGap(18, 18, 18)
.addComponent(optionsLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(noProcessUnallocSpace)
.addGap(3, 3, 3)
.addComponent(noFatOrphansCheckbox)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jLabel1)
.addContainerGap())
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 18, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel1)
.addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(25, 25, 25))
);
}// </editor-fold>//GEN-END:initComponents
@ -473,10 +453,6 @@ final class AddImageVisualPanel1 extends JPanel implements DocumentListener {
this.wizPanel.moveFocusToNext();
}//GEN-LAST:event_imgPathBrowserButtonActionPerformed
private void noProcessUnallocSpaceActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_noProcessUnallocSpaceActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_noProcessUnallocSpaceActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.ButtonGroup buttonGroup1;
private javax.swing.JRadioButton encase;
@ -489,7 +465,6 @@ private void noProcessUnallocSpaceActionPerformed(java.awt.event.ActionEvent evt
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel multipleSelectLabel;
private javax.swing.JCheckBox noFatOrphansCheckbox;
private javax.swing.JCheckBox noProcessUnallocSpace;
private javax.swing.JLabel optionsLabel1;
private static javax.swing.JRadioButton rawSingle;
private javax.swing.JRadioButton rawSplit;

View File

@ -214,7 +214,6 @@ class AddImageWizardPanel1 implements WizardDescriptor.Panel<WizardDescriptor>,
settings.putProperty(AddImageAction.IMGPATHS_PROP, getComponent().getImagePaths());
settings.putProperty(AddImageAction.TIMEZONE_PROP, getComponent().getSelectedTimezone()); // store the timezone
settings.putProperty(AddImageAction.NOFATORPHANS_PROP, Boolean.valueOf(getComponent().getNoFatOrphans()));
settings.putProperty(AddImageAction.NOUNALLOC_PROP, Boolean.valueOf(getComponent().getNoUnallocSpaceProcess()));
//settings.putProperty(AddImageAction.LOOKUPFILES_PROP, getComponent().getLookupFilesCheckboxChecked());
//settings.putProperty(AddImageAction.SOLR_PROP, getComponent().getIndexImageCheckboxChecked());

View File

@ -55,8 +55,6 @@ class AddImageWizardPanel2 implements WizardDescriptor.Panel<WizardDescriptor> {
private String timeZone;
//whether to not process FAT filesystem orphans
private boolean noFatOrphans;
//whether to not process unalloc space
private boolean noUnallocSpace;
// task that will clean up the created database file if the wizard is cancelled before it finishes
private AddImageAction.CleanupTask cleanupImage; // initialized to null in readSettings()
// flag to control the availiablity of next action
@ -195,7 +193,6 @@ class AddImageWizardPanel2 implements WizardDescriptor.Panel<WizardDescriptor> {
imgPaths = (String[]) settings.getProperty(AddImageAction.IMGPATHS_PROP);
timeZone = settings.getProperty(AddImageAction.TIMEZONE_PROP).toString();
noFatOrphans = ((Boolean) settings.getProperty(AddImageAction.NOFATORPHANS_PROP)).booleanValue();
noUnallocSpace = ((Boolean) settings.getProperty(AddImageAction.NOUNALLOC_PROP)).booleanValue();
component.changeProgressBarTextAndColor("", 0, Color.black);
@ -278,7 +275,7 @@ class AddImageWizardPanel2 implements WizardDescriptor.Panel<WizardDescriptor> {
}
process = currentCase.makeAddImageProcess(timeZone, !noUnallocSpace, noFatOrphans);
process = currentCase.makeAddImageProcess(timeZone, true, noFatOrphans);
cancelledWhileRunning.enable();
try {
process.run(imgPaths);

View File

@ -126,5 +126,4 @@ NewCaseVisualPanel2.examinerTextField.text=
NewCaseVisualPanel2.optionalLabel.text=Optional: Set Case Number and Examiner
AddImageVisualPanel1.noFatOrphansCheckbox.toolTipText=
AddImageVisualPanel1.noFatOrphansCheckbox.text=Ignore orphan files in FAT file systems
AddImageVisualPanel1.noProcessUnallocSpace.text=Ignore unallocated space
AddImageVisualPanel1.optionsLabel1.text=Options to produce results faster (although some data will not be searched):

View File

@ -1,18 +1,17 @@
OpenIDE-Module-Name=HashDatabase
HashDatabaseManagementPanel.okayButton.text=Okay
HashDbPanel.fileSelectButton.text=Select...\n
HashDbSimplePanel.knownLabel.text=Known files database:
HashDbSimplePanel.notableLabel.text=Notable files database:
HashDbSimplePanel.knownLabel.text=NSRL Database:
HashDbSimplePanel.notableLabel.text=Known Bad Database(s):
HashDbSimplePanel.knownValLabel.text=-
HashDbSimplePanel.notableValLabel.text=-
HashDbMgmtPanel.addNotableButton.text=Add Notable Database
HashDbMgmtPanel.addNotableButton.text=Add Known Bad Database
HashDbMgmtPanel.removeNotableButton.text=Remove Selected
HashDbSimplePanel.jLabel1.text=Notable Hash Databases:
HashDbSimplePanel.jLabel2.text=NSRL Hash Database:
HashDbMgmtPanel.nsrlNameLabel.text=No NSRL Hashset
HashDbSimplePanel.jLabel1.text=Known Bad Database(s):
HashDbSimplePanel.jLabel2.text=NSRL Database:
HashDbMgmtPanel.nsrlNameLabel.text=Not Configured
HashDbMgmtPanel.setNSRLButton.text=Change
HashDbSimplePanel.nsrlNameLabel.text=No NSRL database set.
HashDbMgmtPanel.jLabel1.text=Notable Hash Databases:
HashDbMgmtPanel.jLabel1.text=Known Bad Database(s):
HashDbMgmtPanel.jLabel2.text=NSRL Database:
HashDbMgmtPanel.indexNSRLButton.text=Index
HashDbMgmtPanel.removeNSRLButton.text=Remove

View File

@ -19,7 +19,7 @@
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
<EmptySpace pref="257" max="32767" attributes="0"/>
<EmptySpace pref="405" max="32767" attributes="0"/>
</Group>
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
@ -27,7 +27,7 @@
<Group type="102" alignment="0" attributes="0">
<EmptySpace min="-2" pref="10" max="-2" attributes="0"/>
<Component id="nsrlNameLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace pref="63" max="32767" attributes="0"/>
<EmptySpace pref="218" max="32767" attributes="0"/>
<Component id="indexNSRLButton" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="setNSRLButton" min="-2" max="-2" attributes="0"/>
@ -38,17 +38,17 @@
</Group>
<EmptySpace max="-2" attributes="0"/>
</Group>
<Component id="jScrollPane1" alignment="0" pref="389" max="32767" attributes="1"/>
<Component id="jScrollPane1" alignment="0" pref="534" max="32767" attributes="1"/>
<Group type="102" alignment="1" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="addNotableButton" min="-2" max="-2" attributes="0"/>
<EmptySpace pref="113" max="32767" attributes="0"/>
<EmptySpace pref="242" max="32767" attributes="0"/>
<Component id="removeNotableButton" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
</Group>
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="ingestRunningLabel" pref="369" max="32767" attributes="0"/>
<Component id="ingestRunningLabel" pref="514" max="32767" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group>

View File

@ -28,9 +28,7 @@ import java.awt.Component;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.AbstractAction;
@ -95,9 +93,20 @@ public class HashDbMgmtPanel extends javax.swing.JPanel {
fc.setMultiSelectionEnabled(false);
TableColumn column1 = null;
final int width1 = jScrollPane1.getPreferredSize().width;
for (int i = 0; i < notableHashSetTable.getColumnCount(); i++) {
column1 = notableHashSetTable.getColumnModel().getColumn(i);
if (i == 0) {
column1.setPreferredWidth((int) (width1*.20));
}
if (i == 1) {
column1.setPreferredWidth((int) (width1*.57));
}
if (i == 2) {
column1.setPreferredWidth((int) (width1*.15));
}
if (i == 3) {
column1.setPreferredWidth((int) (width1*.07));
column1.setCellRenderer(new CheckBoxRenderer());
}
}
@ -223,14 +232,14 @@ public class HashDbMgmtPanel extends javax.swing.JPanel {
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addContainerGap(257, Short.MAX_VALUE))
.addContainerGap(405, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(10, 10, 10)
.addComponent(nsrlNameLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 63, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 218, Short.MAX_VALUE)
.addComponent(indexNSRLButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(setNSRLButton)
@ -238,16 +247,16 @@ public class HashDbMgmtPanel extends javax.swing.JPanel {
.addComponent(removeNSRLButton))
.addComponent(jLabel2))
.addContainerGap())
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 389, Short.MAX_VALUE)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 534, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(addNotableButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 113, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 242, Short.MAX_VALUE)
.addComponent(removeNotableButton)
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(ingestRunningLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 369, Short.MAX_VALUE)
.addComponent(ingestRunningLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 514, Short.MAX_VALUE)
.addContainerGap())
);
layout.setVerticalGroup(
@ -443,7 +452,7 @@ public class HashDbMgmtPanel extends javax.swing.JPanel {
case 2:
return "Status";
default:
return "Use For Ingest";
return "Ingest";
}
}
@ -559,7 +568,7 @@ public class HashDbMgmtPanel extends javax.swing.JPanel {
theButton.setEnabled(false);
break;
default:
theButton.setText("No DB");
theButton.setText("Index");
theButton.setEnabled(false);
}
if (ingestRunning) {

View File

@ -1,6 +1,6 @@
<?xml version="1.1" encoding="UTF-8" ?>
<Form version="1.4" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
<AuxValues>
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
@ -18,32 +18,28 @@
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
<EmptySpace pref="142" max="32767" attributes="0"/>
<Component id="jLabel2" min="-2" max="-2" attributes="0"/>
<EmptySpace pref="51" max="32767" attributes="0"/>
</Group>
<Component id="jScrollPane1" alignment="1" pref="274" max="32767" attributes="1"/>
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="jLabel2" min="-2" max="-2" attributes="0"/>
<EmptySpace pref="159" max="32767" attributes="0"/>
</Group>
<Group type="102" alignment="0" attributes="0">
<EmptySpace min="-2" pref="53" max="-2" attributes="0"/>
<Component id="nsrlNameLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace pref="110" max="32767" attributes="0"/>
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
</Group>
<Component id="jScrollPane1" alignment="1" pref="139" max="32767" attributes="1"/>
<Component id="jScrollPane2" alignment="0" pref="139" max="32767" attributes="0"/>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<Component id="jLabel2" min="-2" max="-2" attributes="0"/>
<EmptySpace min="-2" max="-2" attributes="0"/>
<Component id="nsrlNameLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="jScrollPane2" min="-2" pref="20" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="jScrollPane1" pref="106" max="32767" attributes="0"/>
<Component id="jScrollPane1" pref="98" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
@ -88,12 +84,30 @@
</Property>
</Properties>
</Component>
<Component class="javax.swing.JLabel" name="nsrlNameLabel">
<Container class="javax.swing.JScrollPane" name="jScrollPane2">
<Properties>
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/hashdatabase/Bundle.properties" key="HashDbSimplePanel.nsrlNameLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
<Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo">
<EmptyBorder/>
</Border>
</Property>
</Properties>
</Component>
<AuxValues>
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
</AuxValues>
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
<SubComponents>
<Component class="javax.swing.JTable" name="jTable1">
<Properties>
<Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
<Color blue="f0" green="f0" red="f0" type="rgb"/>
</Property>
<Property name="showHorizontalLines" type="boolean" value="false"/>
<Property name="showVerticalLines" type="boolean" value="false"/>
</Properties>
</Component>
</SubComponents>
</Container>
</SubComponents>
</Form>

View File

@ -24,8 +24,6 @@
*/
package org.sleuthkit.autopsy.hashdatabase;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.table.AbstractTableModel;
@ -39,12 +37,14 @@ public class HashDbSimplePanel extends javax.swing.JPanel {
private static final Logger logger = Logger.getLogger(HashDbSimplePanel.class.getName());
private HashTableModel knownBadTableModel;
private NSRLTableModel nsrlTableModel;
private HashDb nsrl;
private static boolean ingestRunning = false;
/** Creates new form HashDbSimplePanel */
public HashDbSimplePanel() {
knownBadTableModel = new HashTableModel();
nsrlTableModel = new NSRLTableModel();
initComponents();
customizeComponents();
}
@ -55,18 +55,26 @@ public class HashDbSimplePanel extends javax.swing.JPanel {
private void customizeComponents() {
notableHashTable.setModel(knownBadTableModel);
jTable1.setModel(nsrlTableModel);
notableHashTable.setTableHeader(null);
jTable1.setTableHeader(null);
notableHashTable.setRowSelectionAllowed(false);
jTable1.setRowSelectionAllowed(false);
//customize column witdhs
final int width1 = jScrollPane1.getPreferredSize().width;
final int width2 = jScrollPane2.getPreferredSize().width;
TableColumn column1 = null;
TableColumn column2 = null;
for (int i = 0; i < notableHashTable.getColumnCount(); i++) {
column1 = notableHashTable.getColumnModel().getColumn(i);
column2 = jTable1.getColumnModel().getColumn(i);
if (i == 0) {
column1.setPreferredWidth(((int) (width1 * 0.15)));
column2.setPreferredWidth(((int) (width2 * 0.15)));
} else {
column1.setPreferredWidth(((int) (width1 * 0.84)));
column2.setPreferredWidth(((int) (width2 * 0.84)));
}
}
@ -86,7 +94,8 @@ public class HashDbSimplePanel extends javax.swing.JPanel {
notableHashTable = new javax.swing.JTable();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
nsrlNameLabel = new javax.swing.JLabel();
jScrollPane2 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jScrollPane1.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
@ -99,7 +108,12 @@ public class HashDbSimplePanel extends javax.swing.JPanel {
jLabel2.setText(org.openide.util.NbBundle.getMessage(HashDbSimplePanel.class, "HashDbSimplePanel.jLabel2.text")); // NOI18N
nsrlNameLabel.setText(org.openide.util.NbBundle.getMessage(HashDbSimplePanel.class, "HashDbSimplePanel.nsrlNameLabel.text")); // NOI18N
jScrollPane2.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
jTable1.setBackground(new java.awt.Color(240, 240, 240));
jTable1.setShowHorizontalLines(false);
jTable1.setShowVerticalLines(false);
jScrollPane2.setViewportView(jTable1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
@ -107,28 +121,25 @@ public class HashDbSimplePanel extends javax.swing.JPanel {
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addContainerGap(142, Short.MAX_VALUE))
.addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 274, Short.MAX_VALUE)
.addComponent(jLabel2)
.addContainerGap(51, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel2)
.addContainerGap(159, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGap(53, 53, 53)
.addComponent(nsrlNameLabel)
.addContainerGap(110, Short.MAX_VALUE))
.addComponent(jLabel1)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 139, Short.MAX_VALUE)
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 139, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(nsrlNameLabel)
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 106, Short.MAX_VALUE))
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 98, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
@ -136,19 +147,46 @@ public class HashDbSimplePanel extends javax.swing.JPanel {
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTable jTable1;
private javax.swing.JTable notableHashTable;
private javax.swing.JLabel nsrlNameLabel;
// End of variables declaration//GEN-END:variables
private void reloadSets() {
nsrl = HashDbXML.getCurrent().getNSRLSet();
if(nsrl == null) {
nsrlNameLabel.setText("No NSRL database set.");
} else {
nsrlNameLabel.setText(nsrl.getName());
}
nsrlTableModel.resync();
knownBadTableModel.resync();
}
private class NSRLTableModel extends AbstractTableModel {
private void resync() {
fireTableDataChanged();
}
@Override
public int getRowCount() {
return 1;
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if (columnIndex == 0) {
return "";
} else {
if(nsrl == null) {
return "Not Configured";
} else {
return nsrl.getName();
}
}
}
}
private class HashTableModel extends AbstractTableModel {
@ -175,7 +213,7 @@ public class HashDbSimplePanel extends javax.swing.JPanel {
if (columnIndex == 0) {
return "";
} else {
return "No notable databases set.";
return "Not Configured";
}
} else {
HashDb db = xmlHandle.getKnownBadSets().get(rowIndex);

View File

@ -28,7 +28,7 @@
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="servicesScrollPane" pref="173" max="32767" attributes="1"/>
<Component id="servicesScrollPane" pref="169" max="32767" attributes="1"/>
<Component id="timePanel" alignment="0" max="32767" attributes="1"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
@ -44,7 +44,7 @@
<Group type="103" groupAlignment="0" attributes="0">
<Component id="jPanel1" alignment="0" pref="235" max="32767" attributes="0"/>
<Group type="102" alignment="0" attributes="0">
<Component id="servicesScrollPane" pref="90" max="32767" attributes="0"/>
<Component id="servicesScrollPane" pref="82" max="32767" attributes="0"/>
<EmptySpace max="32767" attributes="0"/>
<Component id="timePanel" min="-2" max="-2" attributes="0"/>
</Group>
@ -175,34 +175,30 @@
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="timeLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace pref="68" max="32767" attributes="0"/>
</Group>
<Group type="102" alignment="1" attributes="0">
<EmptySpace max="32767" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="timeRadioButton2" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="timeRadioButton3" alignment="0" min="-2" max="-2" attributes="0"/>
</Group>
</Group>
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="timeLabel" min="-2" max="-2" attributes="0"/>
</Group>
<Component id="processUnallocCheckbox" alignment="0" min="-2" max="-2" attributes="0"/>
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="timeRadioButton1" min="-2" max="-2" attributes="0"/>
</Group>
<Component id="timeRadioButton3" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="timeRadioButton2" alignment="0" min="-2" max="-2" attributes="0"/>
<Component id="timeRadioButton1" alignment="0" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
</Group>
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="processUnallocCheckbox" min="-2" max="-2" attributes="0"/>
<EmptySpace pref="10" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="1" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="processUnallocCheckbox" min="-2" max="-2" attributes="0"/>
<EmptySpace pref="15" max="32767" attributes="0"/>
<Component id="timeLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="timeRadioButton1" min="-2" max="-2" attributes="0"/>
@ -210,7 +206,9 @@
<Component id="timeRadioButton2" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="timeRadioButton3" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<EmptySpace type="separate" max="-2" attributes="0"/>
<Component id="processUnallocCheckbox" min="-2" max="-2" attributes="0"/>
<EmptySpace pref="8" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>

View File

@ -289,27 +289,25 @@ public class IngestDialogPanel extends javax.swing.JPanel implements IngestConfi
timePanelLayout.setHorizontalGroup(
timePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(timePanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(timeLabel)
.addContainerGap(68, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, timePanelLayout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(timePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(timePanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(timePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(timeRadioButton2)
.addComponent(timeRadioButton3)))
.addGroup(timePanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(timeLabel))
.addComponent(processUnallocCheckbox)
.addGroup(timePanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(timeRadioButton1)))
.addComponent(timeRadioButton3)
.addComponent(timeRadioButton2)
.addComponent(timeRadioButton1))
.addContainerGap())
.addGroup(timePanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(processUnallocCheckbox)
.addContainerGap(10, Short.MAX_VALUE))
);
timePanelLayout.setVerticalGroup(
timePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, timePanelLayout.createSequentialGroup()
.addGroup(timePanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(processUnallocCheckbox)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 15, Short.MAX_VALUE)
.addComponent(timeLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(timeRadioButton1)
@ -317,7 +315,9 @@ public class IngestDialogPanel extends javax.swing.JPanel implements IngestConfi
.addComponent(timeRadioButton2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(timeRadioButton3)
.addContainerGap())
.addGap(18, 18, 18)
.addComponent(processUnallocCheckbox)
.addContainerGap(8, Short.MAX_VALUE))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
@ -327,7 +327,7 @@ public class IngestDialogPanel extends javax.swing.JPanel implements IngestConfi
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(servicesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 173, Short.MAX_VALUE)
.addComponent(servicesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 169, Short.MAX_VALUE)
.addComponent(timePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
@ -340,7 +340,7 @@ public class IngestDialogPanel extends javax.swing.JPanel implements IngestConfi
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 235, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addComponent(servicesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 90, Short.MAX_VALUE)
.addComponent(servicesScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 82, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(timePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap())

View File

@ -314,6 +314,14 @@ public class IngestManager {
for (IngestImageThread imageWorker : toStop) {
IngestServiceImage s = imageWorker.getService();
//stop the worker thread if thread is running
boolean cancelled = imageWorker.cancel(true);
if (!cancelled) {
logger.log(Level.INFO, "Unable to cancel image ingest worker for service: " + imageWorker.getService().getName() + " img: " + imageWorker.getImage().getName());
}
//stop notification to service to cleanup resources
if (isServiceRunning(s)) {
try {
imageWorker.getService().stop();
@ -321,10 +329,7 @@ public class IngestManager {
logger.log(Level.WARNING, "Exception while stopping service: " + s.getName(), e);
}
}
boolean cancelled = imageWorker.cancel(true);
if (!cancelled) {
logger.log(Level.WARNING, "Unable to cancel image ingest worker for service: " + imageWorker.getService().getName() + " img: " + imageWorker.getImage().getName());
}
}
logger.log(Level.INFO, "stopped all");

View File

@ -5,7 +5,9 @@
<Property name="displayName" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<ResourceString bundle="org/sleuthkit/autopsy/ingest/Bundle.properties" key="IngestMessageTopComponent.displayName" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
</Property>
<Property name="name" type="java.lang.String" value="Ingest Inbox" noResource="true"/>
<Property name="name" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
<PlainString value="Ingest Inbox"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>

View File

@ -145,6 +145,7 @@ public final class IngestMessageTopComponent extends TopComponent implements Ing
for (int i = 0; i < tcs.length; ++i) {
if (tcs[i] == this) //already floating
{
this.open();
return;
}
}

View File

@ -1,17 +1,18 @@
Known issues and limitations
Known Issues
We plan to address the following issues in future releases.
Last Reviewed: June 12, 2012
General:
- Only a single instance of the application can be started at once.
There is no check if another instance is already running. Running a second instance will cause issues.
- Only a single case can be opened at a time.
Keyword search module:
- Keyword search maximum size of files of known types to be indexed and searched is 100MB.
There is no limit on size of unknown file types indexed using string extraction.
- Currently we extract only English strings from files of unknown types.
This lists the bugs and issues thare are known and could effect
investigation results. There are other minor interface bugs that
are not listed here.
Installation:
- Installer version currently supports only Windows OS (XP or newer),
- Currently only 32 bit version of Autopsy is provided with the installer (works on 64 bit Windows OS)
Keyword Search module:
- Slack space of files is not added to the index and therefore will
not be searched.
- Files larger than 100MB AND that are file types that are supported
by Tika (word docs, PDF, HTML, JPEG, etc.) are not being added to
the index.
- For unknown file types, we extract UTF-8 (Ascii) and UTF-16 English
strings. No non-English strings are extracted.
- Comments and java script in HTML files are not being added to index.

View File

@ -693,7 +693,7 @@ private void useForIngestCheckboxActionPerformed(java.awt.event.ActionEvent evt)
listSelectionModel.setSelectionInterval(index, index);
KeywordSearchListsXML loader = KeywordSearchListsXML.getCurrent();
currentKeywordList = loader.getListsL().get(index);
currentKeywordList = loader.getListsL(false).get(index);
tableModel.resync();
initButtons();
} else {

View File

@ -127,14 +127,40 @@ public abstract class KeywordSearchListsAbstract {
}
return ret;
}
List<KeywordSearchList> getListsL(boolean locked) {
List<KeywordSearchList> ret = new ArrayList<KeywordSearchList>();
for (KeywordSearchList list : theLists.values()) {
if(list.isLocked().equals(locked)) {
ret.add(list);
}
}
return ret;
}
/**
* get list of all loaded keyword list names
* Get list names of all loaded keyword list names
* @return List of keyword list names
*/
List<String> getListNames() {
return new ArrayList<String>(theLists.keySet());
}
/**
* Get list names of all locked or unlocked loaded keyword list names
* @param locked true if look for locked lists, false otherwise
* @return List of keyword list names
*/
List<String> getListNames(boolean locked) {
ArrayList<String> lists = new ArrayList<String>();
for (String listName : theLists.keySet()) {
KeywordSearchList list = theLists.get(listName);
if (locked == list.isLocked())
lists.add(listName);
}
return lists;
}
/**
* return first list that contains the keyword
@ -175,6 +201,21 @@ public abstract class KeywordSearchListsAbstract {
int getNumberLists() {
return theLists.size();
}
/**
* get number of unlocked or locked lists currently stored
* @param locked true if look for locked lists, false otherwise
* @return number of unlocked lists currently stored
*/
int getNumberLists(boolean locked) {
int numLists = 0;
for (String listName : theLists.keySet()) {
KeywordSearchList list = theLists.get(listName);
if (locked == list.isLocked())
++ numLists;
}
return numLists;
}
/**
* get list by name or null

View File

@ -192,9 +192,18 @@ class KeywordSearchListsManagementPanel extends javax.swing.JPanel {
}
boolean shouldAdd = false;
if (writer.listExists(listName)) {
boolean replace = KeywordSearchUtil.displayConfirmDialog("New Keyword List", "Keyword List <" + listName + "> already exists, do you want to replace it?", KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN);
if (replace) {
shouldAdd = true;
if (writer.getList(listName).isLocked() ) {
boolean replace = KeywordSearchUtil.displayConfirmDialog("New Keyword List", "Keyword List <" + listName
+ "> already exists as a read-only list. Do you want to replace it for the duration of the program (the change will not be persistent).", KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN);
if (replace) {
shouldAdd = true;
}
}
else {
boolean replace = KeywordSearchUtil.displayConfirmDialog("New Keyword List", "Keyword List <" + listName + "> already exists, do you want to replace it?", KeywordSearchUtil.DIALOG_MESSAGE_TYPE.WARN);
if (replace) {
shouldAdd = true;
}
}
} else {
shouldAdd = true;
@ -323,7 +332,7 @@ class KeywordSearchListsManagementPanel extends javax.swing.JPanel {
@Override
public int getRowCount() {
return listsHandle.getNumberLists();
return listsHandle.getNumberLists(false);
}
@Override
@ -333,7 +342,7 @@ class KeywordSearchListsManagementPanel extends javax.swing.JPanel {
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return listsHandle.getListNames().get(rowIndex);
return listsHandle.getListNames(false).get(rowIndex);
}
@Override

View File

@ -1,7 +1,7 @@
3.0.0b3 (June X, 2012)
New Features:
3.0.0b3 (June 12, 2012)
New Features (Funded by US Army Intelligence Center of Excellence (USAICoE)):
- Ingest manager runs triage/ingest task after disk is added.
- Keyword search (indexed via SOLR)
- Basic keyword search (indexed via SOLR)
- Recent activity extract (web artifacts, recent documents, devices, etc.)
- Improved UI

View File

@ -21,61 +21,71 @@ There is no need for manual installation of additional dependencies if the insta
Refer to the next section for additional info on third-party software requirements to run Autopsy without installer.
Refer to the KNOWN_ISSUES.txt file for known bugs that could cause investigation problems.
SUPPORT
There is a built-in help system in Autopsy once you get it started. There is also a QuickStart Guide that came
with the installer.
Send any bug reports or feature requests to the sleuthkit-users e-mail list.
http://www.sleuthkit.org/support.php
LICENSE
The Autopsy code is released under the Apache License, Version 2. See LICENSE-2.0.txt for details.
EMBEDDED SOFTWARE
Autopsy (core) utilizes the following third-party software tools.
The tools are bundled with the installer, unless specified otherwise.
This section lists the software components and libraries that are used inside of
Autopsy. These tools are bundled with the installer, unless specified otherwise.
* JRE (Java Runtime Environment) 1.6, 32 bit
JRE (Java Runtime Environment) 1.6, 32 bit
- Web page: http://www.oracle.com/technetwork/java/index.html
- License: http://www.oracle.com/technetwork/java/javase/terms/license/index.html
Web page: http://www.oracle.com/technetwork/java/index.html
Oracle license: http://www.oracle.com/technetwork/java/javase/terms/license/index.html
JRE needs to be manually installed on the system if Autopsy installer is not used.
* Netbeans 7.0.1 RCP platform and .jar files bundled with the platform
Web page: http://netbeans.org/features/platform/
License:
Netbeans 7.0.1 RCP platform and .jar files bundled with the platform
- Web page: http://netbeans.org/features/platform/
- License:
http://services.netbeans.org/downloads/licence/nb-7.0-final-2011-04-20-license.txt
* Solr (including Lucene and TIKA)
Web page: http://projects.apache.org/projects/solr.html
Apache license: http://www.apache.org/licenses/LICENSE-2.0
Sleuth Kit for analyzing disk images.
- Web page: http://www.sleuthkit.org/sleuthkit/
- License: http://sleuthkit.org/sleuthkit/licenses.php
* GStreamer
Web page: http://gstreamer.freedesktop.org/
License: http://www.gnu.org/licenses/lgpl.html
Libewf for opening E01 files
- Web page: http://sourceforge.net/projects/libewf/
- License: http://www.gnu.org/licenses/lgpl.html
If Autopsy installer is not used, add the following entries to Windows PATH environment variable
(replace GSTREAMER_INSTALL_DIR with the location of gstreamer install root directory):
zlib for opening E01 files
- Web page: http://zlib.net/
- License: http://zlib.net/zlib_license.html
GSTREAMER_INSTALL_DIR\bin\;
GSTREAMER_INSTALL_DIR\lib\gstreamer-0.10\;
Solr (including Lucene and TIKA) for keyword search
- Web page: http://projects.apache.org/projects/solr.html
- License: http://www.apache.org/licenses/LICENSE-2.0
GStreamer for viewing video files
- Web page: http://gstreamer.freedesktop.org/
- License: http://www.gnu.org/licenses/lgpl.html
* GStreamer-java
Web page: http://code.google.com/p/gstreamer-java/
License: http://www.gnu.org/licenses/lgpl.html
GStreamer-java for viewing video files
- Web page: http://code.google.com/p/gstreamer-java/
- License: http://www.gnu.org/licenses/lgpl.html
Regripper for pulling recently activity
(Including custom plugins)
- Web page: http://regripper.wordpress.com/
- License: http://www.gnu.org/licenses/gpl.html
* Regripper
(regripper and custom plugins found in autopsy/thirdparty)
Web page: http://regripper.wordpress.com/
License: http://www.gnu.org/licenses/gpl.html
Pasco2 for pulling Internet Explorer activity
- Web page: http://sourceforge.net/projects/pasco2/
- License: http://www.gnu.org/licenses/gpl.html
* Pasco
Web page: http://sourceforge.net/projects/odessa/files/Pasco/
* Advanced installer 9.0 (Freeware)
Advanced installer 9.0 (Freeware)
(not embedded in Autopsy, but used to generate Autopsy installer.)
If you want to generate Autopsy installer, you will need to install the freeware version of Advanced Installer software)
- Web page: http://www.advancedinstaller.com/
Web page: http://www.advancedinstaller.com/
FEEDBACK
Send any bug reports or feature requests to the sleuthkit-users e-mail list.
http://www.sleuthkit.org/support.php

View File

@ -690,7 +690,7 @@ INPUT_ENCODING = UTF-8
# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
# *.f90 *.f *.for *.vhd *.vhdl
FILE_PATTERNS = *.java
FILE_PATTERNS = *.java *.dox
# The RECURSIVE tag can be used to turn specify whether or not subdirectories
# should be searched for input files as well. Possible values are YES and NO.
@ -1561,7 +1561,8 @@ SKIP_FUNCTION_MACROS = YES
# NOT include the path). If a tag file is not located in the directory in which
# doxygen is run, you must also specify the path to the tagfile here.
TAGFILES = qtools_docs/qtools.tag=../../qtools_docs/html
#TAGFILES = $(TSK_HOME)/tskjni_doxygen.tag=http://www.sleuthkit.org/sleuthkit/docs/jni-docs
# Adding that in, gives lots of errors and the class list goes away....
# When a file name is specified after GENERATE_TAGFILE, doxygen will create
# a tag file that is based on the input files it reads.

File diff suppressed because one or more lines are too long