Almost done first beta
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user