Exemplo n.º 1
0
  @Override
  public void startUp(IngestJobContext context) throws IngestModuleException {
    this.context = context;
    refCounter.incrementAndGet(context.getJobId());

    synchronized (SampleFileIngestModule.class) {
      if (attrId == -1) {
        // For this sample, make a new attribute type to use to post
        // results to the blackboard. There are many standard blackboard
        // artifact and attribute types and you should use them instead
        // creating new ones to facilitate use of your results by other
        // modules.
        Case autopsyCase = Case.getCurrentCase();
        SleuthkitCase sleuthkitCase = autopsyCase.getSleuthkitCase();
        try {
          // See if the attribute type has already been defined.
          attrId = sleuthkitCase.getAttrTypeID("ATTR_SAMPLE");
          if (attrId == -1) {
            attrId = sleuthkitCase.addAttrType("ATTR_SAMPLE", "Sample Attribute");
          }
        } catch (TskCoreException ex) {
          IngestServices ingestServices = IngestServices.getInstance();
          Logger logger = ingestServices.getLogger(SampleIngestModuleFactory.getModuleName());
          logger.log(Level.SEVERE, "Failed to create blackboard attribute", ex);
          attrId = -1;
          throw new IngestModuleException(ex.getLocalizedMessage());
        }
      }
    }
  }
Exemplo n.º 2
0
 static synchronized void reportBlackboardPostCount(long ingestJobId) {
   Long refCount = refCounter.decrementAndGet(ingestJobId);
   if (refCount == 0) {
     Long filesCount = artifactCountsForIngestJobs.remove(ingestJobId);
     String msgText = String.format("Posted %d times to the blackboard", filesCount);
     IngestMessage message =
         IngestMessage.createMessage(
             IngestMessage.MessageType.INFO, SampleIngestModuleFactory.getModuleName(), msgText);
     IngestServices.getInstance().postMessage(message);
   }
 }
Exemplo n.º 3
0
  @Override
  public IngestModule.ProcessResult process(AbstractFile file) {
    if (attrId == -1) {
      return IngestModule.ProcessResult.ERROR;
    }

    // Skip anything other than actual file system files.
    if ((file.getType() == TskData.TSK_DB_FILES_TYPE_ENUM.UNALLOC_BLOCKS)
        || (file.getType() == TskData.TSK_DB_FILES_TYPE_ENUM.UNUSED_BLOCKS)
        || (file.isFile() == false)) {
      return IngestModule.ProcessResult.OK;
    }

    // Skip NSRL / known files.
    if (skipKnownFiles && file.getKnown() == TskData.FileKnown.KNOWN) {
      return IngestModule.ProcessResult.OK;
    }

    // Do a nonsensical calculation of the number of 0x00 bytes
    // in the first 1024-bytes of the file.  This is for demo
    // purposes only.
    try {
      byte buffer[] = new byte[1024];
      int len = file.read(buffer, 0, 1024);
      int count = 0;
      for (int i = 0; i < len; i++) {
        if (buffer[i] == 0x00) {
          count++;
        }
      }

      // Make an attribute using the ID for the attribute type that
      // was previously created.
      BlackboardAttribute attr =
          new BlackboardAttribute(attrId, SampleIngestModuleFactory.getModuleName(), count);

      // Add the to the general info artifact for the file. In a
      // real module, you would likely have more complex data types
      // and be making more specific artifacts.
      BlackboardArtifact art = file.getGenInfoArtifact();
      art.addAttribute(attr);

      // This method is thread-safe with per ingest job reference counted
      // management of shared data.
      addToBlackboardPostCount(context.getJobId(), 1L);

      // Fire an event to notify any listeners for blackboard postings.
      ModuleDataEvent event =
          new ModuleDataEvent(
              SampleIngestModuleFactory.getModuleName(), ARTIFACT_TYPE.TSK_GEN_INFO);
      IngestServices.getInstance().fireModuleDataEvent(event);

      return IngestModule.ProcessResult.OK;

    } catch (TskCoreException ex) {
      IngestServices ingestServices = IngestServices.getInstance();
      Logger logger = ingestServices.getLogger(SampleIngestModuleFactory.getModuleName());
      logger.log(Level.SEVERE, "Error processing file (id = " + file.getId() + ")", ex);
      return IngestModule.ProcessResult.ERROR;
    }
  }