From 9ee58fbce2057cdc4300087fc3f4e989fc7fd3e6 Mon Sep 17 00:00:00 2001 From: chengr28 <chengr28@gmail.com> Date: Fri, 20 Feb 2015 22:36:02 +0800 Subject: [PATCH] 2015-02-20 --- README.md | 7 +- .../SoftCertPolicyAppender}/LocalPolicy.dll | Bin .../SoftCertPolicyAppender.exe | Bin .../Source}/SoftCertPolicyAppender.sln | 0 .../CertPolicyAppender.cs | 414 +++++++++--------- .../Source}/SoftCertPolicyAppender/Program.cs | 168 +++---- .../Properties/AssemblyInfo.cs | 0 .../SoftCertPolicyAppender.csproj | 0 .../SoftCertPolicyAppender/app.manifest | 0 .../Source}/_libs/LocalPolicy.pdb | Bin Windows/Certs/JGZXCA.crt | 20 + Windows/Certs/Superfish_Inc.crt | 35 ++ Windows/RevokeChinaCerts_All.bat | 16 +- Windows/RevokeChinaCerts_Base.bat | 13 +- Windows/RevokeChinaCerts_Extended.bat | 17 +- Windows/RevokeChinaCerts_Restore.bat | 4 + Windows/SoftCertPolicyAppender/.gitignore | 182 -------- Windows/SoftCertPolicyAppender/README.md | 20 - .../prebuilt/LocalPolicy.dll | Bin 15360 -> 0 bytes 19 files changed, 396 insertions(+), 500 deletions(-) rename Windows/{SoftCertPolicyAppender/SoftCertPolicyAppender/_libs => ArchiveCerts/SoftCertPolicyAppender}/LocalPolicy.dll (100%) rename Windows/{SoftCertPolicyAppender/prebuilt => ArchiveCerts/SoftCertPolicyAppender}/SoftCertPolicyAppender.exe (100%) rename Windows/{SoftCertPolicyAppender/SoftCertPolicyAppender => ArchiveCerts/SoftCertPolicyAppender/Source}/SoftCertPolicyAppender.sln (100%) rename Windows/{SoftCertPolicyAppender/SoftCertPolicyAppender => ArchiveCerts/SoftCertPolicyAppender/Source}/SoftCertPolicyAppender/CertPolicyAppender.cs (97%) rename Windows/{SoftCertPolicyAppender/SoftCertPolicyAppender => ArchiveCerts/SoftCertPolicyAppender/Source}/SoftCertPolicyAppender/Program.cs (97%) rename Windows/{SoftCertPolicyAppender/SoftCertPolicyAppender => ArchiveCerts/SoftCertPolicyAppender/Source}/SoftCertPolicyAppender/Properties/AssemblyInfo.cs (100%) rename Windows/{SoftCertPolicyAppender/SoftCertPolicyAppender => ArchiveCerts/SoftCertPolicyAppender/Source}/SoftCertPolicyAppender/SoftCertPolicyAppender.csproj (100%) rename Windows/{SoftCertPolicyAppender/SoftCertPolicyAppender => ArchiveCerts/SoftCertPolicyAppender/Source}/SoftCertPolicyAppender/app.manifest (100%) rename Windows/{SoftCertPolicyAppender/SoftCertPolicyAppender => ArchiveCerts/SoftCertPolicyAppender/Source}/_libs/LocalPolicy.pdb (100%) create mode 100644 Windows/Certs/JGZXCA.crt create mode 100644 Windows/Certs/Superfish_Inc.crt delete mode 100644 Windows/SoftCertPolicyAppender/.gitignore delete mode 100644 Windows/SoftCertPolicyAppender/README.md delete mode 100644 Windows/SoftCertPolicyAppender/prebuilt/LocalPolicy.dll diff --git a/README.md b/README.md index 1f27646..eed67f9 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Revoke China Certificates.<br /> 全自动å¯ç–‘è¯ä¹¦åŠé”€å·¥å…·/全自動å¯ç–‘æ†‘è‰æ’¤éз工具<br /> ### Updated -**2015-01-18** +**2015-02-20** ### Type * Online Certificates/在线è¯ä¹¦/åœ¨ç·šè‰æ›¸ @@ -37,4 +37,7 @@ Revoke China Certificates.<br /> ### Thanks * [拉黑è¯ä¹¦ è®©ä½ çš„ç”µè„‘å†ä¹Ÿè£…ä¸ä¸ŠæŸäº›è½¯ä»¶ 附è¯ä¹¦å¤§å…¨](http://blog.eqoe.cn/posts/ban-digital-cert.html) -* [Anti-China-Anit-virus](https://github.com/SCFWSE-Ye/Anti-China-Anit-virus) +* [BlockChinaSoftware](https://github.com/SCFWSE/BlockChinaSoftware) +* [UTLS-Blocker](https://github.com/SCFWSE/UTLS-Blocker) +* [Local-Policy](https://bitbucket.org/MartinEden/local-policy/overview) +* [SoftCertPolicyAppender](https://github.com/lhyqy5/RevokeChinaCerts/tree/master/Windows/SoftCertPolicyAppender) diff --git a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/_libs/LocalPolicy.dll b/Windows/ArchiveCerts/SoftCertPolicyAppender/LocalPolicy.dll similarity index 100% rename from Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/_libs/LocalPolicy.dll rename to Windows/ArchiveCerts/SoftCertPolicyAppender/LocalPolicy.dll diff --git a/Windows/SoftCertPolicyAppender/prebuilt/SoftCertPolicyAppender.exe b/Windows/ArchiveCerts/SoftCertPolicyAppender/SoftCertPolicyAppender.exe similarity index 100% rename from Windows/SoftCertPolicyAppender/prebuilt/SoftCertPolicyAppender.exe rename to Windows/ArchiveCerts/SoftCertPolicyAppender/SoftCertPolicyAppender.exe diff --git a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender.sln b/Windows/ArchiveCerts/SoftCertPolicyAppender/Source/SoftCertPolicyAppender.sln similarity index 100% rename from Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender.sln rename to Windows/ArchiveCerts/SoftCertPolicyAppender/Source/SoftCertPolicyAppender.sln diff --git a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/CertPolicyAppender.cs b/Windows/ArchiveCerts/SoftCertPolicyAppender/Source/SoftCertPolicyAppender/CertPolicyAppender.cs similarity index 97% rename from Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/CertPolicyAppender.cs rename to Windows/ArchiveCerts/SoftCertPolicyAppender/Source/SoftCertPolicyAppender/CertPolicyAppender.cs index 86f90fc..33cf242 100644 --- a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/CertPolicyAppender.cs +++ b/Windows/ArchiveCerts/SoftCertPolicyAppender/Source/SoftCertPolicyAppender/CertPolicyAppender.cs @@ -1,208 +1,208 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Security.Cryptography.X509Certificates; -using LocalPolicy; -using Microsoft.Win32; - -namespace SoftCertPolicyAppender -{ - public class SoftwareRestrictionPolicyController - { - - /// <remarks>引用组件æ¥è‡ª:https://bitbucket.org/MartinEden/local-policy/overview </remarks> - private static void DeletePolicyKey(string path) - { - var gpo = new ComputerGroupPolicyObject(); - using (var machine = gpo.GetRootRegistryKey(GroupPolicySection.Machine)) - { - machine.DeleteSubKey(path, false); - } - gpo.Save(); - } - - /// <remarks>引用组件æ¥è‡ª:https://bitbucket.org/MartinEden/local-policy/overview </remarks> - private static void SetPolicyKey(string path, string name, object value, RegistryValueKind kind) - { - var gpo = new ComputerGroupPolicyObject(); - using (var machine = gpo.GetRootRegistryKey(GroupPolicySection.Machine)) - { - using (var cerKey = machine.CreateSubKey(path)) - { - if (cerKey != null) cerKey.SetValue(name, value, kind); - } - } - gpo.Save(); - } - - private static void SetPolicyRegistryKey(string path, string name, object value, RegistryValueKind kind) - { - const string keyPath = @"Software\Microsoft\Windows\CurrentVersion\Group Policy Objects"; - using (var rk = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Default)) - { - List<string> certKeys; - using (var srk = rk.OpenSubKey(keyPath)) - { - if (srk == null) - { - throw new ApplicationException("æ— æ³•æ‰“å¼€æ³¨å†Œè¡¨é¡¹:" + keyPath); - } - certKeys = srk.GetSubKeyNames().Where(x => x.EndsWith("Machine")).Select(x => string.Format("{0}\\{1}\\{2}", keyPath, x, path)) - //.Where(x => rk.OpenSubKey(x) == null) - .ToList(); - } - - foreach (var key in certKeys) - { - using (var skey = rk.CreateSubKey(key)) - { - if (skey != null) skey.SetValue(name, value, kind); - } - } - } - - } - - private static void DeletePolicyRegistryKey(string path) - { - const string keyPath = @"Software\Microsoft\Windows\CurrentVersion\Group Policy Objects"; - using (var rk = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Default)) - { - List<string> certKeys; - using (var srk = rk.OpenSubKey(keyPath)) - { - if (srk == null) - { - throw new ApplicationException("æ— æ³•æ‰“å¼€æ³¨å†Œè¡¨é¡¹:" + keyPath); - } - certKeys = srk.GetSubKeyNames().Where(x => x.EndsWith("Machine")).Select(x => string.Format("{0}\\{1}\\{2}", keyPath, x, path)) - //.Where(x => rk.OpenSubKey(x) == null) - .ToList(); - } - - foreach (var key in certKeys) - { - rk.DeleteSubKey(key, false); - } - } - - } - - - /// <summary> - /// æž„é€ å†™å†™å…¥æ³¨å†Œè¡¨çš„è¯ä¹¦æ•°æ® - /// </summary> - /// <returns></returns> - private static byte[] CalcRegCertData(X509Certificate2 cert) - { - var thumbprintData = cert.Thumbprint.HexString2Bytes().ToArray(); - - var rtn = new List<byte>(); - - //æ·»åŠ æ•°æ®å¤´,æ ¼å¼æ˜¯æ ¹æ®æ³¨å†Œè¡¨çš„æ•°æ®æŽ¨ç®—çš„,未注释部分为未知 - rtn.AddRange(BitConverter.GetBytes(3)); //å¯èƒ½ä¸ºç‰ˆæœ¬å· - rtn.AddRange(BitConverter.GetBytes(1)); //å¯èƒ½ä¸ºæ¬¡ç‰ˆæœ¬å· - rtn.AddRange(BitConverter.GetBytes(thumbprintData.Length)); //è¯ä¹¦å®…指纹长度 - rtn.AddRange(thumbprintData); //è¯ä¹¦æŒ‡çº¹æ•°æ® - rtn.AddRange(BitConverter.GetBytes(0x0d)); - rtn.AddRange(BitConverter.GetBytes(1)); - rtn.AddRange(BitConverter.GetBytes((short)2)); - rtn.AddRange(BitConverter.GetBytes(0)); - rtn.AddRange(BitConverter.GetBytes(0x1b)); - rtn.AddRange(BitConverter.GetBytes(1)); - rtn.AddRange(BitConverter.GetBytes(8)); - rtn.AddRange(BitConverter.GetBytes(DateTime.Now.ToFileTime())); //时间戳 - rtn.AddRange(BitConverter.GetBytes(0x20)); - rtn.AddRange(BitConverter.GetBytes(1)); - rtn.AddRange(BitConverter.GetBytes(cert.RawData.Length)); //è¯ä¹¦é•¿åº¦ - //æ·»åŠ è¯ä¹¦æ•°æ® - rtn.AddRange(cert.RawData); - - return rtn.ToArray(); - } - - - /// <summary> - /// æ·»åŠ è¯ä¹¦è§„则 - /// </summary> - /// <param name="cert"></param> - public static void AddCertRule(X509Certificate2 cert) - { - var keyPath = string.Format("Software\\Policies\\Microsoft\\SystemCertificates\\Disallowed\\Certificates\\{0}", cert.Thumbprint); - const string keyName = "Blob"; - const RegistryValueKind kind = RegistryValueKind.Binary; - var value = CalcRegCertData(cert); - SetPolicyKey(keyPath, keyName,value,kind); - SetPolicyRegistryKey(keyPath,keyName,value,kind); - } - - - /// <summary> - /// 移除è¯ä¹¦è§„则 - /// </summary> - /// <param name="cert"></param> - public static void RemoveCertRule(X509Certificate2 cert) - { - var keyPath = string.Format("Software\\Policies\\Microsoft\\SystemCertificates\\Disallowed\\Certificates\\{0}", cert.Thumbprint); - DeletePolicyKey(keyPath); - DeletePolicyRegistryKey(keyPath); - } - - - /// <summary> - /// 设置是å¦å¯ç”¨å¼ºåˆ¶ç–ç•¥ - /// </summary> - /// <param name="enable"></param> - public static void SetForcePolicyState(bool enable) - { - const string keyPath = "Software\\Policies\\Microsoft\\Windows\\Safer\\CodeIdentifiers"; - const string keyName = "AuthenticodeEnabled"; - const RegistryValueKind kind = RegistryValueKind.DWord; - var value = enable ? 1 : 0; - SetPolicyKey(keyPath, keyName, value, kind); - SetPolicyRegistryKey(keyPath, keyName, value, kind); - } - - } - - - /// <summary> - /// 工具类 - /// </summary> - public static class Helper - { - - /// <summary> - /// è§£æž16进制å—符串为byte数组 - /// </summary> - /// <param name="hexstring"></param> - /// <returns></returns> - public static IEnumerable<byte> HexString2Bytes(this string hexstring) - { - for (int i = 0; i < hexstring.Length; i += 2) - { - var hex = hexstring.Substring(i, 2); - yield return Convert.ToByte(hex, 16); - } - } - - /// <summary> - /// 转æ¢ä¸º16进制å—符串 - /// </summary> - /// <param name="bs"></param> - /// <param name="isLowcase"></param> - /// <param name="split"></param> - /// <returns></returns> - public static string ToHexString(this IEnumerable<byte> bs, bool isLowcase = false, string split = "") - { - var rtn = ""; - foreach (var item in bs) - { - var fmtstr = isLowcase ? "x2" : "X2"; - rtn += item.ToString(fmtstr) + split; - } - return rtn.TrimEnd(split.ToCharArray()); - } - } - +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Cryptography.X509Certificates; +using LocalPolicy; +using Microsoft.Win32; + +namespace SoftCertPolicyAppender +{ + public class SoftwareRestrictionPolicyController + { + + /// <remarks>引用组件æ¥è‡ª:https://bitbucket.org/MartinEden/local-policy/overview </remarks> + private static void DeletePolicyKey(string path) + { + var gpo = new ComputerGroupPolicyObject(); + using (var machine = gpo.GetRootRegistryKey(GroupPolicySection.Machine)) + { + machine.DeleteSubKey(path, false); + } + gpo.Save(); + } + + /// <remarks>引用组件æ¥è‡ª:https://bitbucket.org/MartinEden/local-policy/overview </remarks> + private static void SetPolicyKey(string path, string name, object value, RegistryValueKind kind) + { + var gpo = new ComputerGroupPolicyObject(); + using (var machine = gpo.GetRootRegistryKey(GroupPolicySection.Machine)) + { + using (var cerKey = machine.CreateSubKey(path)) + { + if (cerKey != null) cerKey.SetValue(name, value, kind); + } + } + gpo.Save(); + } + + private static void SetPolicyRegistryKey(string path, string name, object value, RegistryValueKind kind) + { + const string keyPath = @"Software\Microsoft\Windows\CurrentVersion\Group Policy Objects"; + using (var rk = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Default)) + { + List<string> certKeys; + using (var srk = rk.OpenSubKey(keyPath)) + { + if (srk == null) + { + throw new ApplicationException("æ— æ³•æ‰“å¼€æ³¨å†Œè¡¨é¡¹:" + keyPath); + } + certKeys = srk.GetSubKeyNames().Where(x => x.EndsWith("Machine")).Select(x => string.Format("{0}\\{1}\\{2}", keyPath, x, path)) + //.Where(x => rk.OpenSubKey(x) == null) + .ToList(); + } + + foreach (var key in certKeys) + { + using (var skey = rk.CreateSubKey(key)) + { + if (skey != null) skey.SetValue(name, value, kind); + } + } + } + + } + + private static void DeletePolicyRegistryKey(string path) + { + const string keyPath = @"Software\Microsoft\Windows\CurrentVersion\Group Policy Objects"; + using (var rk = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Default)) + { + List<string> certKeys; + using (var srk = rk.OpenSubKey(keyPath)) + { + if (srk == null) + { + throw new ApplicationException("æ— æ³•æ‰“å¼€æ³¨å†Œè¡¨é¡¹:" + keyPath); + } + certKeys = srk.GetSubKeyNames().Where(x => x.EndsWith("Machine")).Select(x => string.Format("{0}\\{1}\\{2}", keyPath, x, path)) + //.Where(x => rk.OpenSubKey(x) == null) + .ToList(); + } + + foreach (var key in certKeys) + { + rk.DeleteSubKey(key, false); + } + } + + } + + + /// <summary> + /// æž„é€ å†™å†™å…¥æ³¨å†Œè¡¨çš„è¯ä¹¦æ•°æ® + /// </summary> + /// <returns></returns> + private static byte[] CalcRegCertData(X509Certificate2 cert) + { + var thumbprintData = cert.Thumbprint.HexString2Bytes().ToArray(); + + var rtn = new List<byte>(); + + //æ·»åŠ æ•°æ®å¤´,æ ¼å¼æ˜¯æ ¹æ®æ³¨å†Œè¡¨çš„æ•°æ®æŽ¨ç®—çš„,未注释部分为未知 + rtn.AddRange(BitConverter.GetBytes(3)); //å¯èƒ½ä¸ºç‰ˆæœ¬å· + rtn.AddRange(BitConverter.GetBytes(1)); //å¯èƒ½ä¸ºæ¬¡ç‰ˆæœ¬å· + rtn.AddRange(BitConverter.GetBytes(thumbprintData.Length)); //è¯ä¹¦å®…指纹长度 + rtn.AddRange(thumbprintData); //è¯ä¹¦æŒ‡çº¹æ•°æ® + rtn.AddRange(BitConverter.GetBytes(0x0d)); + rtn.AddRange(BitConverter.GetBytes(1)); + rtn.AddRange(BitConverter.GetBytes((short)2)); + rtn.AddRange(BitConverter.GetBytes(0)); + rtn.AddRange(BitConverter.GetBytes(0x1b)); + rtn.AddRange(BitConverter.GetBytes(1)); + rtn.AddRange(BitConverter.GetBytes(8)); + rtn.AddRange(BitConverter.GetBytes(DateTime.Now.ToFileTime())); //时间戳 + rtn.AddRange(BitConverter.GetBytes(0x20)); + rtn.AddRange(BitConverter.GetBytes(1)); + rtn.AddRange(BitConverter.GetBytes(cert.RawData.Length)); //è¯ä¹¦é•¿åº¦ + //æ·»åŠ è¯ä¹¦æ•°æ® + rtn.AddRange(cert.RawData); + + return rtn.ToArray(); + } + + + /// <summary> + /// æ·»åŠ è¯ä¹¦è§„则 + /// </summary> + /// <param name="cert"></param> + public static void AddCertRule(X509Certificate2 cert) + { + var keyPath = string.Format("Software\\Policies\\Microsoft\\SystemCertificates\\Disallowed\\Certificates\\{0}", cert.Thumbprint); + const string keyName = "Blob"; + const RegistryValueKind kind = RegistryValueKind.Binary; + var value = CalcRegCertData(cert); + SetPolicyKey(keyPath, keyName,value,kind); + SetPolicyRegistryKey(keyPath,keyName,value,kind); + } + + + /// <summary> + /// 移除è¯ä¹¦è§„则 + /// </summary> + /// <param name="cert"></param> + public static void RemoveCertRule(X509Certificate2 cert) + { + var keyPath = string.Format("Software\\Policies\\Microsoft\\SystemCertificates\\Disallowed\\Certificates\\{0}", cert.Thumbprint); + DeletePolicyKey(keyPath); + DeletePolicyRegistryKey(keyPath); + } + + + /// <summary> + /// 设置是å¦å¯ç”¨å¼ºåˆ¶ç–ç•¥ + /// </summary> + /// <param name="enable"></param> + public static void SetForcePolicyState(bool enable) + { + const string keyPath = "Software\\Policies\\Microsoft\\Windows\\Safer\\CodeIdentifiers"; + const string keyName = "AuthenticodeEnabled"; + const RegistryValueKind kind = RegistryValueKind.DWord; + var value = enable ? 1 : 0; + SetPolicyKey(keyPath, keyName, value, kind); + SetPolicyRegistryKey(keyPath, keyName, value, kind); + } + + } + + + /// <summary> + /// 工具类 + /// </summary> + public static class Helper + { + + /// <summary> + /// è§£æž16进制å—符串为byte数组 + /// </summary> + /// <param name="hexstring"></param> + /// <returns></returns> + public static IEnumerable<byte> HexString2Bytes(this string hexstring) + { + for (int i = 0; i < hexstring.Length; i += 2) + { + var hex = hexstring.Substring(i, 2); + yield return Convert.ToByte(hex, 16); + } + } + + /// <summary> + /// 转æ¢ä¸º16进制å—符串 + /// </summary> + /// <param name="bs"></param> + /// <param name="isLowcase"></param> + /// <param name="split"></param> + /// <returns></returns> + public static string ToHexString(this IEnumerable<byte> bs, bool isLowcase = false, string split = "") + { + var rtn = ""; + foreach (var item in bs) + { + var fmtstr = isLowcase ? "x2" : "X2"; + rtn += item.ToString(fmtstr) + split; + } + return rtn.TrimEnd(split.ToCharArray()); + } + } + } \ No newline at end of file diff --git a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/Program.cs b/Windows/ArchiveCerts/SoftCertPolicyAppender/Source/SoftCertPolicyAppender/Program.cs similarity index 97% rename from Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/Program.cs rename to Windows/ArchiveCerts/SoftCertPolicyAppender/Source/SoftCertPolicyAppender/Program.cs index 7e11e1e..ab16c2b 100644 --- a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/Program.cs +++ b/Windows/ArchiveCerts/SoftCertPolicyAppender/Source/SoftCertPolicyAppender/Program.cs @@ -1,84 +1,84 @@ -using System; -using System.Linq; -using System.Security.Cryptography.X509Certificates; - -namespace SoftCertPolicyAppender -{ - class Program - { - [STAThread] - static void Main(string[] args) - { - var flag = 0; - var cers = args.Where(x => x.EndsWith(".cer") || x.EndsWith(".crt") || x.EndsWith(".pem")).ToArray(); - - if (args.Contains("-h") || args.Contains("--help")||args.Length==0) - { - const string usage = @"Usage:SoftwareRestrictionPolicyController.exe [OPTOION]... [CERTFILE]... -config software restriction policy by cli - -OPTIONs - --set-force set force certificate policy - --unset-force unset force certificate policy - -r remove certificate rule by CERTFILEs not add -CERTFILEs - certificate file path that will add certificate rule -"; - Console.Write(usage); - return; - } - - if (args.Contains("-r")) - { - flag = 1; - } - - if (args.Contains("--set-force")) - { - SoftwareRestrictionPolicyController.SetForcePolicyState(true); - Console.WriteLine("Apply force certificate policy"); - } - - if (args.Contains("--unset-force")) - { - SoftwareRestrictionPolicyController.SetForcePolicyState(false); - Console.WriteLine("Cancel force certificate policy"); - } - - for (var i = 0; i < cers.Length; i++) - { - try - { - var cert = new X509Certificate2(cers[i]); - - Console.ForegroundColor = ConsoleColor.DarkGreen; - Console.Write("{0}.", i + 1); - Console.ResetColor(); - - switch (flag) - { - case 0: - SoftwareRestrictionPolicyController.AddCertRule(cert); - Console.Write("Add cert policy for "); - break; - case 1: - SoftwareRestrictionPolicyController.RemoveCertRule(cert); - Console.Write("Remove cert policy for "); - break; - } - - Console.ForegroundColor = ConsoleColor.Yellow; - Console.WriteLine("{0}({1})", cert.Subject, cert.Thumbprint); - Console.ResetColor(); - } - catch (Exception e) - { - Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine(e); - Console.ResetColor(); - } - } - Console.WriteLine("Done"); - } - } -} +using System; +using System.Linq; +using System.Security.Cryptography.X509Certificates; + +namespace SoftCertPolicyAppender +{ + class Program + { + [STAThread] + static void Main(string[] args) + { + var flag = 0; + var cers = args.Where(x => x.EndsWith(".cer") || x.EndsWith(".crt") || x.EndsWith(".pem")).ToArray(); + + if (args.Contains("-h") || args.Contains("--help")||args.Length==0) + { + const string usage = @"Usage:SoftwareRestrictionPolicyController.exe [OPTOION]... [CERTFILE]... +config software restriction policy by cli + +OPTIONs + --set-force set force certificate policy + --unset-force unset force certificate policy + -r remove certificate rule by CERTFILEs not add +CERTFILEs + certificate file path that will add certificate rule +"; + Console.Write(usage); + return; + } + + if (args.Contains("-r")) + { + flag = 1; + } + + if (args.Contains("--set-force")) + { + SoftwareRestrictionPolicyController.SetForcePolicyState(true); + Console.WriteLine("Apply force certificate policy"); + } + + if (args.Contains("--unset-force")) + { + SoftwareRestrictionPolicyController.SetForcePolicyState(false); + Console.WriteLine("Cancel force certificate policy"); + } + + for (var i = 0; i < cers.Length; i++) + { + try + { + var cert = new X509Certificate2(cers[i]); + + Console.ForegroundColor = ConsoleColor.DarkGreen; + Console.Write("{0}.", i + 1); + Console.ResetColor(); + + switch (flag) + { + case 0: + SoftwareRestrictionPolicyController.AddCertRule(cert); + Console.Write("Add cert policy for "); + break; + case 1: + SoftwareRestrictionPolicyController.RemoveCertRule(cert); + Console.Write("Remove cert policy for "); + break; + } + + Console.ForegroundColor = ConsoleColor.Yellow; + Console.WriteLine("{0}({1})", cert.Subject, cert.Thumbprint); + Console.ResetColor(); + } + catch (Exception e) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine(e); + Console.ResetColor(); + } + } + Console.WriteLine("Done"); + } + } +} diff --git a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/Properties/AssemblyInfo.cs b/Windows/ArchiveCerts/SoftCertPolicyAppender/Source/SoftCertPolicyAppender/Properties/AssemblyInfo.cs similarity index 100% rename from Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/Properties/AssemblyInfo.cs rename to Windows/ArchiveCerts/SoftCertPolicyAppender/Source/SoftCertPolicyAppender/Properties/AssemblyInfo.cs diff --git a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender.csproj b/Windows/ArchiveCerts/SoftCertPolicyAppender/Source/SoftCertPolicyAppender/SoftCertPolicyAppender.csproj similarity index 100% rename from Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender.csproj rename to Windows/ArchiveCerts/SoftCertPolicyAppender/Source/SoftCertPolicyAppender/SoftCertPolicyAppender.csproj diff --git a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/app.manifest b/Windows/ArchiveCerts/SoftCertPolicyAppender/Source/SoftCertPolicyAppender/app.manifest similarity index 100% rename from Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/app.manifest rename to Windows/ArchiveCerts/SoftCertPolicyAppender/Source/SoftCertPolicyAppender/app.manifest diff --git a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/_libs/LocalPolicy.pdb b/Windows/ArchiveCerts/SoftCertPolicyAppender/Source/_libs/LocalPolicy.pdb similarity index 100% rename from Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/_libs/LocalPolicy.pdb rename to Windows/ArchiveCerts/SoftCertPolicyAppender/Source/_libs/LocalPolicy.pdb diff --git a/Windows/Certs/JGZXCA.crt b/Windows/Certs/JGZXCA.crt new file mode 100644 index 0000000..4bf82c4 --- /dev/null +++ b/Windows/Certs/JGZXCA.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDWTCCAkGgAwIBAgIIKRNWlc7d5tYwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE +BhMCQ04xDjAMBgNVBAoMBVNBUkZUMQ0wCwYDVQQLDARKR1pYMQ8wDQYDVQQDDAZK +R1pYQ0EwHhcNMTMwNjE5MDk1MDE3WhcNNDMwNjEyMDk1MDE3WjA9MQswCQYDVQQG +EwJDTjEOMAwGA1UECgwFU0FSRlQxDTALBgNVBAsMBEpHWlgxDzANBgNVBAMMBkpH +WlhDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMOhFBLDhRNxOKD9 +Ey5qXCXk58cM4xYS9dgw7wfaxo3Zp219VuIaR06MRA9BzAu/Q1LxIEOnk/Q2nkmp +VdEptHGsANPEOHNgdGIn+9EhurymbOUBOQ1+oUG8EoiyZSa88U2xl880L9Lu5A1y +fT7c5RVgInY58no5i08DbSSPGnZeGzAUBIX94eXVsGYEQluUVjKBPiBZ3il4W7R0 +qjNg/ml/riDQPDZ4053wzumZP381lFtKWoUPDpI6JXRkRs+Piorq3EeVCMQ13ENu +i4snxvY+jgjE5MLI8xeEnBEBob4fsvB31k/442JBWEKnudqEg1MBkDzheNJlIVFY +BcrwxPsCAwEAAaNdMFswHwYDVR0jBBgwFoAUMcJT9IHOLBFGnXLIw6jsqYbBXa0w +DAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFDHCU/SBziwRRp1y +yMOo7KmGwV2tMA0GCSqGSIb3DQEBBQUAA4IBAQAq1LS3tJgAcBnvEpGZPGz8RwP2 +qgjTruy0n08UkkMXcp8FAgZNVK5NyuGPMxN2jpWCIxLGl83XEjIqK0VEAecCRyVo +WY/bnCAvgeuIaVkrNm3Xmwc7Sw83sVxxccXu9WptaR8fM+lud95ZfZCs6p7xo8hL +Lhz6wimoH8xZgsb5CW2wmPncQtOCFeNcIMRWor/r5hGPZDvw6NfO0lYz3+ZcAh2X +BsevpLg9MfVHMs7hJM1ZH6b08aylVA1MtXI9F5mo+UFM47n0hqLTPpemmNtn9K14 +rf3XhyDYQ8iJdwntp+pPbUDaq9qPa7FDjKiuHJ3S9xElmovhcEa71LVmvsFW +-----END CERTIFICATE----- diff --git a/Windows/Certs/Superfish_Inc.crt b/Windows/Certs/Superfish_Inc.crt new file mode 100644 index 0000000..275b6f5 --- /dev/null +++ b/Windows/Certs/Superfish_Inc.crt @@ -0,0 +1,35 @@ +-----BEGIN CERTIFICATE----- +MIIC9TCCAl6gAwIBAgIJANL8E4epRNznMA0GCSqGSIb3DQEBBQUAMFsxGDAWBgNV +BAoTD1N1cGVyZmlzaCwgSW5jLjELMAkGA1UEBxMCU0YxCzAJBgNVBAgTAkNBMQsw +CQYDVQQGEwJVUzEYMBYGA1UEAxMPU3VwZXJmaXNoLCBJbmMuMB4XDTE0MDUxMjE2 +MjUyNloXDTM0MDUwNzE2MjUyNlowWzEYMBYGA1UEChMPU3VwZXJmaXNoLCBJbmMu +MQswCQYDVQQHEwJTRjELMAkGA1UECBMCQ0ExCzAJBgNVBAYTAlVTMRgwFgYDVQQD +Ew9TdXBlcmZpc2gsIEluYy4wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOjz +Shh2Xxk/sc9Y6X9DBwmVgDXFD/5xMSeBmRImIKXfj2r8QlU57gk4idngNsSsAYJb +1Tnm+Y8HiN/+7vahFM6pdEXY/fAXVyqC4XouEpNarIrXFWPRt5tVgA9YvBxJ7SBi +3bZMpTrrHD2g/3pxptMQeDOuS8Ic/ZJKocPnQaQtAgMBAAGjgcAwgb0wDAYDVR0T +BAUwAwEB/zAdBgNVHQ4EFgQU+5izU38URC7o7tUJml4OVoaoNYgwgY0GA1UdIwSB +hTCBgoAU+5izU38URC7o7tUJml4OVoaoNYihX6RdMFsxGDAWBgNVBAoTD1N1cGVy +ZmlzaCwgSW5jLjELMAkGA1UEBxMCU0YxCzAJBgNVBAgTAkNBMQswCQYDVQQGEwJV +UzEYMBYGA1UEAxMPU3VwZXJmaXNoLCBJbmMuggkA0vwTh6lE3OcwDQYJKoZIhvcN +AQEFBQADgYEApHyg7ApKx3DEcWjzOyLi3JyN0JL+c35yK1VEmxu0Qusfr76645Oj +1IsYwpTws6a9ZTRMzST4GQvFFQra81eLqYbPbMPuhC+FCxkUF5i0DNSWi+kczJXJ +TtCqSwGl9t9JEoFqvtW+znZ9TqyLiOMw7TGEUI+88VAqW0qmXnwPcfo= +-----END CERTIFICATE----- +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIICxjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIDHHhyAEZQoICAggA +MBQGCCqGSIb3DQMHBAiHEg+MCYQ30ASCAoDEvGvFRHvtWOb5Rc0f3lbVKqeUvWSz +xQn+rZELHnwb6baolmbFcsi6XkacVzL/EF7Ll4de/CSQ6pZZCCvfDzov0mPOuGve +SAe7hbAcol7+JWVfzbnVTblPf0i7mwSvK61cKq7YfcKJ2os/uJGpeX9zraywWyFx +f+EdTr348dOez8uHkURyY1cvSHsIdITALkChOonAYT68SVighTeB6xOCwfmsHx+X +3Qbhom2YCIxfJiaAoz2/LndCpDaEfOrVrxXFOKXrIbmeDEyjDQj16AVni9uuaj7l +NiO3zrrqxsfdVINPaAYRKQnS102jXqkH01z72c/MpMMC6dwZswF5V3R7RSXngyBn +1GLxVFHKR753Gt0IDag13Bd8Jt890/v0tE0Kx66jCkRGn+VCq6+bsnh7VpTH/cG5 +dlFnv56lv2leknu5ghdJHX8YQ6HjnioaaheLA+ORAxqAlD8Itt1/pRBOOMSkutdz +d1px9dB2ZBpSoRAOcBwU5aFaw9uu+tXyzrPM3tZomu8ryQYMNlmVgPNDJOz6jPJi +jaZHWTS7U6j370oH/B0KTUG/ybrJGFnOmPP4h2u/ugG75EkfotURsvbrWuetQhOi +TCH+9nbIcT3pxnTXqI2IRHZXMturQ+6fqlJF3bb9bWarMBuC3KgprqyqXxeM0Sqg +VlyKLWwAuMf2Ec7t7ujqaNmVgv6bpwHEbR6njIi7lC7j4w6D2YQ8vacgvS3MB/K0 +SX54HNVBVuXhAixPtYJ6tOBGm7QFAKaXju0PJ+AljnMEsHRekOs2u42OHBXEWDE8 +VHw7/lTXWsJkBcQM+g/svyqV4xKHDAixPms2SUwJyKjvEgV+CQok4F/T +-----END ENCRYPTED PRIVATE KEY----- diff --git a/Windows/RevokeChinaCerts_All.bat b/Windows/RevokeChinaCerts_All.bat index fc4b3ec..0f4bc03 100644 --- a/Windows/RevokeChinaCerts_All.bat +++ b/Windows/RevokeChinaCerts_All.bat @@ -76,6 +76,16 @@ if "%PROCESSOR_ARCHITECTURE%%PROCESSOR_ARCHITEW6432%" == "x86" set CertMgr="%~dp %CertMgr% -del -c -sha1 7514436E903C901069980499CA70DE74FC06C83C -s -r localMachine AuthRoot %CertMgr% -del -c -sha1 7514436E903C901069980499CA70DE74FC06C83C -s -r CurrentUser Root %CertMgr% -del -c -sha1 7514436E903C901069980499CA70DE74FC06C83C -s -r CurrentUser AuthRoot +:: JGZXCA +%CertMgr% -del -c -sha1 7A4AA61E2A88704115E47748D8647DAEE6837559 -s -r localMachine Root +%CertMgr% -del -c -sha1 7A4AA61E2A88704115E47748D8647DAEE6837559 -s -r localMachine AuthRoot +%CertMgr% -del -c -sha1 7A4AA61E2A88704115E47748D8647DAEE6837559 -s -r CurrentUser Root +%CertMgr% -del -c -sha1 7A4AA61E2A88704115E47748D8647DAEE6837559 -s -r CurrentUser AuthRoot +:: Superfish, Inc. [Septembers/v998] +%CertMgr% -del -c -sha1 C864484869D41D2B0D32319C5A62F9315AAF2CBD -s -r localMachine Root +%CertMgr% -del -c -sha1 C864484869D41D2B0D32319C5A62F9315AAF2CBD -s -r localMachine AuthRoot +%CertMgr% -del -c -sha1 C864484869D41D2B0D32319C5A62F9315AAF2CBD -s -r CurrentUser Root +%CertMgr% -del -c -sha1 C864484869D41D2B0D32319C5A62F9315AAF2CBD -s -r CurrentUser AuthRoot :: Delete certificates(Extended part) :: CFCA GT CA(2011-06-13) @@ -285,7 +295,11 @@ if "%PROCESSOR_ARCHITECTURE%%PROCESSOR_ARCHITEW6432%" == "x86" set CertMgr="%~dp %CertMgr% -add -c "%~dp0\Certs\CNNIC_SSL_Entrust.crt" -s Disallowed %CertMgr% -add -c "%~dp0\Certs\[Suspicious]WaccBaiduCom.crt" -s Disallowed %CertMgr% -add -c "%~dp0\Certs\GiantRootCA.crt" -s Disallowed +%CertMgr% -add -c "%~dp0\Certs\JGZXCA.crt" -s Disallowed +%CertMgr% -add -c "%~dp0\Certs\Superfish_Inc.crt" -s Disallowed + :: Add certificates to CRL(Extended part) +::%CertMgr% -add -c ROOTCA.crt" -s Disallowed %CertMgr% -add -c "%~dp0\Certs\CFCA_GT_CA_201106.crt" -s Disallowed %CertMgr% -add -c "%~dp0\Certs\CFCA_GT_CA_201208.crt" -s Disallowed %CertMgr% -add -c "%~dp0\Certs\CFCA_EV_ROOT.crt" -s Disallowed @@ -296,6 +310,7 @@ if "%PROCESSOR_ARCHITECTURE%%PROCESSOR_ARCHITEW6432%" == "x86" set CertMgr="%~dp %CertMgr% -add -c "%~dp0\Certs\[Suspicious]GoAgent_CA.crt" -s Disallowed ::%CertMgr% -add -c "%~dp0\Certs\SZCA.crt" -s Disallowed ::%CertMgr% -add -c "%~dp0\Certs\SZCA_200307.crt" -s Disallowed + :: Add certificates to CRL(All part) ::%CertMgr% -add -c "%~dp0\Certs\ROOTCA_OSCCA.crt" -s Disallowed %CertMgr% -add -c "%~dp0\Certs\SRCA.crt" -s Disallowed @@ -333,7 +348,6 @@ if "%PROCESSOR_ARCHITECTURE%%PROCESSOR_ARCHITEW6432%" == "x86" set CertMgr="%~dp %CertMgr% -add -c "%~dp0\Certs\TWCA_Secure_Certification_Authority_USERTrust.crt" -s Disallowed :: Print to screen. -::Exit @echo. @echo RevokeChinaCerts All version @echo Done. Please confirm the messages on screen. diff --git a/Windows/RevokeChinaCerts_Base.bat b/Windows/RevokeChinaCerts_Base.bat index aec7b06..82088c3 100644 --- a/Windows/RevokeChinaCerts_Base.bat +++ b/Windows/RevokeChinaCerts_Base.bat @@ -76,6 +76,16 @@ if "%PROCESSOR_ARCHITECTURE%%PROCESSOR_ARCHITEW6432%" == "x86" set CertMgr="%~dp %CertMgr% -del -c -sha1 7514436E903C901069980499CA70DE74FC06C83C -s -r localMachine AuthRoot %CertMgr% -del -c -sha1 7514436E903C901069980499CA70DE74FC06C83C -s -r CurrentUser Root %CertMgr% -del -c -sha1 7514436E903C901069980499CA70DE74FC06C83C -s -r CurrentUser AuthRoot +:: JGZXCA +%CertMgr% -del -c -sha1 7A4AA61E2A88704115E47748D8647DAEE6837559 -s -r localMachine Root +%CertMgr% -del -c -sha1 7A4AA61E2A88704115E47748D8647DAEE6837559 -s -r localMachine AuthRoot +%CertMgr% -del -c -sha1 7A4AA61E2A88704115E47748D8647DAEE6837559 -s -r CurrentUser Root +%CertMgr% -del -c -sha1 7A4AA61E2A88704115E47748D8647DAEE6837559 -s -r CurrentUser AuthRoot +:: Superfish, Inc. [Septembers/v998] +%CertMgr% -del -c -sha1 C864484869D41D2B0D32319C5A62F9315AAF2CBD -s -r localMachine Root +%CertMgr% -del -c -sha1 C864484869D41D2B0D32319C5A62F9315AAF2CBD -s -r localMachine AuthRoot +%CertMgr% -del -c -sha1 C864484869D41D2B0D32319C5A62F9315AAF2CBD -s -r CurrentUser Root +%CertMgr% -del -c -sha1 C864484869D41D2B0D32319C5A62F9315AAF2CBD -s -r CurrentUser AuthRoot @echo. @@ -93,9 +103,10 @@ if "%PROCESSOR_ARCHITECTURE%%PROCESSOR_ARCHITEW6432%" == "x86" set CertMgr="%~dp %CertMgr% -add -c "%~dp0\Certs\CNNIC_SSL_Entrust.crt" -s Disallowed %CertMgr% -add -c "%~dp0\Certs\[Suspicious]WaccBaiduCom.crt" -s Disallowed %CertMgr% -add -c "%~dp0\Certs\GiantRootCA.crt" -s Disallowed +%CertMgr% -add -c "%~dp0\Certs\JGZXCA.crt" -s Disallowed +%CertMgr% -add -c "%~dp0\Certs\Superfish_Inc.crt" -s Disallowed :: Print to screen. -::Exit @echo. @echo RevokeChinaCerts Base version @echo Done. Please confirm the messages on screen. diff --git a/Windows/RevokeChinaCerts_Extended.bat b/Windows/RevokeChinaCerts_Extended.bat index 7d46bd8..fcbd832 100644 --- a/Windows/RevokeChinaCerts_Extended.bat +++ b/Windows/RevokeChinaCerts_Extended.bat @@ -76,6 +76,16 @@ if "%PROCESSOR_ARCHITECTURE%%PROCESSOR_ARCHITEW6432%" == "x86" set CertMgr="%~dp %CertMgr% -del -c -sha1 7514436E903C901069980499CA70DE74FC06C83C -s -r localMachine AuthRoot %CertMgr% -del -c -sha1 7514436E903C901069980499CA70DE74FC06C83C -s -r CurrentUser Root %CertMgr% -del -c -sha1 7514436E903C901069980499CA70DE74FC06C83C -s -r CurrentUser AuthRoot +:: JGZXCA +%CertMgr% -del -c -sha1 7A4AA61E2A88704115E47748D8647DAEE6837559 -s -r localMachine Root +%CertMgr% -del -c -sha1 7A4AA61E2A88704115E47748D8647DAEE6837559 -s -r localMachine AuthRoot +%CertMgr% -del -c -sha1 7A4AA61E2A88704115E47748D8647DAEE6837559 -s -r CurrentUser Root +%CertMgr% -del -c -sha1 7A4AA61E2A88704115E47748D8647DAEE6837559 -s -r CurrentUser AuthRoot +:: Superfish, Inc. [Septembers/v998] +%CertMgr% -del -c -sha1 C864484869D41D2B0D32319C5A62F9315AAF2CBD -s -r localMachine Root +%CertMgr% -del -c -sha1 C864484869D41D2B0D32319C5A62F9315AAF2CBD -s -r localMachine AuthRoot +%CertMgr% -del -c -sha1 C864484869D41D2B0D32319C5A62F9315AAF2CBD -s -r CurrentUser Root +%CertMgr% -del -c -sha1 C864484869D41D2B0D32319C5A62F9315AAF2CBD -s -r CurrentUser AuthRoot :: Delete certificates(Extended part) :: CFCA GT CA(2011-06-13) @@ -145,9 +155,11 @@ if "%PROCESSOR_ARCHITECTURE%%PROCESSOR_ARCHITEW6432%" == "x86" set CertMgr="%~dp %CertMgr% -add -c "%~dp0\Certs\CNNIC_SSL_Entrust.crt" -s Disallowed %CertMgr% -add -c "%~dp0\Certs\[Suspicious]WaccBaiduCom.crt" -s Disallowed %CertMgr% -add -c "%~dp0\Certs\GiantRootCA.crt" -s Disallowed +%CertMgr% -add -c "%~dp0\Certs\JGZXCA.crt" -s Disallowed +%CertMgr% -add -c "%~dp0\Certs\Superfish_Inc.crt" -s Disallowed + :: Add certificates to CRL(Extended part) -:: Move to All version. -:: %CertMgr% -add -c ROOTCA.crt" -s Disallowed +::%CertMgr% -add -c ROOTCA.crt" -s Disallowed %CertMgr% -add -c "%~dp0\Certs\CFCA_GT_CA_201106.crt" -s Disallowed %CertMgr% -add -c "%~dp0\Certs\CFCA_GT_CA_201208.crt" -s Disallowed %CertMgr% -add -c "%~dp0\Certs\CFCA_EV_ROOT.crt" -s Disallowed @@ -160,7 +172,6 @@ if "%PROCESSOR_ARCHITECTURE%%PROCESSOR_ARCHITEW6432%" == "x86" set CertMgr="%~dp ::%CertMgr% -add -c "%~dp0\Certs\SZCA_200307.crt" -s Disallowed :: Print to screen. -::Exit @echo. @echo RevokeChinaCerts Extended version @echo Done. Please confirm the messages on screen. diff --git a/Windows/RevokeChinaCerts_Restore.bat b/Windows/RevokeChinaCerts_Restore.bat index 666f04f..b7a184f 100644 --- a/Windows/RevokeChinaCerts_Restore.bat +++ b/Windows/RevokeChinaCerts_Restore.bat @@ -41,6 +41,10 @@ if "%PROCESSOR_ARCHITECTURE%%PROCESSOR_ARCHITEW6432%" == "x86" set CertMgr="%~dp %CertMgr% -del -c -sha1 561422647B89BE22F203EBCAEF52B5007227510A -s Disallowed :: GiantRootCA %CertMgr% -del -c -sha1 7514436E903C901069980499CA70DE74FC06C83C -s Disallowed +:: JGZXCA +%CertMgr% -del -c -sha1 7A4AA61E2A88704115E47748D8647DAEE6837559 -s Disallowed +:: Superfish, Inc. [Septembers/v998] +%CertMgr% -del -c -sha1 C864484869D41D2B0D32319C5A62F9315AAF2CBD -s Disallowed :: Restore certificates(Extended part) :: CFCA GT CA(2011-06-13) diff --git a/Windows/SoftCertPolicyAppender/.gitignore b/Windows/SoftCertPolicyAppender/.gitignore deleted file mode 100644 index 3dbb5b0..0000000 --- a/Windows/SoftCertPolicyAppender/.gitignore +++ /dev/null @@ -1,182 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. - -# User-specific files -*.suo -*.user -*.sln.docstates - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -x64/ -build/ -bld/ -[Bb]in/ -[Oo]bj/ - -# Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets -!packages/*/build/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -#NUNIT -*.VisualState.xml -TestResult.xml - -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.pch -#*.pdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opensdf -*.sdf -*.cachefile - -# Visual Studio profiler -*.psess -*.vsp -*.vspx - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding addin-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# NCrunch -*.ncrunch* -_NCrunch_* -.*crunch*.local.xml - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml - -# NuGet Packages Directory -## TODO: If you have NuGet Package Restore enabled, uncomment the next line -#packages/ -## TODO: If the tool you use requires repositories.config, also uncomment the next line -#!packages/repositories.config - -# Windows Azure Build Output -csx/ -*.build.csdef - -# Windows Store app package directory -AppPackages/ - -# Others -sql/ -*.Cache -ClientBin/ -[Ss]tyle[Cc]op.* -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.pfx -*.publishsettings - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file to a newer -# Visual Studio version. Backup files are not needed, because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm - -# SQL Server files -App_Data/*.mdf -App_Data/*.ldf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings - -# Microsoft Fakes -FakesAssemblies/ - -# ========================= -# Windows detritus -# ========================= - -# Windows image file caches -Thumbs.db -ehthumbs.db - -# Folder config file -Desktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -#diff backup -*.orig diff --git a/Windows/SoftCertPolicyAppender/README.md b/Windows/SoftCertPolicyAppender/README.md deleted file mode 100644 index 49970ca..0000000 --- a/Windows/SoftCertPolicyAppender/README.md +++ /dev/null @@ -1,20 +0,0 @@ -## 使用方法 ## -SoftCertPolicyAppender.exe <傿•°> <è¯ä¹¦è·¯å¾„> - -SoftCertPolicyAppender.exe <傿•°> <è¯ä¹¦è·¯å¾„> <è¯ä¹¦è·¯å¾„2> ... - -**傿•°è¯´æ˜Ž** - -- --set-force å¯ç”¨å¼ºåˆ¶ç–ç•¥ -- --unset-force å–æ¶ˆå¼ºåˆ¶ç–ç•¥ -- -r 移除è¯ä¹¦è§„则 -- -h æ˜¾ç¤ºå¸®åŠ©ä¿¡æ¯ - - -## 备注 ## -- 需è¦ç®¡ç†å‘˜æƒé™ -- 需è¦[.net framework 4.0](http://www.microsoft.com/en-us/download/details.aspx?id=17718) - - -## 引用组件 ## -[local-policy](https://bitbucket.org/MartinEden/local-policy/overview) diff --git a/Windows/SoftCertPolicyAppender/prebuilt/LocalPolicy.dll b/Windows/SoftCertPolicyAppender/prebuilt/LocalPolicy.dll deleted file mode 100644 index ce6182b9df0b1bd80182a285ce8e346af164932f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15360 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 -- GitLab