mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-15 09:17:42 +00:00
Merge pull request #3523 from dgrove727/3575_PhotoRecCorruptedFilesSetting
3575 photo rec corrupted files setting
This commit is contained in:
commit
e93c5310ce
@ -17,3 +17,5 @@ PhotoRecIngestModule.cancelledByUser=PhotoRec cancelled by user.
|
|||||||
PhotoRecIngestModule.error.exitValue=PhotoRec carver returned error exit value \= {0} when scanning {1}
|
PhotoRecIngestModule.error.exitValue=PhotoRec carver returned error exit value \= {0} when scanning {1}
|
||||||
PhotoRecIngestModule.error.msg=Error processing {0} with PhotoRec carver.
|
PhotoRecIngestModule.error.msg=Error processing {0} with PhotoRec carver.
|
||||||
PhotoRecIngestModule.complete.numberOfErrors=Number of Errors while Carving\:
|
PhotoRecIngestModule.complete.numberOfErrors=Number of Errors while Carving\:
|
||||||
|
PhotoRecCarverIngestJobSettingsPanel.detectionSettingsLabel.text=PhotoRec Settings
|
||||||
|
PhotoRecCarverIngestJobSettingsPanel.keepCorruptedFilesCheckbox.text=Keep corrupted files
|
||||||
|
@ -78,6 +78,8 @@ import org.sleuthkit.datamodel.TskData;
|
|||||||
})
|
})
|
||||||
final class PhotoRecCarverFileIngestModule implements FileIngestModule {
|
final class PhotoRecCarverFileIngestModule implements FileIngestModule {
|
||||||
|
|
||||||
|
static final boolean DEFAULT_CONFIG_KEEP_CORRUPTED_FILES = false;
|
||||||
|
|
||||||
private static final String PHOTOREC_DIRECTORY = "photorec_exec"; //NON-NLS
|
private static final String PHOTOREC_DIRECTORY = "photorec_exec"; //NON-NLS
|
||||||
private static final String PHOTOREC_EXECUTABLE = "photorec_win.exe"; //NON-NLS
|
private static final String PHOTOREC_EXECUTABLE = "photorec_win.exe"; //NON-NLS
|
||||||
private static final String PHOTOREC_LINUX_EXECUTABLE = "photorec";
|
private static final String PHOTOREC_LINUX_EXECUTABLE = "photorec";
|
||||||
@ -95,15 +97,24 @@ final class PhotoRecCarverFileIngestModule implements FileIngestModule {
|
|||||||
private Path rootOutputDirPath;
|
private Path rootOutputDirPath;
|
||||||
private File executableFile;
|
private File executableFile;
|
||||||
private IngestServices services;
|
private IngestServices services;
|
||||||
private UNCPathUtilities uncPathUtilities = new UNCPathUtilities();
|
private final UNCPathUtilities uncPathUtilities = new UNCPathUtilities();
|
||||||
private long jobId;
|
private long jobId;
|
||||||
|
|
||||||
|
private final boolean keepCorruptedFiles;
|
||||||
|
|
||||||
private static class IngestJobTotals {
|
private static class IngestJobTotals {
|
||||||
|
private final AtomicLong totalItemsRecovered = new AtomicLong(0);
|
||||||
private AtomicLong totalItemsRecovered = new AtomicLong(0);
|
private final AtomicLong totalItemsWithErrors = new AtomicLong(0);
|
||||||
private AtomicLong totalItemsWithErrors = new AtomicLong(0);
|
private final AtomicLong totalWritetime = new AtomicLong(0);
|
||||||
private AtomicLong totalWritetime = new AtomicLong(0);
|
private final AtomicLong totalParsetime = new AtomicLong(0);
|
||||||
private AtomicLong totalParsetime = new AtomicLong(0);
|
}
|
||||||
|
/**
|
||||||
|
* Create a PhotoRec Carver ingest module instance.
|
||||||
|
*
|
||||||
|
* @param settings Ingest job settings used to configure the module.
|
||||||
|
*/
|
||||||
|
PhotoRecCarverFileIngestModule(PhotoRecCarverIngestJobSettings settings) {
|
||||||
|
keepCorruptedFiles = settings.isKeepCorruptedFiles();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static synchronized IngestJobTotals getTotalsForIngestJobs(long ingestJobId) {
|
private static synchronized IngestJobTotals getTotalsForIngestJobs(long ingestJobId) {
|
||||||
@ -229,8 +240,12 @@ final class PhotoRecCarverFileIngestModule implements FileIngestModule {
|
|||||||
"/d", // NON-NLS
|
"/d", // NON-NLS
|
||||||
outputDirPath.toAbsolutePath().toString() + File.separator + PHOTOREC_RESULTS_BASE,
|
outputDirPath.toAbsolutePath().toString() + File.separator + PHOTOREC_RESULTS_BASE,
|
||||||
"/cmd", // NON-NLS
|
"/cmd", // NON-NLS
|
||||||
tempFilePath.toFile().toString(),
|
tempFilePath.toFile().toString());
|
||||||
"search"); // NON-NLS
|
if (keepCorruptedFiles) {
|
||||||
|
processAndSettings.command().add("options,keep_corrupted_file,search"); // NON-NLS
|
||||||
|
} else {
|
||||||
|
processAndSettings.command().add("search"); // NON-NLS
|
||||||
|
}
|
||||||
|
|
||||||
// Add environment variable to force PhotoRec to run with the same permissions Autopsy uses
|
// Add environment variable to force PhotoRec to run with the same permissions Autopsy uses
|
||||||
processAndSettings.environment().put("__COMPAT_LAYER", "RunAsInvoker"); //NON-NLS
|
processAndSettings.environment().put("__COMPAT_LAYER", "RunAsInvoker"); //NON-NLS
|
||||||
|
@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
* Autopsy Forensic Browser
|
||||||
|
*
|
||||||
|
* Copyright 2018 Basis Technology Corp.
|
||||||
|
* Contact: carrier <at> sleuthkit <dot> org
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.sleuthkit.autopsy.modules.photoreccarver;
|
||||||
|
|
||||||
|
import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettings;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ingest job settings for the PhotoRec Carver module.
|
||||||
|
*/
|
||||||
|
final class PhotoRecCarverIngestJobSettings implements IngestModuleIngestJobSettings {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private boolean keepCorruptedFiles;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiate the ingest job settings with default values.
|
||||||
|
*/
|
||||||
|
PhotoRecCarverIngestJobSettings() {
|
||||||
|
this.keepCorruptedFiles = PhotoRecCarverFileIngestModule.DEFAULT_CONFIG_KEEP_CORRUPTED_FILES;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiate the ingest job settings.
|
||||||
|
*
|
||||||
|
* @param keepCorruptedFiles Keep corrupted files.
|
||||||
|
*/
|
||||||
|
PhotoRecCarverIngestJobSettings(boolean keepCorruptedFiles) {
|
||||||
|
this.keepCorruptedFiles = keepCorruptedFiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getVersionNumber() {
|
||||||
|
return serialVersionUID;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Are corrupted files being kept?
|
||||||
|
*
|
||||||
|
* @return True if keeping corrupted files; otherwise false.
|
||||||
|
*/
|
||||||
|
boolean isKeepCorruptedFiles() {
|
||||||
|
return keepCorruptedFiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Keep or disgard corrupted files.
|
||||||
|
*
|
||||||
|
* @param keepCorruptedFiles Are corrupted files being kept?
|
||||||
|
*/
|
||||||
|
void setKeepCorruptedFiles(boolean keepCorruptedFiles) {
|
||||||
|
this.keepCorruptedFiles = keepCorruptedFiles;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,63 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
|
||||||
|
<Form version="1.5" maxVersion="1.9" 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"/>
|
||||||
|
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||||
|
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
|
||||||
|
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
|
||||||
|
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||||
|
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||||
|
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||||
|
</AuxValues>
|
||||||
|
|
||||||
|
<Layout>
|
||||||
|
<DimensionLayout dim="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<EmptySpace min="10" pref="10" max="-2" attributes="0"/>
|
||||||
|
<Component id="keepCorruptedFilesCheckbox" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Component id="detectionSettingsLabel" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace pref="159" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
<DimensionLayout dim="1">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="detectionSettingsLabel" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
|
<Component id="keepCorruptedFilesCheckbox" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace pref="145" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JCheckBox" name="keepCorruptedFilesCheckbox">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/modules/photoreccarver/Bundle.properties" key="PhotoRecCarverIngestJobSettingsPanel.keepCorruptedFilesCheckbox.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="detectionSettingsLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
||||||
|
<Font name="Tahoma" size="11" style="1"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/modules/photoreccarver/Bundle.properties" key="PhotoRecCarverIngestJobSettingsPanel.detectionSettingsLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Form>
|
@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
* Autopsy Forensic Browser
|
||||||
|
*
|
||||||
|
* Copyright 2018 Basis Technology Corp.
|
||||||
|
* Contact: carrier <at> sleuthkit <dot> org
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.sleuthkit.autopsy.modules.photoreccarver;
|
||||||
|
|
||||||
|
import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettings;
|
||||||
|
import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettingsPanel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ingest job settings panel for the Encryption Detection module.
|
||||||
|
*/
|
||||||
|
final class PhotoRecCarverIngestJobSettingsPanel extends IngestModuleIngestJobSettingsPanel {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instantiate the ingest job settings panel.
|
||||||
|
*
|
||||||
|
* @param settings The ingest job settings.
|
||||||
|
*/
|
||||||
|
public PhotoRecCarverIngestJobSettingsPanel(PhotoRecCarverIngestJobSettings settings) {
|
||||||
|
initComponents();
|
||||||
|
customizeComponents(settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update components with values from the ingest job settings.
|
||||||
|
*
|
||||||
|
* @param settings The ingest job settings.
|
||||||
|
*/
|
||||||
|
private void customizeComponents(PhotoRecCarverIngestJobSettings settings) {
|
||||||
|
keepCorruptedFilesCheckbox.setSelected(settings.isKeepCorruptedFiles());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IngestModuleIngestJobSettings getSettings() {
|
||||||
|
return new PhotoRecCarverIngestJobSettings(
|
||||||
|
keepCorruptedFilesCheckbox.isSelected());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is called from within the constructor to initialize the form.
|
||||||
|
* WARNING: Do NOT modify this code. The content of this method is always
|
||||||
|
* regenerated by the Form Editor.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||||
|
private void initComponents() {
|
||||||
|
|
||||||
|
keepCorruptedFilesCheckbox = new javax.swing.JCheckBox();
|
||||||
|
detectionSettingsLabel = new javax.swing.JLabel();
|
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(keepCorruptedFilesCheckbox, org.openide.util.NbBundle.getMessage(PhotoRecCarverIngestJobSettingsPanel.class, "PhotoRecCarverIngestJobSettingsPanel.keepCorruptedFilesCheckbox.text")); // NOI18N
|
||||||
|
|
||||||
|
detectionSettingsLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(detectionSettingsLabel, org.openide.util.NbBundle.getMessage(PhotoRecCarverIngestJobSettingsPanel.class, "PhotoRecCarverIngestJobSettingsPanel.detectionSettingsLabel.text")); // NOI18N
|
||||||
|
|
||||||
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||||
|
this.setLayout(layout);
|
||||||
|
layout.setHorizontalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addContainerGap()
|
||||||
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addGap(10, 10, 10)
|
||||||
|
.addComponent(keepCorruptedFilesCheckbox))
|
||||||
|
.addComponent(detectionSettingsLabel))
|
||||||
|
.addContainerGap(159, Short.MAX_VALUE))
|
||||||
|
);
|
||||||
|
layout.setVerticalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addContainerGap()
|
||||||
|
.addComponent(detectionSettingsLabel)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
|
.addComponent(keepCorruptedFilesCheckbox)
|
||||||
|
.addContainerGap(145, Short.MAX_VALUE))
|
||||||
|
);
|
||||||
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
|
private javax.swing.JLabel detectionSettingsLabel;
|
||||||
|
private javax.swing.JCheckBox keepCorruptedFilesCheckbox;
|
||||||
|
// End of variables declaration//GEN-END:variables
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Autopsy Forensic Browser
|
* Autopsy Forensic Browser
|
||||||
*
|
*
|
||||||
* Copyright 2011-2016 Basis Technology Corp.
|
* Copyright 2011-2018 Basis Technology Corp.
|
||||||
* Contact: carrier <at> sleuthkit <dot> org
|
* Contact: carrier <at> sleuthkit <dot> org
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
@ -24,6 +24,7 @@ import org.sleuthkit.autopsy.ingest.FileIngestModule;
|
|||||||
import org.sleuthkit.autopsy.ingest.IngestModuleFactory;
|
import org.sleuthkit.autopsy.ingest.IngestModuleFactory;
|
||||||
import org.sleuthkit.autopsy.ingest.IngestModuleFactoryAdapter;
|
import org.sleuthkit.autopsy.ingest.IngestModuleFactoryAdapter;
|
||||||
import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettings;
|
import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettings;
|
||||||
|
import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettingsPanel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A factory for creating instances of file ingest modules that carve
|
* A factory for creating instances of file ingest modules that carve
|
||||||
@ -32,7 +33,7 @@ import org.sleuthkit.autopsy.ingest.IngestModuleIngestJobSettings;
|
|||||||
@ServiceProvider(service = IngestModuleFactory.class)
|
@ServiceProvider(service = IngestModuleFactory.class)
|
||||||
public class PhotoRecCarverIngestModuleFactory extends IngestModuleFactoryAdapter {
|
public class PhotoRecCarverIngestModuleFactory extends IngestModuleFactoryAdapter {
|
||||||
|
|
||||||
private static final String VERSION = "7.0";
|
private static final String VERSION = "7.0"; // Version should match the PhotoRec tool version.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the ingest module name for use within this package.
|
* Gets the ingest module name for use within this package.
|
||||||
@ -65,7 +66,22 @@ public class PhotoRecCarverIngestModuleFactory extends IngestModuleFactoryAdapte
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public FileIngestModule createFileIngestModule(IngestModuleIngestJobSettings settings) {
|
public FileIngestModule createFileIngestModule(IngestModuleIngestJobSettings settings) {
|
||||||
return new PhotoRecCarverFileIngestModule();
|
return new PhotoRecCarverFileIngestModule((PhotoRecCarverIngestJobSettings) settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IngestModuleIngestJobSettings getDefaultIngestJobSettings() {
|
||||||
|
return new PhotoRecCarverIngestJobSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasIngestJobSettingsPanel() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IngestModuleIngestJobSettingsPanel getIngestJobSettingsPanel(IngestModuleIngestJobSettings settings) {
|
||||||
|
return new PhotoRecCarverIngestJobSettingsPanel((PhotoRecCarverIngestJobSettings) settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user