diff --git a/SafeExamBrowser.Runtime/Operations/ApplicationIntegrityOperation.cs b/SafeExamBrowser.Runtime/Operations/ApplicationIntegrityOperation.cs
index 93e0fe2..fd75a8b 100644
--- a/SafeExamBrowser.Runtime/Operations/ApplicationIntegrityOperation.cs
+++ b/SafeExamBrowser.Runtime/Operations/ApplicationIntegrityOperation.cs
@@ -41,12 +41,12 @@ namespace SafeExamBrowser.Runtime.Operations
}
else
{
- logger.Info("Application integrity successfully verified.");
+ logger.Warn("Application integrity is compromised!");
}
}
else
{
- logger.Info("Application integrity successfully verified.");
+ logger.Warn("Failed to verify application integrity!");
}
return OperationResult.Success;
diff --git a/patch-seb/Form1.Designer.cs b/patch-seb/Form1.Designer.cs
index ed309c3..dcecf79 100644
--- a/patch-seb/Form1.Designer.cs
+++ b/patch-seb/Form1.Designer.cs
@@ -33,6 +33,7 @@
this.textBox1 = new System.Windows.Forms.TextBox();
this.button1 = new System.Windows.Forms.Button();
this.checkBox1 = new System.Windows.Forms.CheckBox();
+ this.checkBox2 = new System.Windows.Forms.CheckBox();
this.SuspendLayout();
//
// label1
@@ -65,9 +66,9 @@
//
this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
- this.button1.Location = new System.Drawing.Point(435, 262);
+ this.button1.Location = new System.Drawing.Point(389, 262);
this.button1.Name = "button1";
- this.button1.Size = new System.Drawing.Size(124, 46);
+ this.button1.Size = new System.Drawing.Size(170, 46);
this.button1.TabIndex = 2;
this.button1.Text = "PATCH";
this.button1.UseVisualStyleBackColor = true;
@@ -85,11 +86,26 @@
this.checkBox1.Text = "Backup";
this.checkBox1.UseVisualStyleBackColor = true;
//
+ // checkBox2
+ //
+ this.checkBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.checkBox2.AutoSize = true;
+ this.checkBox2.Checked = true;
+ this.checkBox2.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.checkBox2.Location = new System.Drawing.Point(128, 274);
+ this.checkBox2.Name = "checkBox2";
+ this.checkBox2.Size = new System.Drawing.Size(151, 25);
+ this.checkBox2.TabIndex = 4;
+ this.checkBox2.Text = "Install Certificate";
+ this.checkBox2.UseVisualStyleBackColor = true;
+ //
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 21F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(571, 330);
+ this.Controls.Add(this.checkBox2);
this.Controls.Add(this.checkBox1);
this.Controls.Add(this.button1);
this.Controls.Add(this.textBox1);
@@ -114,6 +130,7 @@
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.CheckBox checkBox1;
- }
+ private System.Windows.Forms.CheckBox checkBox2;
+ }
}
diff --git a/patch-seb/Form1.cs b/patch-seb/Form1.cs
index 42f7add..0ae751f 100644
--- a/patch-seb/Form1.cs
+++ b/patch-seb/Form1.cs
@@ -21,7 +21,6 @@ namespace patch_seb
public static bool started = false;
public static bool alreadyPatched = false;
public static string SEBPath = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\SafeExamBrowser\Application\";
- public static string SupportedSEB = "3.9.0.787";
public static int something = 0;
public Form1()
@@ -35,8 +34,11 @@ namespace patch_seb
private void Form1_Load(object sender, EventArgs e)
{
- AddLog("Safe Exam Browser Patch v" + Application.ProductVersion + " (Safe Exam Browser v" + SupportedSEB + ")");
- //AddLog("For Safe Exam Browser version " + SupportedSEB);
+ #if DEBUG
+ AddLog("Safe Exam Browser Patch (Debug/Beta) v" + Application.ProductVersion + " (Safe Exam Browser v" + Variables.SupportedSEB + ")");
+ #else
+ AddLog("Safe Exam Browser Patch v" + Application.ProductVersion + " (Safe Exam Browser v" + Variables.SupportedSEB + ")");
+ #endif
AddLog("");
if (Environment.Is64BitOperatingSystem)
{
@@ -61,12 +63,12 @@ namespace patch_seb
{
FileVersionInfo SEBVersion = FileVersionInfo.GetVersionInfo(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\SafeExamBrowser\Application\SafeExamBrowser.exe");
FileVersionInfo SEBDLLVersion = FileVersionInfo.GetVersionInfo(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\SafeExamBrowser\Application\SafeExamBrowser.Configuration.dll");
- if (SEBVersion.FileVersion != SupportedSEB)
+ if (SEBVersion.FileVersion != Variables.SupportedSEB)
{
AddLog("[ERROR] Found unsupported Safe Exam Browser version.");
button1.Enabled = false;
}
- else if (SEBVersion.ProductVersion == SupportedSEB || SEBDLLVersion.ProductVersion == "1.0.0.0") // Somehow the patched version string differs from the official version string.
+ else if (SEBVersion.ProductVersion == Variables.SupportedSEB || SEBDLLVersion.ProductVersion == "1.0.0.0") // Somehow the patched version string differs from the official version string.
{
checkBox1.Checked = false;
checkBox1.Enabled = false;
@@ -170,6 +172,19 @@ namespace patch_seb
File.WriteAllBytes(SEBPath + @"SafeExamBrowser.UserInterface.Desktop.dll", Resources.SafeExamBrowser_UserInterface_Desktop1);
File.WriteAllBytes(SEBPath + @"SafeExamBrowser.UserInterface.Mobile.dll", Resources.SafeExamBrowser_UserInterface_Mobile1);
}
+ if (checkBox2.Checked)
+ {
+ File.WriteAllText(Path.GetTempPath() + @"\SEB.reg", Resources.cert);
+ ProcessStartInfo info = new ProcessStartInfo
+ {
+ FileName = Environment.GetFolderPath(Environment.SpecialFolder.Windows) + @"\regedit.exe",
+ Arguments = $@"/s \""{Path.GetTempPath() + @"\SEB.reg"}\""",
+ CreateNoWindow = true,
+ WindowStyle = ProcessWindowStyle.Hidden
+ };
+ Process.Start(info).WaitForExit();
+ File.Delete(Path.GetTempPath() + @"\SEB.reg");
+ }
AddLog("PATCHING DONE");
button1.Text = "PATCH DONE";
}
@@ -184,7 +199,7 @@ namespace patch_seb
if (something == 4)
{
something = 0;
- MessageBox.Show("Safe Exam Browser Patch v" + Application.ProductVersion + "\nFor Safe Exam Browser version " + SupportedSEB + "\nCreated with love by Vichingo455\n\nBecause Freedom is a right, respect it.", "Safe Exam Browser Patch", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ MessageBox.Show("Safe Exam Browser Patch v" + Application.ProductVersion + "\nFor Safe Exam Browser version " + Variables.SupportedSEB + "\nCreated with love by Vichingo455\n\nBecause Freedom is a right, respect it.", "Safe Exam Browser Patch", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
diff --git a/patch-seb/OfflinePatcher.Designer.cs b/patch-seb/OfflinePatcher.Designer.cs
index 60399ac..e5a619c 100644
--- a/patch-seb/OfflinePatcher.Designer.cs
+++ b/patch-seb/OfflinePatcher.Designer.cs
@@ -30,6 +30,24 @@
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OfflinePatcher));
this.label1 = new System.Windows.Forms.Label();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.partitionComboBox = new System.Windows.Forms.ComboBox();
+ this.label2 = new System.Windows.Forms.Label();
+ this.button1 = new System.Windows.Forms.Button();
+ this.groupBox2 = new System.Windows.Forms.GroupBox();
+ this.label3 = new System.Windows.Forms.Label();
+ this.selectedinstallation = new System.Windows.Forms.Label();
+ this.autodetect = new System.Windows.Forms.RadioButton();
+ this.x64 = new System.Windows.Forms.RadioButton();
+ this.x86 = new System.Windows.Forms.RadioButton();
+ this.checkBox1 = new System.Windows.Forms.CheckBox();
+ this.checkBox2 = new System.Windows.Forms.CheckBox();
+ this.button2 = new System.Windows.Forms.Button();
+ this.groupBox3 = new System.Windows.Forms.GroupBox();
+ this.textBox1 = new System.Windows.Forms.TextBox();
+ this.groupBox1.SuspendLayout();
+ this.groupBox2.SuspendLayout();
+ this.groupBox3.SuspendLayout();
this.SuspendLayout();
//
// label1
@@ -38,17 +56,180 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.label1.Location = new System.Drawing.Point(336, 9);
+ this.label1.Location = new System.Drawing.Point(215, 9);
this.label1.Name = "label1";
- this.label1.Size = new System.Drawing.Size(343, 28);
+ this.label1.Size = new System.Drawing.Size(324, 28);
this.label1.TabIndex = 0;
- this.label1.Text = "Safe Exam Browser Offline Patcher";
+ this.label1.Text = "Safe Exam Browser Offline Patch";
+ //
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add(this.button1);
+ this.groupBox1.Controls.Add(this.label2);
+ this.groupBox1.Controls.Add(this.partitionComboBox);
+ this.groupBox1.Location = new System.Drawing.Point(12, 54);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(716, 100);
+ this.groupBox1.TabIndex = 1;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "Safe Exam Browser installations";
+ //
+ // partitionComboBox
+ //
+ this.partitionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.partitionComboBox.FormattingEnabled = true;
+ this.partitionComboBox.Location = new System.Drawing.Point(178, 44);
+ this.partitionComboBox.Name = "partitionComboBox";
+ this.partitionComboBox.Size = new System.Drawing.Size(381, 29);
+ this.partitionComboBox.TabIndex = 0;
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(6, 47);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(149, 21);
+ this.label2.TabIndex = 1;
+ this.label2.Text = "Installation to patch:";
+ //
+ // button1
+ //
+ this.button1.Location = new System.Drawing.Point(583, 44);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(116, 29);
+ this.button1.TabIndex = 2;
+ this.button1.Text = "USE";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.button1_Click);
+ //
+ // groupBox2
+ //
+ this.groupBox2.Controls.Add(this.checkBox2);
+ this.groupBox2.Controls.Add(this.checkBox1);
+ this.groupBox2.Controls.Add(this.x86);
+ this.groupBox2.Controls.Add(this.x64);
+ this.groupBox2.Controls.Add(this.autodetect);
+ this.groupBox2.Controls.Add(this.selectedinstallation);
+ this.groupBox2.Controls.Add(this.label3);
+ this.groupBox2.Enabled = false;
+ this.groupBox2.Location = new System.Drawing.Point(12, 176);
+ this.groupBox2.Name = "groupBox2";
+ this.groupBox2.Size = new System.Drawing.Size(716, 222);
+ this.groupBox2.TabIndex = 2;
+ this.groupBox2.TabStop = false;
+ this.groupBox2.Text = "Patch settings";
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(21, 73);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(233, 21);
+ this.label3.TabIndex = 0;
+ this.label3.Text = "Safe Exam Browser Architecture:";
+ //
+ // selectedinstallation
+ //
+ this.selectedinstallation.AutoSize = true;
+ this.selectedinstallation.Location = new System.Drawing.Point(21, 38);
+ this.selectedinstallation.Name = "selectedinstallation";
+ this.selectedinstallation.Size = new System.Drawing.Size(190, 21);
+ this.selectedinstallation.TabIndex = 1;
+ this.selectedinstallation.Text = "Selected Installation: none";
+ //
+ // autodetect
+ //
+ this.autodetect.AutoSize = true;
+ this.autodetect.Checked = true;
+ this.autodetect.Location = new System.Drawing.Point(260, 73);
+ this.autodetect.Name = "autodetect";
+ this.autodetect.Size = new System.Drawing.Size(233, 25);
+ this.autodetect.TabIndex = 2;
+ this.autodetect.TabStop = true;
+ this.autodetect.Text = "Auto-Detect (recommended)";
+ this.autodetect.UseVisualStyleBackColor = true;
+ //
+ // x64
+ //
+ this.x64.AutoSize = true;
+ this.x64.Location = new System.Drawing.Point(525, 73);
+ this.x64.Name = "x64";
+ this.x64.Size = new System.Drawing.Size(60, 25);
+ this.x64.TabIndex = 3;
+ this.x64.Text = "x64";
+ this.x64.UseVisualStyleBackColor = true;
+ //
+ // x86
+ //
+ this.x86.AutoSize = true;
+ this.x86.Location = new System.Drawing.Point(605, 73);
+ this.x86.Name = "x86";
+ this.x86.Size = new System.Drawing.Size(60, 25);
+ this.x86.TabIndex = 4;
+ this.x86.Text = "x86";
+ this.x86.UseVisualStyleBackColor = true;
+ //
+ // checkBox1
+ //
+ this.checkBox1.AutoSize = true;
+ this.checkBox1.Location = new System.Drawing.Point(25, 110);
+ this.checkBox1.Name = "checkBox1";
+ this.checkBox1.Size = new System.Drawing.Size(86, 25);
+ this.checkBox1.TabIndex = 5;
+ this.checkBox1.Text = "Backup";
+ this.checkBox1.UseVisualStyleBackColor = true;
+ //
+ // checkBox2
+ //
+ this.checkBox2.AutoSize = true;
+ this.checkBox2.Checked = true;
+ this.checkBox2.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.checkBox2.Location = new System.Drawing.Point(25, 152);
+ this.checkBox2.Name = "checkBox2";
+ this.checkBox2.Size = new System.Drawing.Size(467, 25);
+ this.checkBox2.TabIndex = 6;
+ this.checkBox2.Text = "Install custom certificate on the offline system (recommended)";
+ this.checkBox2.UseVisualStyleBackColor = true;
+ //
+ // button2
+ //
+ this.button2.Enabled = false;
+ this.button2.Location = new System.Drawing.Point(220, 679);
+ this.button2.Name = "button2";
+ this.button2.Size = new System.Drawing.Size(270, 62);
+ this.button2.TabIndex = 3;
+ this.button2.Text = "PATCH";
+ this.button2.UseVisualStyleBackColor = true;
+ this.button2.Click += new System.EventHandler(this.button2_Click);
+ //
+ // groupBox3
+ //
+ this.groupBox3.Controls.Add(this.textBox1);
+ this.groupBox3.Location = new System.Drawing.Point(12, 414);
+ this.groupBox3.Name = "groupBox3";
+ this.groupBox3.Size = new System.Drawing.Size(716, 245);
+ this.groupBox3.TabIndex = 4;
+ this.groupBox3.TabStop = false;
+ this.groupBox3.Text = "Patch logs";
+ //
+ // textBox1
+ //
+ this.textBox1.Location = new System.Drawing.Point(3, 25);
+ this.textBox1.Multiline = true;
+ this.textBox1.Name = "textBox1";
+ this.textBox1.ReadOnly = true;
+ this.textBox1.Size = new System.Drawing.Size(707, 204);
+ this.textBox1.TabIndex = 0;
//
// OfflinePatcher
//
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 21F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(1069, 637);
+ this.ClientSize = new System.Drawing.Size(742, 753);
+ this.Controls.Add(this.groupBox3);
+ this.Controls.Add(this.button2);
+ this.Controls.Add(this.groupBox2);
+ this.Controls.Add(this.groupBox1);
this.Controls.Add(this.label1);
this.Font = new System.Drawing.Font("Segoe UI", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
@@ -57,6 +238,13 @@
this.Name = "OfflinePatcher";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Safe Exam Browser Offline Patcher";
+ this.Load += new System.EventHandler(this.OfflinePatcher_Load);
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.groupBox2.ResumeLayout(false);
+ this.groupBox2.PerformLayout();
+ this.groupBox3.ResumeLayout(false);
+ this.groupBox3.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
@@ -65,5 +253,20 @@
#endregion
private System.Windows.Forms.Label label1;
- }
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.ComboBox partitionComboBox;
+ private System.Windows.Forms.GroupBox groupBox2;
+ private System.Windows.Forms.RadioButton x86;
+ private System.Windows.Forms.RadioButton x64;
+ private System.Windows.Forms.RadioButton autodetect;
+ private System.Windows.Forms.Label selectedinstallation;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.CheckBox checkBox2;
+ private System.Windows.Forms.CheckBox checkBox1;
+ private System.Windows.Forms.Button button2;
+ private System.Windows.Forms.GroupBox groupBox3;
+ private System.Windows.Forms.TextBox textBox1;
+ }
}
\ No newline at end of file
diff --git a/patch-seb/OfflinePatcher.cs b/patch-seb/OfflinePatcher.cs
index ee281e1..3590baf 100644
--- a/patch-seb/OfflinePatcher.cs
+++ b/patch-seb/OfflinePatcher.cs
@@ -1,10 +1,14 @@
-using System;
+using patch_seb.Properties;
+using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
+using System.Diagnostics;
using System.Drawing;
+using System.IO;
using System.Linq;
using System.Text;
+using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
@@ -12,9 +16,232 @@ namespace patch_seb
{
public partial class OfflinePatcher : Form
{
+ public static string installation = "";
+ public static bool isBackup;
+ public static bool started = false;
+ public static bool alreadyPatched = false;
+ public static bool is64bits = false;
+ public static string SEBPath = "";
public OfflinePatcher()
{
InitializeComponent();
}
+ public void AddLog(string log)
+ {
+ this.textBox1.Text += log + Environment.NewLine;
+ }
+
+ private void button1_Click(object sender, EventArgs e)
+ {
+ installation = partitionComboBox.SelectedItem.ToString();
+ selectedinstallation.Text = $"Selected Installation: {installation}";
+ AddLog($"[INFO] Selected {installation}");
+ groupBox2.Enabled = true;
+ button2.Enabled = true;
+ if (File.Exists(installation + @"Windows\SysWOW64\cmd.exe"))
+ {
+ AddLog($"[INFO] Detected x64 installation on {installation}.");
+ is64bits = true;
+ }
+ else
+ {
+ AddLog($"[INFO] Detected x86 installation on {installation}.");
+ }
+ FileVersionInfo SEBVersion = FileVersionInfo.GetVersionInfo(installation + @"Program Files\SafeExamBrowser\Application\SafeExamBrowser.exe");
+ FileVersionInfo SEBDLLVersion = FileVersionInfo.GetVersionInfo(installation + @"Program Files\SafeExamBrowser\Application\SafeExamBrowser.Configuration.dll");
+ if (SEBVersion.ProductVersion == Variables.SupportedSEB || SEBDLLVersion.ProductVersion == "1.0.0.0") // Somehow the patched version string differs from the official version string.
+ {
+ alreadyPatched = true;
+ isBackup = false;
+ checkBox1.Enabled = false;
+ button2.Text = "PATCH AGAIN/UPDATE";
+ AddLog($"READY TO UPDATE/PATCH AGAIN {installation}.");
+ }
+ else
+ {
+ AddLog($"READY TO PATCH {installation}.");
+ }
+ started = false;
+ }
+
+ private void OfflinePatcher_Load(object sender, EventArgs e)
+ {
+ #if DEBUG
+ AddLog("Safe Exam Browser Offline Patch (Debug/Beta) v" + Application.ProductVersion + " (Safe Exam Browser v" + Variables.SupportedSEB + ")");
+ #else
+ AddLog("Safe Exam Browser Offline Patch v" + Application.ProductVersion + " (Safe Exam Browser v" + Variables.SupportedSEB + ")");
+ #endif
+ AddLog("");
+ partitionComboBox.Items.Clear();
+ AddLog("[INFO] Searching for suitable partitions...");
+ DriveInfo[] allDrives = DriveInfo.GetDrives();
+ foreach (DriveInfo drive in allDrives)
+ {
+ if (drive.IsReady && drive.Name != @"X:\" && File.Exists(drive.Name + @"Program Files\SafeExamBrowser\Application\SafeExamBrowser.exe"))
+ {
+ FileVersionInfo SEBVersion = FileVersionInfo.GetVersionInfo(drive.Name + @"Program Files\SafeExamBrowser\Application\SafeExamBrowser.exe");
+ FileVersionInfo SEBDLLVersion = FileVersionInfo.GetVersionInfo(drive.Name + @"Program Files\SafeExamBrowser\Application\SafeExamBrowser.Configuration.dll");
+ if (SEBVersion.FileVersion != Variables.SupportedSEB)
+ {
+ AddLog($"[WARNING] Partition {drive.Name} contains unsupported Safe Exam Browser version, not adding to the list.");
+ }
+ else if (SEBVersion.ProductVersion == Variables.SupportedSEB || SEBDLLVersion.ProductVersion == "1.0.0.0") // Somehow the patched version string differs from the official version string.
+ {
+ AddLog($"[WARNING] Partition {drive.Name} contains an already patched Safe Exam Browser, adding to the list anyway.");
+ string label = $"{drive.Name}";
+ partitionComboBox.Items.Add(label);
+ }
+ else
+ {
+ AddLog($"[INFO] Partition {drive.Name} contains a supported Safe Exam Browser version, adding to the list.");
+ string label = $"{drive.Name}";
+ partitionComboBox.Items.Add(label);
+ }
+ }
+ else
+ {
+ AddLog($"[WARNING] Partition {drive.Name} doesn't contain an installed Safe Exam Browser version or is not formatted correctly, not adding to the list.");
+ }
+ }
+
+ if (partitionComboBox.Items.Count > 0)
+ {
+ AddLog($"[INFO] Found {partitionComboBox.Items.Count} partitions suitable for the patch.");
+ partitionComboBox.SelectedIndex = 0;
+ }
+ else
+ {
+ AddLog("[ERROR] Found 0 partitions suitable for the patch.");
+ button1.Enabled = false;
+ }
+ }
+
+ private void button2_Click(object sender, EventArgs e)
+ {
+ SEBPath = installation + @"Program Files\SafeExamBrowser\Application";
+ if (alreadyPatched)
+ {
+ var dialog = MessageBox.Show("An already patched Safe Exam Browser has been found. Are you sure to continue?", "Safe Exam Browser Offline Patch", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
+ if (dialog == DialogResult.No)
+ {
+ return;
+ }
+ }
+ isBackup = checkBox1.Checked;
+ if (!started)
+ {
+ started = true;
+ Thread thr = new Thread(PatchThread);
+ thr.Start();
+ }
+ }
+ private void PatchThread()
+ {
+ if (isBackup)
+ {
+ try
+ {
+ if (File.Exists(SEBPath + @"SafeExamBrowser.exe.backup"))
+ {
+ File.Delete(SEBPath + @"SafeExamBrowser.exe.backup");
+ }
+ File.Copy(SEBPath + @"SafeExamBrowser.exe", SEBPath + @"SafeExamBrowser.exe.backup");
+ if (File.Exists(SEBPath + @"SafeExamBrowser.Client.exe.backup"))
+ {
+ File.Delete(SEBPath + @"SafeExamBrowser.Client.exe.backup");
+ }
+ File.Copy(SEBPath + @"SafeExamBrowser.Client.exe", SEBPath + @"SafeExamBrowser.Client.exe.backup");
+ if (File.Exists(SEBPath + @"SafeExamBrowser.Configuration.dll.backup"))
+ {
+ File.Delete(SEBPath + @"SafeExamBrowser.Configuration.dll.backup");
+ }
+ File.Copy(SEBPath + @"SafeExamBrowser.Configuration.dll", SEBPath + @"SafeExamBrowser.Configuration.dll.backup");
+ if (File.Exists(SEBPath + @"SafeExamBrowser.Monitoring.dll.backup"))
+ {
+ File.Delete(SEBPath + @"SafeExamBrowser.Monitoring.dll.backup");
+ }
+ File.Copy(SEBPath + @"SafeExamBrowser.Monitoring.dll", SEBPath + @"SafeExamBrowser.Monitoring.dll.backup");
+ if (File.Exists(SEBPath + @"SafeExamBrowser.UserInterface.Desktop.dll.backup"))
+ {
+ File.Delete(SEBPath + @"SafeExamBrowser.UserInterface.Desktop.dll.backup");
+ }
+ File.Copy(SEBPath + @"SafeExamBrowser.UserInterface.Desktop.dll", SEBPath + @"SafeExamBrowser.UserInterface.Desktop.dll.backup");
+ if (File.Exists(SEBPath + @"SafeExamBrowser.UserInterface.Mobile.dll.backup"))
+ {
+ File.Delete(SEBPath + @"SafeExamBrowser.UserInterface.Mobile.dll.backup");
+ }
+ File.Copy(SEBPath + @"SafeExamBrowser.UserInterface.Mobile.dll", SEBPath + @"SafeExamBrowser.UserInterface.Mobile.dll.backup");
+ }
+ catch (Exception ex)
+ {
+ AddLog("[ERROR] " + ex.Message);
+ }
+ }
+ try
+ {
+ File.Delete(SEBPath + @"SafeExamBrowser.exe");
+ File.Delete(SEBPath + @"SafeExamBrowser.Client.exe");
+ File.Delete(SEBPath + @"SafeExamBrowser.Configuration.dll");
+ File.Delete(SEBPath + @"SafeExamBrowser.Monitoring.dll");
+ File.Delete(SEBPath + @"SafeExamBrowser.UserInterface.Desktop.dll");
+ File.Delete(SEBPath + @"SafeExamBrowser.UserInterface.Mobile.dll");
+ if (is64bits) // 64 bits patch
+ {
+ File.WriteAllBytes(SEBPath + @"SafeExamBrowser.exe", Resources.SafeExamBrowser);
+ File.WriteAllBytes(SEBPath + @"SafeExamBrowser.Client.exe", Resources.SafeExamBrowser_Client);
+ File.WriteAllBytes(SEBPath + @"SafeExamBrowser.Configuration.dll", Resources.SafeExamBrowser_Configuration);
+ File.WriteAllBytes(SEBPath + @"SafeExamBrowser.Monitoring.dll", Resources.SafeExamBrowser_Monitoring);
+ File.WriteAllBytes(SEBPath + @"SafeExamBrowser.UserInterface.Desktop.dll", Resources.SafeExamBrowser_UserInterface_Desktop);
+ File.WriteAllBytes(SEBPath + @"SafeExamBrowser.UserInterface.Mobile.dll", Resources.SafeExamBrowser_UserInterface_Mobile);
+ }
+ else // 32 bits patch
+ {
+ File.WriteAllBytes(SEBPath + @"SafeExamBrowser.exe", Resources.SafeExamBrowser1);
+ File.WriteAllBytes(SEBPath + @"SafeExamBrowser.Client.exe", Resources.SafeExamBrowser_Client1);
+ File.WriteAllBytes(SEBPath + @"SafeExamBrowser.Configuration.dll", Resources.SafeExamBrowser_Configuration1);
+ File.WriteAllBytes(SEBPath + @"SafeExamBrowser.Monitoring.dll", Resources.SafeExamBrowser_Monitoring1);
+ File.WriteAllBytes(SEBPath + @"SafeExamBrowser.UserInterface.Desktop.dll", Resources.SafeExamBrowser_UserInterface_Desktop1);
+ File.WriteAllBytes(SEBPath + @"SafeExamBrowser.UserInterface.Mobile.dll", Resources.SafeExamBrowser_UserInterface_Mobile1);
+ }
+ if (checkBox2.Checked)
+ {
+ // Load offline registry
+ ProcessStartInfo load = new ProcessStartInfo
+ {
+ FileName = Environment.GetFolderPath(Environment.SpecialFolder.Windows) + @"System32\reg.exe",
+ Arguments = $@"load HKLM\OFFSOFTWARE {installation}Windows\System32\config\software",
+ CreateNoWindow = true,
+ WindowStyle = ProcessWindowStyle.Hidden
+ };
+ Process.Start(load).WaitForExit();
+ // Add certificate to offline registry
+ File.WriteAllText(Path.GetTempPath() + @"\SEB.reg", Resources.cert_offline);
+ ProcessStartInfo info = new ProcessStartInfo
+ {
+ FileName = Environment.GetFolderPath(Environment.SpecialFolder.Windows) + @"\regedit.exe",
+ Arguments = $@"/s \""{Path.GetTempPath() + @"\SEB.reg"}\""",
+ CreateNoWindow = true,
+ WindowStyle = ProcessWindowStyle.Hidden
+ };
+ Process.Start(info).WaitForExit();
+ File.Delete(Path.GetTempPath() + @"\SEB.reg");
+ // Unload offline registry
+ ProcessStartInfo unload = new ProcessStartInfo
+ {
+ FileName = Environment.GetFolderPath(Environment.SpecialFolder.Windows) + @"System32\reg.exe",
+ Arguments = $@"unload HKLM\OFFSOFTWARE",
+ CreateNoWindow = true,
+ WindowStyle = ProcessWindowStyle.Hidden
+ };
+ Process.Start(unload).WaitForExit();
+ }
+ AddLog($"PATCHING DONE ON {installation}.");
+ button2.Text = "PATCH DONE";
+ }
+ catch (Exception ex)
+ {
+ AddLog("[ERROR] " + ex.Message);
+ }
+ }
}
}
diff --git a/patch-seb/Program.cs b/patch-seb/Program.cs
index 170d2d6..c9230de 100644
--- a/patch-seb/Program.cs
+++ b/patch-seb/Program.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
@@ -16,21 +17,31 @@ namespace patch_seb
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
- if (args.Length == 1)
+ // Checks
+ if (File.Exists(Environment.GetFolderPath(Environment.SpecialFolder.Windows) + @"\System32\wpeinit.exe"))
{
- if (args[1] == "/offline" || args[1] == "/Offline")
+ // Running in Windows PE environment, launch the offline patcher
+ Application.Run(new OfflinePatcher());
+ }
+ else
+ {
+ // Check if the user wants the offline patcher
+ if (args.Length == 1)
{
- Application.Run(new OfflinePatcher());
+ if (args[1] == "/offline" || args[1] == "/Offline")
+ {
+ Application.Run(new OfflinePatcher());
+ }
+ else
+ {
+ Application.Run(new Form1());
+ }
}
else
{
Application.Run(new Form1());
}
}
- else
- {
- Application.Run(new Form1());
- }
}
}
}
diff --git a/patch-seb/Properties/Resources.Designer.cs b/patch-seb/Properties/Resources.Designer.cs
index f88acc6..bf771fc 100644
--- a/patch-seb/Properties/Resources.Designer.cs
+++ b/patch-seb/Properties/Resources.Designer.cs
@@ -60,6 +60,38 @@ namespace patch_seb.Properties {
}
}
+ ///
+ /// Cerca una stringa localizzata simile a Windows Registry Editor Version 5.00
+ ///
+ ///[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates\ROOT\Certificates\05737772423FD69437E6CB3414588365A01BC1CF]
+ ///"Blob"=hex:5c,00,00,00,01,00,00,00,04,00,00,00,00,08,00,00,19,00,00,00,01,00,\
+ /// 00,00,10,00,00,00,89,b3,20,3f,64,c9,40,55,fa,01,d8,bc,c2,46,23,f5,0f,00,00,\
+ /// 00,01,00,00,00,14,00,00,00,9b,59,e4,8f,91,2b,32,28,53,7d,fa,59,57,11,4d,24,\
+ /// 9e,c3,79,4f,03,00,00,00,01,00,00,00,14,00,00,00,05,73,77,72,42,3f,d6,94,37,\
+ /// e6,cb,34,14,58,83,65,a0,1b,c1,c [stringa troncata]";.
+ ///
+ internal static string cert {
+ get {
+ return ResourceManager.GetString("cert", resourceCulture);
+ }
+ }
+
+ ///
+ /// Cerca una stringa localizzata simile a Windows Registry Editor Version 5.00
+ ///
+ ///[HKEY_LOCAL_MACHINE\OFFSOFTWARE\Microsoft\SystemCertificates\ROOT\Certificates\05737772423FD69437E6CB3414588365A01BC1CF]
+ ///"Blob"=hex:5c,00,00,00,01,00,00,00,04,00,00,00,00,08,00,00,19,00,00,00,01,00,\
+ /// 00,00,10,00,00,00,89,b3,20,3f,64,c9,40,55,fa,01,d8,bc,c2,46,23,f5,0f,00,00,\
+ /// 00,01,00,00,00,14,00,00,00,9b,59,e4,8f,91,2b,32,28,53,7d,fa,59,57,11,4d,24,\
+ /// 9e,c3,79,4f,03,00,00,00,01,00,00,00,14,00,00,00,05,73,77,72,42,3f,d6,94,37,\
+ /// e6,cb,34,14,58,83,65,a0,1b,c [stringa troncata]";.
+ ///
+ internal static string cert_offline {
+ get {
+ return ResourceManager.GetString("cert_offline", resourceCulture);
+ }
+ }
+
///
/// Cerca una risorsa localizzata di tipo System.Byte[].
///
diff --git a/patch-seb/Properties/Resources.resx b/patch-seb/Properties/Resources.resx
index 10489dd..163049a 100644
--- a/patch-seb/Properties/Resources.resx
+++ b/patch-seb/Properties/Resources.resx
@@ -118,6 +118,12 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ ..\Resources\cert.reg;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-16
+
+
+ ..\Resources\cert_offline.reg;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-16
+
..\Resources\x64\SafeExamBrowser.exe;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
diff --git a/patch-seb/Resources/cert.reg b/patch-seb/Resources/cert.reg
new file mode 100644
index 0000000..3507517
Binary files /dev/null and b/patch-seb/Resources/cert.reg differ
diff --git a/patch-seb/Resources/cert_offline.reg b/patch-seb/Resources/cert_offline.reg
new file mode 100644
index 0000000..618e0bb
Binary files /dev/null and b/patch-seb/Resources/cert_offline.reg differ
diff --git a/patch-seb/Variables.cs b/patch-seb/Variables.cs
new file mode 100644
index 0000000..4e624fc
--- /dev/null
+++ b/patch-seb/Variables.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace patch_seb
+{
+ internal class Variables
+ {
+ public static string SupportedSEB = "3.9.0.787";
+ }
+}
diff --git a/patch-seb/patch-seb.csproj b/patch-seb/patch-seb.csproj
index 4ccd6e3..f13cc71 100644
--- a/patch-seb/patch-seb.csproj
+++ b/patch-seb/patch-seb.csproj
@@ -68,6 +68,7 @@
+
Form1.cs
@@ -99,6 +100,8 @@
+
+