Introduce file ownership management and improve error handling and backup process

- Added `changeOwnership` feature to allow users to change file ownership to Administrators with full control permissions.
- Enhanced file backup process by appending a timestamp to backup file names, ensuring uniqueness.
- Implemented comprehensive error handling across multiple operations, providing user-friendly error messages.
- Refactored existing methods to integrate the new ownership and error handling features, improving code clarity and maintainability.
- Updated configuration files (`app.config`, `Settings.Designer.cs`, `Settings.settings`) to include the new `changeOwnership` setting.
- Modified project file (`Win_1337_Patch.csproj`) to accommodate new dependencies and settings for the added features.
This commit is contained in:
ramhaidar 2024-08-25 06:44:09 +07:00
commit 6f33264cb4
5 changed files with 240 additions and 117 deletions

View file

@ -24,40 +24,53 @@ namespace Win_1337_Patch
this.Text = "Win 1337 Apply Patch File " + ver; this.Text = "Win 1337 Apply Patch File " + ver;
linkdfox.Text = ver + " By DeltaFoX"; linkdfox.Text = ver + " By DeltaFoX";
} }
private void set() private void set()
{ {
t1337.Text = Ellipsis.Compact(f1337, t1337, EllipsisFormat.Path); try
toolTip1.SetToolTip(t1337, f1337);
Properties.Settings.Default["url1337"] = f1337;
Properties.Settings.Default.Save();
string[] lines = File.ReadAllLines(f1337);
if (!check_Symbol(lines[0]))
return;
string unf = lines[0].Substring(1).ToLower().Trim();
string nf = Path.GetFileName(unf);
string ext = Path.GetExtension(unf);
OpenFileDialog apriDialogoFile1 = new OpenFileDialog();
apriDialogoFile1.FileName = nf;
apriDialogoFile1.Filter = "File " + ext + "|" + nf;
apriDialogoFile1.FilterIndex = 0;
apriDialogoFile1.Title = "Select the file \"" + nf + "\" File...";
if (apriDialogoFile1.ShowDialog() == DialogResult.OK)
{ {
exe = apriDialogoFile1.FileName; t1337.Text = Ellipsis.Compact(f1337, t1337, EllipsisFormat.Path);
texe.Text = Ellipsis.Compact(Path.GetFileName(exe), texe, EllipsisFormat.Path); toolTip1.SetToolTip(t1337, f1337);
toolTip1.SetToolTip(texe, exe); Properties.Settings.Default["url1337"] = f1337;
Properties.Settings.Default["urlexe"] = exe;
Properties.Settings.Default.Save(); Properties.Settings.Default.Save();
string[] lines = File.ReadAllLines(f1337);
if (!check_Symbol(lines[0]))
return;
string unf = lines[0].Substring(1).ToLower().Trim();
string nf = Path.GetFileName(unf);
string ext = Path.GetExtension(unf);
OpenFileDialog apriDialogoFile1 = new OpenFileDialog
{
FileName = nf,
Filter = "File " + ext + "|" + nf,
FilterIndex = 0,
Title = "Select the file \"" + nf + "\" File..."
};
if (apriDialogoFile1.ShowDialog() == DialogResult.OK)
{
exe = apriDialogoFile1.FileName;
texe.Text = Ellipsis.Compact(Path.GetFileName(exe), texe, EllipsisFormat.Path);
toolTip1.SetToolTip(texe, exe);
Properties.Settings.Default["urlexe"] = exe;
Properties.Settings.Default.Save();
}
else
{
t1337.Text = "Select a .1337 File...";
texe.Text = "Select the Exe/Dll to Patch...";
f1337 = String.Empty;
exe = String.Empty;
}
} }
else catch (Exception ex)
{ {
t1337.Text = "Select a .1337 File..."; MessageBox.Show($"An error occurred while setting up the file: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
texe.Text = "Select the Exe/Dll to Patch...";
f1337 = String.Empty;
exe = String.Empty;
} }
} }
private void t1337_DragDrop(object sender, DragEventArgs e) private void t1337_DragDrop(object sender, DragEventArgs e)
{ {
try try
@ -65,39 +78,47 @@ namespace Win_1337_Patch
f1337 = ((string[])e.Data.GetData(DataFormats.FileDrop, false))[0]; f1337 = ((string[])e.Data.GetData(DataFormats.FileDrop, false))[0];
set(); set();
} }
catch catch (Exception ex)
{ {
//Nothing; MessageBox.Show($"An error occurred while processing drag and drop: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
return;
} }
private void btnSelect1337_Click(object sender, EventArgs e) private void btnSelect1337_Click(object sender, EventArgs e)
{ {
try try
{ {
string url1337 = Properties.Settings.Default["url1337"].ToString(); string url1337 = Properties.Settings.Default["url1337"].ToString();
OpenFileDialog apriDialogoFile1 = new OpenFileDialog(); OpenFileDialog apriDialogoFile1 = new OpenFileDialog
apriDialogoFile1.Filter = "File 1337|*.*"; {
apriDialogoFile1.FilterIndex = 0; Filter = "File 1337|*.*",
apriDialogoFile1.Title = "Select the .1337 File..."; FilterIndex = 0,
apriDialogoFile1.InitialDirectory = url1337 != "" ? url1337 : Directory.GetCurrentDirectory() + "\\"; Title = "Select the .1337 File...",
apriDialogoFile1.RestoreDirectory = true; InitialDirectory = url1337 != "" ? url1337 : Directory.GetCurrentDirectory() + "\\",
RestoreDirectory = true
};
if (apriDialogoFile1.ShowDialog() == DialogResult.OK) if (apriDialogoFile1.ShowDialog() == DialogResult.OK)
{ {
f1337 = apriDialogoFile1.FileName; f1337 = apriDialogoFile1.FileName;
set(); set();
} }
} }
catch catch (Exception ex)
{ {
//Nothing; MessageBox.Show($"An error occurred while selecting the .1337 file: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
return;
} }
private void t1337_DragEnter(object sender, DragEventArgs e) private void t1337_DragEnter(object sender, DragEventArgs e)
{ {
e.Effect = DragDropEffects.All; try
{
e.Effect = DragDropEffects.All;
}
catch (Exception ex)
{
MessageBox.Show($"An error occurred during DragEnter: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
} }
private bool check_Symbol(string s) private bool check_Symbol(string s)
@ -121,12 +142,12 @@ namespace Win_1337_Patch
{ {
DFoX_Patch(); DFoX_Patch();
} }
catch catch (Exception ex)
{ {
MessageBox.Show("Problem occured when Patching...", "Info...", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show($"A problem occurred when patching: {ex.Message}", "Info...", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
} }
} }
private void DFoX_Patch() private void DFoX_Patch()
{ {
if (!File.Exists(exe) || !File.Exists(f1337)) if (!File.Exists(exe) || !File.Exists(f1337))
@ -134,6 +155,20 @@ namespace Win_1337_Patch
MessageBox.Show("Files are no Longer Present...", "Info...", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show("Files are no Longer Present...", "Info...", MessageBoxButtons.OK, MessageBoxIcon.Error);
return; return;
} }
if (cchangeOwnership.Checked)
{
try
{
UnlockDLL(exe);
}
catch (Exception ex)
{
MessageBox.Show($"An error occurred while changing ownership: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
string[] lines = File.ReadAllLines(f1337); string[] lines = File.ReadAllLines(f1337);
if (!check_Symbol(lines[0])) if (!check_Symbol(lines[0]))
return; return;
@ -167,9 +202,12 @@ namespace Win_1337_Patch
{ {
if (controlloBackup.Checked == true) if (controlloBackup.Checked == true)
{ {
if (File.Exists(exe + ".BAK")) string dateSuffix = DateTime.Now.ToString("yyyy-MM-dd_hh-mm-ss-tt");
File.Delete(exe + ".BAK"); string backupFileName = $"{exe}.{dateSuffix}.BAK";
File.Copy(exe, exe + ".BAK");
if (File.Exists(backupFileName))
File.Delete(backupFileName);
File.Copy(exe, backupFileName);
} }
if (File.Exists(exe)) if (File.Exists(exe))
File.Delete(exe); File.Delete(exe);
@ -177,8 +215,8 @@ namespace Win_1337_Patch
SistemaPeCks(exe); SistemaPeCks(exe);
MessageBox.Show("File " + Path.GetFileName(exe) + " Patched...", "Info...", MessageBoxButtons.OK, MessageBoxIcon.Information); MessageBox.Show("File " + Path.GetFileName(exe) + " Patched...", "Info...", MessageBoxButtons.OK, MessageBoxIcon.Information);
} }
return;
} }
private void SistemaPeCks(string file) private void SistemaPeCks(string file)
{ {
try try
@ -186,57 +224,101 @@ namespace Win_1337_Patch
using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.ReadWrite)) using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.ReadWrite))
{ {
ImageRemoveCertificate(fs.SafeFileHandle.DangerousGetHandle(), 0); ImageRemoveCertificate(fs.SafeFileHandle.DangerousGetHandle(), 0);
fs.Close();
} }
mCheckSum PE = new mCheckSum(); mCheckSum PE = new mCheckSum();
PE.FixCheckSum(file); PE.FixCheckSum(file);
} }
catch catch (Exception ex)
{ {
//Nothing MessageBox.Show($"An error occurred while processing PE checksum: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
return;
} }
private void DFoX_Load(object sender, EventArgs e) private void DFoX_Load(object sender, EventArgs e)
{ {
string urlexe = Properties.Settings.Default["urlexe"].ToString().Trim(); try
string url1337 = Properties.Settings.Default["url1337"].ToString().Trim();
cfileoffsett.Checked = (bool)Properties.Settings.Default["fixoffset"];
controlloBackup.Checked = (bool)Properties.Settings.Default["backup"];
if (urlexe != "")
{ {
texe.Text = Ellipsis.Compact(Path.GetFileName(urlexe), texe, EllipsisFormat.Path); string urlexe = Properties.Settings.Default["urlexe"].ToString().Trim();
toolTip1.SetToolTip(texe, urlexe); string url1337 = Properties.Settings.Default["url1337"].ToString().Trim();
exe = urlexe; cfileoffsett.Checked = (bool)Properties.Settings.Default["fixoffset"];
controlloBackup.Checked = (bool)Properties.Settings.Default["backup"];
cchangeOwnership.Checked = (bool)Properties.Settings.Default["changeOwnership"];
if (urlexe != "")
{
texe.Text = Ellipsis.Compact(Path.GetFileName(urlexe), texe, EllipsisFormat.Path);
toolTip1.SetToolTip(texe, urlexe);
exe = urlexe;
}
else
texe.Text = "Select the Exe/Dll to Patch...";
if (url1337 != "" && urlexe != "")
{
t1337.Text = Ellipsis.Compact(url1337, t1337, EllipsisFormat.Path);
toolTip1.SetToolTip(t1337, url1337);
f1337 = url1337;
}
else
t1337.Text = "Select a .1337 File...";
} }
else catch (Exception ex)
texe.Text = "Select the Exe/Dll to Patch...";
if (url1337 != "" && urlexe != "")
{ {
t1337.Text = Ellipsis.Compact(url1337, t1337, EllipsisFormat.Path); MessageBox.Show($"An error occurred during form load: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
toolTip1.SetToolTip(t1337, url1337);
f1337 = url1337;
} }
else
t1337.Text = "Select a .1337 File...";
} }
private void cfileoffsett_CheckedChanged(object sender, EventArgs e) private void cfileoffsett_CheckedChanged(object sender, EventArgs e)
{ {
Properties.Settings.Default["fixoffset"] = cfileoffsett.Checked; try
Properties.Settings.Default.Save(); {
Properties.Settings.Default["fixoffset"] = cfileoffsett.Checked;
Properties.Settings.Default.Save();
}
catch (Exception ex)
{
MessageBox.Show($"An error occurred while saving fix offset setting: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
} }
private void controlloBackup_CheckedChanged(object sender, EventArgs e) private void controlloBackup_CheckedChanged(object sender, EventArgs e)
{ {
Properties.Settings.Default["backup"] = controlloBackup.Checked; try
Properties.Settings.Default.Save(); {
Properties.Settings.Default["backup"] = controlloBackup.Checked;
Properties.Settings.Default.Save();
}
catch (Exception ex)
{
MessageBox.Show($"An error occurred while saving backup setting: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void cchangeOwnership_CheckedChanged(object sender, EventArgs e)
{
try
{
Properties.Settings.Default["changeOwnership"] = cchangeOwnership.Checked;
Properties.Settings.Default.Save();
}
catch (Exception ex)
{
MessageBox.Show($"An error occurred while saving change ownership setting: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
} }
private void linkdfox_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) private void linkdfox_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{ {
_apriUrl(@"https://github.com/Deltafox79/Win_1337_Apply_Patch"); try
{
_apriUrl(@"https://github.com/Deltafox79/Win_1337_Apply_Patch");
}
catch (Exception ex)
{
MessageBox.Show($"An error occurred while opening the URL: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
} }
private void _apriUrl(string url) private void _apriUrl(string url)
{ {
try try
@ -244,16 +326,21 @@ namespace Win_1337_Patch
string browserPath = ottieniLaPathBrowser(); string browserPath = ottieniLaPathBrowser();
if (browserPath == string.Empty) if (browserPath == string.Empty)
browserPath = "iexplore"; browserPath = "iexplore";
Process process = new Process(); Process process = new Process
process.StartInfo = new ProcessStartInfo(browserPath); {
process.StartInfo.Arguments = url; StartInfo = new ProcessStartInfo(browserPath)
{
Arguments = url
}
};
process.Start(); process.Start();
} }
catch catch (Exception ex)
{ {
//Nothing MessageBox.Show($"An error occurred while opening the browser: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }
private static string ottieniLaPathBrowser() private static string ottieniLaPathBrowser()
{ {
string name = String.Empty; string name = String.Empty;
@ -268,11 +355,10 @@ namespace Win_1337_Patch
if (!name.EndsWith("exe")) if (!name.EndsWith("exe"))
name = name.Substring(0, name.LastIndexOf(".exe") + 4); name = name.Substring(0, name.LastIndexOf(".exe") + 4);
} }
catch catch (Exception ex)
{ {
return String.Empty; MessageBox.Show($"An error occurred while retrieving browser path: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
finally finally
{ {
@ -284,31 +370,13 @@ namespace Win_1337_Patch
private void t1337_DoubleClick(object sender, EventArgs e) private void t1337_DoubleClick(object sender, EventArgs e)
{ {
btnSelect1337.PerformClick(); try
}
private void cchangeOwnership_CheckedChanged(object sender, EventArgs e)
{
if (cchangeOwnership.Checked)
{ {
try btnSelect1337.PerformClick();
{ }
if (!string.IsNullOrEmpty(exe)) catch (Exception ex)
{ {
UnlockDLL(exe); MessageBox.Show($"An error occurred during double click: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBox.Show($"Ownership of {exe} changed to Administrators and full control granted.", "Ownership Changed", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("Please select a DLL/EXE file first.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
cchangeOwnership.Checked = false;
}
}
catch (Exception ex)
{
MessageBox.Show($"An error occurred: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
cchangeOwnership.Checked = false;
}
} }
} }
@ -322,22 +390,32 @@ namespace Win_1337_Patch
try try
{ {
FileSecurity fileSecurity = File.GetAccessControl(filePath); ProcessStartInfo psi = new ProcessStartInfo("cmd.exe")
IdentityReference administrators = new NTAccount("Administrators"); {
UseShellExecute = false,
RedirectStandardInput = true,
RedirectStandardOutput = true,
CreateNoWindow = true
};
fileSecurity.SetOwner(administrators); using (Process process = new Process())
{
process.StartInfo = psi;
process.Start();
File.SetAccessControl(filePath, fileSecurity); using (StreamWriter sw = process.StandardInput)
{
if (sw.BaseStream.CanWrite)
{
sw.WriteLine($"takeown /F \"{filePath}\"");
sw.WriteLine($"icacls \"{filePath}\" /grant Administrators:F");
}
}
FileSystemAccessRule accessRule = new FileSystemAccessRule(administrators, process.WaitForExit();
FileSystemRights.FullControl, }
AccessControlType.Allow);
fileSecurity.AddAccessRule(accessRule); MessageBox.Show($"Ownership and permissions of {filePath} have been successfully changed.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
File.SetAccessControl(filePath, fileSecurity);
MessageBox.Show($"Owner changed to 'Administrators' and full control permissions granted to 'Administrators' for file: {filePath}", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
} }
catch (Exception ex) catch (Exception ex)
{ {

View file

@ -70,5 +70,17 @@ namespace Win_1337_Patch.Properties {
this["backup"] = value; this["backup"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("True")]
public bool changeOwnership {
get {
return ((bool)(this["changeOwnership"]));
}
set {
this["changeOwnership"] = value;
}
}
} }
} }

View file

@ -14,5 +14,8 @@
<Setting Name="backup" Type="System.Boolean" Scope="User"> <Setting Name="backup" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value> <Value Profile="(Default)">True</Value>
</Setting> </Setting>
<Setting Name="changeOwnership" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
</Settings> </Settings>
</SettingsFile> </SettingsFile>

View file

@ -12,6 +12,21 @@
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic> <Deterministic>true</Deterministic>
<TargetFrameworkProfile /> <TargetFrameworkProfile />
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
@ -91,5 +106,17 @@
<ItemGroup> <ItemGroup>
<Content Include="vampire.ico" /> <Content Include="vampire.ico" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.8">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.8 %28x86 and x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project> </Project>

View file

@ -8,10 +8,10 @@
<userSettings> <userSettings>
<Win_1337_Patch.Properties.Settings> <Win_1337_Patch.Properties.Settings>
<setting name="urlexe" serializeAs="String"> <setting name="urlexe" serializeAs="String">
<value/> <value />
</setting> </setting>
<setting name="url1337" serializeAs="String"> <setting name="url1337" serializeAs="String">
<value/> <value />
</setting> </setting>
<setting name="fixoffset" serializeAs="String"> <setting name="fixoffset" serializeAs="String">
<value>True</value> <value>True</value>
@ -19,6 +19,9 @@
<setting name="backup" serializeAs="String"> <setting name="backup" serializeAs="String">
<value>True</value> <value>True</value>
</setting> </setting>
<setting name="changeOwnership" serializeAs="String">
<value>True</value>
</setting>
</Win_1337_Patch.Properties.Settings> </Win_1337_Patch.Properties.Settings>
</userSettings> </userSettings>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/></startup></configuration> <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/></startup></configuration>