////////////////////////////////////// /////// Get Autorun Registry //////// ////////////////////////////////////// /// Find Autorun registry where you have write or equivalent access public static List <Dictionary <string, string> > GetRegistryAutoRuns(Dictionary <string, string> NtAccountNames) { List <Dictionary <string, string> > results = new List <Dictionary <string, string> >(); try { List <List <String> > autorunLocations = new List <List <string> >() { //Common Autoruns new List <String> { "HKLM", "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run" }, new List <String> { "HKLM", "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce" }, new List <String> { "HKLM", "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Run" }, new List <String> { "HKLM", "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\RunOnce" }, new List <String> { "HKCU", "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run" }, new List <String> { "HKCU", "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce" }, new List <String> { "HKCU", "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Run" }, new List <String> { "HKCU", "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\RunOnce" }, new List <String> { "HKLM", @"Software\Microsoft\Windows NT\CurrentVersion\Terminal Server\Install\Software\Microsoft\Windows\CurrentVersion\Run" }, new List <String> { "HKLM", @"Software\Microsoft\Windows NT\CurrentVersion\Terminal Server\Install\Software\Microsoft\Windows\CurrentVersion\Runonce" }, new List <String> { "HKLM", @"Software\Microsoft\Windows NT\CurrentVersion\Terminal Server\Install\Software\Microsoft\Windows\CurrentVersion\RunEx" }, //Service Autoruns new List <String> { "HKLM", "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunService" }, new List <String> { "HKLM", "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnceService" }, new List <String> { "HKLM", "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\RunService" }, new List <String> { "HKLM", "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\RunOnceService" }, new List <String> { "HKCU", "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunService" }, new List <String> { "HKCU", "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnceService" }, new List <String> { "HKCU", "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\RunService" }, new List <String> { "HKCU", "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\RunOnceService" }, //Special Autorun new List <String> { "HKLM", "Software\\Microsoft\\Windows\\CurrentVersion\\RunOnceEx" }, new List <String> { "HKLM", "Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\RunOnceEx" }, new List <String> { "HKCU", "Software\\Microsoft\\Windows\\CurrentVersion\\RunOnceEx" }, new List <String> { "HKCU", "Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\RunOnceEx" }, //Startup Path new List <String> { "HKCU", @"Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", "Common Startup" }, new List <String> { "HKCU", @"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", "Common Startup" }, new List <String> { "HKLM", @"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", "Common Startup" }, new List <String> { "HKLM", @"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", "Common Startup" }, //Winlogon new List <String> { "HKLM", @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Userinit" }, new List <String> { "HKLM", @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Shell" }, //Policy Settings new List <String> { "HKLM", @"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", "Run" }, new List <String> { "HKCU", @"Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", "Run" }, //AlternateShell in SafeBoot new List <String> { "HKLM", "SYSTEM\\CurrentControlSet\\Control\\SafeBoot", "AlternateShell" }, //Font Drivers new List <String> { "HKLM", @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Font Drivers" }, new List <String> { "HKLM", @"SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\Font Drivers" }, //Open Command new List <String> { "HKLM", @"SOFTWARE\Classes\htmlfile\shell\open\command", "" }, //Get (Default) value with empty string new List <String> { "HKLM", @"SOFTWARE\Wow6432Node\Classes\htmlfile\shell\open\command", "" }, //Get (Default) value with empty string }; List <List <String> > autorunLocationsKeys = new List <List <String> > { //Installed Components new List <String> { "HKLM", "SOFTWARE\\Microsoft\\Active Setup\\Installed Components", "StubPath" }, new List <String> { "HKLM", "SOFTWARE\\Wow6432Node\\Microsoft\\Active Setup\\Installed Components", "StubPath" }, new List <String> { "HKCU", "SOFTWARE\\Microsoft\\Active Setup\\Installed Components", "StubPath" }, new List <String> { "HKCU", "SOFTWARE\\Wow6432Node\\Microsoft\\Active Setup\\Installed Components", "StubPath" }, }; //This registry expect subkeys with the CLSID name List <List <String> > autorunLocationsKeysCLSIDs = new List <List <String> > { //Browser Helper Objects new List <String> { "HKLM", @"Software\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects" }, new List <String> { "HKLM", @"Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects" }, //Internet Explorer Extensions new List <String> { "HKLM", @"Software\Microsoft\Internet Explorer\Extensions" }, new List <String> { "HKLM", @"Software\Wow6432Node\Microsoft\Internet Explorer\Extensions" }, }; //Add the keyvalues inside autorunLocationsKeys to autorunLocations foreach (List <String> autorunLocationKey in autorunLocationsKeys) { List <String> subkeys = MyUtils.GetRegSubkeys(autorunLocationKey[0], autorunLocationKey[1]).ToList(); foreach (String keyname in subkeys) { string clsid_name = keyname; Match clsid = Regex.Match(keyname, @"^\W*(\{[\w\-]+\})\W*"); if (clsid.Groups.Count > 1) //Sometime the CLSID is bad writting and this kind of fix common mistakes { clsid_name = clsid.Groups[1].ToString(); } if (autorunLocationKey.Count > 2) { autorunLocations.Add(new List <string> { autorunLocationKey[0], autorunLocationKey[1] + "\\" + clsid_name, autorunLocationKey[2] }); } else { autorunLocations.Add(new List <string> { autorunLocationKey[0], autorunLocationKey[1] + "\\" + clsid_name }); } } } //Read registry and get values foreach (List <String> autorunLocation in autorunLocations) { Dictionary <string, object> settings = MyUtils.GetRegValues(autorunLocation[0], autorunLocation[1]); if ((settings != null) && (settings.Count != 0)) { foreach (KeyValuePair <string, object> kvp in settings) { RegistryKey key = null; if ("HKLM" == autorunLocation[0]) { key = Registry.LocalMachine.OpenSubKey(autorunLocation[1]); } else { key = Registry.CurrentUser.OpenSubKey(autorunLocation[1]); } if (autorunLocation.Count > 2 && kvp.Key != autorunLocation[2]) { continue; //If only interested on 1 key of the registry and it's that one, continue } string orig_filepath = Environment.ExpandEnvironmentVariables(String.Format("{0}", kvp.Value)); string filepath = orig_filepath; if (MyUtils.GetExecutableFromPath(Environment.ExpandEnvironmentVariables(String.Format("{0}", kvp.Value))).Length > 0) { filepath = MyUtils.GetExecutableFromPath(filepath); } string filepath_cleaned = filepath.Replace("'", "").Replace("\"", ""); string folder = System.IO.Path.GetDirectoryName(filepath_cleaned); try { //If the path doesn't exist, pass if (File.GetAttributes(filepath_cleaned).HasFlag(FileAttributes.Directory)) { //If the path is already a folder, change the values of the params orig_filepath = ""; folder = filepath_cleaned; } } catch { } results.Add(new Dictionary <string, string>() { { "Reg", autorunLocation[0] + "\\" + autorunLocation[1] }, { "RegKey", kvp.Key }, { "Folder", folder }, { "File", orig_filepath }, { "RegPermissions", string.Join(", ", MyUtils.GetMyPermissionsR(key, Program.currentUserSIDs)) }, { "interestingFolderRights", String.Join(", ", MyUtils.GetPermissionsFolder(folder, Program.currentUserSIDs)) }, { "interestingFileRights", orig_filepath.Length > 1 ? String.Join(", ", MyUtils.GetPermissionsFile(orig_filepath, Program.currentUserSIDs)) : "" }, { "isUnquotedSpaced", MyUtils.CheckQuoteAndSpace(filepath).ToString() } }); } } } //Check the autoruns that depends on CLSIDs foreach (List <String> autorunLocation in autorunLocationsKeysCLSIDs) { List <String> CLSIDs = MyUtils.GetRegSubkeys(autorunLocation[0], autorunLocation[1]).ToList(); foreach (String clsid in CLSIDs) { string reg = autorunLocation[1] + "\\" + clsid; RegistryKey key = null; if ("HKLM" == autorunLocation[0]) { key = Registry.LocalMachine.OpenSubKey(reg); } else { key = Registry.CurrentUser.OpenSubKey(reg); } string orig_filepath = MyUtils.GetCLSIDBinPath(clsid); if (String.IsNullOrEmpty(orig_filepath)) { continue; } orig_filepath = Environment.ExpandEnvironmentVariables(orig_filepath).Replace("'", "").Replace("\"", ""); string folder = System.IO.Path.GetDirectoryName(orig_filepath); results.Add(new Dictionary <string, string>() { { "Reg", autorunLocation[0] + "\\" + reg }, { "RegKey", "" }, { "Folder", folder }, { "File", orig_filepath }, { "RegPermissions", string.Join(", ", MyUtils.GetMyPermissionsR(key, Program.currentUserSIDs)) }, { "interestingFolderRights", String.Join(", ", MyUtils.GetPermissionsFolder(folder, Program.currentUserSIDs)) }, { "interestingFileRights", orig_filepath.Length > 1 ? String.Join(", ", MyUtils.GetPermissionsFile(orig_filepath, Program.currentUserSIDs)) : "" }, { "isUnquotedSpaced", MyUtils.CheckQuoteAndSpace(orig_filepath).ToString() } }); } } } catch (Exception ex) { Beaprint.GrayPrint(String.Format(" [X] Exception: {0}", ex.Message)); } return(results); }
public static SortedDictionary <string, Dictionary <string, string> > GetInstalledAppsPerms() { //Get from Program Files SortedDictionary <string, Dictionary <string, string> > results = GetInstalledAppsPermsPath(@Path.GetPathRoot(Environment.SystemDirectory) + "Program Files"); SortedDictionary <string, Dictionary <string, string> > results2 = GetInstalledAppsPermsPath(@Path.GetPathRoot(Environment.SystemDirectory) + "Program Files (x86)"); results.Concat(results2).ToDictionary(kvp => kvp.Key, kvp => kvp.Value); //Get from Uninstall string[] subkeys = MyUtils.GetRegSubkeys("HKLM", @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"); if (subkeys != null) { foreach (string app in subkeys) { string installLocation = MyUtils.GetRegValue("HKLM", String.Format(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{0}", app), "InstallLocation"); if (String.IsNullOrEmpty(installLocation)) { continue; } installLocation = installLocation.Replace("\"", ""); if (installLocation.EndsWith(@"\")) { installLocation = installLocation.Substring(0, installLocation.Length - 1); } if (!results.ContainsKey(installLocation) && Directory.Exists(installLocation)) { bool already = false; foreach (string path in results.Keys) { if (installLocation.IndexOf(path) != -1) //Check for subfoldres of already found folders { already = true; break; } } if (!already) { results[installLocation] = MyUtils.GetRecursivePrivs(installLocation); } } } } subkeys = MyUtils.GetRegSubkeys("HKLM", @"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall"); if (subkeys != null) { foreach (string app in subkeys) { string installLocation = MyUtils.GetRegValue("HKLM", String.Format(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{0}", app), "InstallLocation"); if (String.IsNullOrEmpty(installLocation)) { continue; } installLocation = installLocation.Replace("\"", ""); if (installLocation.EndsWith(@"\")) { installLocation = installLocation.Substring(0, installLocation.Length - 1); } if (!results.ContainsKey(installLocation) && Directory.Exists(installLocation)) { bool already = false; foreach (string path in results.Keys) { if (installLocation.IndexOf(path) != -1) //Check for subfoldres of already found folders { already = true; break; } } if (!already) { results[installLocation] = MyUtils.GetRecursivePrivs(installLocation); } } } } return(results); }
public static List <Dictionary <string, string> > GetNonstandardServicesFromReg() { List <Dictionary <string, string> > results = new List <Dictionary <string, string> >(); try { foreach (string key in MyUtils.GetRegSubkeys("HKLM", @"SYSTEM\CurrentControlSet\Services")) { Dictionary <string, object> key_values = MyUtils.GetRegValues("HKLM", @"SYSTEM\CurrentControlSet\Services\" + key); if (key_values.ContainsKey("DisplayName") && key_values.ContainsKey("ImagePath")) { string companyName = ""; string isDotNet = ""; string pathName = Environment.ExpandEnvironmentVariables(String.Format("{0}", key_values["ImagePath"]).Replace("\\SystemRoot\\", "%SystemRoot%\\")); string binaryPath = MyUtils.ReconstructExecPath(pathName); if (binaryPath != "") { try { FileVersionInfo myFileVersionInfo = FileVersionInfo.GetVersionInfo(binaryPath); companyName = myFileVersionInfo.CompanyName; isDotNet = MyUtils.CheckIfDotNet(binaryPath) ? "isDotNet" : ""; } catch (Exception ex) { // Not enough privileges } } string displayName = String.Format("{0}", key_values["DisplayName"]); string imagePath = String.Format("{0}", key_values["ImagePath"]); string description = key_values.ContainsKey("Description") ? String.Format("{0}", key_values["Description"]) : ""; string startMode = ""; if (key_values.ContainsKey("Start")) { switch (key_values["Start"].ToString()) { case "0": startMode = "Boot"; break; case "1": startMode = "System"; break; case "2": startMode = "Autoload"; break; case "3": startMode = "System"; break; case "4": startMode = "Manual"; break; case "5": startMode = "Disabled"; break; } } if (String.IsNullOrEmpty(companyName) || (!Regex.IsMatch(companyName, @"^Microsoft.*", RegexOptions.IgnoreCase))) { Dictionary <string, string> toadd = new Dictionary <string, string>(); toadd["Name"] = String.Format("{0}", displayName); toadd["DisplayName"] = String.Format("{0}", displayName); toadd["CompanyName"] = companyName; toadd["State"] = ""; toadd["StartMode"] = startMode; toadd["PathName"] = pathName; toadd["FilteredPath"] = binaryPath; toadd["isDotNet"] = isDotNet; toadd["Description"] = description; results.Add(toadd); } } } } catch (Exception ex) { Beaprint.GrayPrint(String.Format(" [X] Exception: {0}", ex.Message)); } return(results); }