예제 #1
0
        public override void ProcessFeatures(Dictionary <string, Feature> features)
        {
            base.ProcessFeatures(features);

            // Get feature flags
            long   size   = GetInt64(features, SizeInt64Value);
            string outdat = GetString(features, OutStringValue);

            // First, try to figure out what type of hash each is by length and clean it
            List <string> crc  = new List <string>();
            List <string> md5  = new List <string>();
            List <string> sha1 = new List <string>();

            foreach (string input in Inputs)
            {
                string temp = string.Empty;
                if (input.Length == Constants.CRCLength)
                {
                    temp = Sanitizer.CleanCRC32(input);
                    if (!string.IsNullOrWhiteSpace(temp))
                    {
                        crc.Add(temp);
                    }
                }
                else if (input.Length == Constants.MD5Length)
                {
                    temp = Sanitizer.CleanMD5(input);
                    if (!string.IsNullOrWhiteSpace(temp))
                    {
                        md5.Add(temp);
                    }
                }
                else if (input.Length == Constants.SHA1Length)
                {
                    temp = Sanitizer.CleanSHA1(input);
                    if (!string.IsNullOrWhiteSpace(temp))
                    {
                        sha1.Add(temp);
                    }
                }
            }

            SqliteConnection dbc = new SqliteConnection(_connectionString);

            dbc.Open();

            // Now, search for each of them and return true or false for each
            foreach (string input in crc)
            {
                string           query = $"SELECT * FROM crc WHERE crc=\"{input}\"";
                SqliteCommand    slc   = new SqliteCommand(query, dbc);
                SqliteDataReader sldr  = slc.ExecuteReader();
                if (sldr.HasRows)
                {
                    int count = 0;
                    while (sldr.Read())
                    {
                        count++;
                    }

                    logger.User($"For hash '{input}' there were {count} matches in the database");
                }
                else
                {
                    logger.User($"Hash '{input}' had no matches in the database");
                }

                sldr.Dispose();
                slc.Dispose();
            }
            foreach (string input in md5)
            {
                string           query = $"SELECT * FROM md5 WHERE md5=\"{input}\"";
                SqliteCommand    slc   = new SqliteCommand(query, dbc);
                SqliteDataReader sldr  = slc.ExecuteReader();
                if (sldr.HasRows)
                {
                    int count = 0;
                    while (sldr.Read())
                    {
                        count++;
                    }

                    logger.User($"For hash '{input}' there were {count} matches in the database");
                }
                else
                {
                    logger.User($"Hash '{input}' had no matches in the database");
                }

                sldr.Dispose();
                slc.Dispose();
            }
            foreach (string input in sha1)
            {
                string           query = $"SELECT * FROM sha1 WHERE sha1=\"{input}\"";
                SqliteCommand    slc   = new SqliteCommand(query, dbc);
                SqliteDataReader sldr  = slc.ExecuteReader();
                if (sldr.HasRows)
                {
                    int count = 0;
                    while (sldr.Read())
                    {
                        count++;
                    }

                    logger.User($"For hash '{input}' there were {count} matches in the database");
                }
                else
                {
                    logger.User($"Hash '{input}' had no matches in the database");
                }

                sldr.Dispose();
                slc.Dispose();
            }

            dbc.Dispose();
        }