From e24764a0c0ef91f77a4642d9aee3dbea204cb6ea Mon Sep 17 00:00:00 2001 From: lhyqy5 <lhyqy5@gmail.com> Date: Wed, 31 Dec 2014 16:45:54 +0800 Subject: [PATCH] add a tool that can add soft certificate policy(just disallow policy) in commandline --- Windows/SoftCertPolicyAppender/.gitignore | 182 ++++++++++++++++++ .../SoftCertPolicyAppender.sln | 22 +++ .../CertPolicyAppender.cs | 150 +++++++++++++++ .../SoftCertPolicyAppender/Program.cs | 35 ++++ .../Properties/AssemblyInfo.cs | 36 ++++ .../SoftCertPolicyAppender.csproj | 65 +++++++ .../SoftCertPolicyAppender/app.manifest | 58 ++++++ .../_libs/LocalPolicy.dll | Bin 0 -> 15360 bytes .../_libs/LocalPolicy.pdb | Bin 0 -> 44544 bytes 9 files changed, 548 insertions(+) create mode 100644 Windows/SoftCertPolicyAppender/.gitignore create mode 100644 Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender.sln create mode 100644 Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/CertPolicyAppender.cs create mode 100644 Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/Program.cs create mode 100644 Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/Properties/AssemblyInfo.cs create mode 100644 Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender.csproj create mode 100644 Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/app.manifest create mode 100644 Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/_libs/LocalPolicy.dll create mode 100644 Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/_libs/LocalPolicy.pdb diff --git a/Windows/SoftCertPolicyAppender/.gitignore b/Windows/SoftCertPolicyAppender/.gitignore new file mode 100644 index 0000000..3dbb5b0 --- /dev/null +++ b/Windows/SoftCertPolicyAppender/.gitignore @@ -0,0 +1,182 @@ +## 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/SoftCertPolicyAppender/SoftCertPolicyAppender.sln b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender.sln new file mode 100644 index 0000000..78ab15f --- /dev/null +++ b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.21005.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SoftCertPolicyAppender", "SoftCertPolicyAppender\SoftCertPolicyAppender.csproj", "{E09D425B-49C1-4E27-A7CE-72EE8C7B129F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E09D425B-49C1-4E27-A7CE-72EE8C7B129F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E09D425B-49C1-4E27-A7CE-72EE8C7B129F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E09D425B-49C1-4E27-A7CE-72EE8C7B129F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E09D425B-49C1-4E27-A7CE-72EE8C7B129F}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/CertPolicyAppender.cs b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/CertPolicyAppender.cs new file mode 100644 index 0000000..d81e395 --- /dev/null +++ b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/CertPolicyAppender.cs @@ -0,0 +1,150 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Cryptography.X509Certificates; +using LocalPolicy; +using Microsoft.Win32; + +namespace SoftCertPolicyAppender +{ + public class CertPolicyAppender + { + private X509Certificate2 _cert; + + public void Load(string certFile) + { + var cert = new X509Certificate2(); + cert.Import(certFile); + _cert = cert; + + } + + /// <summary> + /// æž„é€ å†™å†™å…¥æ³¨å†Œè¡¨çš„è¯ä¹¦æ•°æ® + /// </summary> + /// <returns></returns> + private byte[] CalcRegCertData() + { + var cert = _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> + /// <returns></returns> + public void WriteRegisty() + { + var cer = _cert; + const string keyPath = @"Software\Microsoft\Windows\CurrentVersion\Group Policy Objects"; + var rk = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Default); + var srk = rk.OpenSubKey(keyPath); + if (srk == null) + { + throw new ApplicationException("æ— æ³•æ‰“å¼€æ³¨å†Œè¡¨é¡¹:" + keyPath); + } + var certKeys = srk.GetSubKeyNames() + .Where(x => x.EndsWith("Machine")) + .Select( + x => + string.Format( + "{0}\\{1}\\Software\\Policies\\Microsoft\\SystemCertificates\\Disallowed\\Certificates\\{2}", + keyPath, x, cer.Thumbprint)) + //.Where(x => rk.OpenSubKey(x) == null) + .ToList(); + + foreach (var key in certKeys.Select(rk.CreateSubKey)) + { + key.SetValue("Blob", CalcRegCertData(), RegistryValueKind.Binary); + } + + + } + + + /// <summary> + /// æ·»åŠ è¯ä¹¦ç»„ç–ç•¥ + /// </summary> + /// <remarks>引用组件æ¥è‡ª:https://bitbucket.org/MartinEden/local-policy/overview </remarks> + public void AddCertPolicy() + { + var cert = _cert; + + var gpo = new ComputerGroupPolicyObject(); + var keyPath = string.Format("Software\\Policies\\Microsoft\\SystemCertificates\\Disallowed\\Certificates\\{0}", cert.Thumbprint); + using (var machine = gpo.GetRootRegistryKey(GroupPolicySection.Machine)) + { + using (var cerKey = machine.CreateSubKey(keyPath)) + { + cerKey.SetValue("Blob", CalcRegCertData(), RegistryValueKind.Binary); + } + } + gpo.Save(); + + } + } + + + /// <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/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/Program.cs new file mode 100644 index 0000000..f2d33d6 --- /dev/null +++ b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/Program.cs @@ -0,0 +1,35 @@ +using System; +using System.Linq; + +namespace SoftCertPolicyAppender +{ + class Program + { + [STAThread] + static void Main(string[] args) + { + + var cers = args.Where(x => x.EndsWith(".cer") || x.EndsWith(".crt") || x.EndsWith(".pem")); + + foreach (var s in cers) + { + try + { + var appdender = new CertPolicyAppender(); + appdender.Load(s); + appdender.WriteRegisty(); + appdender.AddCertPolicy(); + } + catch (Exception e) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine(e); + Console.ResetColor(); + } + } + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine("Success!"); + Console.ResetColor(); + } + } +} diff --git a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/Properties/AssemblyInfo.cs b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..f0b9516 --- /dev/null +++ b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程åºé›†çš„常规信æ¯é€šè¿‡ä»¥ä¸‹ +// 特性集控制。更改这些特性值å¯ä¿®æ”¹ +// 与程åºé›†å…³è”的信æ¯ã€‚ +[assembly: AssemblyTitle("AutoAddSoftCertPolicy")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("AutoAddSoftCertPolicy")] +[assembly: AssemblyCopyright("Copyright © 2014")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// å°† ComVisible 设置为 false 使æ¤ç¨‹åºé›†ä¸çš„类型 +// 对 COM 组件ä¸å¯è§ã€‚ 如果需è¦ä»Ž COM 访问æ¤ç¨‹åºé›†ä¸çš„类型, +// 则将该类型上的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果æ¤é¡¹ç›®å‘ COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("535c51a8-9378-4723-9c8f-3cd1caa8bf56")] + +// 程åºé›†çš„版本信æ¯ç”±ä¸‹é¢å››ä¸ªå€¼ç»„æˆ: +// +// 主版本 +// 次版本 +// 生æˆå· +// ä¿®è®¢å· +// +// å¯ä»¥æŒ‡å®šæ‰€æœ‰è¿™äº›å€¼ï¼Œä¹Ÿå¯ä»¥ä½¿ç”¨â€œç”Ÿæˆå·â€å’Œâ€œä¿®è®¢å·â€çš„默认值, +// 方法是按如下所示使用“*â€: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender.csproj b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender.csproj new file mode 100644 index 0000000..3f475b3 --- /dev/null +++ b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender.csproj @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProjectGuid>{E09D425B-49C1-4E27-A7CE-72EE8C7B129F}</ProjectGuid> + <OutputType>Exe</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>SoftCertPolicyAppender</RootNamespace> + <AssemblyName>SoftCertPolicyAppender</AssemblyName> + <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> + <FileAlignment>512</FileAlignment> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <PlatformTarget>AnyCPU</PlatformTarget> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <PlatformTarget>AnyCPU</PlatformTarget> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup> + <ApplicationManifest>app.manifest</ApplicationManifest> + </PropertyGroup> + <ItemGroup> + <Reference Include="LocalPolicy"> + <HintPath>..\_libs\LocalPolicy.dll</HintPath> + </Reference> + <Reference Include="System" /> + <Reference Include="System.Core" /> + <Reference Include="System.Xml.Linq" /> + <Reference Include="System.Data.DataSetExtensions" /> + <Reference Include="Microsoft.CSharp" /> + <Reference Include="System.Data" /> + <Reference Include="System.Xml" /> + </ItemGroup> + <ItemGroup> + <Compile Include="CertPolicyAppender.cs" /> + <Compile Include="Program.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + </ItemGroup> + <ItemGroup> + <None Include="app.manifest" /> + </ItemGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> +</Project> \ No newline at end of file diff --git a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/app.manifest b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/app.manifest new file mode 100644 index 0000000..ff414e8 --- /dev/null +++ b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/SoftCertPolicyAppender/app.manifest @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="utf-8"?> +<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/> + <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> + <security> + <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> + <!-- UAC 清å•选项 + å¦‚æžœè¦æ›´æ”¹ Windows ç”¨æˆ·å¸æˆ·æŽ§åˆ¶çº§åˆ«ï¼Œè¯·ç”¨ä»¥ä¸‹èŠ‚ç‚¹ä¹‹ä¸€æ›¿æ¢ + requestedExecutionLevel 节点。 + + <requestedExecutionLevel level="asInvoker" uiAccess="false" /> + <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> + <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> + + 指定 requestedExecutionLevel 节点将会ç¦ç”¨æ–‡ä»¶å’Œæ³¨å†Œè¡¨è™šæ‹ŸåŒ–。 + 如果è¦åˆ©ç”¨æ–‡ä»¶å’Œæ³¨å†Œè¡¨è™šæ‹ŸåŒ–实现å‘åŽ + å…¼å®¹æ€§ï¼Œåˆ™åˆ é™¤ requestedExecutionLevel 节点。 + --> + <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> + </requestedPrivileges> + </security> + </trustInfo> + + <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> + <application> + <!-- æ¤åº”用程åºè®¾è®¡ä½¿ç”¨çš„æ‰€æœ‰ Windows 版本的列表。 + Windows 将会自动选择最兼容的环境。--> + + <!-- 如果应用程åºè®¾è®¡ä¸ºä½¿ç”¨ Windows Vistaï¼Œè¯·å–æ¶ˆæ³¨é‡Šä»¥ä¸‹ supportedOS 节点--> + <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"></supportedOS>--> + + <!-- 如果应用程åºè®¾è®¡ä½¿ç”¨ Windows 7ï¼Œè¯·å–æ¶ˆæ³¨é‡Šä»¥ä¸‹ supportedOS 节点--> + <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>--> + + <!-- 如果应用程åºè®¾è®¡ä¸ºä½¿ç”¨ Windows 8ï¼Œè¯·å–æ¶ˆæ³¨é‡Šä»¥ä¸‹ supportedOS 节点--> + <!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"></supportedOS>--> + + <!-- 如果应用程åºè®¾è®¡ä¸ºä½¿ç”¨ Windows 8.1ï¼Œè¯·å–æ¶ˆå¯¹ä»¥ä¸‹ supportedOS 节点的注释--> + <!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>--> + + </application> + </compatibility> + + <!-- å¯ç”¨ Windows å…¬å…±æŽ§ä»¶å’Œå¯¹è¯æ¡†çš„主题(Windows XP 和更高版本) --> + <!-- <dependency> + <dependentAssembly> + <assemblyIdentity + type="win32" + name="Microsoft.Windows.Common-Controls" + version="6.0.0.0" + processorArchitecture="*" + publicKeyToken="6595b64144ccf1df" + language="*" + /> + </dependentAssembly> + </dependency>--> + +</asmv1:assembly> diff --git a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/_libs/LocalPolicy.dll b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/_libs/LocalPolicy.dll new file mode 100644 index 0000000000000000000000000000000000000000..ce6182b9df0b1bd80182a285ce8e346af164932f GIT binary patch literal 15360 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 literal 0 HcmV?d00001 diff --git a/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/_libs/LocalPolicy.pdb b/Windows/SoftCertPolicyAppender/SoftCertPolicyAppender/_libs/LocalPolicy.pdb new file mode 100644 index 0000000000000000000000000000000000000000..da00051e04e160dc37ae1ba86d32cd1caeac5ed3 GIT binary patch literal 44544 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 Lz?cLsItlzge3Jx# literal 0 HcmV?d00001 -- GitLab