예제 #1
0
            /// <summary>Create a list that contains the origin of all bytes in the result file</summary>
            /// <param name="dataPacket">the data packet that makes up the result file</param>
            /// <param name="forensicLogType">the type of data being logged</param>
            internal void WriteDetailInformation(IDataPacket dataPacket, ForensicLogType forensicLogType)
            {
                _textWriter.WriteLine();

                string sourceHeaderText;

                if (forensicLogType == ForensicLogType.CopiedData)
                {
                    sourceHeaderText = "Build-up of resulting file:";
                }
                else if (forensicLogType == ForensicLogType.ConvertedData)
                {
                    sourceHeaderText = "Build-up of source data (before being converted by FFmpeg):";
                }
                else
                {
                    sourceHeaderText = string.Empty;
                }

                _textWriter.WriteLine(sourceHeaderText);
                _textWriter.WriteLine("From byte location:{0}To byte location:{1}Length:{2}Maps to source file(s):{3}From byte location:{4}To byte location:", SeparatorChar, SeparatorChar, SeparatorChar, SeparatorChar, SeparatorChar);

                for (long offset = 0L; offset < dataPacket.Length;)
                {
                    IDataPacket subpacket = dataPacket.GetFragment(offset);
                    _textWriter.WriteLine("{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}",
                                          offset, SeparatorChar, offset + subpacket.Length, SeparatorChar, subpacket.Length,
                                          SeparatorChar, subpacket.InputFile.Name, SeparatorChar, subpacket.StartOffset,
                                          SeparatorChar, subpacket.EndOffset);
                    offset += subpacket.Length;
                }
            }
예제 #2
0
        /// <summary>Create a forensic integrity log.</summary>
        /// <remarks>
        /// The log contains:
        /// <list type="bullet">
        /// <item>MD5 hashes of the all input files used.</item>
        /// <item>MD5 hash of result file.</item>
        /// <item>Detailed information about the source of each byte in the result file.</item>
        /// </list>
        /// </remarks>
        /// <param name="dataPacket">The data packet used to create the result file.</param>
        /// <param name="detectors">The metadata for the data packets</param>
        /// <param name="resultFile">The created result file.</param>
        /// <param name="stream">The stream to write the forensic integrity log information to.</param>
        public void Log(IDataPacket dataPacket, IEnumerable <IDetector> detectors, string resultFile, Stream stream, ForensicLogType forensicLogType)
        {
            PreConditions.Argument("dataPacket").Value(dataPacket).IsNotNull();
            PreConditions.Argument("detectors").Value(detectors).IsNotNull().And.DoesNotContainNull();
            PreConditions.Argument("resultFile").Value(resultFile).IsNotNull().And.IsNotEmpty();
            PreConditions.Argument("stream").Value(stream).IsNotNull();

            using (LogWriter logWriter = new LogWriter(stream, _projectManager.Project, _detectorFormatter))
            {
                logWriter.WriteHeader();

                logWriter.WriteUsedDetectors(detectors);

                logWriter.WriteSourceFileChecksum(dataPacket);

                logWriter.WriteResultFileChecksum(resultFile);

                logWriter.WriteDetailInformation(dataPacket, forensicLogType);
            }
        }