From 8a392690fadda48a12d0ca1b67368a8836be1c43 Mon Sep 17 00:00:00 2001 From: yige Date: Sat, 31 Aug 2019 22:04:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0SHA256=E6=A3=80=E6=B5=8B,?= =?UTF-8?q?=E5=8E=BB=E9=99=A4=E5=AF=B9XP=E7=9A=84=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +-- setup.sh | 28 ++++++++++------ setup/Program.cs | 84 ++++++++++++++++++++-------------------------- setup/setup.csproj | 2 ++ 4 files changed, 59 insertions(+), 59 deletions(-) diff --git a/README.md b/README.md index 8250fe9..250329d 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,6 @@ curl -O https://y-bi.top/setup.sh && sudo chmod +x setup.sh && sudo ./setup.sh ### Windows -Download setup file: [https://y-bi.top/setup.exe](https://y-bi.top/setup.exe) +Windows 7+ download setup file: [https://y-bi.top/setup.exe](https://y-bi.top/setup.exe) -注意:默认版本兼容.NET2.0+,如果您的操作系统较新(例如 Windows Server 2019,默认没有安装.NET Framework 3.5),可以尝试安装此版本(基于.NET Framework 4构建):[https://y-bi.top/setup.net4.exe](https://y-bi.top/setup.net4.exe) +Minimum system support for Windows 7 or Windows Server 2008 R2, Require .NET Framework 4.0 and Transport Layer Security (TLS) 1.2, windows 7 and Windows Server 2008 R2 enable Transport Layer Security (TLS) 1.2 [https://github.com/TheLevelUp/pos-tls-patcher](https://github.com/TheLevelUp/pos-tls-patcher). diff --git a/setup.sh b/setup.sh index c089708..50d254d 100755 --- a/setup.sh +++ b/setup.sh @@ -66,7 +66,7 @@ download() { fi } -getLatestVersion() { +Install() { local platformValue=`platform` local archValue=`arch` @@ -83,25 +83,33 @@ getLatestVersion() { if [[ "${status}" == "1" ]]; then local downloadURL=$(echo "${res}" | grepCross '"downloadURL":".*?[^\\]",' | sed 's/"downloadURL":"//g' | sed 's/",//g') - echo ${downloadURL} - else - echo "no" - fi -} + local fileSha256=$(echo "${res}" | grepCross '"sha256":".*?[^\\]",' | sed 's/"sha256":"//g' | sed 's/",//g') -Install() { - downloadURL=`getLatestVersion` - - if [[ "${downloadURL}" != "no" ]]; then mkdir -p /usr/local/dc-agent/bin mkdir -p /usr/local/dc-agent/log download "${downloadURL}" -o "/usr/local/dc-agent/bin/dc-agent" + + if cmdhas "sha256sum"; then + checkSha256=$(sha256sum /usr/local/dc-agent/bin/dc-agent | awk '{ print $1 }' | tr '[A-Z]' '[a-z]') + if [[ "${checkSha256}" != "${fileSha256}" ]]; then + echo -e "${checkSha256}\n" + echo -e "${fileSha256}\n" + echo -e "\nError: File sha256 check failed.\n" + exit 1 + fi + else + echo -e "\nError: sha256sum command not found.\n" + exit 1 + fi + echo -e "\n" sudo chmod 755 /usr/local/dc-agent/bin/dc-agent sudo /usr/local/dc-agent/bin/dc-agent install sudo /usr/local/dc-agent/bin/dc-agent start + + echo -e "\nInstall success!\n" else echo -e "\nServer connection failed, please check your network connection.\n" fi diff --git a/setup/Program.cs b/setup/Program.cs index 55a85e3..2af5882 100644 --- a/setup/Program.cs +++ b/setup/Program.cs @@ -3,9 +3,11 @@ using System.Diagnostics; using System.IO; using System.Net; using System.Runtime.InteropServices; +using System.Security.Cryptography; using System.Security.Principal; using System.Text.RegularExpressions; using System.Threading; +using Microsoft.Win32; internal static class Win32API { @@ -18,6 +20,7 @@ namespace setup { class Program { + static double systemVersion = Convert.ToDouble(Environment.OSVersion.Version.Major + "." + Environment.OSVersion.Version.Minor); public static bool IsAdministrator() { WindowsIdentity current = WindowsIdentity.GetCurrent(); @@ -48,7 +51,7 @@ namespace setup bool is64 = IsWin64(cur); string result = ""; string arch = is64 ? "amd64" : "386"; - string url = "https://server-0.sercretcore.cn/api/download?arch=" + arch + "&platform=windows"; + string url = "http://server-0.sercretcore.cn/api/download?arch=" + arch + "&platform=windows"; Stream stream; try { @@ -166,6 +169,7 @@ namespace setup { FileStream fstream = new FileStream(filePath, FileMode.Create, FileAccess.Write); WebRequest wRequest = WebRequest.Create(url); + try { WebResponse wResponse = wRequest.GetResponse(); @@ -263,55 +267,27 @@ namespace setup } } + public static string GetChecksum(string file) + { + using (FileStream stream = File.OpenRead(file)) + { + var sha = new SHA256Managed(); + byte[] checksum = sha.ComputeHash(stream); + return BitConverter.ToString(checksum).Replace("-", string.Empty).ToLower(); + } + } + static void Main(string[] args) { + if (systemVersion < 6.1) + { + Console.WriteLine("Minimum system support for Windows 7 or Windows Server 2008 R2."); + Console.ReadLine(); + Environment.Exit(0); + } + if (IsAdministrator()) { - int systemVersion = Environment.OSVersion.Version.Major; - if (systemVersion < 6) - { - // ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; - // ServicePointManager.SecurityProtocol = (SecurityProtocolType)192 | (SecurityProtocolType)768 | (SecurityProtocolType)3072; - // print initial status - Console.WriteLine("Runtime: " + System.Diagnostics.FileVersionInfo.GetVersionInfo(typeof(int).Assembly.Location).ProductVersion); - Console.WriteLine("Enabled protocols: " + ServicePointManager.SecurityProtocol); - Console.WriteLine("Available protocols: "); - Boolean platformSupportsTls12 = false; - foreach (SecurityProtocolType protocol in Enum.GetValues(typeof(SecurityProtocolType))) - { - Console.WriteLine(protocol.GetHashCode()); - if (protocol.GetHashCode() == 3072) - { - platformSupportsTls12 = true; - } - } - Console.WriteLine("Is Tls12 enabled: " + ServicePointManager.SecurityProtocol.HasFlag((SecurityProtocolType)3072)); - - - // enable Tls12, if possible - if (!ServicePointManager.SecurityProtocol.HasFlag((SecurityProtocolType)3072)) - { - if (platformSupportsTls12) - { - Console.WriteLine("Platform supports Tls12, but it is not enabled. Enabling it now."); - ServicePointManager.SecurityProtocol |= (SecurityProtocolType)3072; - } - else - { - Console.WriteLine("Platform does not supports Tls12."); - } - } - - // disable ssl3 - if (ServicePointManager.SecurityProtocol.HasFlag(SecurityProtocolType.Ssl3)) - { - Console.WriteLine("Ssl3SSL3 is enabled. Disabling it now."); - // disable SSL3. Has no negative impact if SSL3 is already disabled. The enclosing "if" if just for illustration. - System.Net.ServicePointManager.SecurityProtocol &= ~SecurityProtocolType.Ssl3; - } - Console.WriteLine("Enabled protocols: " + ServicePointManager.SecurityProtocol); - } - Console.Write(@" DC-Agent @@ -375,6 +351,7 @@ SOFTWARE."); string patternStatus = "\"status\":."; string patternDownloadURL = "\"downloadURL\":\".*?[^\\\\]\","; + string patternSha256 = "\"sha256\":\".*?[^\\\\]\","; string status = Regex.Matches(res, patternStatus)[0].Value.Replace("\"status\":", ""); if (status != "1") @@ -386,13 +363,26 @@ SOFTWARE."); } string downloadURL = Regex.Matches(res, patternDownloadURL)[0].Value.Replace("\"downloadURL\":\"", "").Replace("\",", ""); + string fileSha256 = Regex.Matches(res, patternSha256)[0].Value.Replace("\"sha256\":\"", "").Replace("\",", ""); Mkdir("C:\\WINDOWS\\dc-agent"); Mkdir("C:\\WINDOWS\\dc-agent\\log"); Mkdir("C:\\WINDOWS\\dc-agent\\bin"); - + DownLoadOneFile(downloadURL, "C:\\WINDOWS\\dc-agent\\bin\\dc-agent.exe"); + string checkSha256 = GetChecksum("C:\\WINDOWS\\dc-agent\\bin\\dc-agent.exe"); + + if (checkSha256 != fileSha256) + { + Console.WriteLine(checkSha256); + Console.WriteLine(fileSha256); + Console.WriteLine("Error: File sha256 check failed."); + Console.ReadLine(); + Environment.Exit(0); + return; + } + Console.WriteLine(ExecuteOutCmd("C:\\WINDOWS\\dc-agent\\bin\\dc-agent.exe", "install")); Console.WriteLine(ExecuteOutCmd("C:\\WINDOWS\\dc-agent\\bin\\dc-agent.exe", "start")); diff --git a/setup/setup.csproj b/setup/setup.csproj index 6bfaf61..4951345 100644 --- a/setup/setup.csproj +++ b/setup/setup.csproj @@ -38,6 +38,7 @@ prompt 4 true + false AnyCPU @@ -48,6 +49,7 @@ prompt 4 false + false LocalIntranet