private static void Main(string[] args) { try { var sysPaths0 = RegLib.GetValues(@"HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\SESSION MANAGER\ENVIRONMENT", RegistryView.Registry64, RegistryValueOptions.DoNotExpandEnvironmentNames) .Where(x => x.key.Equals("Path", StringComparison.OrdinalIgnoreCase)).First().value; var sysPaths = sysPaths0 .Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries) .Select(x => new PathDir { Directory = x, isSystem = true, Sha1Sum = Sha1SumString($"{x}S") }); var userPaths0 = RegLib.GetValues(@"HKCU\Environment", RegistryView.Registry64, RegistryValueOptions.DoNotExpandEnvironmentNames) .Where(x => x.key.Equals("Path", StringComparison.OrdinalIgnoreCase)) .First().value; var userPaths = userPaths0 .Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries) .Select(x => new PathDir { Directory = x, isSystem = false, Sha1Sum = Sha1SumString($"{x}U") }); var paths = sysPaths.Concat(userPaths); var group = paths.ToLookup(x => x.Directory); foreach (var dup in group.Where(x => x.Count() > 1)) { Console.WriteLine($"Directory {dup.Key} occurs twice in system Path"); } var t1 = new ShaTrie(); var prefixes = t1.GetShortestPrefix(paths.Select(x => x.Sha1Sum)); paths = paths.Zip(prefixes, (a, b) => new PathDir { Directory = a.Directory, isSystem = a.isSystem, Sha1Sum = a.Sha1Sum, Prefix = b }); foreach (var p in paths) { Console.WriteLine($"{p.Prefix,7} {p.Directory}"); } } catch (Exception ex) { var fullname = System.Reflection.Assembly.GetEntryAssembly().Location; var progname = Path.GetFileNameWithoutExtension(fullname); Console.Error.WriteLine($"{progname} Error: {ex.Message}"); } }
private static void PrintClsIds(bool is32bit = false) { var view = is32bit ? RegistryView.Registry32 : RegistryView.Registry64; foreach (var name in RegLib.GetSubKeyNames(@"HKCR\clsid", view)) { Console.WriteLine($"{name}"); foreach (var k2 in RegLib.GetSubKeyNames(name, view)) { if (k2.EndsWith("InprocServer32", StringComparison.InvariantCultureIgnoreCase)) { var dll = RegLib.GetDefaultValue(k2, view); Console.WriteLine($"{k2} {dll}"); } } } }
private static void PrintTypeLibs(bool is32bit = false) { var versionPattern = @"\\[a-z0-9]{1,3}\.[a-z0-9]{1,3}$"; var view = is32bit ? RegistryView.Registry32 : RegistryView.Registry64; foreach (var name in RegLib.GetSubKeyNames(@"HKCR\typelib", view)) { Console.WriteLine($"{name}"); foreach (var k2 in RegLib.GetSubKeyNames(name, view)) { var match = Regex.Match(k2, versionPattern, RegexOptions.IgnoreCase); if (match.Success) { Console.WriteLine($" {k2}"); foreach (var k3 in RegLib.GetSubKeyNames(k2, view)) { var flagsStr = ""; if (k3.EndsWith("flags", StringComparison.OrdinalIgnoreCase)) { flagsStr = $":{RegLib.GetDefaultValue(k3, view)}"; Console.WriteLine($" {k3}{flagsStr}"); } else { var possibleLCID = RegLib.GetLastSegment(k3); if (possibleLCID.All(char.IsDigit)) // the LCID { Console.WriteLine($" {k3}"); foreach (var platform in RegLib.GetSubKeyNames(k3)) { Console.WriteLine($" platform:{RegLib.GetLastSegment(platform)}"); foreach ((string key, string value) in RegLib.GetValues(platform, view)) { Console.WriteLine($" {key} {value}"); } } } } } } } } }
private async Task <string> LoginAction(string loginUrl, string postData) { string response, ret; try { response = await webLib.HttpPost(loginUrl, postData, "gb2312"); string regStr; string regRet; //html [^(<title>))] regStr = @"(?<=<title>)(.*?)(?=</title>)"; regRet = RegLib.RegexMatch(regStr, ref response); if (regRet == "登录成功窗") { DebugLib.DebugOutput("登录成功"); ret = "登陆成功"; } else if (regRet == "信息返回窗") { //javascrpit Msg=\d*; regStr = @"(?<=Msg=)(\d*)(?=;)"; regRet = RegLib.RegexMatch(regStr, ref response); DebugLib.DebugOutput(regRet); int msgId = Int32.Parse(regRet); DebugLib.DebugOutput(msgId); string errInfo = ""; regStr = @"(?<=xip=')(.*)('?=;)"; regRet = RegLib.RegexMatch(regStr, ref response); string xipStr = regRet; DebugLib.DebugOutput(xipStr); switch (msgId) { case 0: errInfo = "账号或密码不对,请重新输入"; break; case 1: regStr = @"(?<=msga=)(.*)(?=;)"; regRet = RegLib.RegexMatch(regStr, ref response); string msgaStr = regRet; if (msgaStr != "") { switch (msgaStr) { case "error0": errInfo = "本IP不允许Web方式登录"; break; case "error1": errInfo = "本账号不允许Web方式登录"; break; case "error2": errInfo = "本账号不允许修改密码"; break; default: errInfo = msgaStr; break; } } break; case 2: DebugLib.DebugOutput(regRet); errInfo = "该账号正在IP为:" + xipStr + "的机器上使用,<br><br>请点击<a href='a11.htm'>继续</a>断开它的连接并重新输入用户名和密码登陆本机。"; break; case 3: errInfo = "本账号只能在指定地址使用" + xipStr; break; case 4: errInfo = "本账号费用超支或时长流量超过限制"; break; case 5: errInfo = "本账号暂停使用"; break; case 6: errInfo = "System buffer full"; break; case 7: errInfo = "余额啥的正常"; break; case 8: errInfo = "本账号正在使用,不能修改"; break; case 9: errInfo = "新密码与确认新密码不匹配,不能修改"; break; case 10: errInfo = "密码修改成功"; break; case 11: regStr = @"(?<=mac=')(.*)('?=;)"; regRet = RegLib.RegexMatch(regStr, ref response); string macStr = regRet; errInfo = "本账号只能在指定地址使用" + macStr; break; case 14: errInfo = "注销成功"; break; case 15: errInfo = "登录成功"; break; } DebugLib.DebugOutput(errInfo); ret = errInfo; } else { DebugLib.DebugOutput("登录失败"); ret = "登陆失败"; } } catch { ret = "网络错误,登陆失败"; } return(ret); }