From da1e6a2a9fa39fccdaa6f6fb0f876a05b9ca04fb Mon Sep 17 00:00:00 2001
From: Li
Date: Sat, 23 Jul 2022 16:53:48 +1200
Subject: [PATCH] Upload src
---
.gitignore | 3 +
UncRock.sln | 25 ++++++
UncRock/App.config | 6 ++
UncRock/Permissions.cs | 118 +++++++++++++++++++++++++++++
UncRock/Program.cs | 103 +++++++++++++++++++++++++
UncRock/Properties/AssemblyInfo.cs | 36 +++++++++
UncRock/UncRock.csproj | 90 ++++++++++++++++++++++
UncRock/UncRock.csproj.user | 13 ++++
UncRock/app.manifest | 79 +++++++++++++++++++
UncRock/unrock.ico | Bin 0 -> 151461 bytes
10 files changed, 473 insertions(+)
create mode 100644 .gitignore
create mode 100644 UncRock.sln
create mode 100644 UncRock/App.config
create mode 100644 UncRock/Permissions.cs
create mode 100644 UncRock/Program.cs
create mode 100644 UncRock/Properties/AssemblyInfo.cs
create mode 100644 UncRock/UncRock.csproj
create mode 100644 UncRock/UncRock.csproj.user
create mode 100644 UncRock/app.manifest
create mode 100644 UncRock/unrock.ico
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..0b40e16
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+.vs/*
+UncRock/obj/*
+UncRock/bin/*
diff --git a/UncRock.sln b/UncRock.sln
new file mode 100644
index 0000000..7101b33
--- /dev/null
+++ b/UncRock.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.3.32611.2
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UncRock", "UncRock\UncRock.csproj", "{5F177C56-7CE7-4C5E-B007-9148B61EEF1A}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {5F177C56-7CE7-4C5E-B007-9148B61EEF1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5F177C56-7CE7-4C5E-B007-9148B61EEF1A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5F177C56-7CE7-4C5E-B007-9148B61EEF1A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5F177C56-7CE7-4C5E-B007-9148B61EEF1A}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {929C3E9A-A8DA-4E32-B363-DB2D8F08B322}
+ EndGlobalSection
+EndGlobal
diff --git a/UncRock/App.config b/UncRock/App.config
new file mode 100644
index 0000000..77ed642
--- /dev/null
+++ b/UncRock/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/UncRock/Permissions.cs b/UncRock/Permissions.cs
new file mode 100644
index 0000000..6ef15e3
--- /dev/null
+++ b/UncRock/Permissions.cs
@@ -0,0 +1,118 @@
+
+using System;
+using System.ComponentModel;
+using System.Runtime.InteropServices;
+
+namespace UncRock
+{
+ public static class Permissions
+ {
+ [DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ internal static extern bool LookupPrivilegeValue(string lpsystemname, string lpname, [MarshalAs(UnmanagedType.Struct)] ref Luid lpLuid);
+
+ [DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ internal static extern bool AdjustTokenPrivileges(IntPtr tokenhandle, [MarshalAs(UnmanagedType.Bool)] bool disableAllPrivileges, [MarshalAs(UnmanagedType.Struct)] ref TokenPrivledges newstate, uint bufferlength, IntPtr previousState, IntPtr returnlength);
+
+ internal const int SePrivledgeEnabled = 0x00000002;
+ internal const int ErrorNotAllAssigned = 1300;
+ internal const UInt32 TokenQuery = 0x0008;
+ internal const UInt32 TokenAdjustPrivledges = 0x0020;
+
+ [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+ internal static extern IntPtr GetCurrentProcess();
+
+ [DllImport("Advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ internal static extern bool OpenProcessToken(IntPtr processHandle, uint desiredAccesss, out IntPtr tokenHandle);
+
+ [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ internal static extern Boolean CloseHandle(IntPtr hObject);
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct Luid
+ {
+ internal Int32 LowPart;
+ internal UInt32 HighPart;
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ internal struct TokenPrivledges
+ {
+ internal Int32 PrivilegeCount;
+ internal Luid Luid;
+ internal Int32 Attributes;
+ }
+ public static void EnablePrivilege(string securityEntity)
+ {
+
+ string securityEntityValue = securityEntity;
+ try
+ {
+ Luid locallyUniqueIdentifier = new Luid();
+
+ if (LookupPrivilegeValue(null, securityEntityValue, ref locallyUniqueIdentifier))
+ {
+ TokenPrivledges tokenPrivledges = new TokenPrivledges();
+ tokenPrivledges.PrivilegeCount = 1;
+ tokenPrivledges.Attributes = SePrivledgeEnabled;
+ tokenPrivledges.Luid = locallyUniqueIdentifier;
+
+ IntPtr tokenHandle = IntPtr.Zero;
+ try
+ {
+ IntPtr currentProcess = GetCurrentProcess();
+ if (OpenProcessToken(currentProcess, TokenAdjustPrivledges | TokenQuery, out tokenHandle))
+ {
+ if (AdjustTokenPrivileges(tokenHandle, false, ref tokenPrivledges, 1024, IntPtr.Zero, IntPtr.Zero))
+ {
+ Int32 lastError = Marshal.GetLastWin32Error();
+ if (lastError == ErrorNotAllAssigned)
+ {
+ Win32Exception win32Exception = new Win32Exception();
+ throw new InvalidOperationException("AdjustTokenPrivileges fail.", win32Exception);
+ }
+ }
+ else
+ {
+ Win32Exception win32Exception = new Win32Exception();
+ throw new InvalidOperationException("AdjustTokenPrivileges fail.", win32Exception);
+ }
+ }
+ else
+ {
+ Win32Exception win32Exception = new Win32Exception();
+
+ string exceptionMessage = "OpenProcessToken fail. Process: " + currentProcess.ToInt32().ToString();
+
+ throw new InvalidOperationException(exceptionMessage, win32Exception);
+ }
+ }
+ finally
+ {
+ if (tokenHandle != IntPtr.Zero)
+ CloseHandle(tokenHandle);
+ }
+ }
+ else
+ {
+ Win32Exception win32Exception = new Win32Exception();
+
+ string exceptionMessage = "LookupPrivilegeValue failed. SecurityEntityValue: " + securityEntityValue.ToString();
+
+ throw new InvalidOperationException(exceptionMessage, win32Exception);
+ }
+ }
+ catch (Exception e)
+ {
+ string exceptionMessage = "GrandPrivilege failed. SecurityEntity: " + securityEntityValue.ToString();
+
+ throw new InvalidOperationException(exceptionMessage, e);
+ }
+ }
+
+
+ }
+}
diff --git a/UncRock/Program.cs b/UncRock/Program.cs
new file mode 100644
index 0000000..d1a6cf4
--- /dev/null
+++ b/UncRock/Program.cs
@@ -0,0 +1,103 @@
+using Microsoft.Win32;
+using System;
+using System.IO;
+using System.Security.AccessControl;
+using System.Security.Principal;
+using System.Windows.Forms;
+
+namespace UncRock
+{
+ internal class Program
+ {
+ static string GetWindowsAppsFolder()
+ {
+ using (RegistryKey appx = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Appx"))
+ {
+ string packageRoot = appx.GetValue("PackageRoot").ToString();
+ return packageRoot;
+ }
+ }
+ static string GetAppFolder(string appName)
+ {
+ string[] apps = Directory.GetDirectories(GetWindowsAppsFolder(), "*");
+ foreach (string app in apps)
+ {
+ string folderName = Path.GetFileName(app);
+ if (folderName.StartsWith(appName))
+ {
+ return folderName;
+ }
+ }
+ return null;
+ }
+ public static void TakeOwn(string filepath)
+ {
+ FileSecurity filePermissions = File.GetAccessControl(filepath);
+
+ SecurityIdentifier currentUser = WindowsIdentity.GetCurrent().User;
+ SecurityIdentifier allUsers = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
+
+ try
+ {
+ Permissions.EnablePrivilege("SeTakeOwnershipPrivilege");
+ }
+ catch (Exception)
+ {
+ MessageBox.Show("Failed to obtain SeTakeOwnershipPrivledge", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+
+ filePermissions.SetOwner(currentUser);
+ File.SetAccessControl(filepath, filePermissions);
+
+
+ filePermissions.SetAccessRuleProtection(false, false);
+
+ filePermissions.RemoveAccessRuleAll(new FileSystemAccessRule(allUsers, FileSystemRights.FullControl, AccessControlType.Deny));
+ filePermissions.RemoveAccessRuleAll(new FileSystemAccessRule(currentUser, FileSystemRights.FullControl, AccessControlType.Deny));
+
+ filePermissions.SetAccessRule(new FileSystemAccessRule(allUsers, FileSystemRights.FullControl, AccessControlType.Allow));
+ filePermissions.SetAccessRule(new FileSystemAccessRule(currentUser, FileSystemRights.FullControl, AccessControlType.Allow));
+
+ File.SetAccessControl(filepath, filePermissions);
+ File.SetAttributes(filepath, FileAttributes.Normal);
+ }
+ static void Main(string[] args)
+ {
+ string minecraftGameFolder = GetAppFolder("Microsoft.MinecraftUWP");
+ if(minecraftGameFolder != null)
+ {
+ string profFilter = Path.Combine(GetWindowsAppsFolder(), Path.Combine(Path.Combine(minecraftGameFolder, "data"), "profanity_filter.wlist"));
+
+ if (File.Exists(profFilter))
+ {
+ DialogResult res = MessageBox.Show("Are you sure you want to DELETE the Bedrock profanity_filter.wlist located at:\n\"" + profFilter + "\"?", "Disable Bedrock Profanity Filter?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
+
+ if (res == DialogResult.Yes)
+ {
+ try
+ {
+ TakeOwn(profFilter);
+ File.Delete(profFilter);
+ MessageBox.Show("profanity_filter.wlist was successfully DELETED.", "Bedrock Profanity Filter Disabled", MessageBoxButtons.OK, MessageBoxIcon.Information);
+
+ }
+ catch (Exception e)
+ {
+ MessageBox.Show("Failed to delete file: " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+ }
+ else
+ {
+ MessageBox.Show("Could not find the profanity_filter.wlist\nDid you already delete it?", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+
+ }
+ else
+ {
+ MessageBox.Show("Could not find the minecraft bedrock game folder.\nIs the game installed?", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+ }
+}
diff --git a/UncRock/Properties/AssemblyInfo.cs b/UncRock/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..69c893e
--- /dev/null
+++ b/UncRock/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Uncensor Bedrock")]
+[assembly: AssemblyDescription("Permanantly Disables the Bedrock Profanity Filter")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Li")]
+[assembly: AssemblyProduct("Uncensor Bedrock")]
+[assembly: AssemblyCopyright("Public Domain 2022")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("5f177c56-7ce7-4c5e-b007-9148b61eef1a")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/UncRock/UncRock.csproj b/UncRock/UncRock.csproj
new file mode 100644
index 0000000..e20df12
--- /dev/null
+++ b/UncRock/UncRock.csproj
@@ -0,0 +1,90 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {5F177C56-7CE7-4C5E-B007-9148B61EEF1A}
+ WinExe
+ UncRock
+ Uncensor Bedrock
+ v2.0
+ 512
+ false
+ true
+
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ none
+ true
+ bin\Release\
+ prompt
+ 4
+
+
+ app.manifest
+
+
+ unrock.ico
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+ .NET Framework 3.5 SP1
+ true
+
+
+
+
\ No newline at end of file
diff --git a/UncRock/UncRock.csproj.user b/UncRock/UncRock.csproj.user
new file mode 100644
index 0000000..9c755a1
--- /dev/null
+++ b/UncRock/UncRock.csproj.user
@@ -0,0 +1,13 @@
+
+
+
+ publish\
+
+
+
+
+
+ en-US
+ false
+
+
\ No newline at end of file
diff --git a/UncRock/app.manifest b/UncRock/app.manifest
new file mode 100644
index 0000000..580f56a
--- /dev/null
+++ b/UncRock/app.manifest
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/UncRock/unrock.ico b/UncRock/unrock.ico
new file mode 100644
index 0000000000000000000000000000000000000000..616136024ffbd0cf70ca6c1758aea220a46a4660
GIT binary patch
literal 151461
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