mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-17 18:17:43 +00:00
Reordered tables on report, added new method to get keyword hits grouped by keyword, and modified recent document extraction
Signed-off-by: Alex Ebadirad <aebadirad@42six.com>
This commit is contained in:
parent
c80496fb36
commit
b9c55cb1aa
@ -14,7 +14,7 @@ import org.sleuthkit.autopsy.ingest.IngestImageWorkerController;
|
|||||||
public class ExtractAll {
|
public class ExtractAll {
|
||||||
|
|
||||||
void ExtractAll(){
|
void ExtractAll(){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ public class ExtractRegistry {
|
|||||||
public Logger logger = Logger.getLogger(this.getClass().getName());
|
public Logger logger = Logger.getLogger(this.getClass().getName());
|
||||||
private String RR_PATH;
|
private String RR_PATH;
|
||||||
boolean rrFound = false;
|
boolean rrFound = false;
|
||||||
|
private int sysid;
|
||||||
ExtractRegistry(){
|
ExtractRegistry(){
|
||||||
final File rrRoot = InstalledFileLocator.getDefault().locate("rr", ExtractRegistry.class.getPackage().getName(), false);
|
final File rrRoot = InstalledFileLocator.getDefault().locate("rr", ExtractRegistry.class.getPackage().getName(), false);
|
||||||
if (rrRoot == null) {
|
if (rrRoot == null) {
|
||||||
@ -53,7 +53,18 @@ public class ExtractRegistry {
|
|||||||
else {
|
else {
|
||||||
rrFound = true;
|
rrFound = true;
|
||||||
}
|
}
|
||||||
|
try{
|
||||||
|
Case currentCase = Case.getCurrentCase(); // get the most updated case
|
||||||
|
SleuthkitCase tempDb = currentCase.getSleuthkitCase();
|
||||||
|
ResultSet artset = tempDb.runQuery("SELECT * from blackboard_artifact_types WHERE type_name = 'TSK_SYS_INFO'");
|
||||||
|
|
||||||
|
while (artset.next()){
|
||||||
|
sysid = artset.getInt("artifact_type_id");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(Exception e){
|
||||||
|
|
||||||
|
}
|
||||||
final String rrHome = rrRoot.getAbsolutePath();
|
final String rrHome = rrRoot.getAbsolutePath();
|
||||||
logger.log(Level.INFO, "RegRipper home: " + rrHome);
|
logger.log(Level.INFO, "RegRipper home: " + rrHome);
|
||||||
|
|
||||||
@ -175,7 +186,9 @@ public void getregistryfiles(List<String> image, IngestImageWorkerController con
|
|||||||
{
|
{
|
||||||
Case currentCase = Case.getCurrentCase(); // get the most updated case
|
Case currentCase = Case.getCurrentCase(); // get the most updated case
|
||||||
SleuthkitCase tempDb = currentCase.getSleuthkitCase();
|
SleuthkitCase tempDb = currentCase.getSleuthkitCase();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
String regString = new Scanner(new File(regRecord)).useDelimiter("\\Z").next();
|
String regString = new Scanner(new File(regRecord)).useDelimiter("\\Z").next();
|
||||||
String startdoc = "<document>";
|
String startdoc = "<document>";
|
||||||
String result = regString.replaceAll("----------------------------------------","");
|
String result = regString.replaceAll("----------------------------------------","");
|
||||||
@ -199,7 +212,7 @@ public void getregistryfiles(List<String> image, IngestImageWorkerController con
|
|||||||
|
|
||||||
Element artroot = tempnode.getChild("artifacts");
|
Element artroot = tempnode.getChild("artifacts");
|
||||||
List artlist = artroot.getChildren();
|
List artlist = artroot.getChildren();
|
||||||
BlackboardArtifact bbart = tempDb.getContentById(orgId).newArtifact(ARTIFACT_TYPE.TSK_RECENT_OBJECT);
|
|
||||||
Collection<BlackboardAttribute> bbattributes = new ArrayList<BlackboardAttribute>();
|
Collection<BlackboardAttribute> bbattributes = new ArrayList<BlackboardAttribute>();
|
||||||
bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_LAST_ACCESSED.getTypeID(), "RecentActivity", context, time));
|
bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_LAST_ACCESSED.getTypeID(), "RecentActivity", context, time));
|
||||||
Iterator aiterator = artlist.iterator();
|
Iterator aiterator = artlist.iterator();
|
||||||
@ -210,16 +223,27 @@ public void getregistryfiles(List<String> image, IngestImageWorkerController con
|
|||||||
bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_NAME.getTypeID(), "RecentActivity", context, name));
|
bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_NAME.getTypeID(), "RecentActivity", context, name));
|
||||||
bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_VALUE.getTypeID(), "RecentActivity", context, value));
|
bbattributes.add(new BlackboardAttribute(ATTRIBUTE_TYPE.TSK_VALUE.getTypeID(), "RecentActivity", context, value));
|
||||||
}
|
}
|
||||||
|
if("recentdocs".equals(context)){
|
||||||
|
BlackboardArtifact bbart = tempDb.getContentById(orgId).newArtifact(ARTIFACT_TYPE.TSK_RECENT_OBJECT);
|
||||||
|
|
||||||
|
|
||||||
bbart.addAttributes(bbattributes);
|
bbart.addAttributes(bbattributes);
|
||||||
|
}
|
||||||
|
else if("runMRU".equals(context)){
|
||||||
|
BlackboardArtifact bbart = tempDb.getContentById(orgId).newArtifact(ARTIFACT_TYPE.TSK_RECENT_OBJECT);
|
||||||
|
bbart.addAttributes(bbattributes);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
BlackboardArtifact bbart = tempDb.getContentById(orgId).newArtifact(sysid);
|
||||||
|
bbart.addAttributes(bbattributes);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
String hi = "";
|
|
||||||
logger.log(Level.WARNING, "Error while trying to read into a sqlite db." + ex);
|
logger.log(Level.WARNING, "Error while trying to read into a sqlite db." + ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,12 +18,12 @@
|
|||||||
*/
|
*/
|
||||||
package org.sleuthkit.autopsy.recentactivity;
|
package org.sleuthkit.autopsy.recentactivity;
|
||||||
|
|
||||||
|
import java.sql.ResultSet;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import javax.swing.JPanel;
|
|
||||||
import org.sleuthkit.autopsy.casemodule.Case;
|
import org.sleuthkit.autopsy.casemodule.Case;
|
||||||
import org.sleuthkit.autopsy.ingest.IngestImageWorkerController;
|
import org.sleuthkit.autopsy.ingest.IngestImageWorkerController;
|
||||||
import org.sleuthkit.autopsy.ingest.IngestManager;
|
import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||||
@ -80,7 +80,28 @@ public final class RAImageIngestService implements IngestServiceImage {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
//do the work for(FileSystem img : imageFS )
|
//do the work for(FileSystem img : imageFS )
|
||||||
|
try{
|
||||||
|
ResultSet artset = sCurrentCase.runQuery("SELECT * from blackboard_artifact_types WHERE type_name = 'TSK_SYS_INFO'");
|
||||||
|
int artcount = 0;
|
||||||
|
while (artset.next()){
|
||||||
|
artcount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// artset.beforeFirst();
|
||||||
|
if(artcount > 0)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int artint = sCurrentCase.addArtifactType("TSK_SYS_INFO", "System Information");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
catch(Exception e)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
ext.extractToBlackboard(controller, fsIds);
|
ext.extractToBlackboard(controller, fsIds);
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,16 +5,14 @@
|
|||||||
package org.sleuthkit.autopsy.report;
|
package org.sleuthkit.autopsy.report;
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import org.sleuthkit.autopsy.casemodule.Case;
|
import org.sleuthkit.autopsy.casemodule.Case;
|
||||||
import org.sleuthkit.datamodel.BlackboardArtifact;
|
import org.sleuthkit.datamodel.BlackboardArtifact;
|
||||||
import org.sleuthkit.datamodel.BlackboardAttribute;
|
import org.sleuthkit.datamodel.BlackboardAttribute;
|
||||||
import org.sleuthkit.datamodel.FsContent;
|
|
||||||
import org.sleuthkit.datamodel.SleuthkitCase;
|
import org.sleuthkit.datamodel.SleuthkitCase;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -199,4 +197,57 @@ public HashMap<BlackboardArtifact,ArrayList<BlackboardAttribute>> getHashHit() {
|
|||||||
return reportMap;
|
return reportMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getGroupedKeywordHit() {
|
||||||
|
StringBuilder table = new StringBuilder();
|
||||||
|
HashMap<BlackboardArtifact,ArrayList<BlackboardAttribute>> reportMap = new HashMap();
|
||||||
|
Case currentCase = Case.getCurrentCase(); // get the most updated case
|
||||||
|
SleuthkitCase tempDb = currentCase.getSleuthkitCase();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ResultSet uniqueresults = tempDb.runQuery("SELECT DISTINCT value_text from blackboard_attributes where attribute_type_id = '10' order by value_text ASC");
|
||||||
|
while(uniqueresults.next())
|
||||||
|
{
|
||||||
|
table.append("<strong>").append(uniqueresults.getString("value_text")).append("</strong>");
|
||||||
|
table.append("<table><thead><tr><th>").append("File Name").append("</th><th>Preview</th><th>Keyword List</th></tr><tbody>");
|
||||||
|
ArrayList<BlackboardArtifact> artlist = new ArrayList<BlackboardArtifact>();
|
||||||
|
ResultSet tempresults = tempDb.runQuery("select DISTINCT artifact_id from blackboard_attributes where attribute_type_id = '10' and value_text = '" + uniqueresults.getString("value_text") +"'");
|
||||||
|
while(tempresults.next())
|
||||||
|
{
|
||||||
|
artlist.add(tempDb.getBlackboardArtifact(tempresults.getLong("artifact_id")));
|
||||||
|
}
|
||||||
|
for(BlackboardArtifact art : artlist)
|
||||||
|
{
|
||||||
|
String filename = tempDb.getFsContentById(art.getObjectID()).getName();
|
||||||
|
String preview = "";
|
||||||
|
String set = "";
|
||||||
|
table.append("<tr><td>").append(filename).append("</td>");
|
||||||
|
ArrayList<BlackboardAttribute> tempatts = art.getAttributes();
|
||||||
|
for(BlackboardAttribute att : tempatts)
|
||||||
|
{
|
||||||
|
if(att.getAttributeTypeID() == 12)
|
||||||
|
{
|
||||||
|
preview = "<td>" + att.getValueString() + "</td>";
|
||||||
|
}
|
||||||
|
if(att.getAttributeTypeID() == 13)
|
||||||
|
{
|
||||||
|
set = "<td>" + att.getValueString() + "</td>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
table.append(preview).append(set).append("</tr>");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
table.append("</tbody></table><br /><br />");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Logger.getLogger(report.class.getName()).log(Level.INFO, "Exception occurred", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
String result = table.toString();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -5,7 +5,6 @@
|
|||||||
package org.sleuthkit.autopsy.report;
|
package org.sleuthkit.autopsy.report;
|
||||||
|
|
||||||
import java.io.BufferedWriter;
|
import java.io.BufferedWriter;
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileWriter;
|
import java.io.FileWriter;
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
@ -13,13 +12,16 @@ import java.util.ArrayList;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
import java.util.TreeMap;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import org.sleuthkit.autopsy.casemodule.Case;
|
import org.sleuthkit.autopsy.casemodule.Case;
|
||||||
|
import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||||
import org.sleuthkit.datamodel.BlackboardArtifact;
|
import org.sleuthkit.datamodel.BlackboardArtifact;
|
||||||
import org.sleuthkit.datamodel.BlackboardAttribute;
|
import org.sleuthkit.datamodel.BlackboardAttribute;
|
||||||
import org.sleuthkit.datamodel.FsContent;
|
import org.sleuthkit.datamodel.FsContent;
|
||||||
import org.sleuthkit.datamodel.SleuthkitCase;
|
import org.sleuthkit.datamodel.SleuthkitCase;
|
||||||
|
import org.sleuthkit.datamodel.TskData;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -31,16 +33,65 @@ public class reportHTML {
|
|||||||
public static StringBuilder formatted_Report = new StringBuilder();
|
public static StringBuilder formatted_Report = new StringBuilder();
|
||||||
public static String htmlPath = "";
|
public static String htmlPath = "";
|
||||||
public reportHTML (HashMap<BlackboardArtifact,ArrayList<BlackboardAttribute>> report, reportFilter rr){
|
public reportHTML (HashMap<BlackboardArtifact,ArrayList<BlackboardAttribute>> report, reportFilter rr){
|
||||||
|
|
||||||
|
//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.
|
||||||
|
|
||||||
|
int countGen = 0;
|
||||||
|
int countWebBookmark = 0;
|
||||||
|
int countWebCookie = 0;
|
||||||
|
int countWebHistory = 0;
|
||||||
|
int countWebDownload = 0;
|
||||||
|
int countRecentObjects = 0;
|
||||||
|
int countTrackPoint = 0;
|
||||||
|
int countInstalled = 0;
|
||||||
|
int countKeyword = 0;
|
||||||
|
int countHash = 0;
|
||||||
|
for (Entry<BlackboardArtifact,ArrayList<BlackboardAttribute>> entry : report.entrySet()) {
|
||||||
|
if(entry.getKey().getArtifactTypeID() == 1){
|
||||||
|
countGen++;
|
||||||
|
}
|
||||||
|
if(entry.getKey().getArtifactTypeID() == 2){
|
||||||
|
countWebBookmark++;
|
||||||
|
}
|
||||||
|
if(entry.getKey().getArtifactTypeID() == 3){
|
||||||
|
|
||||||
|
countWebCookie++;
|
||||||
|
}
|
||||||
|
if(entry.getKey().getArtifactTypeID() == 4){
|
||||||
|
|
||||||
|
countWebHistory++;
|
||||||
|
}
|
||||||
|
if(entry.getKey().getArtifactTypeID() == 5){
|
||||||
|
countWebDownload++;
|
||||||
|
}
|
||||||
|
if(entry.getKey().getArtifactTypeID() == 6){
|
||||||
|
countRecentObjects++;
|
||||||
|
}
|
||||||
|
if(entry.getKey().getArtifactTypeID() == 7){
|
||||||
|
countTrackPoint++;
|
||||||
|
}
|
||||||
|
if(entry.getKey().getArtifactTypeID() == 8){
|
||||||
|
countInstalled++;
|
||||||
|
}
|
||||||
|
if(entry.getKey().getArtifactTypeID() == 9){
|
||||||
|
countKeyword++;
|
||||||
|
}
|
||||||
|
if(entry.getKey().getArtifactTypeID() == 10){
|
||||||
|
countHash++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
try{
|
try{
|
||||||
|
|
||||||
|
String ingestwarning = "<h2 style=\"color: red;\">Warning, this report was run before ingest services completed!</h2>";
|
||||||
Case currentCase = Case.getCurrentCase(); // get the most updated case
|
Case currentCase = Case.getCurrentCase(); // get the most updated case
|
||||||
SleuthkitCase skCase = currentCase.getSleuthkitCase();
|
SleuthkitCase skCase = currentCase.getSleuthkitCase();
|
||||||
String caseName = currentCase.getName();
|
String caseName = currentCase.getName();
|
||||||
String rrpath = System.getProperty("user.dir");
|
|
||||||
rrpath = rrpath.substring(0, rrpath.length()-14);
|
|
||||||
rrpath = rrpath + "autopsy\\thirdparty\\";
|
|
||||||
Integer imagecount = currentCase.getImageIDs().length;
|
Integer imagecount = currentCase.getImageIDs().length;
|
||||||
|
Integer totalfiles = skCase.countFsContentType(TskData.TSK_FS_META_TYPE_ENUM.TSK_FS_META_TYPE_REG);
|
||||||
|
Integer totaldirs = skCase.countFsContentType(TskData.TSK_FS_META_TYPE_ENUM.TSK_FS_META_TYPE_DIR);
|
||||||
|
int reportsize = report.size();
|
||||||
Integer filesystemcount = currentCase.getRootObjectsCount();
|
Integer filesystemcount = currentCase.getRootObjectsCount();
|
||||||
DateFormat datetimeFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
DateFormat datetimeFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
||||||
DateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy");
|
DateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy");
|
||||||
@ -68,20 +119,27 @@ public reportHTML (HashMap<BlackboardArtifact,ArrayList<BlackboardAttribute>> re
|
|||||||
// Add summary information now
|
// Add summary information now
|
||||||
|
|
||||||
formatted_Report.append("<h1>Report for Case: ").append(caseName).append("</h1>");
|
formatted_Report.append("<h1>Report for Case: ").append(caseName).append("</h1>");
|
||||||
|
if(IngestManager.getDefault().isIngestRunning())
|
||||||
|
{
|
||||||
|
formatted_Report.append(ingestwarning);
|
||||||
|
}
|
||||||
formatted_Report.append("<h2>Case Summary</h2><p>HTML Report Generated by <strong>Autopsy 3</strong> on ").append(datetime).append("<br /><ul>");
|
formatted_Report.append("<h2>Case Summary</h2><p>HTML Report Generated by <strong>Autopsy 3</strong> on ").append(datetime).append("<br /><ul>");
|
||||||
formatted_Report.append("<li># of Images: ").append(imagecount).append("</li>");
|
formatted_Report.append("<li># of Images: ").append(imagecount).append("</li>");
|
||||||
formatted_Report.append("<li>FileSystems: ").append(filesystemcount).append("</li>");
|
formatted_Report.append("<li>FileSystems: ").append(filesystemcount).append("</li>");
|
||||||
String tableHeader = "<table><thead><tr><th>Artifact ID</th><th>Name</th><th>Size</th><th>Attribute</th><th>Value</th></tr></thead><tbody>";
|
formatted_Report.append("<li># of Files: ").append(totalfiles.toString()).append("</li>");
|
||||||
StringBuilder nodeGen = new StringBuilder("<h3>General Information</h3>" + tableHeader);
|
formatted_Report.append("<li># of Dirs: ").append(totaldirs.toString()).append("</li>");
|
||||||
StringBuilder nodeWebBookmark = new StringBuilder("<h3>Web Bookmarks</h3>" + tableHeader);
|
formatted_Report.append("<li># of Artifacts: ").append(reportsize).append("</li>");
|
||||||
StringBuilder nodeWebCookie = new StringBuilder("<h3>Web Cookies</h3>" + tableHeader);
|
String tableHeader = "<table><thead><tr><th>Artifact ID</th><th>Name</th><th>Size</th>";
|
||||||
StringBuilder nodeWebHistory = new StringBuilder("<h3>Web History</h3>" + tableHeader);
|
StringBuilder nodeGen = new StringBuilder("<h3>General Information (").append(countGen).append(")</h3>").append(tableHeader).append("<th>Attribute</th><th>Value</th></tr></thead><tbody>");
|
||||||
StringBuilder nodeWebDownload = new StringBuilder("<h3>Web Downloads</h3>" + tableHeader);
|
StringBuilder nodeWebBookmark = new StringBuilder("<h3>Web Bookmarks (").append(countWebBookmark).append(")</h3>").append(tableHeader).append("<th>URL</th><th>Title</th><th>Program</th></tr></thead><tbody>");
|
||||||
StringBuilder nodeRecentObjects = new StringBuilder("<h3>Recent Documents</h3>" + tableHeader);
|
StringBuilder nodeWebCookie = new StringBuilder("<h3>Web Cookies (").append(countWebCookie).append(")</h3>").append(tableHeader).append("<th>URL</th><th>Date</th><th>Name</th><th>Value</th><th>Program</th></tr></thead><tbody>");
|
||||||
StringBuilder nodeTrackPoint = new StringBuilder("<h3>Track Points</h3>" + tableHeader);
|
StringBuilder nodeWebHistory = new StringBuilder("<h3>Web History (").append(countWebHistory).append(")</h3>").append(tableHeader).append("<th>URL</th><th>Date</th><th>Referrer</th><th>Title</th><th>Program</th></tr></thead><tbody>");
|
||||||
StringBuilder nodeInstalled = new StringBuilder("<h3>Installed Programs</h3>" + tableHeader);
|
StringBuilder nodeWebDownload = new StringBuilder("<h3>Web Downloads (").append(countWebDownload).append(")</h3>").append(tableHeader).append("<th>Attribute</th><th>Value</th></tr></thead><tbody>");
|
||||||
StringBuilder nodeKeyword = new StringBuilder("<h3>Keyword Search Hits</h3>" + tableHeader);
|
StringBuilder nodeRecentObjects = new StringBuilder("<h3>Recent Documents (").append(countRecentObjects).append(")</h3>").append(tableHeader).append("<th>Name</th><th>Path</th></tr></thead><tbody>");
|
||||||
StringBuilder nodeHash = new StringBuilder("<h3>Hashset Hits</h3>" + tableHeader);
|
StringBuilder nodeTrackPoint = new StringBuilder("<h3>Track Points (").append(countTrackPoint).append(")</h3>").append(tableHeader).append("<th>Attribute</th><th>Value</th></tr></thead><tbody>");
|
||||||
|
StringBuilder nodeInstalled = new StringBuilder("<h3>Installed Programs (").append(countInstalled).append(")</h3>").append(tableHeader).append("<th>Attribute</th><th>Value</th></tr></thead><tbody>");
|
||||||
|
StringBuilder nodeKeyword = new StringBuilder("<h3>Keyword Search Hits (").append(countKeyword).append(")</h3>");
|
||||||
|
StringBuilder nodeHash = new StringBuilder("<h3>Hashset Hits (").append(countHash).append(")</h3>").append(tableHeader).append("<th>File Name</th><th>Hashset Name</th></tr></thead><tbody>");
|
||||||
|
|
||||||
for (Entry<BlackboardArtifact,ArrayList<BlackboardAttribute>> entry : report.entrySet()) {
|
for (Entry<BlackboardArtifact,ArrayList<BlackboardAttribute>> entry : report.entrySet()) {
|
||||||
if(reportFilter.cancel == true){
|
if(reportFilter.cancel == true){
|
||||||
@ -94,57 +152,87 @@ public reportHTML (HashMap<BlackboardArtifact,ArrayList<BlackboardAttribute>> re
|
|||||||
FsContent file = skCase.getFsContentById(objId);
|
FsContent file = skCase.getFsContentById(objId);
|
||||||
|
|
||||||
Long filesize = file.getSize();
|
Long filesize = file.getSize();
|
||||||
|
artifact.append("<tr><td>").append(objId.toString());
|
||||||
|
artifact.append("</td><td><strong>").append(file.getName().toString()).append("</strong></td>");
|
||||||
|
artifact.append("<td>").append(filesize.toString()).append("</td>");
|
||||||
// Get all the attributes for this guy
|
|
||||||
|
TreeMap<Integer, String> attributes = new TreeMap<Integer,String>();
|
||||||
|
// Get all the attributes, line them up to be added.
|
||||||
for (BlackboardAttribute tempatt : entry.getValue())
|
for (BlackboardAttribute tempatt : entry.getValue())
|
||||||
{
|
{
|
||||||
if(reportFilter.cancel == true){
|
if(reportFilter.cancel == true){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
artifact.append("<tr><td>").append(objId.toString());
|
|
||||||
artifact.append("</td><td><strong>").append(file.getName().toString()).append("</strong></td>");
|
|
||||||
//artifact.append("Path: ").append(file.getParentPath());
|
|
||||||
artifact.append("<td>").append(filesize.toString()).append("</td>");
|
|
||||||
StringBuilder attribute = new StringBuilder("<td>").append(tempatt.getAttributeTypeDisplayName()).append("</td>");
|
|
||||||
attribute.append("<td>").append(tempatt.getValueString()).append("</td></tr>");
|
|
||||||
//attribute.append("<li style=\"list-style-type: none;\"> Context: ").append(tempatt.getContext()).append("</li>");
|
|
||||||
|
|
||||||
artifact.append(attribute);
|
int type = tempatt.getAttributeTypeID();
|
||||||
|
String value = tempatt.getValueString();
|
||||||
|
attributes.put(type, value);
|
||||||
cc++;
|
cc++;
|
||||||
}
|
}
|
||||||
//artifact.append("</tr>");
|
|
||||||
|
|
||||||
if(entry.getKey().getArtifactTypeID() == 1){
|
if(entry.getKey().getArtifactTypeID() == 1){
|
||||||
|
|
||||||
|
artifact.append("</tr>");
|
||||||
nodeGen.append(artifact);
|
nodeGen.append(artifact);
|
||||||
}
|
}
|
||||||
if(entry.getKey().getArtifactTypeID() == 2){
|
if(entry.getKey().getArtifactTypeID() == 2){
|
||||||
|
artifact.append("<td>").append(attributes.get(1)).append("</td>");
|
||||||
|
artifact.append("<td>").append(attributes.get(3)).append("</td>");
|
||||||
|
artifact.append("<td>").append(attributes.get(4)).append("</td>");
|
||||||
|
artifact.append("</tr>");
|
||||||
nodeWebBookmark.append(artifact);
|
nodeWebBookmark.append(artifact);
|
||||||
}
|
}
|
||||||
if(entry.getKey().getArtifactTypeID() == 3){
|
if(entry.getKey().getArtifactTypeID() == 3){
|
||||||
|
artifact.append("<td>").append(attributes.get(1)).append("</td>");
|
||||||
|
artifact.append("<td>").append(attributes.get(2)).append("</td>");
|
||||||
|
artifact.append("<td>").append(attributes.get(3)).append("</td>");
|
||||||
|
artifact.append("<td>").append(attributes.get(6)).append("</td>");
|
||||||
|
artifact.append("<td>").append(attributes.get(4)).append("</td>");
|
||||||
|
artifact.append("</tr>");
|
||||||
nodeWebCookie.append(artifact);
|
nodeWebCookie.append(artifact);
|
||||||
}
|
}
|
||||||
if(entry.getKey().getArtifactTypeID() == 4){
|
if(entry.getKey().getArtifactTypeID() == 4){
|
||||||
|
artifact.append("<td>").append(attributes.get(1)).append("</td>");
|
||||||
|
artifact.append("<td>").append(attributes.get(2)).append("</td>");
|
||||||
|
artifact.append("<td>").append(attributes.get(32)).append("</td>");
|
||||||
|
artifact.append("<td>").append(attributes.get(3)).append("</td>");
|
||||||
|
artifact.append("<td>").append(attributes.get(4)).append("</td>");
|
||||||
|
artifact.append("</tr>");
|
||||||
nodeWebHistory.append(artifact);
|
nodeWebHistory.append(artifact);
|
||||||
}
|
}
|
||||||
if(entry.getKey().getArtifactTypeID() == 5){
|
if(entry.getKey().getArtifactTypeID() == 5){
|
||||||
|
|
||||||
|
artifact.append("</tr>");
|
||||||
nodeWebDownload.append(artifact);
|
nodeWebDownload.append(artifact);
|
||||||
}
|
}
|
||||||
if(entry.getKey().getArtifactTypeID() == 6){
|
if(entry.getKey().getArtifactTypeID() == 6){
|
||||||
|
|
||||||
|
artifact.append("</tr>");
|
||||||
nodeRecentObjects.append(artifact);
|
nodeRecentObjects.append(artifact);
|
||||||
}
|
}
|
||||||
if(entry.getKey().getArtifactTypeID() == 7){
|
if(entry.getKey().getArtifactTypeID() == 7){
|
||||||
|
|
||||||
|
artifact.append("</tr>");
|
||||||
nodeTrackPoint.append(artifact);
|
nodeTrackPoint.append(artifact);
|
||||||
}
|
}
|
||||||
if(entry.getKey().getArtifactTypeID() == 8){
|
if(entry.getKey().getArtifactTypeID() == 8){
|
||||||
|
|
||||||
|
artifact.append("</tr>");
|
||||||
nodeInstalled.append(artifact);
|
nodeInstalled.append(artifact);
|
||||||
}
|
}
|
||||||
if(entry.getKey().getArtifactTypeID() == 9){
|
if(entry.getKey().getArtifactTypeID() == 9){
|
||||||
nodeKeyword.append(artifact);
|
|
||||||
|
// artifact.append("<table><thead><tr><th>Artifact ID</th><th>Name</th><th>Size</th>");
|
||||||
|
|
||||||
|
// artifact.append("</tr></table>");
|
||||||
|
// nodeKeyword.append(artifact);
|
||||||
}
|
}
|
||||||
if(entry.getKey().getArtifactTypeID() == 10){
|
if(entry.getKey().getArtifactTypeID() == 10){
|
||||||
|
|
||||||
|
artifact.append("<td>").append(attributes.get(31)).append("</td>");
|
||||||
|
artifact.append("<td>").append(attributes.get(30)).append("</td>");
|
||||||
|
artifact.append("</tr>");
|
||||||
nodeHash.append(artifact);
|
nodeHash.append(artifact);
|
||||||
}
|
}
|
||||||
cc++;
|
cc++;
|
||||||
@ -166,9 +254,15 @@ public reportHTML (HashMap<BlackboardArtifact,ArrayList<BlackboardAttribute>> re
|
|||||||
formatted_Report.append(nodeTrackPoint);
|
formatted_Report.append(nodeTrackPoint);
|
||||||
formatted_Report.append("</tbody></table>");
|
formatted_Report.append("</tbody></table>");
|
||||||
formatted_Report.append(nodeInstalled);
|
formatted_Report.append(nodeInstalled);
|
||||||
formatted_Report.append("</tbody></table>");
|
formatted_Report.append("</tbody></table>");
|
||||||
formatted_Report.append(nodeKeyword);
|
formatted_Report.append(nodeKeyword);
|
||||||
formatted_Report.append("</tbody></table>");
|
if(countKeyword > 0){
|
||||||
|
report keywords = new report();
|
||||||
|
formatted_Report.append(keywords.getGroupedKeywordHit());
|
||||||
|
// "<table><thead><tr><th>Artifact ID</th><th>Name</th><th>Size</th>
|
||||||
|
// formatted_Report.append("</tbody></table>");
|
||||||
|
}
|
||||||
|
|
||||||
formatted_Report.append(nodeHash);
|
formatted_Report.append(nodeHash);
|
||||||
formatted_Report.append("</tbody></table>");
|
formatted_Report.append("</tbody></table>");
|
||||||
//end of master loop
|
//end of master loop
|
||||||
|
@ -22,4 +22,5 @@ public interface reportInterface{
|
|||||||
public HashMap<BlackboardArtifact,ArrayList<BlackboardAttribute>> getRecentObject();
|
public HashMap<BlackboardArtifact,ArrayList<BlackboardAttribute>> getRecentObject();
|
||||||
public HashMap<BlackboardArtifact,ArrayList<BlackboardAttribute>> getHashHit();
|
public HashMap<BlackboardArtifact,ArrayList<BlackboardAttribute>> getHashHit();
|
||||||
public HashMap<BlackboardArtifact,ArrayList<BlackboardAttribute>> getKeywordHit();
|
public HashMap<BlackboardArtifact,ArrayList<BlackboardAttribute>> getKeywordHit();
|
||||||
|
public String getGroupedKeywordHit();
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@ import org.jdom.Document.*;
|
|||||||
import org.jdom.Element;
|
import org.jdom.Element;
|
||||||
import org.jdom.output.XMLOutputter;
|
import org.jdom.output.XMLOutputter;
|
||||||
import org.sleuthkit.autopsy.casemodule.Case;
|
import org.sleuthkit.autopsy.casemodule.Case;
|
||||||
|
import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||||
import org.sleuthkit.datamodel.BlackboardArtifact;
|
import org.sleuthkit.datamodel.BlackboardArtifact;
|
||||||
import org.sleuthkit.datamodel.BlackboardAttribute;
|
import org.sleuthkit.datamodel.BlackboardAttribute;
|
||||||
import org.sleuthkit.datamodel.Content;
|
import org.sleuthkit.datamodel.Content;
|
||||||
@ -27,6 +28,7 @@ import org.sleuthkit.datamodel.Directory;
|
|||||||
import org.sleuthkit.datamodel.File;
|
import org.sleuthkit.datamodel.File;
|
||||||
import org.sleuthkit.datamodel.Image;
|
import org.sleuthkit.datamodel.Image;
|
||||||
import org.sleuthkit.datamodel.SleuthkitCase;
|
import org.sleuthkit.datamodel.SleuthkitCase;
|
||||||
|
import org.sleuthkit.datamodel.TskData;
|
||||||
public class reportXML {
|
public class reportXML {
|
||||||
public static Document xmldoc = new Document();
|
public static Document xmldoc = new Document();
|
||||||
public reportXML (HashMap<BlackboardArtifact,ArrayList<BlackboardAttribute>> report, reportFilter rr){
|
public reportXML (HashMap<BlackboardArtifact,ArrayList<BlackboardAttribute>> report, reportFilter rr){
|
||||||
@ -36,6 +38,8 @@ public class reportXML {
|
|||||||
String caseName = currentCase.getName();
|
String caseName = currentCase.getName();
|
||||||
Integer imagecount = currentCase.getImageIDs().length;
|
Integer imagecount = currentCase.getImageIDs().length;
|
||||||
Integer filesystemcount = currentCase.getRootObjectsCount();
|
Integer filesystemcount = currentCase.getRootObjectsCount();
|
||||||
|
Integer totalfiles = skCase.countFsContentType(TskData.TSK_FS_META_TYPE_ENUM.TSK_FS_META_TYPE_REG);
|
||||||
|
Integer totaldirs = skCase.countFsContentType(TskData.TSK_FS_META_TYPE_ENUM.TSK_FS_META_TYPE_DIR);
|
||||||
Element root = new Element("Case");
|
Element root = new Element("Case");
|
||||||
xmldoc = new Document(root);
|
xmldoc = new Document(root);
|
||||||
DateFormat datetimeFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
DateFormat datetimeFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
|
||||||
@ -47,9 +51,15 @@ public class reportXML {
|
|||||||
root.addContent(comment);
|
root.addContent(comment);
|
||||||
//Create summary node involving how many of each type
|
//Create summary node involving how many of each type
|
||||||
Element summary = new Element("Summary");
|
Element summary = new Element("Summary");
|
||||||
|
if(IngestManager.getDefault().isIngestRunning())
|
||||||
|
{
|
||||||
|
summary.addContent(new Element("Warning").setText("Report was run before ingest services completed!"));
|
||||||
|
}
|
||||||
summary.addContent(new Element("Name").setText(caseName));
|
summary.addContent(new Element("Name").setText(caseName));
|
||||||
summary.addContent(new Element("Total-Images").setText(imagecount.toString()));
|
summary.addContent(new Element("Total-Images").setText(imagecount.toString()));
|
||||||
summary.addContent(new Element("Total-FileSystems").setText(filesystemcount.toString()));
|
summary.addContent(new Element("Total-FileSystems").setText(filesystemcount.toString()));
|
||||||
|
summary.addContent(new Element("Total-Files").setText(totalfiles.toString()));
|
||||||
|
summary.addContent(new Element("Total-Directories").setText(totaldirs.toString()));
|
||||||
root.addContent(summary);
|
root.addContent(summary);
|
||||||
//generate the nodes for each of the types so we can use them later
|
//generate the nodes for each of the types so we can use them later
|
||||||
Element nodeGen = new Element("General-Information");
|
Element nodeGen = new Element("General-Information");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user