4961 add custom/windows-nt-registry MIME type and use it instead

This commit is contained in:
William Schaefer 2019-05-09 18:23:04 -04:00
parent 3e53741237
commit cc92182522
8 changed files with 81 additions and 85 deletions

View File

@ -52,6 +52,4 @@ interface FileTypeViewer {
* fine. Otherwise, it is ambiguous. * fine. Otherwise, it is ambiguous.
*/ */
void resetComponent(); void resetComponent();
boolean isSupported(AbstractFile file);
} }

View File

@ -18,6 +18,7 @@
*/ */
package org.sleuthkit.autopsy.contentviewers; package org.sleuthkit.autopsy.contentviewers;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import java.awt.Component; import java.awt.Component;
import java.util.HashMap; import java.util.HashMap;
@ -81,15 +82,11 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer
* *
* @param mimeType * @param mimeType
* *
* @return FileTypeViewer, null if no known content viewer supports the * @return FileTypeViewer, null if no known content viewer supports the mimetype
* mimetype
*/ */
private FileTypeViewer getSupportingViewer(AbstractFile file) { private FileTypeViewer getSupportingViewer(String mimeType) {
FileTypeViewer viewer = mimeTypeToViewerMap.get(file.getMIMEType());
if (viewer == null || viewer.isSupported(file)) { return mimeTypeToViewerMap.get(mimeType);
return viewer;
}
return null;
} }
/** /**
@ -107,6 +104,7 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer
// Variables declaration - do not modify//GEN-BEGIN:variables // Variables declaration - do not modify//GEN-BEGIN:variables
// End of variables declaration//GEN-END:variables // End of variables declaration//GEN-END:variables
@Override @Override
public void setNode(Node selectedNode) { public void setNode(Node selectedNode) {
@ -133,7 +131,11 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer
} }
} }
FileTypeViewer viewer = getSupportingViewer(file); if (mimeType.equalsIgnoreCase("application/octet-stream")) {
return;
}
else {
FileTypeViewer viewer = getSupportingViewer(mimeType);
if (viewer != null) { if (viewer != null) {
lastViewer = viewer; lastViewer = viewer;
@ -142,6 +144,7 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer
this.add(viewer.getComponent()); this.add(viewer.getComponent());
this.repaint(); this.repaint();
} }
}
} }
@ -201,7 +204,11 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer
} }
} }
return (getSupportingViewer(aFile) != null); if (mimeType.equalsIgnoreCase("application/octet-stream")) {
return false;
} else {
return (getSupportingViewer(mimeType) != null);
}
} }
@ -221,9 +228,13 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer
} }
} }
if (null != getSupportingViewer(file)) { if (mimeType.equalsIgnoreCase("application/octet-stream")) {
return 0;
} else {
if (null != getSupportingViewer(mimeType)) {
return CONFIDENCE_LEVEL; return CONFIDENCE_LEVEL;
} }
}
return 0; return 0;
} }

View File

@ -58,7 +58,8 @@ final class HtmlViewer extends javax.swing.JPanel implements FileTypeViewer {
* @return The text content of the file. * @return The text content of the file.
*/ */
@NbBundle.Messages({ @NbBundle.Messages({
"HtmlViewer_file_error=This file is missing or unreadable.",}) "HtmlViewer_file_error=This file is missing or unreadable.",
})
private String getHtmlText(AbstractFile abstractFile) { private String getHtmlText(AbstractFile abstractFile) {
try { try {
int fileSize = (int) abstractFile.getSize(); int fileSize = (int) abstractFile.getSize();
@ -127,9 +128,4 @@ final class HtmlViewer extends javax.swing.JPanel implements FileTypeViewer {
public void resetComponent() { public void resetComponent() {
htmlPanel.reset(); htmlPanel.reset();
} }
@Override
public boolean isSupported(AbstractFile file) {
return true;
}
} }

View File

@ -191,8 +191,4 @@ class MediaFileViewer extends javax.swing.JPanel implements FileTypeViewer {
boolean isSupported(AbstractFile file); boolean isSupported(AbstractFile file);
} }
@Override
public boolean isSupported(AbstractFile file){
return true;
}
} }

View File

@ -538,11 +538,6 @@ class PListViewer extends javax.swing.JPanel implements FileTypeViewer, Explorer
} }
@Override
public boolean isSupported(AbstractFile file){
return true;
}
// Variables declaration - do not modify//GEN-BEGIN:variables // Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton exportButton; private javax.swing.JButton exportButton;
private javax.swing.JPanel hdrPanel; private javax.swing.JPanel hdrPanel;

View File

@ -617,9 +617,4 @@ class SQLiteViewer extends javax.swing.JPanel implements FileTypeViewer {
} }
}; };
} }
@Override
public boolean isSupported(AbstractFile file) {
return true;
}
} }

View File

@ -42,17 +42,15 @@ class WindowsRegistryViewer extends JPanel implements FileTypeViewer {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private static final Logger logger = Logger.getLogger(WindowsRegistryViewer.class.getName()); private static final Logger logger = Logger.getLogger(WindowsRegistryViewer.class.getName());
private static final String[] SUPPORTED_MIMETYPES = new String[]{"application/octet-stream"}; private static final String[] SUPPORTED_MIMETYPES = new String[]{"custom/windows-nt-registry"};
private RejView regview; private RejView regview;
private AbstractFile lastFile; private AbstractFile lastFile;
WindowsRegistryViewer() { WindowsRegistryViewer() {
super(new BorderLayout()); super(new BorderLayout());
System.out.println("CREATED REGISTRY VIEWER");
} }
private void setDataView(Content content) { private void setDataView(Content content) {
System.out.println("setDataview called");
if (content == null) { if (content == null) {
this.resetComponent(); this.resetComponent();
return; return;
@ -60,7 +58,7 @@ class WindowsRegistryViewer extends JPanel implements FileTypeViewer {
this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
if (content.getSize() == 0) { if (content.getSize() <= 1024) {
return; return;
} }
@ -82,27 +80,24 @@ class WindowsRegistryViewer extends JPanel implements FileTypeViewer {
@Override @Override
public Component getComponent() { public Component getComponent() {
System.out.println("component GOTTEN");
return this; return this;
} }
@Override @Override
public void resetComponent() { public void resetComponent() {
System.out.println("RESETING COMP");
// cleanup anything // cleanup anything
if (this.regview != null) { if (this.regview != null) {
this.remove(this.regview); this.remove(this.regview);
this.regview = null; this.regview = null;
} }
lastFile = null;
} }
@Override private boolean isSupported(AbstractFile file) {
public boolean isSupported(AbstractFile file) {
System.out.println("IS THIS SUPPORTED?");
if (file == null) { if (file == null) {
return false; return false;
} }
if (file.getSize() == 0) { if (file.getSize() <= 1024) {
return false; return false;
} }
byte[] header = new byte[0x4000]; byte[] header = new byte[0x4000];
@ -117,23 +112,19 @@ class WindowsRegistryViewer extends JPanel implements FileTypeViewer {
RegistryHive hive = new RegistryHiveBuffer(buf); RegistryHive hive = new RegistryHiveBuffer(buf);
try { try {
hive.getHeader(); hive.getHeader();
System.out.println("is supported " + file.getName());
return true; return true;
} catch (RegistryParseException ex) { } catch (RegistryParseException ex) {
System.out.println("not supported "+ file.getName());
return false; return false;
} }
} }
@Override @Override
public List<String> getSupportedMIMETypes() { public List<String> getSupportedMIMETypes() {
System.out.println("GET SUPPORTED MIME TYPES");
return Arrays.asList(SUPPORTED_MIMETYPES); return Arrays.asList(SUPPORTED_MIMETYPES);
} }
@Override @Override
public void setFile(AbstractFile file) { public void setFile(AbstractFile file) {
System.out.println("SET THE FILE");
if (file == null) { if (file == null) {
resetComponent(); resetComponent();
return; return;

View File

@ -216,14 +216,17 @@ final class CustomFileTypesManager {
fileType = new FileType("image/x-pict", signatureList); //NON-NLS fileType = new FileType("image/x-pict", signatureList); //NON-NLS
autopsyDefinedFileTypes.add(fileType); autopsyDefinedFileTypes.add(fileType);
/* NOTE: see JIRA-4269. This MIME type seems to match a lot of random file types, /*
including ZIP archives. As a result those files get assigned this MIME type instead * NOTE: see JIRA-4269. This MIME type seems to match a lot of
of having their MIME type detected by Tika. * random file types, including ZIP archives. As a result those
byteArray = DatatypeConverter.parseHexBinary("1100"); //NON-NLS * files get assigned this MIME type instead of having their MIME
signatureList.clear(); * type detected by Tika. byteArray =
signatureList.add(new Signature(byteArray, 522L)); * DatatypeConverter.parseHexBinary("1100"); //NON-NLS
fileType = new FileType("image/x-pict", signatureList); //NON-NLS * signatureList.clear(); signatureList.add(new Signature(byteArray,
autopsyDefinedFileTypes.add(fileType);*/ * 522L)); fileType = new FileType("image/x-pict", signatureList);
* //NON-NLS
autopsyDefinedFileTypes.add(fileType);
*/
/* /*
* Add type for pam. * Add type for pam.
@ -305,7 +308,8 @@ final class CustomFileTypesManager {
autopsyDefinedFileTypes.add(fileType); autopsyDefinedFileTypes.add(fileType);
/* /*
* Add type for .tec files with leading End Of Image marker (JFIF JPEG) * Add type for .tec files with leading End Of Image marker (JFIF
* JPEG)
*/ */
byteArray = DatatypeConverter.parseHexBinary("FFD9FFD8"); //NON-NLS byteArray = DatatypeConverter.parseHexBinary("FFD9FFD8"); //NON-NLS
signatureList.clear(); signatureList.clear();
@ -313,6 +317,16 @@ final class CustomFileTypesManager {
fileType = new FileType("image/jpeg", signatureList); //NON-NLS fileType = new FileType("image/jpeg", signatureList); //NON-NLS
autopsyDefinedFileTypes.add(fileType); autopsyDefinedFileTypes.add(fileType);
/*
* Add type for Windows NT registry files with leading End Of Image marker (JFIF
* JPEG)
*/
byteArray = DatatypeConverter.parseHexBinary("72656766"); //NON-NLS
signatureList.clear();
signatureList.add(new Signature(byteArray, 0L));
fileType = new FileType("custom/windows-nt-registry", signatureList); //NON-NLS
autopsyDefinedFileTypes.add(fileType);
} catch (IllegalArgumentException ex) { } catch (IllegalArgumentException ex) {
/* /*
* parseHexBinary() throws this if the argument passed in is not hex * parseHexBinary() throws this if the argument passed in is not hex