├── NetLimiter Crack.exe ├── NetLimiter Crack ├── FodyWeavers.xml ├── App.config ├── Properties │ ├── Settings.settings │ ├── Settings.Designer.cs │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ └── Resources.resx ├── Program.cs ├── manifest.manifest ├── packages.config ├── Form1.resx ├── FodyWeavers.xsd ├── Form1.Designer.cs ├── NetLimiter Crack.csproj └── Form1.cs ├── README.md └── NetLimiter Crack.sln /NetLimiter Crack.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Baseult/NetLimiterCrack/HEAD/NetLimiter Crack.exe -------------------------------------------------------------------------------- /NetLimiter Crack/FodyWeavers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /NetLimiter Crack/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /NetLimiter Crack/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ### NetLimiter Crack Tool (C#): Automated Patching 2 | I coded a c# program that automatically patches NetLimiter for you to get free lifetime premium. 3 | Works with the latest NetLimiter Version 5.3.20.0 4 | 5 | [![image](https://gist.github.com/assets/45830921/14b124b7-3026-4b9e-bfe4-816b60d4e666)](https://gist.github.com/assets/45830921/28feb274-c0b9-4f2d-ac1b-3e9d492c2cb9) 6 | 7 | ![image](https://github.com/Baseult/NetLimiterCrack/assets/45830921/265379fd-27ba-40c5-8775-4a74b4a298f3) 8 | 9 | -------------------------------------------------------------------------------- /NetLimiter Crack/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using System.Windows.Forms; 6 | 7 | namespace NetLimiter_Crack 8 | { 9 | internal static class Program 10 | { 11 | /// 12 | /// Der Haupteinstiegspunkt für die Anwendung. 13 | /// 14 | [STAThread] 15 | static void Main() 16 | { 17 | Application.EnableVisualStyles(); 18 | Application.SetCompatibleTextRenderingDefault(false); 19 | Application.Run(new Form1()); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /NetLimiter Crack/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace NetLimiter_Crack.Properties 12 | { 13 | 14 | 15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] 17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase 18 | { 19 | 20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 21 | 22 | public static Settings Default 23 | { 24 | get 25 | { 26 | return defaultInstance; 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /NetLimiter Crack.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.8.34525.116 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetLimiter Crack", "NetLimiter Crack\NetLimiter Crack.csproj", "{CBB7045D-FF4C-4EA7-934F-D48DCD6B0BD6}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Debug|x64 = Debug|x64 12 | Release|Any CPU = Release|Any CPU 13 | Release|x64 = Release|x64 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {CBB7045D-FF4C-4EA7-934F-D48DCD6B0BD6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {CBB7045D-FF4C-4EA7-934F-D48DCD6B0BD6}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {CBB7045D-FF4C-4EA7-934F-D48DCD6B0BD6}.Debug|x64.ActiveCfg = Debug|x64 19 | {CBB7045D-FF4C-4EA7-934F-D48DCD6B0BD6}.Debug|x64.Build.0 = Debug|x64 20 | {CBB7045D-FF4C-4EA7-934F-D48DCD6B0BD6}.Release|Any CPU.ActiveCfg = Release|Any CPU 21 | {CBB7045D-FF4C-4EA7-934F-D48DCD6B0BD6}.Release|Any CPU.Build.0 = Release|Any CPU 22 | {CBB7045D-FF4C-4EA7-934F-D48DCD6B0BD6}.Release|x64.ActiveCfg = Release|x64 23 | {CBB7045D-FF4C-4EA7-934F-D48DCD6B0BD6}.Release|x64.Build.0 = Release|x64 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {5967E558-8B75-41AF-BD1C-500BB1A29C02} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /NetLimiter Crack/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // Allgemeine Informationen über eine Assembly werden über die folgenden 6 | // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, 7 | // die einer Assembly zugeordnet sind. 8 | [assembly: AssemblyTitle("NetLimiter Crack")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("NetLimiter Crack")] 13 | [assembly: AssemblyCopyright("Copyright © 2024")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly 18 | // für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von 19 | // COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. 20 | [assembly: ComVisible(false)] 21 | 22 | // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird 23 | [assembly: Guid("cbb7045d-ff4c-4ea7-934f-d48dcd6b0bd6")] 24 | 25 | // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: 26 | // 27 | // Hauptversion 28 | // Nebenversion 29 | // Buildnummer 30 | // Revision 31 | // 32 | // Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, 33 | // indem Sie "*" wie unten gezeigt eingeben: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /NetLimiter Crack/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // Dieser Code wurde von einem Tool generiert. 4 | // Laufzeitversion: 4.0.30319.42000 5 | // 6 | // Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn 7 | // der Code neu generiert wird. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace NetLimiter_Crack.Properties 12 | { 13 | 14 | 15 | /// 16 | /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. 17 | /// 18 | // Diese Klasse wurde von der StronglyTypedResourceBuilder-Klasse 19 | // über ein Tool wie ResGen oder Visual Studio automatisch generiert. 20 | // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen 21 | // mit der Option /str erneut aus, oder erstellen Sie Ihr VS-Projekt neu. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources 26 | { 27 | 28 | private static global::System.Resources.ResourceManager resourceMan; 29 | 30 | private static global::System.Globalization.CultureInfo resourceCulture; 31 | 32 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 33 | internal Resources() 34 | { 35 | } 36 | 37 | /// 38 | /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. 39 | /// 40 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 41 | internal static global::System.Resources.ResourceManager ResourceManager 42 | { 43 | get 44 | { 45 | if ((resourceMan == null)) 46 | { 47 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NetLimiter_Crack.Properties.Resources", typeof(Resources).Assembly); 48 | resourceMan = temp; 49 | } 50 | return resourceMan; 51 | } 52 | } 53 | 54 | /// 55 | /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle 56 | /// Ressourcenlookups, die diese stark typisierte Ressourcenklasse verwenden. 57 | /// 58 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 59 | internal static global::System.Globalization.CultureInfo Culture 60 | { 61 | get 62 | { 63 | return resourceCulture; 64 | } 65 | set 66 | { 67 | resourceCulture = value; 68 | } 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /NetLimiter Crack/manifest.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 54 | 62 | 63 | 64 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /NetLimiter Crack/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /NetLimiter Crack/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | text/microsoft-resx 107 | 108 | 109 | 2.0 110 | 111 | 112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 113 | 114 | 115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | -------------------------------------------------------------------------------- /NetLimiter Crack/Form1.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /NetLimiter Crack/FodyWeavers.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks 13 | 14 | 15 | 16 | 17 | A list of assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks. 18 | 19 | 20 | 21 | 22 | A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks 23 | 24 | 25 | 26 | 27 | A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks. 28 | 29 | 30 | 31 | 32 | A list of unmanaged 32 bit assembly names to include, delimited with line breaks. 33 | 34 | 35 | 36 | 37 | A list of unmanaged 64 bit assembly names to include, delimited with line breaks. 38 | 39 | 40 | 41 | 42 | The order of preloaded assemblies, delimited with line breaks. 43 | 44 | 45 | 46 | 47 | 48 | This will copy embedded files to disk before loading them into memory. This is helpful for some scenarios that expected an assembly to be loaded from a physical file. 49 | 50 | 51 | 52 | 53 | Controls if .pdbs for reference assemblies are also embedded. 54 | 55 | 56 | 57 | 58 | Controls if runtime assemblies are also embedded. 59 | 60 | 61 | 62 | 63 | Controls whether the runtime assemblies are embedded with their full path or only with their assembly name. 64 | 65 | 66 | 67 | 68 | Embedded assemblies are compressed by default, and uncompressed when they are loaded. You can turn compression off with this option. 69 | 70 | 71 | 72 | 73 | As part of Costura, embedded assemblies are no longer included as part of the build. This cleanup can be turned off. 74 | 75 | 76 | 77 | 78 | Costura by default will load as part of the module initialization. This flag disables that behavior. Make sure you call CosturaUtility.Initialize() somewhere in your code. 79 | 80 | 81 | 82 | 83 | Costura will by default use assemblies with a name like 'resources.dll' as a satellite resource and prepend the output path. This flag disables that behavior. 84 | 85 | 86 | 87 | 88 | A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with | 89 | 90 | 91 | 92 | 93 | A list of assembly names to include from the default action of "embed all Copy Local references", delimited with |. 94 | 95 | 96 | 97 | 98 | A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with | 99 | 100 | 101 | 102 | 103 | A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with |. 104 | 105 | 106 | 107 | 108 | A list of unmanaged 32 bit assembly names to include, delimited with |. 109 | 110 | 111 | 112 | 113 | A list of unmanaged 64 bit assembly names to include, delimited with |. 114 | 115 | 116 | 117 | 118 | The order of preloaded assemblies, delimited with |. 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. 127 | 128 | 129 | 130 | 131 | A comma-separated list of error codes that can be safely ignored in assembly verification. 132 | 133 | 134 | 135 | 136 | 'false' to turn off automatic generation of the XML Schema file. 137 | 138 | 139 | 140 | 141 | -------------------------------------------------------------------------------- /NetLimiter Crack/Form1.Designer.cs: -------------------------------------------------------------------------------- 1 | using System.Drawing; 2 | using System.Windows.Forms; 3 | 4 | namespace NetLimiter_Crack 5 | { 6 | partial class Form1 7 | { 8 | /// 9 | /// Erforderliche Designervariable. 10 | /// 11 | private System.ComponentModel.IContainer components = null; 12 | 13 | /// 14 | /// Verwendete Ressourcen bereinigen. 15 | /// 16 | /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. 17 | protected override void Dispose(bool disposing) 18 | { 19 | if (disposing && (components != null)) 20 | { 21 | components.Dispose(); 22 | } 23 | base.Dispose(disposing); 24 | } 25 | 26 | #region Vom Windows Form-Designer generierter Code 27 | 28 | /// 29 | /// Erforderliche Methode für die Designerunterstützung. 30 | /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. 31 | /// 32 | private void InitializeComponent() 33 | { 34 | this.button1 = new System.Windows.Forms.Button(); 35 | this.label1 = new System.Windows.Forms.Label(); 36 | this.customProgressBar1 = new NetLimiter_Crack.CustomProgressBar(); 37 | this.panel1 = new System.Windows.Forms.Panel(); 38 | this.panel2 = new System.Windows.Forms.Panel(); 39 | this.button2 = new System.Windows.Forms.Button(); 40 | this.label2 = new System.Windows.Forms.Label(); 41 | this.panel1.SuspendLayout(); 42 | this.panel2.SuspendLayout(); 43 | this.SuspendLayout(); 44 | // 45 | // button1 46 | // 47 | this.button1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); 48 | this.button1.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); 49 | this.button1.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Gray; 50 | this.button1.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); 51 | this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; 52 | this.button1.Font = new System.Drawing.Font("Consolas", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 53 | this.button1.ForeColor = System.Drawing.Color.White; 54 | this.button1.Location = new System.Drawing.Point(11, 16); 55 | this.button1.Name = "button1"; 56 | this.button1.Size = new System.Drawing.Size(373, 30); 57 | this.button1.TabIndex = 0; 58 | this.button1.Text = "PATCH"; 59 | this.button1.UseVisualStyleBackColor = false; 60 | this.button1.Click += new System.EventHandler(this.button1_Click); 61 | // 62 | // label1 63 | // 64 | this.label1.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 65 | this.label1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(0))))); 66 | this.label1.Location = new System.Drawing.Point(11, 82); 67 | this.label1.Name = "label1"; 68 | this.label1.Size = new System.Drawing.Size(373, 20); 69 | this.label1.TabIndex = 3; 70 | this.label1.Text = "Status:"; 71 | this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; 72 | // 73 | // customProgressBar1 74 | // 75 | this.customProgressBar1.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 76 | this.customProgressBar1.ForeColor = System.Drawing.Color.Cyan; 77 | this.customProgressBar1.Location = new System.Drawing.Point(11, 54); 78 | this.customProgressBar1.Name = "customProgressBar1"; 79 | this.customProgressBar1.Size = new System.Drawing.Size(373, 20); 80 | this.customProgressBar1.TabIndex = 4; 81 | this.customProgressBar1.Text = "customProgressBar1"; 82 | this.customProgressBar1.Value = 0; 83 | // 84 | // panel1 85 | // 86 | this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 87 | this.panel1.Controls.Add(this.label1); 88 | this.panel1.Controls.Add(this.customProgressBar1); 89 | this.panel1.Controls.Add(this.button1); 90 | this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; 91 | this.panel1.Location = new System.Drawing.Point(0, 27); 92 | this.panel1.Name = "panel1"; 93 | this.panel1.Size = new System.Drawing.Size(397, 115); 94 | this.panel1.TabIndex = 5; 95 | this.panel1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Panel_MouseDown); 96 | this.panel1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Panel_MouseMove); 97 | // 98 | // panel2 99 | // 100 | this.panel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(35)))), ((int)(((byte)(35)))), ((int)(((byte)(35))))); 101 | this.panel2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 102 | this.panel2.Controls.Add(this.button2); 103 | this.panel2.Controls.Add(this.label2); 104 | this.panel2.Dock = System.Windows.Forms.DockStyle.Top; 105 | this.panel2.Location = new System.Drawing.Point(0, 0); 106 | this.panel2.Name = "panel2"; 107 | this.panel2.Size = new System.Drawing.Size(397, 25); 108 | this.panel2.TabIndex = 6; 109 | // 110 | // button2 111 | // 112 | this.button2.BackColor = System.Drawing.Color.DarkRed; 113 | this.button2.FlatAppearance.BorderColor = System.Drawing.Color.Red; 114 | this.button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; 115 | this.button2.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 116 | this.button2.ForeColor = System.Drawing.Color.Silver; 117 | this.button2.Location = new System.Drawing.Point(374, 1); 118 | this.button2.Name = "button2"; 119 | this.button2.Size = new System.Drawing.Size(20, 20); 120 | this.button2.TabIndex = 0; 121 | this.button2.Text = "X"; 122 | this.button2.UseVisualStyleBackColor = false; 123 | this.button2.Click += new System.EventHandler(this.button2_Click); 124 | // 125 | // label2 126 | // 127 | this.label2.BackColor = System.Drawing.Color.Transparent; 128 | this.label2.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 129 | this.label2.ForeColor = System.Drawing.SystemColors.ActiveBorder; 130 | this.label2.Location = new System.Drawing.Point(-1, 1); 131 | this.label2.Name = "label2"; 132 | this.label2.Size = new System.Drawing.Size(397, 20); 133 | this.label2.TabIndex = 5; 134 | this.label2.Text = "Net Limiter Patcher v1.0 - Baseult"; 135 | this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; 136 | this.label2.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Panel_MouseDown); 137 | this.label2.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Panel_MouseMove); 138 | // 139 | // Form1 140 | // 141 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 142 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 143 | this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(16)))), ((int)(((byte)(16)))), ((int)(((byte)(16))))); 144 | this.ClientSize = new System.Drawing.Size(397, 142); 145 | this.Controls.Add(this.panel2); 146 | this.Controls.Add(this.panel1); 147 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 148 | this.Name = "Form1"; 149 | this.Text = "Form1"; 150 | this.panel1.ResumeLayout(false); 151 | this.panel2.ResumeLayout(false); 152 | this.ResumeLayout(false); 153 | 154 | } 155 | 156 | #endregion 157 | 158 | private Button button1; 159 | private Label label1; 160 | private CustomProgressBar customProgressBar1; 161 | private Panel panel1; 162 | private Panel panel2; 163 | private Button button2; 164 | private Label label2; 165 | } 166 | } 167 | 168 | -------------------------------------------------------------------------------- /NetLimiter Crack/NetLimiter Crack.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Debug 7 | AnyCPU 8 | {CBB7045D-FF4C-4EA7-934F-D48DCD6B0BD6} 9 | WinExe 10 | NetLimiter_Crack 11 | NetLimiter Crack 12 | v4.8 13 | 512 14 | true 15 | true 16 | 17 | 18 | 19 | 20 | AnyCPU 21 | true 22 | full 23 | false 24 | bin\Debug\ 25 | DEBUG;TRACE 26 | prompt 27 | 4 28 | 29 | 30 | AnyCPU 31 | pdbonly 32 | true 33 | bin\Release\ 34 | TRACE 35 | prompt 36 | 4 37 | 38 | 39 | true 40 | bin\x64\Debug\ 41 | DEBUG;TRACE 42 | full 43 | x64 44 | 7.3 45 | prompt 46 | true 47 | 48 | 49 | bin\x64\Release\ 50 | TRACE 51 | true 52 | pdbonly 53 | x64 54 | 7.3 55 | prompt 56 | true 57 | 58 | 59 | manifest.manifest 60 | 61 | 62 | 63 | ..\packages\Costura.Fody.5.7.0\lib\netstandard1.0\Costura.dll 64 | 65 | 66 | ..\packages\dnlib.4.4.0\lib\net45\dnlib.dll 67 | 68 | 69 | ..\packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll 70 | True 71 | True 72 | 73 | 74 | 75 | ..\packages\System.AppContext.4.3.0\lib\net463\System.AppContext.dll 76 | True 77 | True 78 | 79 | 80 | 81 | ..\packages\System.Console.4.3.0\lib\net46\System.Console.dll 82 | True 83 | True 84 | 85 | 86 | 87 | ..\packages\System.Diagnostics.DiagnosticSource.4.3.0\lib\net46\System.Diagnostics.DiagnosticSource.dll 88 | 89 | 90 | ..\packages\System.Diagnostics.Tracing.4.3.0\lib\net462\System.Diagnostics.Tracing.dll 91 | True 92 | True 93 | 94 | 95 | ..\packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll 96 | True 97 | True 98 | 99 | 100 | ..\packages\System.IO.4.3.0\lib\net462\System.IO.dll 101 | True 102 | True 103 | 104 | 105 | ..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll 106 | True 107 | True 108 | 109 | 110 | 111 | ..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll 112 | True 113 | True 114 | 115 | 116 | ..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll 117 | True 118 | True 119 | 120 | 121 | ..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll 122 | True 123 | True 124 | 125 | 126 | ..\packages\System.Linq.4.3.0\lib\net463\System.Linq.dll 127 | True 128 | True 129 | 130 | 131 | ..\packages\System.Linq.Expressions.4.3.0\lib\net463\System.Linq.Expressions.dll 132 | True 133 | True 134 | 135 | 136 | ..\packages\System.Net.Http.4.3.0\lib\net46\System.Net.Http.dll 137 | True 138 | True 139 | 140 | 141 | ..\packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll 142 | True 143 | True 144 | 145 | 146 | 147 | ..\packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll 148 | True 149 | True 150 | 151 | 152 | ..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll 153 | True 154 | True 155 | 156 | 157 | ..\packages\System.Runtime.Extensions.4.3.0\lib\net462\System.Runtime.Extensions.dll 158 | True 159 | True 160 | 161 | 162 | ..\packages\System.Runtime.InteropServices.4.3.0\lib\net463\System.Runtime.InteropServices.dll 163 | True 164 | True 165 | 166 | 167 | ..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll 168 | True 169 | True 170 | 171 | 172 | ..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net463\System.Security.Cryptography.Algorithms.dll 173 | True 174 | True 175 | 176 | 177 | ..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll 178 | True 179 | True 180 | 181 | 182 | ..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll 183 | True 184 | True 185 | 186 | 187 | ..\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll 188 | True 189 | True 190 | 191 | 192 | ..\packages\System.Text.RegularExpressions.4.3.0\lib\net463\System.Text.RegularExpressions.dll 193 | True 194 | True 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | ..\packages\System.Xml.ReaderWriter.4.3.0\lib\net46\System.Xml.ReaderWriter.dll 206 | True 207 | True 208 | 209 | 210 | 211 | 212 | Form 213 | 214 | 215 | Form1.cs 216 | 217 | 218 | 219 | 220 | Form1.cs 221 | 222 | 223 | ResXFileCodeGenerator 224 | Resources.Designer.cs 225 | Designer 226 | 227 | 228 | True 229 | Resources.resx 230 | 231 | 232 | 233 | 234 | SettingsSingleFileGenerator 235 | Settings.Designer.cs 236 | 237 | 238 | True 239 | Settings.settings 240 | True 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}". 251 | 252 | 253 | 254 | 255 | 256 | 257 | -------------------------------------------------------------------------------- /NetLimiter Crack/Form1.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | using System.Windows.Forms; 10 | using System.Diagnostics; 11 | using Timer = System.Windows.Forms.Timer; 12 | using dnlib.DotNet; 13 | using dnlib.DotNet.Emit; 14 | using System.IO; 15 | 16 | namespace NetLimiter_Crack 17 | { 18 | public partial class Form1 : Form 19 | { 20 | private Point lastPoint; 21 | 22 | public Form1() 23 | { 24 | InitializeComponent(); 25 | } 26 | 27 | protected override void OnMouseDown(MouseEventArgs e) 28 | { 29 | base.OnMouseDown(e); 30 | if (e.Button == MouseButtons.Left) 31 | { 32 | lastPoint = new Point(e.X, e.Y); 33 | } 34 | } 35 | 36 | protected override void OnMouseMove(MouseEventArgs e) 37 | { 38 | base.OnMouseMove(e); 39 | if (e.Button == MouseButtons.Left) 40 | { 41 | this.Left += e.X - lastPoint.X; 42 | this.Top += e.Y - lastPoint.Y; 43 | } 44 | } 45 | 46 | private void Panel_MouseDown(object sender, MouseEventArgs e) 47 | { 48 | lastPoint = new Point(e.X, e.Y); // Store the current mouse position 49 | } 50 | 51 | private void Panel_MouseMove(object sender, MouseEventArgs e) 52 | { 53 | if (e.Button == MouseButtons.Left) 54 | { 55 | this.Left += e.X - lastPoint.X; 56 | this.Top += e.Y - lastPoint.Y; 57 | } 58 | } 59 | 60 | private string FindNetLimiterDll() 61 | { 62 | try 63 | { 64 | string netLimiterFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Locktime Software", "NetLimiter"); 65 | string dllPath = Path.Combine(netLimiterFolder, "NetLimiter.dll"); 66 | 67 | if (File.Exists(dllPath)) 68 | return dllPath; 69 | else 70 | return null; 71 | } 72 | catch (Exception ex) 73 | { 74 | MessageBox.Show($"An error occurred while finding NetLimiter.dll: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 75 | return null; 76 | } 77 | } 78 | 79 | private void ReplaceDll(string originalDllPath, ModuleDefMD modifiedModule) 80 | { 81 | try 82 | { 83 | string originalBackupPath = originalDllPath + ".bak"; 84 | string modifiedDllPath = Path.ChangeExtension(originalDllPath, ".patched.dll"); 85 | 86 | // Backup the original DLL 87 | // File.Replace(originalDllPath, originalBackupPath, null); 88 | 89 | // Save the modified assembly 90 | modifiedModule.Write(modifiedDllPath); 91 | 92 | // Replace the original DLL with the modified one 93 | File.Replace(modifiedDllPath, originalDllPath, null); 94 | } 95 | catch (Exception ex) 96 | { 97 | MessageBox.Show($"An error occurred while replacing DLL: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 98 | } 99 | } 100 | 101 | private async void button1_Click(object sender, EventArgs e) 102 | { 103 | button1.Enabled = false; 104 | button1.Text = "PATCHING..."; 105 | 106 | try 107 | { 108 | await DisplayMessage("Stopping NLClientApp.exe...", 5); 109 | 110 | // Stop NLClientApp.exe 111 | await Task.Run(async () => 112 | { 113 | try 114 | { 115 | var process = Process.Start(new ProcessStartInfo 116 | { 117 | FileName = "taskkill", 118 | Arguments = "/f /im NLClientApp.exe", 119 | UseShellExecute = false, 120 | CreateNoWindow = true 121 | }); 122 | 123 | if (process != null) 124 | { 125 | process.WaitForExit(); 126 | await DisplayMessage("NLClientApp.exe stopped successfully", 10); 127 | } 128 | else 129 | { 130 | throw new Exception("Failed to start taskkill process"); 131 | } 132 | } 133 | catch (Exception ex) 134 | { 135 | throw new Exception("Error stopping NLClientApp.exe", ex); 136 | } 137 | }); 138 | 139 | await DisplayMessage("Stopping nlsvc...", 15); 140 | // Stop nlsvc 141 | await Task.Run(async () => 142 | { 143 | try 144 | { 145 | var process = Process.Start(new ProcessStartInfo 146 | { 147 | FileName = "net", 148 | Arguments = "stop nlsvc", 149 | UseShellExecute = false, 150 | CreateNoWindow = true 151 | }); 152 | 153 | if (process != null) 154 | { 155 | process.WaitForExit(); 156 | await DisplayMessage("Nlsvc stopped successfully", 20); 157 | } 158 | else 159 | { 160 | throw new Exception("Failed to start 'net' process to stop nlsvc"); 161 | } 162 | } 163 | catch (Exception ex) 164 | { 165 | throw new Exception("Error stopping nlsvc", ex); 166 | } 167 | }); 168 | 169 | 170 | await DisplayMessage("Searching NetLimiter.dll...", 25); 171 | 172 | string dllPath = FindNetLimiterDll(); 173 | if (dllPath == null) 174 | { 175 | OpenFileDialog openFileDialog = new OpenFileDialog(); 176 | openFileDialog.Title = "Select NetLimiter.dll"; 177 | openFileDialog.Filter = "NetLimiter DLL|NetLimiter.dll"; 178 | 179 | if (openFileDialog.ShowDialog() == DialogResult.OK) 180 | { 181 | dllPath = openFileDialog.FileName; 182 | } 183 | else 184 | { 185 | MessageBox.Show("NetLimiter.dll not found. Program will exit.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 186 | Environment.Exit(1); 187 | return; 188 | } 189 | } 190 | 191 | await DisplayMessage("NetLimiter.dll found", 30); 192 | await DisplayMessage("Opening NetLimiter.dll...", 40); 193 | 194 | // Load the assembly 195 | ModuleDefMD module = ModuleDefMD.Load(dllPath); 196 | 197 | await DisplayMessage("NetLimiter.dll loaded successfully", 50); 198 | 199 | // Navigate to the NLLicense constructor 200 | await DisplayMessage("Navigating to NLLicense constructor...", 60); 201 | 202 | TypeDef nLLicenseType = module.Find("NetLimiter.Service.NLLicense", true); 203 | MethodDef nLLicenseConstructor = nLLicenseType.FindMethod(".ctor"); 204 | 205 | // Modify the IL to change this.IsRegistered = false; to true; 206 | await DisplayMessage("Modifying NLLicense constructor...", 70); 207 | 208 | foreach (Instruction instruction in nLLicenseConstructor.Body.Instructions) 209 | { 210 | if (instruction.OpCode == OpCodes.Ldc_I4_0) // Find the instruction loading false 211 | { 212 | instruction.OpCode = OpCodes.Ldc_I4_1; // Replace it with loading true 213 | break; 214 | } 215 | } 216 | 217 | await DisplayMessage("Modified NLLicense succesfully", 76); 218 | 219 | // Navigate to the InitLicense method 220 | await DisplayMessage("Navigating to InitLicense method...", 80); 221 | 222 | TypeDef nLServiceTempType = module.Find("NetLimiter.Service.NLServiceTemp", true); 223 | MethodDef initLicenseMethod = nLServiceTempType.FindMethod("InitLicense"); 224 | 225 | // Modify the IL to change the expiration time 226 | await DisplayMessage("Modifying InitLicense succesfully", 90); 227 | 228 | foreach (Instruction instruction in initLicenseMethod.Body.Instructions) 229 | { 230 | if (instruction.OpCode == OpCodes.Ldc_R8 && (double)instruction.Operand == 28.0) // Find the instruction loading 28.0 231 | { 232 | instruction.Operand = 99999.0; // Change it to 99999.0 233 | break; 234 | } 235 | } 236 | 237 | await DisplayMessage("Modified InitLicense method", 93); 238 | 239 | // Save the modified assembly 240 | await DisplayMessage("Saving the modified assembly...", 94); 241 | 242 | module.Write(Path.ChangeExtension(dllPath, ".patched.dll")); 243 | 244 | await DisplayMessage("Modified assembly saved successfully", 95); 245 | 246 | await DisplayMessage("Replacing patched dll with the original...", 96); 247 | 248 | // Replace the original DLL with the modified one 249 | await Task.Run(() => ReplaceDll(dllPath, module)); 250 | 251 | await DisplayMessage("Replaced patched dll succesfully", 97); 252 | 253 | await DisplayMessage("Starting nlsvc service...", 98); 254 | 255 | // Start nlsvc 256 | await Task.Run(async () => 257 | { 258 | try 259 | { 260 | var process = Process.Start(new ProcessStartInfo 261 | { 262 | FileName = "net", 263 | Arguments = "start nlsvc", 264 | UseShellExecute = false, 265 | CreateNoWindow = true 266 | }); 267 | 268 | if (process != null) 269 | { 270 | process.WaitForExit(); 271 | await DisplayMessage("Nlsvc started successfully", 99); 272 | } 273 | else 274 | { 275 | throw new Exception("Failed to start 'net' process to start nlsvc"); 276 | } 277 | } 278 | catch (Exception ex) 279 | { 280 | throw new Exception("Error starting nlsvc", ex); 281 | } 282 | }); 283 | 284 | // Show final message 285 | await DisplayMessage("Net Limiter Succesfully Cracked!", 100); 286 | label1.Text = "You can close this program now!"; 287 | } 288 | catch (Exception ex) 289 | { 290 | MessageBox.Show($"An error occurred: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 291 | } 292 | } 293 | 294 | // Display messages with delay and update progress bar 295 | private async Task DisplayMessage(string message, int progress) 296 | { 297 | if (label1.InvokeRequired) 298 | { 299 | label1.BeginInvoke((Action)(() => label1.Text = "")); 300 | } 301 | else 302 | { 303 | label1.Text = ""; 304 | } 305 | 306 | Progressbar(progress); 307 | 308 | foreach (char c in message) 309 | { 310 | if (label1.InvokeRequired) 311 | { 312 | label1.BeginInvoke((Action)(() => label1.Text += c)); 313 | } 314 | else 315 | { 316 | label1.Text += c; 317 | } 318 | await Task.Delay(25); // Adjust delay for typing animation 319 | } 320 | 321 | await Task.Delay(500); // Delay before clearing message 322 | 323 | if (label1.InvokeRequired) 324 | { 325 | label1.BeginInvoke((Action)(() => label1.Text = "")); 326 | } 327 | else 328 | { 329 | label1.Text = ""; 330 | } 331 | } 332 | 333 | int previousprogress = 0; 334 | private async Task Progressbar(int progress) 335 | { 336 | 337 | customProgressBar1.Value = progress; 338 | 339 | previousprogress = progress; 340 | } 341 | 342 | private void Form1_Load(object sender, EventArgs e) 343 | { 344 | customProgressBar1.Value = 0; 345 | } 346 | 347 | private void button2_Click(object sender, EventArgs e) 348 | { 349 | this.Close(); 350 | } 351 | } 352 | 353 | public class CustomProgressBar : Control 354 | { 355 | private bool started = false; 356 | private int _value = 0; 357 | private int _targetValue = 0; 358 | private int _animationIncrement = 1; 359 | private Timer loadingAnimationTimer; 360 | private List particles = new List(); 361 | private Random random = new Random(); 362 | private int highlightedBlockIndex = 0; // Index of the currently highlighted block 363 | private Timer waveAnimationTimer; 364 | 365 | public int Value 366 | { 367 | get { return _value; } 368 | set 369 | { 370 | if (value == 0 && !started) 371 | { 372 | started = true; 373 | GenerateParticles(50); 374 | loadingAnimationTimer.Start(); 375 | waveAnimationTimer.Start(); // Start the wave animation when the progress bar starts 376 | } 377 | 378 | if (value < 0) 379 | _targetValue = 0; 380 | else if (value > 100) 381 | _targetValue = 100; 382 | else 383 | _targetValue = value; 384 | 385 | if (_targetValue != _value) 386 | { 387 | if (_animationIncrement == 0) 388 | _animationIncrement = Math.Sign(_targetValue - _value); 389 | loadingAnimationTimer.Start(); 390 | } 391 | } 392 | } 393 | 394 | public CustomProgressBar() 395 | { 396 | SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true); 397 | InitializeLoadingAnimationTimer(); 398 | InitializeWaveAnimationTimer(); 399 | } 400 | 401 | private void InitializeLoadingAnimationTimer() 402 | { 403 | loadingAnimationTimer = new Timer(); 404 | loadingAnimationTimer.Interval = 2; // Adjust speed of animation here 405 | loadingAnimationTimer.Tick += LoadingAnimationTimer_Tick; 406 | } 407 | 408 | private void LoadingAnimationTimer_Tick(object sender, EventArgs e) 409 | { 410 | GenerateParticles(1); 411 | 412 | if (_value != _targetValue) 413 | { 414 | _value += _animationIncrement; 415 | if ((_animationIncrement > 0 && _value > _targetValue) || (_animationIncrement < 0 && _value < _targetValue)) 416 | _value = _targetValue; 417 | 418 | UpdateParticles(); 419 | 420 | Invalidate(); 421 | } 422 | else 423 | { 424 | UpdateParticles(); // Update particles even when idle 425 | Invalidate(); 426 | } 427 | } 428 | 429 | private void InitializeWaveAnimationTimer() 430 | { 431 | waveAnimationTimer = new Timer(); 432 | waveAnimationTimer.Interval = 100; // Adjust speed of wave animation here 433 | waveAnimationTimer.Tick += WaveAnimationTimer_Tick; 434 | } 435 | 436 | private void WaveAnimationTimer_Tick(object sender, EventArgs e) 437 | { 438 | highlightedBlockIndex = (highlightedBlockIndex + 1) % 20; // Update the highlighted block index 439 | Invalidate(); 440 | } 441 | 442 | private void GenerateParticles(int number) 443 | { 444 | // Generate particles at the edge where the current value of the progress bar is 445 | float progressWidth = ((float)_value / 100) * ClientRectangle.Width; 446 | if (progressWidth < ClientRectangle.Width) 447 | { 448 | int numParticles = random.Next(number, number); // Adjust number of particles 449 | for (int i = 0; i < numParticles; i++) 450 | { 451 | float x = progressWidth - 1 + random.Next(3); // Randomize X coordinate near the edge 452 | float y = random.Next(ClientRectangle.Height); // Randomize Y coordinate 453 | float speedX = (float)random.NextDouble() * 2 - 1; // Adjust speed 454 | float speedY = (float)random.NextDouble() * 2 - 1; // Adjust speed 455 | Color color = Color.FromArgb(random.Next(256), random.Next(256), random.Next(256)); // Random color 456 | particles.Add(new Particle(x, y, speedX, speedY, color)); 457 | } 458 | } 459 | } 460 | 461 | private void UpdateParticles() 462 | { 463 | for (int i = particles.Count - 1; i >= 0; i--) 464 | { 465 | Particle particle = particles[i]; 466 | particle.Update(); 467 | if (!ClientRectangle.Contains(new Point((int)particle.X, (int)particle.Y))) 468 | { 469 | particles.RemoveAt(i); 470 | } 471 | } 472 | } 473 | 474 | protected override void OnPaint(PaintEventArgs e) 475 | { 476 | base.OnPaint(e); 477 | 478 | // Draw background 479 | e.Graphics.Clear(Color.Black); 480 | 481 | // Draw border 482 | using (Pen borderPen = new Pen(Color.FromArgb(45, 45, 45), 2)) 483 | { 484 | e.Graphics.DrawRectangle(borderPen, ClientRectangle); 485 | } 486 | 487 | // Draw blocks 488 | int blockCount = 20; // Number of blocks 489 | float blockWidth = (ClientRectangle.Width - 4) / (float)blockCount; 490 | for (int i = 0; i < blockCount; i++) 491 | { 492 | float blockX = 2 + i * (blockWidth + 1); // Adjusted to include a gap between blocks 493 | float blockProgress = ((float)_value / 100) * ClientRectangle.Width; 494 | if (blockX < blockProgress) 495 | { 496 | float blockWidthAdjusted = Math.Min(blockWidth, blockProgress - blockX); 497 | RectangleF blockRect = new RectangleF(blockX, 2, blockWidthAdjusted, ClientRectangle.Height - 4); 498 | 499 | // Calculate color interpolation based on progress 500 | float progress = i / (float)blockCount; 501 | int red = (int)(255 * (1 - progress)); 502 | int green = (int)(255 * progress); 503 | Color blockColor = Color.FromArgb(red, green, 0); 504 | 505 | if (i == highlightedBlockIndex && _value != 100) // Highlight the current block with a lighter color 506 | { 507 | blockColor = Color.FromArgb(Math.Min(red + 50, 255), Math.Min(green + 50, 255), 0); 508 | // Increase the size of the highlighted block 509 | blockRect.Inflate(1, 1); 510 | } 511 | 512 | using (SolidBrush brush = new SolidBrush(blockColor)) 513 | { 514 | e.Graphics.FillRectangle(brush, blockRect); 515 | } 516 | } 517 | } 518 | 519 | // Draw particles 520 | foreach (Particle particle in particles) 521 | { 522 | e.Graphics.FillEllipse(new SolidBrush(particle.Color), particle.X, particle.Y, 2, 2); // Adjust size of particles 523 | } 524 | 525 | // Draw text 526 | using (Font font = new Font("Consolas", 10)) 527 | using (SolidBrush brush = new SolidBrush(Color.Cyan)) 528 | { 529 | string text = $"{_value}%"; 530 | SizeF textSize = e.Graphics.MeasureString(text, font); 531 | PointF textLocation = new PointF((ClientRectangle.Width - textSize.Width) / 2, (ClientRectangle.Height - textSize.Height) / 2); 532 | e.Graphics.DrawString(text, font, brush, textLocation); 533 | } 534 | } 535 | 536 | private class Particle 537 | { 538 | public float X { get; set; } 539 | public float Y { get; set; } 540 | public float SpeedX { get; set; } 541 | public float SpeedY { get; set; } 542 | public Color Color { get; set; } 543 | 544 | public Particle(float x, float y, float speedX, float speedY, Color color) 545 | { 546 | X = x; 547 | Y = y; 548 | SpeedX = speedX; 549 | SpeedY = speedY; 550 | Color = color; 551 | } 552 | 553 | public void Update() 554 | { 555 | X += SpeedX; 556 | Y += SpeedY; 557 | 558 | // Apply force towards the right 559 | SpeedX += 0.05f; 560 | } 561 | } 562 | } 563 | } 564 | --------------------------------------------------------------------------------