From 83f271dda71d9310c1d2ca7166a62c079cef969e Mon Sep 17 00:00:00 2001 From: Alex Ebadirad Date: Mon, 26 Mar 2012 11:06:11 -0700 Subject: [PATCH] Fixes to nulls in report column, recent doc display modified, moved progress bar down below buttons in report filter, removed artifact id column from hashset table, report window once again resizable, now a new report gets generated each time, clearing out the old one. Added a non-linked table of contents with number of hits at the top of the html report. Signed-off-by: Alex Ebadirad --- .../autopsy/report/reportFilter.form | 64 +++++++++------ .../autopsy/report/reportFilter.java | 53 ++++++------ .../sleuthkit/autopsy/report/reportHTML.java | 80 ++++++++++++++----- .../autopsy/report/reportPanelAction.java | 2 +- 4 files changed, 129 insertions(+), 70 deletions(-) diff --git a/Report/src/org/sleuthkit/autopsy/report/reportFilter.form b/Report/src/org/sleuthkit/autopsy/report/reportFilter.form index d6a44ab924..8ce061c777 100644 --- a/Report/src/org/sleuthkit/autopsy/report/reportFilter.form +++ b/Report/src/org/sleuthkit/autopsy/report/reportFilter.form @@ -16,6 +16,11 @@ + + + + + @@ -32,42 +37,48 @@ - + - + - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - - - - + + - - + @@ -80,14 +91,13 @@ - - - - - - + + + + + @@ -152,11 +162,13 @@ + - + + diff --git a/Report/src/org/sleuthkit/autopsy/report/reportFilter.java b/Report/src/org/sleuthkit/autopsy/report/reportFilter.java index 0af6be7cbb..0e5ad341e4 100644 --- a/Report/src/org/sleuthkit/autopsy/report/reportFilter.java +++ b/Report/src/org/sleuthkit/autopsy/report/reportFilter.java @@ -57,6 +57,8 @@ public class reportFilter extends javax.swing.JPanel { jButton2.setActionCommand(org.openide.util.NbBundle.getMessage(reportFilter.class, "reportFilter.jButton2.actionCommand")); // NOI18N jButton2.setLabel(org.openide.util.NbBundle.getMessage(reportFilter.class, "reportFilter.jButton2.label")); // NOI18N + setPreferredSize(new java.awt.Dimension(250, 193)); + jCheckBox1.setSelected(true); jCheckBox1.setText(org.openide.util.NbBundle.getMessage(reportFilter.class, "reportFilter.jCheckBox1.text")); // NOI18N jCheckBox1.addActionListener(new java.awt.event.ActionListener() { @@ -89,9 +91,11 @@ public class reportFilter extends javax.swing.JPanel { } }); + progBar.setDoubleBuffered(true); progBar.setEnabled(false); progBar.setName(""); // NOI18N - progBar.setPreferredSize(new java.awt.Dimension(146, 23)); + progBar.setPreferredSize(new java.awt.Dimension(146, 15)); + progBar.setStringPainted(true); cancelButton.setText(org.openide.util.NbBundle.getMessage(reportFilter.class, "reportFilter.cancelButton.text")); // NOI18N cancelButton.setActionCommand(org.openide.util.NbBundle.getMessage(reportFilter.class, "reportFilter.cancelButton.actionCommand")); // NOI18N @@ -107,33 +111,36 @@ public class reportFilter extends javax.swing.JPanel { layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() - .addGap(38, 38, 38) + .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jCheckBox3) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jCheckBox2) - .addComponent(jCheckBox1)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jCheckBox5) - .addComponent(jCheckBox4)))) - .addGap(69, 69, 69)) + .addComponent(jCheckBox3) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jCheckBox2) + .addComponent(jCheckBox1)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jCheckBox5) + .addComponent(jCheckBox4)))) + .addGap(69, 69, 69)) + .addGroup(layout.createSequentialGroup() + .addComponent(jButton1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(cancelButton) + .addGap(156, 156, 156))) + .addContainerGap()) .addGroup(layout.createSequentialGroup() - .addComponent(jButton1) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 15, Short.MAX_VALUE) - .addComponent(cancelButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(progBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(42, 42, 42))) - .addContainerGap()) + .addComponent(progBar, javax.swing.GroupLayout.PREFERRED_SIZE, 231, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(109, Short.MAX_VALUE)))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() - .addGap(24, 24, 24) + .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jCheckBox1) .addComponent(jCheckBox4)) @@ -144,11 +151,11 @@ public class reportFilter extends javax.swing.JPanel { .addGap(18, 18, 18) .addComponent(jCheckBox3) .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(cancelButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addComponent(progBar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(cancelButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(progBar, javax.swing.GroupLayout.DEFAULT_SIZE, 17, Short.MAX_VALUE) .addContainerGap()) ); }// //GEN-END:initComponents diff --git a/Report/src/org/sleuthkit/autopsy/report/reportHTML.java b/Report/src/org/sleuthkit/autopsy/report/reportHTML.java index 2019ee0da9..101b0f3a5c 100644 --- a/Report/src/org/sleuthkit/autopsy/report/reportHTML.java +++ b/Report/src/org/sleuthkit/autopsy/report/reportHTML.java @@ -38,6 +38,10 @@ public reportHTML (HashMap> re //This is literally a terrible way to count up all the types of artifacts, and doesn't include any added ones. //Unlike the XML report, which is dynamic, this is formatted and needs to be redone later instead of being hardcoded. + //Also, clearing variables to generate new report. + formatted_Report.setLength(0); + unformatted_header.setLength(0); + formatted_header.setLength(0); int countGen = 0; int countWebBookmark = 0; @@ -128,6 +132,7 @@ public reportHTML (HashMap> re + "table tr th {text-align: left; width: 80px;} " + "table td {width: 100px; font-size: 8px; display: table-cell; padding: 4px 8px;} " + "table tr {text-align: left; width: 60px; background: #f3f3f3;} " + + "tr.alt td{ background-color: #FFFFFF;}" + ""; unformatted_header.append(header); unformatted_header.append(simpleCSS); @@ -140,15 +145,25 @@ public reportHTML (HashMap> re { formatted_Report.append(ingestwarning); } - formatted_Report.append("

Case Summary

HTML Report Generated by Autopsy 3 on ").append(datetime).append("

    "); + formatted_Report.append("

    Case Summary

    HTML Report Generated by Autopsy 3 on ").append(datetime).append("

      "); formatted_Report.append("
    • # of Images: ").append(imagecount).append("
    • "); formatted_Report.append("
    • FileSystems: ").append(filesystemcount).append("
    • "); formatted_Report.append("
    • # of Files: ").append(totalfiles.toString()).append("
    • "); formatted_Report.append("
    • # of Dirs: ").append(totaldirs.toString()).append("
    • "); - formatted_Report.append("
    • # of Artifacts: ").append(reportsize).append("
    • "); + formatted_Report.append("
    • # of Artifacts: ").append(reportsize).append("
    "); + + formatted_Report.append("
    "); + formatted_Report.append(""); + formatted_Report.append(""); + formatted_Report.append(""); + formatted_Report.append(""); + formatted_Report.append(""); + formatted_Report.append(""); + formatted_Report.append(""); + formatted_Report.append("
    SectionCount
    Web Bookmarks").append(countWebBookmark).append("
    Web History").append(countWebHistory).append("
    Web Downloads").append(countWebDownload).append("
    Recent Documents").append(countRecentObjects).append("
    Installed Programs").append(countInstalled).append("
    Keyword Hits").append(countKeyword).append("
    Hash Hits").append(countHash).append("

    "); String tableHeader = ""; StringBuilder nodeGen = new StringBuilder("

    General Information (").append(countGen).append(")

    ").append(tableHeader).append(""); - StringBuilder nodeWebBookmark = new StringBuilder("

    Web Bookmarks (").append(countWebBookmark).append(")

    ").append(tableHeader).append(""); + StringBuilder nodeWebBookmark = new StringBuilder("

    Web Bookmarks (").append(countWebBookmark).append(")

    ").append(tableHeader).append(""); StringBuilder nodeWebCookie = new StringBuilder("

    Web Cookies (").append(countWebCookie).append(")

    ").append(tableHeader).append(""); StringBuilder nodeWebHistory = new StringBuilder("

    Web History (").append(countWebHistory).append(")

    ").append(tableHeader).append(""); StringBuilder nodeWebDownload = new StringBuilder("

    Web Downloads (").append(countWebDownload).append(")

    ").append(tableHeader).append(""); @@ -156,13 +171,24 @@ public reportHTML (HashMap> re StringBuilder nodeTrackPoint = new StringBuilder("

    Track Points (").append(countTrackPoint).append(")

    ").append(tableHeader).append("
    "); StringBuilder nodeInstalled = new StringBuilder("

    Installed Programs (").append(countInstalled).append(")

    ").append(tableHeader).append(""); StringBuilder nodeKeyword = new StringBuilder("

    Keyword Search Hits (").append(countKeyword).append(")

    "); - StringBuilder nodeHash = new StringBuilder("

    Hashset Hits (").append(countHash).append(")

    ").append(tableHeader).append(""); - + StringBuilder nodeHash = new StringBuilder("

    Hashset Hits (").append(countHash).append(")

    ").append(tableHeader).append(""); + int alt = 0; + String altRow = ""; for (Entry> entry : report.entrySet()) { if(reportFilter.cancel == true){ break; } int cc = 0; + + if(alt > 0) + { + altRow = " class=\"alt\""; + alt = 0; + } + else{ + altRow=""; + alt++; + } StringBuilder artifact = new StringBuilder(""); Long objId = entry.getKey().getObjectID(); //Content file = skCase.getContentById(objId); @@ -172,15 +198,27 @@ public reportHTML (HashMap> re TreeMap attributes = new TreeMap(); - // Get all the attributes, line them up to be added. + // Get all the attributes, line them up to be added. Place empty string placeholders for each attribute type + int n; + for(n=1;n<=35;n++) + { + attributes.put(n, ""); + + } for (BlackboardAttribute tempatt : entry.getValue()) { if(reportFilter.cancel == true){ break; } - + String value = ""; int type = tempatt.getAttributeTypeID(); - String value = tempatt.getValueString(); + if(tempatt.getValueString() == null || tempatt.getValueString() == "null"){ + + } + else + { + value = tempatt.getValueString(); + } value = reportUtils.insertPeriodically(value, "
    ", 30); attributes.put(type, value); cc++; @@ -193,14 +231,14 @@ public reportHTML (HashMap> re nodeGen.append(artifact); } if(entry.getKey().getArtifactTypeID() == 2){ - artifact.append("
    "); + artifact.append(""); artifact.append(""); artifact.append(""); artifact.append(""); nodeWebBookmark.append(artifact); } if(entry.getKey().getArtifactTypeID() == 3){ - artifact.append(""); + artifact.append(""); artifact.append(""); artifact.append(""); artifact.append(""); @@ -209,8 +247,8 @@ public reportHTML (HashMap> re nodeWebCookie.append(artifact); } if(entry.getKey().getArtifactTypeID() == 4){ - artifact.append(""); - artifact.append(""); + artifact.append(""); + artifact.append(""); artifact.append(""); artifact.append(""); artifact.append(""); @@ -218,29 +256,30 @@ public reportHTML (HashMap> re nodeWebHistory.append(artifact); } if(entry.getKey().getArtifactTypeID() == 5){ - artifact.append(""); + artifact.append(""); artifact.append(""); - artifact.append(""); + artifact.append(""); artifact.append(""); artifact.append(""); nodeWebDownload.append(artifact); } if(entry.getKey().getArtifactTypeID() == 6){ - artifact.append(""); + //artifact.append(""); + artifact.append(""); artifact.append(""); artifact.append(""); nodeRecentObjects.append(artifact); } if(entry.getKey().getArtifactTypeID() == 7){ - artifact.append(""); artifact.append(""); artifact.append(""); nodeTrackPoint.append(artifact); } if(entry.getKey().getArtifactTypeID() == 8){ - artifact.append(""); artifact.append(""); artifact.append(""); @@ -254,8 +293,8 @@ public reportHTML (HashMap> re // nodeKeyword.append(artifact); } if(entry.getKey().getArtifactTypeID() == 10){ - artifact.append(""); + // artifact.append(""); artifact.append(""); //artifact.append(""); artifact.append(""); @@ -268,6 +307,7 @@ public reportHTML (HashMap> re //Add them back in order //formatted_Report.append(nodeGen); // formatted_Report.append("
    AttributeValue
    URLTitleProgram
    URLTitleProgram
    URLDateNameValueProgram
    URLDateReferrerTitleProgram
    FileSourceTimeProgram
    Artifact IDNameSizeAttributeValue
    Artifact IDNameSizeAttributeValue
    Artifact IDNameSizeHashset Name
    NameSizeHashset Name
    ").append(attributes.get(1)).append("").append(attributes.get(1)).append("").append(attributes.get(3)).append("").append(attributes.get(4)).append("
    ").append(attributes.get(1)).append("").append(attributes.get(1)).append("").append(attributes.get(2)).append("").append(attributes.get(3)).append("").append(attributes.get(6)).append("
    ").append(attributes.get(1)).append("").append(attributes.get(2)).append("").append(attributes.get(1)).append("").append(attributes.get(33)).append("").append(attributes.get(32)).append("").append(attributes.get(3)).append("").append(attributes.get(4)).append("
    ").append(attributes.get(8)).append("").append(attributes.get(8)).append("").append(attributes.get(1)).append("").append(attributes.get(2)).append("").append(attributes.get(33)).append("").append(attributes.get(4)).append("
    ").append(objId.toString()); - artifact.append("").append(file.getName().toString()).append("
    ").append(objId.toString()); + artifact.append("").append(attributes.get(6)).append("").append(attributes.get(5)).append("").append(filesize.toString()).append("
    ").append(objId.toString()); + artifact.append("").append(objId.toString()); artifact.append("").append(file.getName().toString()).append("").append(filesize.toString()).append("
    ").append(objId.toString()); + artifact.append("").append(objId.toString()); artifact.append("").append(file.getName().toString()).append("").append(filesize.toString()).append("
    ").append(objId.toString()); - artifact.append("").append(file.getName().toString()).append("
    ").append(objId.toString()); + artifact.append("").append(file.getName().toString()).append("").append(filesize.toString()).append("").append(attributes.get(31)).append("").append(attributes.get(30)).append("
    "); + formatted_Report.append(nodeWebBookmark); formatted_Report.append(""); formatted_Report.append(nodeWebCookie); diff --git a/Report/src/org/sleuthkit/autopsy/report/reportPanelAction.java b/Report/src/org/sleuthkit/autopsy/report/reportPanelAction.java index 4528aff206..023c29d263 100644 --- a/Report/src/org/sleuthkit/autopsy/report/reportPanelAction.java +++ b/Report/src/org/sleuthkit/autopsy/report/reportPanelAction.java @@ -97,7 +97,7 @@ public class reportPanelAction { // add the panel to the popup window popUpWindow.add(panel); - popUpWindow.setResizable(false); + popUpWindow.setResizable(true); popUpWindow.pack(); // set the location of the popUp Window on the center of the screen Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize();