コード例 #1
0
        public ScanSession(string path, string initiator)
        {
            ScanEngine scan = new ScanEngine();

            Initiator = initiator;
            report    = new ScanReport(initiator);
            ScanObjectBuilder build       = new ScanObjectBuilder(path);
            List <ScanObject> scanObjects = build.GetObjects();

            foreach (var sObj in scanObjects)
            {
                report.AddRecord(scan.StartScanObject(sObj));
                report.scannedObjects++;
            }
        }
コード例 #2
0
        public ScanReport StartScanObject(ScanObject obj)
        {
            if (obj.ScanRegions == null)
            {
                ulong      i   = 0;
                ScanReport rep = new ScanReport();
                foreach (var chobj in obj.ChildObjects)
                {
                    for (i = 0; i < chobj.SizeObject(); i++)
                    {
                        byte[] prefix = new byte[8];
                        prefix = chobj.Read(i);

                        List <ThreadSignature> signatures = tree.CheckSignature(prefix);
                        if (signatures != null)
                        {
                            foreach (var sig in signatures)
                            {
                                if (sig.SignatureFirstByteMinOffset < i && sig.SignatureFirstByteMaxOffset > i)
                                {
                                    uint   dataLength = sig.Signature.DataLength;
                                    byte[] searchSign = new byte[dataLength];
                                    searchSign = chobj.Read(i);
                                    if (sig.Signature.IsMatch(searchSign))
                                    {
                                        rep.AddRecord(new ScanReport(new string(sig.ThreadName), obj.Path + chobj.Name));
                                    }
                                }
                            }
                        }
                    }
                }
                rep.scannedObjects = i;
                return(rep);
            }
            else
            {
                for (ulong i = 0; i < obj.SizeObject(); i++)
                {
                    byte[] prefix = new byte[8];
                    prefix = obj.Read(i);

                    List <ThreadSignature> signatures = tree.CheckSignature(prefix);
                    if (signatures != null)
                    {
                        foreach (var sig in signatures)
                        {
                            if (sig.SignatureFirstByteMinOffset < i && sig.SignatureFirstByteMaxOffset > i)
                            {
                                uint   dataLength = sig.Signature.DataLength;
                                byte[] searchSign = new byte[dataLength];
                                searchSign = obj.Read(i);
                                if (sig.Signature.IsMatch(searchSign))
                                {
                                    return(new ScanReport(new string(sig.ThreadName), obj.Path));
                                }
                            }
                        }
                    }
                }
            }
            return(null);
        }