From f30c7ca6b986ddd429e03be43d17b6f473217522 Mon Sep 17 00:00:00 2001 From: "DESKTOP-I42IPIJ\\camde" Date: Sat, 6 Aug 2022 21:46:03 -0700 Subject: [PATCH] Add project files. --- Swim Prevent.sln | 31 ++ Swim Prevent/App.Designer.cs | 501 ++++++++++++++++++ Swim Prevent/App.config | 15 + Swim Prevent/App.cs | 166 ++++++ Swim Prevent/App.resx | 120 +++++ Swim Prevent/CPS.cs | 47 ++ Swim Prevent/CheatTable.cs | 172 ++++++ Swim Prevent/ClickListener.cs | 128 +++++ Swim Prevent/Detections.cs | 192 +++++++ Swim Prevent/FileManager.cs | 48 ++ Swim Prevent/Gma.System.MouseKeyHook.dll | Bin 0 -> 49152 bytes Swim Prevent/InfoUtil.cs | 122 +++++ Swim Prevent/MathUtil.cs | 55 ++ Swim Prevent/Properties/AssemblyInfo.cs | 36 ++ Swim Prevent/Properties/Resources.Designer.cs | 70 +++ Swim Prevent/Properties/Resources.resx | 117 ++++ Swim Prevent/Properties/Settings.Designer.cs | 29 + Swim Prevent/Properties/Settings.settings | 7 + Swim Prevent/Swim Prevent.csproj | 156 ++++++ Swim Prevent/SwimLoader.cs | 30 ++ Swim Prevent/TimeManager.cs | 95 ++++ Swim Prevent/packages.config | 5 + Swim Prevent/swim_logo.ico | Bin 0 -> 205933 bytes 23 files changed, 2142 insertions(+) create mode 100644 Swim Prevent.sln create mode 100644 Swim Prevent/App.Designer.cs create mode 100644 Swim Prevent/App.config create mode 100644 Swim Prevent/App.cs create mode 100644 Swim Prevent/App.resx create mode 100644 Swim Prevent/CPS.cs create mode 100644 Swim Prevent/CheatTable.cs create mode 100644 Swim Prevent/ClickListener.cs create mode 100644 Swim Prevent/Detections.cs create mode 100644 Swim Prevent/FileManager.cs create mode 100644 Swim Prevent/Gma.System.MouseKeyHook.dll create mode 100644 Swim Prevent/InfoUtil.cs create mode 100644 Swim Prevent/MathUtil.cs create mode 100644 Swim Prevent/Properties/AssemblyInfo.cs create mode 100644 Swim Prevent/Properties/Resources.Designer.cs create mode 100644 Swim Prevent/Properties/Resources.resx create mode 100644 Swim Prevent/Properties/Settings.Designer.cs create mode 100644 Swim Prevent/Properties/Settings.settings create mode 100644 Swim Prevent/Swim Prevent.csproj create mode 100644 Swim Prevent/SwimLoader.cs create mode 100644 Swim Prevent/TimeManager.cs create mode 100644 Swim Prevent/packages.config create mode 100644 Swim Prevent/swim_logo.ico diff --git a/Swim Prevent.sln b/Swim Prevent.sln new file mode 100644 index 0000000..1ff9408 --- /dev/null +++ b/Swim Prevent.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.32602.291 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Swim Prevent", "Swim Prevent\Swim Prevent.csproj", "{DD7BD759-DFB7-479B-BDAC-B11D11AA8E17}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DD7BD759-DFB7-479B-BDAC-B11D11AA8E17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DD7BD759-DFB7-479B-BDAC-B11D11AA8E17}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DD7BD759-DFB7-479B-BDAC-B11D11AA8E17}.Debug|x64.ActiveCfg = Debug|x64 + {DD7BD759-DFB7-479B-BDAC-B11D11AA8E17}.Debug|x64.Build.0 = Debug|x64 + {DD7BD759-DFB7-479B-BDAC-B11D11AA8E17}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DD7BD759-DFB7-479B-BDAC-B11D11AA8E17}.Release|Any CPU.Build.0 = Release|Any CPU + {DD7BD759-DFB7-479B-BDAC-B11D11AA8E17}.Release|x64.ActiveCfg = Release|x64 + {DD7BD759-DFB7-479B-BDAC-B11D11AA8E17}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {370448E6-BCF6-4590-9469-8A8C8EAE54DB} + EndGlobalSection +EndGlobal diff --git a/Swim Prevent/App.Designer.cs b/Swim Prevent/App.Designer.cs new file mode 100644 index 0000000..43d128b --- /dev/null +++ b/Swim Prevent/App.Designer.cs @@ -0,0 +1,501 @@ + +using System; +using System.Diagnostics; +using System.Drawing; +using System.Windows.Forms; + +namespace Swim_Prevent { + partial class App { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + clickInfoBox = new System.Windows.Forms.TextBox(); + logBox = new System.Windows.Forms.TextBox(); + timeInfoBox = new System.Windows.Forms.TextBox(); + systemInfoBox = new System.Windows.Forms.TextBox(); + label1 = new System.Windows.Forms.Label(); + label2 = new System.Windows.Forms.Label(); + leftTotal = new System.Windows.Forms.Label(); + label4 = new System.Windows.Forms.Label(); + label6 = new System.Windows.Forms.Label(); + label7 = new System.Windows.Forms.Label(); + label8 = new System.Windows.Forms.Label(); + leftAverage = new System.Windows.Forms.Label(); + label10 = new System.Windows.Forms.Label(); + leftCPS = new System.Windows.Forms.Label(); + leftWithDC = new System.Windows.Forms.Label(); + leftTotalText = new System.Windows.Forms.Label(); + ratioLeftText = new System.Windows.Forms.Label(); + rightCPS = new System.Windows.Forms.Label(); + rightWithDC = new System.Windows.Forms.Label(); + rightRecord = new System.Windows.Forms.Label(); + rightTotal = new System.Windows.Forms.Label(); + rightAverage = new System.Windows.Forms.Label(); + leftDcLabel = new System.Windows.Forms.Label(); + leftDcCount = new System.Windows.Forms.Label(); + label3 = new System.Windows.Forms.Label(); + rightDcCount = new System.Windows.Forms.Label(); + clockLabel = new System.Windows.Forms.Label(); + leftRecordLabel = new System.Windows.Forms.Label(); + leftRecordText = new System.Windows.Forms.Label(); + SuspendLayout(); + // + // clickInfoBox + // + clickInfoBox.BackColor = System.Drawing.Color.Black; + clickInfoBox.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + clickInfoBox.ForeColor = System.Drawing.Color.White; + clickInfoBox.Location = new System.Drawing.Point(12, 12); + clickInfoBox.Multiline = true; + clickInfoBox.Name = "clickInfoBox"; + clickInfoBox.ReadOnly = true; + clickInfoBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; + clickInfoBox.ShortcutsEnabled = false; + clickInfoBox.Size = new System.Drawing.Size(388, 134); + clickInfoBox.TabIndex = 1; + clickInfoBox.MouseClick += new System.Windows.Forms.MouseEventHandler(hideCaret); + // + // logBox + // + logBox.BackColor = System.Drawing.Color.Black; + logBox.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + logBox.ForeColor = System.Drawing.Color.White; + logBox.Location = new System.Drawing.Point(419, 12); + logBox.MaxLength = 2147483647; + logBox.Multiline = true; + logBox.Name = "logBox"; + logBox.ReadOnly = true; + logBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + logBox.ShortcutsEnabled = false; + logBox.Size = new System.Drawing.Size(369, 426); + logBox.TabIndex = 2; + logBox.MouseClick += new System.Windows.Forms.MouseEventHandler(hideCaret); + // + // timeInfoBox + // + timeInfoBox.BackColor = System.Drawing.Color.Black; + timeInfoBox.ForeColor = System.Drawing.Color.White; + timeInfoBox.Location = new System.Drawing.Point(12, 166); + timeInfoBox.Multiline = true; + timeInfoBox.Name = "timeInfoBox"; + timeInfoBox.ReadOnly = true; + timeInfoBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; + timeInfoBox.ShortcutsEnabled = false; + timeInfoBox.Size = new System.Drawing.Size(388, 126); + timeInfoBox.TabIndex = 3; + timeInfoBox.MouseClick += new System.Windows.Forms.MouseEventHandler(hideCaret); + // + // systemInfoBox + // + systemInfoBox.BackColor = System.Drawing.Color.Black; + systemInfoBox.ForeColor = System.Drawing.Color.White; + systemInfoBox.Location = new System.Drawing.Point(12, 312); + systemInfoBox.Multiline = true; + systemInfoBox.Name = "systemInfoBox"; + systemInfoBox.ReadOnly = true; + systemInfoBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; + systemInfoBox.ShortcutsEnabled = false; + systemInfoBox.Size = new System.Drawing.Size(388, 126); + systemInfoBox.TabIndex = 4; + systemInfoBox.MouseClick += new System.Windows.Forms.MouseEventHandler(hideCaret); + // + // label1 + // + label1.AutoSize = true; + label1.BackColor = System.Drawing.Color.Black; + label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + label1.ForeColor = System.Drawing.Color.White; + label1.Location = new System.Drawing.Point(23, 20); + label1.Name = "label1"; + label1.Size = new System.Drawing.Size(81, 20); + label1.TabIndex = 5; + label1.Text = "Left CPS: "; + // + // label2 + // + label2.AutoSize = true; + label2.BackColor = System.Drawing.Color.Black; + label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + label2.ForeColor = System.Drawing.Color.White; + label2.Location = new System.Drawing.Point(200, 20); + label2.Name = "label2"; + label2.Size = new System.Drawing.Size(87, 20); + label2.TabIndex = 6; + label2.Text = "Right CPS:"; + // + // leftTotal + // + leftTotal.AutoSize = true; + leftTotal.BackColor = System.Drawing.Color.Black; + leftTotal.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + leftTotal.ForeColor = System.Drawing.Color.White; + leftTotal.Location = new System.Drawing.Point(23, 81); + leftTotal.Name = "leftTotal"; + leftTotal.Size = new System.Drawing.Size(48, 20); + leftTotal.TabIndex = 7; + leftTotal.Text = "Total:"; + // + // label4 + // + label4.AutoSize = true; + label4.BackColor = System.Drawing.Color.Black; + label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + label4.ForeColor = System.Drawing.Color.White; + label4.Location = new System.Drawing.Point(200, 81); + label4.Name = "label4"; + label4.Size = new System.Drawing.Size(52, 20); + label4.TabIndex = 8; + label4.Text = "Total: "; + // + // leftRecordLabel + // + leftRecordLabel.AutoSize = true; + leftRecordLabel.BackColor = System.Drawing.Color.Black; + leftRecordLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + leftRecordLabel.ForeColor = System.Drawing.Color.White; + leftRecordLabel.Location = new System.Drawing.Point(23, 61); + leftRecordLabel.Name = "Record:"; + leftRecordLabel.Size = new System.Drawing.Size(65, 20); + leftRecordLabel.TabIndex = 9; + leftRecordLabel.Text = "Record:"; + // + // label6 + // + label6.AutoSize = true; + label6.BackColor = System.Drawing.Color.Black; + label6.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + label6.ForeColor = System.Drawing.Color.White; + label6.Location = new System.Drawing.Point(200, 41); + label6.Name = "label6"; + label6.Size = new System.Drawing.Size(76, 20); + label6.TabIndex = 10; + label6.Text = "With DC: "; + // + // label7 + // + label7.AutoSize = true; + label7.BackColor = System.Drawing.Color.Black; + label7.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + label7.ForeColor = System.Drawing.Color.White; + label7.Location = new System.Drawing.Point(23, 40); + label7.Name = "label7"; + label7.Size = new System.Drawing.Size(72, 20); + label7.TabIndex = 11; + label7.Text = "With DC:"; + // + // label8 + // + label8.AutoSize = true; + label8.BackColor = System.Drawing.Color.Black; + label8.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + label8.ForeColor = System.Drawing.Color.White; + label8.Location = new System.Drawing.Point(200, 61); + label8.Name = "label8"; + label8.Size = new System.Drawing.Size(69, 20); + label8.TabIndex = 12; + label8.Text = "Record: "; + // + // leftAverage + // + leftAverage.AutoSize = true; + leftAverage.BackColor = System.Drawing.Color.Black; + leftAverage.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + leftAverage.ForeColor = System.Drawing.Color.White; + leftAverage.Location = new System.Drawing.Point(23, 121); + leftAverage.Name = "leftAverage"; + leftAverage.Size = new System.Drawing.Size(72, 20); + leftAverage.TabIndex = 13; + leftAverage.Text = "% Filtered:"; + // + // label10 + // + label10.AutoSize = true; + label10.BackColor = System.Drawing.Color.Black; + label10.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + label10.ForeColor = System.Drawing.Color.White; + label10.Location = new System.Drawing.Point(200, 119); + label10.Name = "% Filtered"; + label10.Size = new System.Drawing.Size(72, 20); + label10.TabIndex = 14; + label10.Text = "% Filtered"; + // + // leftCPS + // + leftCPS.AutoSize = true; + leftCPS.BackColor = System.Drawing.Color.Black; + leftCPS.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + leftCPS.ForeColor = System.Drawing.Color.White; + leftCPS.Location = new System.Drawing.Point(110, 20); + leftCPS.Name = "leftCPS"; + leftCPS.Size = new System.Drawing.Size(18, 20); + leftCPS.TabIndex = 15; + leftCPS.Text = "0"; + // + // leftWithDC + // + leftWithDC.AutoSize = true; + leftWithDC.BackColor = System.Drawing.Color.Black; + leftWithDC.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + leftWithDC.ForeColor = System.Drawing.Color.White; + leftWithDC.Location = new System.Drawing.Point(110, 41); + leftWithDC.Name = "leftWithDC"; + leftWithDC.Size = new System.Drawing.Size(18, 20); + leftWithDC.TabIndex = 16; + leftWithDC.Text = "0"; + // + // leftRecordText + // + leftRecordText.AutoSize = true; + leftRecordText.BackColor = System.Drawing.Color.Black; + leftRecordText.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + leftRecordText.ForeColor = System.Drawing.Color.White; + leftRecordText.Location = new System.Drawing.Point(110, 61); + leftRecordText.Name = "leftRecord"; + leftRecordText.Size = new System.Drawing.Size(18, 20); + leftRecordText.TabIndex = 17; + leftRecordText.Text = "0"; + // + // leftTotalText + // + leftTotalText .AutoSize = true; + leftTotalText .BackColor = System.Drawing.Color.Black; + leftTotalText .Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + leftTotalText .ForeColor = System.Drawing.Color.White; + leftTotalText .Location = new System.Drawing.Point(110, 81); + leftTotalText .Name = "leftTotalText "; + leftTotalText .Size = new System.Drawing.Size(18, 20); + leftTotalText .TabIndex = 18; + leftTotalText .Text = "0"; + // + // ratioLeftText + // + ratioLeftText.AutoSize = true; + ratioLeftText.BackColor = System.Drawing.Color.Black; + ratioLeftText.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + ratioLeftText.ForeColor = System.Drawing.Color.White; + ratioLeftText.Location = new System.Drawing.Point(110, 121); + ratioLeftText.Name = "ratioLeftText"; + ratioLeftText.Size = new System.Drawing.Size(18, 20); + ratioLeftText.TabIndex = 19; + ratioLeftText.Text = "0"; + // + // rightCPS + // + rightCPS.AutoSize = true; + rightCPS.BackColor = System.Drawing.Color.Black; + rightCPS.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + rightCPS.ForeColor = System.Drawing.Color.White; + rightCPS.Location = new System.Drawing.Point(300, 20); + rightCPS.Name = "rightCPS"; + rightCPS.Size = new System.Drawing.Size(18, 20); + rightCPS.TabIndex = 20; + rightCPS.Text = "0"; + // + // rightWithDC + // + rightWithDC.AutoSize = true; + rightWithDC.BackColor = System.Drawing.Color.Black; + rightWithDC.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + rightWithDC.ForeColor = System.Drawing.Color.White; + rightWithDC.Location = new System.Drawing.Point(300, 41); + rightWithDC.Name = "rightWithDC"; + rightWithDC.Size = new System.Drawing.Size(18, 20); + rightWithDC.TabIndex = 21; + rightWithDC.Text = "0"; + // + // rightRecord + // + rightRecord.AutoSize = true; + rightRecord.BackColor = System.Drawing.Color.Black; + rightRecord.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + rightRecord.ForeColor = System.Drawing.Color.White; + rightRecord.Location = new System.Drawing.Point(300, 61); + rightRecord.Name = "rightRecord"; + rightRecord.Size = new System.Drawing.Size(18, 20); + rightRecord.TabIndex = 22; + rightRecord.Text = "0"; + // + // rightTotal + // + rightTotal.AutoSize = true; + rightTotal.BackColor = System.Drawing.Color.Black; + rightTotal.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + rightTotal.ForeColor = System.Drawing.Color.White; + rightTotal.Location = new System.Drawing.Point(300, 81); + rightTotal.Name = "rightTotal"; + rightTotal.Size = new System.Drawing.Size(18, 20); + rightTotal.TabIndex = 23; + rightTotal.Text = "0"; + // + // rightAverage + // + rightAverage.AutoSize = true; + rightAverage.BackColor = System.Drawing.Color.Black; + rightAverage.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + rightAverage.ForeColor = System.Drawing.Color.White; + rightAverage.Location = new System.Drawing.Point(300, 121); + rightAverage.Name = "rightAverage"; + rightAverage.Size = new System.Drawing.Size(18, 20); + rightAverage.TabIndex = 24; + rightAverage.Text = "0"; + // + // leftDcLabel + // + leftDcLabel.AutoSize = true; + leftDcLabel.BackColor = System.Drawing.Color.Black; + leftDcLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + leftDcLabel.ForeColor = System.Drawing.Color.White; + leftDcLabel.Location = new System.Drawing.Point(23, 101); + leftDcLabel.Name = "leftDcLabel"; + leftDcLabel.Size = new System.Drawing.Size(85, 20); + leftDcLabel.TabIndex = 25; + leftDcLabel.Text = "Prevented:"; + // + // leftDcCount + // + leftDcCount.AutoSize = true; + leftDcCount.BackColor = System.Drawing.Color.Black; + leftDcCount.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + leftDcCount.ForeColor = System.Drawing.Color.White; + leftDcCount.Location = new System.Drawing.Point(110, 101); + leftDcCount.Name = "leftDcCount"; + leftDcCount.Size = new System.Drawing.Size(18, 20); + leftDcCount.TabIndex = 26; + leftDcCount.Text = "0"; + // + // label3 + // + label3.AutoSize = true; + label3.BackColor = System.Drawing.Color.Black; + label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + label3.ForeColor = System.Drawing.Color.White; + label3.Location = new System.Drawing.Point(200, 99); + label3.Name = "label3"; + label3.Size = new System.Drawing.Size(85, 20); + label3.TabIndex = 27; + label3.Text = "Prevented:"; + // + // rightDcCount + // + rightDcCount.AutoSize = true; + rightDcCount.BackColor = System.Drawing.Color.Black; + rightDcCount.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + rightDcCount.ForeColor = System.Drawing.Color.White; + rightDcCount.Location = new System.Drawing.Point(300, 101); + rightDcCount.Name = "rightDcCount"; + rightDcCount.Size = new System.Drawing.Size(18, 20); + rightDcCount.TabIndex = 28; + rightDcCount.Text = "0"; + // + // clockLabel + // + clockLabel.AutoSize = true; + clockLabel.BackColor = System.Drawing.Color.Black; + clockLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 22F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + clockLabel.ForeColor = System.Drawing.Color.White; + clockLabel.Location = new System.Drawing.Point(20, 220); + clockLabel.Name = "00:00:00"; + clockLabel.Size = new System.Drawing.Size(18, 20); + clockLabel.TabIndex = 21; + clockLabel.Text = "00:00:00"; + // + // App + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.ClientSize = new System.Drawing.Size(799, 451); + this.Controls.Add(clockLabel); + this.Controls.Add(rightDcCount); + this.Controls.Add(label3); + this.Controls.Add(leftDcCount); + this.Controls.Add(leftDcLabel); + this.Controls.Add(rightAverage); + this.Controls.Add(rightTotal); + this.Controls.Add(rightRecord); + this.Controls.Add(rightWithDC); + this.Controls.Add(rightCPS); + this.Controls.Add(ratioLeftText); + this.Controls.Add(leftTotalText ); + this.Controls.Add(leftWithDC); + this.Controls.Add(leftCPS); + this.Controls.Add(label10); + this.Controls.Add(leftAverage); + this.Controls.Add(label8); + this.Controls.Add(label7); + this.Controls.Add(label6); + this.Controls.Add(label4); + this.Controls.Add(leftTotal); + this.Controls.Add(label2); + this.Controls.Add(label1); + this.Controls.Add(systemInfoBox); + this.Controls.Add(timeInfoBox); + this.Controls.Add(logBox); + this.Controls.Add(leftRecordText); + this.Controls.Add(leftRecordLabel); + this.Controls.Add(clickInfoBox); + this.MaximumSize = new System.Drawing.Size(815, 490); + this.MinimumSize = new System.Drawing.Size(815, 490); + this.Name = "App"; + this.ShowIcon = false; + this.Text = "Swim Prevent"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + public static Label label1; + public static TextBox clickInfoBox; + public static TextBox logBox; + public static TextBox timeInfoBox; + public static TextBox systemInfoBox; + public static Label label2; + public static Label leftTotal; + public static Label label4; + public static Label leftRecord; + public static Label label6; + public static Label label7; + public static Label label8; + public static Label leftAverage; + public static Label label10; + public static Label leftCPS; + public static Label leftWithDC; + public static Label leftRecordText; + public static Label leftTotalText ; + public static Label ratioLeftText; + public static Label rightCPS; + public static Label rightWithDC; + public static Label rightRecord; + public static Label rightTotal; + public static Label rightAverage; + public static Label leftDcLabel; + public static Label leftDcCount; + public static Label label3; + public static Label rightDcCount; + public static Label clockLabel; + public static Label leftRecordLabel; + } +} + diff --git a/Swim Prevent/App.config b/Swim Prevent/App.config new file mode 100644 index 0000000..d821f37 --- /dev/null +++ b/Swim Prevent/App.config @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Swim Prevent/App.cs b/Swim Prevent/App.cs new file mode 100644 index 0000000..404b91a --- /dev/null +++ b/Swim Prevent/App.cs @@ -0,0 +1,166 @@ +using System; +using System.Diagnostics; +using System.Drawing; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Swim_Prevent { + public partial class App : Form { + [System.Runtime.InteropServices.DllImport("user32.dll")] + private static extern bool HideCaret(IntPtr hWnd); + public static bool closed = false; + + public App() { + InitializeComponent(); + ClickListener.Subscribe(); + TimeManager.startTimers(); + FileManager.createLogs(); + Task.Run(() => Detections.runChecks()); + // some info + string selfPath = InfoUtil.getSelfFilePath(); + string checksum = InfoUtil.getCheckSum(selfPath); + int pid = InfoUtil.getSelfPID(); + string currentDateAndTime = InfoUtil.getCurrentDateAndTime(); + string usbDriveCheck = InfoUtil.scanForUsbDrives(); + int inputDeviceCount = InfoUtil.getInputDeviceCount(); + string recycleBinTime = InfoUtil.getRecycleBin(); + // write it to app UI + timeInfoBox.AppendText(Environment.NewLine); + timeInfoBox.AppendText(" Swim Prevent Opened At " + currentDateAndTime); + systemInfoBox.AppendText(" Swim Prevent File Path: " + Environment.NewLine + " " + selfPath); + systemInfoBox.AppendText(Environment.NewLine); + systemInfoBox.AppendText(Environment.NewLine); + systemInfoBox.AppendText(" Swim Prevent MD5 CheckSum: " + Environment.NewLine + " " + checksum); + systemInfoBox.AppendText(Environment.NewLine); + systemInfoBox.AppendText(Environment.NewLine); + systemInfoBox.AppendText(" Swim Prevent PID: " + Environment.NewLine + " " + pid); + systemInfoBox.AppendText(Environment.NewLine); + systemInfoBox.AppendText(Environment.NewLine); + systemInfoBox.AppendText(" Recycle Bin Last Cleared: " + Environment.NewLine + " " + recycleBinTime); + // write it to the log file too + FileManager.appendLogs(" Swim Prevent Opened At " + currentDateAndTime + Environment.NewLine); + FileManager.appendLogs(" Swim Prevent File Path: " + selfPath + Environment.NewLine); + FileManager.appendLogs(" Swim Prevent MD5 CheckSum: " + checksum + Environment.NewLine); + FileManager.appendLogs(" Swim Prevent PID: " + pid + Environment.NewLine); + FileManager.appendLogs(" Recycle Bin Last Cleared: " + recycleBinTime + Environment.NewLine); + FileManager.appendLogs(" USB Drive Status: " + usbDriveCheck + Environment.NewLine); + FileManager.appendLogs(" USB Device Count: " + inputDeviceCount + Environment.NewLine); + } + + public static void render(Object foo, System.Timers.ElapsedEventArgs bar) { + if (closed) return; + if (leftCPS.IsHandleCreated == false) return; + if (rightCPS.IsHandleCreated == false) return; + if (clockLabel.IsHandleCreated == false) return; + if (leftWithDC.IsHandleCreated == false) return; + if (rightWithDC.IsHandleCreated == false) return; + if (leftRecordText.IsHandleCreated == false) return; + if (rightRecord.IsHandleCreated == false) return; + if (leftDcCount.IsHandleCreated == false) return; + if (rightDcCount.IsHandleCreated == false) return; + if (leftAverage.IsHandleCreated == false) return; + if (rightAverage.IsHandleCreated == false) return; + if (leftTotalText.IsHandleCreated == false) return; + if (rightTotal.IsHandleCreated == false) return; + if (leftDcCount.IsHandleCreated == false) return; + if (rightDcCount.IsHandleCreated == false) return; + if (ratioLeftText.IsHandleCreated == false) return; + if (rightAverage.IsHandleCreated == false) return; + + leftCPS.Invoke((MethodInvoker)delegate { + leftCPS.Text = ClickListener.leftClicks.Count.ToString(); + }); + + rightCPS.Invoke((MethodInvoker)delegate { + rightCPS.Text = ClickListener.rightClicks.Count.ToString(); + }); + + leftWithDC.Invoke((MethodInvoker)delegate { + leftWithDC.Text = ClickListener.unfilteredLeftClicks.Count.ToString(); + }); + + rightWithDC.Invoke((MethodInvoker)delegate { + rightWithDC.Text = ClickListener.unfilteredRightClicks.Count.ToString(); + }); + + leftRecordText.Invoke((MethodInvoker)delegate { + leftRecordText.Text = ClickListener.topLeftCPS.ToString(); + }); + + rightRecord.Invoke((MethodInvoker)delegate { + rightRecord.Text = ClickListener.topRightCPS.ToString(); + }); + + leftTotalText.Invoke((MethodInvoker)delegate { + leftTotalText.Text = ClickListener.totalLeftClicks.ToString(); + }); + + rightTotal.Invoke((MethodInvoker)delegate { + rightTotal.Text = ClickListener.totalRightClicks.ToString(); + }); + + leftDcCount.Invoke((MethodInvoker)delegate { + leftDcCount.Text = ClickListener.totalFilteredLeftClicks.ToString(); + }); + + rightDcCount.Invoke((MethodInvoker)delegate { + rightDcCount.Text = ClickListener.totalFilteredRightClicks.ToString(); + }); + + ratioLeftText.Invoke((MethodInvoker)delegate { + ratioLeftText.Text = ClickListener.ratioLeft.ToString(); + }); + + rightAverage.Invoke((MethodInvoker)delegate { + rightAverage.Text = ClickListener.ratioRight.ToString(); + }); + + clockLabel.Invoke((MethodInvoker)delegate { + clockLabel.Text = TimeManager.clock; + }); + } + + public static void updateLogBox(string msg) { + logBox.Invoke((MethodInvoker)delegate { + logBox.BackColor = Color.Black; + logBox.ForeColor = Color.White; + logBox.AppendText(msg); + logBox.AppendText(Environment.NewLine); + }); + FileManager.appendLogs(msg); + } + + private void hideCaret(object sender, EventArgs e) { + HideCaret(logBox.Handle); + HideCaret(clickInfoBox.Handle); + HideCaret(timeInfoBox.Handle); + HideCaret(systemInfoBox.Handle); + } + + public static async Task closeAsync() { + closed = true; + TimeManager.stopTimers(); + ClickListener.Unsubscribe(); + // info dump that can be written to a log file after closing + string selfPath = InfoUtil.getSelfFilePath(); + string checksum = InfoUtil.getCheckSum(selfPath); + int pid = InfoUtil.getSelfPID(); + string currentDateAndTime = InfoUtil.getCurrentDateAndTime(); + string usbDriveCheck = InfoUtil.scanForUsbDrives(); + int inputDeviceCount = InfoUtil.getInputDeviceCount(); + string parsedUSB = InfoUtil.readUSB(); + string recycleBinTime = InfoUtil.getRecycleBin(); + // write to log file + FileManager.appendLogs(Environment.NewLine); + FileManager.appendLogs(" Swim Prevent Closed At " + currentDateAndTime + Environment.NewLine); + FileManager.appendLogs(" Swim Prevent File Path: " + selfPath + Environment.NewLine); + FileManager.appendLogs(" Swim Prevent MD5 CheckSum: " + checksum + Environment.NewLine); + FileManager.appendLogs(" Swim Prevent PID: " + pid + Environment.NewLine); + FileManager.appendLogs(" Recycle Bin Last Cleared: " + recycleBinTime + Environment.NewLine); + FileManager.appendLogs(" USB Drive Status: " + usbDriveCheck + Environment.NewLine); + FileManager.appendLogs(" USB Device Count: " + inputDeviceCount + Environment.NewLine); + await Task.Run(() => Detections.runChecks()); + // Debug.WriteLine("List of USB Input Devices: " + parsedUSB); // this is usually a lot of spam and not worth looking at half the time + } + } +} diff --git a/Swim Prevent/App.resx b/Swim Prevent/App.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Swim Prevent/App.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Swim Prevent/CPS.cs b/Swim Prevent/CPS.cs new file mode 100644 index 0000000..73a57a9 --- /dev/null +++ b/Swim Prevent/CPS.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Swim_Prevent { + class CPS { + // the way this works is if the click has been alive longer than 1000 milliseconds then remove it from the cps stack + // did it in differenent managers to be async + public static void leftCpsManager(Object foo, System.Timers.ElapsedEventArgs bar) { + if (ClickListener.leftClicks.Count <= 0 || App.closed) return; + var oldestLeftClickTime = Convert.ToInt64(ClickListener.leftClicks[0]); + var leftClickDeltaTime = Math.Abs(oldestLeftClickTime - InfoUtil.getTimeNow()); + if (leftClickDeltaTime >= 1000 && ClickListener.leftClicks.Count > 0) { + ClickListener.leftClicks.RemoveAt(0); + } + } + + public static void rightCpsManager(Object foo, System.Timers.ElapsedEventArgs bar) { + if (ClickListener.rightClicks.Count <= 0 || App.closed) return; + var oldestRightClickTime = Convert.ToInt64(ClickListener.rightClicks[0]); + var rightClickDeltaTime = Math.Abs(oldestRightClickTime - InfoUtil.getTimeNow()); + if (rightClickDeltaTime >= 1000 && ClickListener.rightClicks.Count > 0) { + ClickListener.rightClicks.RemoveAt(0); + } + } + + public static void uncappedLeftCpsManager(Object foo, System.Timers.ElapsedEventArgs bar) { + if (ClickListener.unfilteredLeftClicks.Count <= 0 || App.closed) return; + var oldestClickTime = Convert.ToInt64(ClickListener.unfilteredLeftClicks[0]); + var deltaTime = Math.Abs(oldestClickTime - InfoUtil.getTimeNow()); + if (deltaTime >= 1000 && ClickListener.unfilteredLeftClicks.Count > 0) { + ClickListener.unfilteredLeftClicks.RemoveAt(0); + } + } + + public static void uncappedRightCpsManager(Object foo, System.Timers.ElapsedEventArgs bar) { + if (ClickListener.unfilteredRightClicks.Count <= 0 || App.closed) return; + var oldestClickTime = Convert.ToInt64(ClickListener.unfilteredRightClicks[0]); + var deltaTime = Math.Abs(oldestClickTime - InfoUtil.getTimeNow()); + if (deltaTime >= 1000 && ClickListener.unfilteredRightClicks.Count > 0) { + ClickListener.unfilteredRightClicks.RemoveAt(0); + } + } + } +} diff --git a/Swim Prevent/CheatTable.cs b/Swim Prevent/CheatTable.cs new file mode 100644 index 0000000..6a0d333 --- /dev/null +++ b/Swim Prevent/CheatTable.cs @@ -0,0 +1,172 @@ +namespace Swim_Prevent { + class CheatTable { + + // this is also fairly shitty, but helps, cba to get every single string in mcpe history + public static string[] illegalStrings = { + "nitr0", + "horion", + "lakeside", + "ambrosial", + "helix", + "ascendancy", + "cheat engine", + "xodus", + "lokiclient", + "loki client", + "moon client", + "cheatengine", + "zephyr", + "zephyr client", + "badman", + "eternium", + "packet client", + "fadeaway", + "rixcheats", + "clicker", + "horionclient", + "cryptoclient", + "swiftclient", + "swift client", + "auto clicker", + "clicker", + "nitr0 lite", + "luconia", + "strikeinjector", + "fadedinjector", + "bominjector", + "crypto client", + "bolt client", + "Ambrosial Launcher", + "AlphaLauncher Injector", + "Brush Client", + "B1TCH Client", + "Eternium Client", + "Flare Client", + "Fate Injector", + "Ghostly Client", + "HelixPvP Injector", + "Horion Injector", + "Horion Client", + "Hanzai Client", + "ImEU Client", + "LakeSide Client", + "Moon Client", + "Nitr0 Client", + "OP Autoclicker", + "NG Injector", + "Quadrix Client", + "Surge Client Launcher", + "Ventile Client", + "CND Client", + "CND Authentication", + "Ascendancy Client", + "Sp0tify Client", + "JarJar Client", + "saka Client", + "Crypto Client", + "openprocess", + "readprocess", + "slinky", + }; + + // cheat tables (as I call them) are shitty detections, but it doesn't hurt to have them + public static string checkMD5(string md5) { + return md5 switch { + "4ca3c23042c6e7baa2171fe2c2243cd6" => "Horion 1.12", + "09A637F677110149C6E43223EF77DAA7" => "Ascendancy.exe", + "689AEAD0BDF3F68F3A5F1273CCE7ED04" => "Fake svhost", + "9E6DE7C7EBD1A00C2F7DDEC78BA9403A" => "Fate Injector.exe", + "8E20218DFEF733FFD8FA284D4E1BAF78" => "Old Onix Injector.exe", + "E4759B2E6AFF7E4D18A02F8E1FE2223D" => "Onix Launcher.exe", + "B91AB28DB07F131095929EBF7A0E6B8A" => "Onix.dll", + "CACAAFEC50116B8120027954BAD9AFDD" => "Onix Injector.exe", + "4D7BE1A6DAD181D0E42AFA7AC7D8A872" => "Helix.dll", + "689C0AD4003F1FEAB8EC45B281489460" => "Helix Alpha.exe", + "0EC153E4EABB1AA5DFE11FD16ED1EA23" => "Helix PvP Injector.exe", + "EB44D5A1914C9C32EF9994F9C4F6188D" => "Vene Clicker.jar", + "B77FCB0221E5EDF634FF3B7A9CB75937" => "Nitro 1.17.10", + "E93E3856353AA90A2E93D6E2D626AFC1" => "Eternium 1.17.10", + "F8508B90A8DEA540F5BD2D497932C71A" => "Xodus.exe", + "7872E9B626775F63747FCDF6650F647E" => "Ambrosial", + "C33B0FFC80E108ECFF0C3832A06A8EC6" => "Nitro 1.17.2", + "EF279B341F62120E1F5ABCFF85B24541" => "Horion DLL 1.17.2", + "18CB627B78DD3C81F67F4002B92EECBA" => "YaamiClient.dll 1.17.2", + "021F85ACA44ED090DF93C241CB37DE1A" => "Anarchy_Client 1.17.2", + "29212477DF769B364B5769F0A5506FE0" => "auto_updating_hooks 1.17.2/1.17.0", + "70B08DD86F749C1D26296BD8060224FB" => "Nitro 1.17.0", + "CFF9E3E67D55BFECADF0D3D5AE14B35C" => "Ambrosial_And_Zephyr 1.17.0", + "42384237C8CA34C94C9753F6484397AB" => "Anarchy_Client 1.17.0", + "0F84EFDB27BB7CDF6A27A4E0EC5CE19B" => "Nitro 1.16.221", + "58BDB1920EBA082553A7F8F7D62CF9CF" => "Loki 1.16.221", + "655DBF3A33CAE2EE1C0BC68B91C399EB" => "Moon_V0.3 1.16.221", + "D82D15F63342377D9A2C9CA5CD479A2B" => "Strike 1.16.221", + "D7259DDE5D8F36FF2246391FFFACF60F" => "Eternium 1.16.221/ 1.16.220", + "8C10C62384D6D5DC33EDC28C127E6D8D" => "Eclipse 1.16.221", + "AD5CE67AF55E471417E929AFDBD9AE9F" => "Autism 1.16.221", + "3ADB1338EDCA48C8A1DCA71CF2D70B53" => "Wave 1.16.221", + "8A184F8A9C3D3A9BFD26D1676643DD98" => "Nitro 1.16.220", + "2AFEEC5FBB445DED2FAC959DF9AE6B6F" => "Eclipse_Client", + "8506318AC79494C9F7047BF76ADF7E33" => "Quadrix.dll 1.16.220", + "11B45786CF2A41009BCD53EE8BCB2E4F" => "Nitro 1.16.210", + "348EE5AFB324BB1E8297ECEF396CBB84" => "Disguised Process Hacker Nitr0 1.16.210", + "894135DF60D9370CDDC17D316EB40DCC" => "Disguised Reasource Hacker Nitr0 1.16.210", + "4C6703D30F207377329FE92E5597C82A" => "Disguised Spotify Nitr0 1.16.210", + "555125301AE860C13A1EADB8732AB447" => "Disguised Minecraft Launcher Nitr0 1.16.210", + "235AA72B4FB4B2306ECE386B744A24C8" => "Coffe 1.16.210, Coffee 1.16.201", + "DA8D630DE50A275D0319E48DF50D7BCC" => "Eternium 1.16.210", + "E420CD70AAFA0CA42C6242E0F5EBBE8F" => "Nitro 1.16.201", + "1F52A54D68CC984CD4F2FFD7A1E675C5" => "Fadeaway 1.16.201", + "BA2B6A24AB8DB28CFE9D27F590B60616" => "BadManPublic 1.16.201", + "0A414304FA0DDE93C6C7276A339566B0" => "V3CTER 1.16.201", + "F9A70C5D744ADA0C4FFAB4C83600BFAC" => "RixCheets 1.16.201", + "1987AAB4325441558D798D5D1DD31E60" => "PacketClient 1.16.201", + "B3D680A7DB274ADE853BD64980553693" => "HorionDLL 1.16.201", + "200B18C738DD5465F6C638428D6FA8DE" => "HorionDebugInjector 1.16.201", + "81D6E71A75E590237041E38851756DBA" => "Lakeside 1.16.100", + "E9CB88B026CE2F528017636222AF1251" => "Nitro 1.16.100", + "D6CF5B18F80300BE621EDDD41F1425B0" => "Explorer 1.16.100, Distinct 1.16.100", + "7ECFC8CD7455DD9998F7DAD88F2A8A9D" => "OP AutoClicker.exe", + "9350C5CF61A4D3D68177FAD54ACFD87C" => "XMouseButtonControl.exe", + "8FD172F85EE2111BB2C796F255DFCA77" => "7Clicker.jar", + "77652D318A4E61F0A6D76028B75493A3" => "mouseclicker.exe", + "6862F65BE14FD3CE88086EC79777DB6E" => "GS Auto Clicker.exe", + "27D5A6C9274255CF89B38F28480EDCF0" => "Polr Clicker.exe", + "64701AE13E815DFF419E73CF9D66F924" => "TheFastestMouseClicker.exe", + "4F3CE2D1C1C63AD7D1F563A9FFD5B7BD" => "TheFastestMouseGroupClicker.exe", + "2CE992ABD25F22DE9A9B737BC608CF89" => "Cheat Engine.exe", + "84B67974390A284A9B50E1FB1848B8BF" => "Clumsy.exe", + "A68EE5AFB324BO9E8297ECEF396CBP84" => "Ascendancy 1.17.10", + "20B98DD86NI49C1D26296BOD8060224F" => "Ascendancy 1.17.2", + "E16V3856393AD90A2E93D6E2D62NAFC1" => "Ascendancy 1.17.2 Lite", + "9S1OE1B6267S5F63749FCDF6650V647E" => "Ascendancy 1.17.0", + "1A05B925F9CB6AACE8E20226305F6D87" => "Packet Client Injector.exe", + "C6CD45133F9D90973C57C568DFEE0D51" => "Packet Client DLL", + "01BD9957DD4B0E580E6A0FA271667C9F" => "Packet Client Old DLL", + "98B2109BCF941B4FBBAD01C45F9D4B88" => "Nitr0 lite", + "867aee91cd59fe555b607d28fea4e9af" => "treor", + "596b0f4684d45de83c204967c06e48a3" => "Ambrosial", + "b365af317ae730a67c936f21432b9c71" => "Process Hacker 2.0", + "ae0d569dd692dd8374b4e211f2f4c1bd" => "nitro 1.18", + "7a9bb20aaf6bf6971c8d40a4fe3352e6" => "nitro", + "1289463d7d8df7d9176068f59c2ef2d0" => "nitro", + "401ed0badfe8bc5b1c846716214acb72" => "nitro lite", + "a5a8a0c225982cc2e48250c77476d4bc" => "nitro", + "9f68552aa09d850984788fa6697e240b" => "nitro", + "34b4737f23d1545a345ffbbdff43c0eb" => "nitro", + "bf0d96e4046134b854b5467fa365ef78" => "nitro", + "d02140e2d65107f79ac52eea83698535" => "nitro", + "45947390ad0391be18fc5e503f9cd66e" => "nitro", + "2ce992abd25f22de9a9b737bc608cf89" => "Cheat Engine", + "36730c5c7ccb78a132209d4ead01b649" => "Cheat Engine", + "56b684a54088439ce969e27a4d1ae4f2" => "Cheat Engine", + "f8c759f9a0b69169b84422cb2da1b984" => "Cheat Engine", + "cce3849e2b180b5ea32bcd0dca8ae28c" => "Zoom Clicker", + "352352b54a1054a7f3e304e2a533ab70" => "Lunar Clicker", + "689aead0bdf3f68f3a5f1273cce7ed04" => "Fake SVHOST", + "40a0b560ed87dbdb9cc7cf34a4dab203" => "Spotify Clicker", + "5bfdbb28cc7fed82bf415edac9c9eb83" => "Slinky Clicker", + _ => "clean", + }; + } + } +} diff --git a/Swim Prevent/ClickListener.cs b/Swim Prevent/ClickListener.cs new file mode 100644 index 0000000..2c0c9aa --- /dev/null +++ b/Swim Prevent/ClickListener.cs @@ -0,0 +1,128 @@ +using Gma.System.MouseKeyHook; +using System; +using System.Collections; +using System.Diagnostics; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Swim_Prevent { + class ClickListener { + + // variables to care about + private static int lastLeftClickedTimeStamp = 0; // to keep track of when we last left clicked + private static int lastRightClickedTimeStamp = 0; // to keep track of when we last right clicked + public static ArrayList leftClicks = new ArrayList(); // the size of this array = cps + public static ArrayList rightClicks = new ArrayList(); // the size of this array = cps + public static ArrayList unfilteredLeftClicks = new ArrayList(); // the size of this array = left cps unfiltered clicks + public static ArrayList unfilteredRightClicks = new ArrayList(); // the size of this array = right cps unfiltered clicks + public static ArrayList tempClickHistory = new ArrayList(); // for auto clicker checks + + // fun statistics to keep track of + public static int totalLeftClicks = 0; + public static int totalRightClicks = 0; + public static int topLeftCPS = 0; + public static int topRightCPS = 0; + public static int totalFilteredLeftClicks = 0; + public static int totalFilteredRightClicks = 0; + public static double ratioLeft = 0.0; + public static double ratioRight = 0.0; + + // inject global mouse input hooks + public static IKeyboardMouseEvents m_GlobalHook; + public static void Subscribe() { + m_GlobalHook = Hook.GlobalEvents(); + m_GlobalHook.MouseDownExt += onClick; + m_GlobalHook.MouseDownExt += mouseStats; + Debug.WriteLine("Subscribed Mouse Input Hooks"); + } + + public static void Unsubscribe() { + m_GlobalHook.MouseDownExt -= onClick; + m_GlobalHook.MouseDownExt -= mouseStats; + m_GlobalHook.Dispose(); + Debug.WriteLine("Disposed Mouse Input Hooks"); + } + + // on left and right click + private static async void mouseStats(object sender, MouseEventExtArgs e) { + int leftCPS = leftClicks.Count; + int rightCPS = rightClicks.Count; + + if (leftCPS > topLeftCPS) { + topLeftCPS = leftCPS; + } + + if (rightCPS > topRightCPS) { + topRightCPS = rightCPS; + } + + if (totalFilteredLeftClicks > 0) { + ratioLeft = Math.Round(((double)totalFilteredLeftClicks / (double)totalLeftClicks) * 100, 2); + } else { + ratioLeft = 0; + } + + if (totalFilteredRightClicks > 0) { + ratioRight = Math.Round(((double)totalFilteredRightClicks / (double)totalRightClicks) * 100, 2); + } else { + ratioRight = 0; + } + + if (totalLeftClicks % 250 == 0) { + await Task.Run(() => Detections.runChecks()); + } + } + + private static void onClick(object sender, MouseEventExtArgs e) { + string msg = ""; + var button = e.Button; + // e.Handled cancels it, as we are telling the OS that we already dealt with the click + if (button.Equals(MouseButtons.Left)) { + totalLeftClicks++; + var timeDifference = Math.Abs(lastLeftClickedTimeStamp - e.Timestamp); + lastLeftClickedTimeStamp = e.Timestamp; + if (timeDifference != e.Timestamp && !(timeDifference >= 2000)) { + if ((timeDifference < SwimLoader.clockSpeed && leftClicks.Count >= 5) || leftClicks.Count >= 17) { + e.Handled = true; + totalFilteredLeftClicks++; + unfilteredLeftClicks.Add(DateTimeOffset.Now.ToUnixTimeMilliseconds()); + msg = "Suppressed Left Double Click | " + timeDifference + "ms"; + } else { + msg = "Left Click | " + timeDifference + "ms"; + } + tempClickHistory.Add(timeDifference); + } else { + msg = "Left Click | Started Clicking"; + } + if (e.Handled == false) { + unfilteredLeftClicks.Add(DateTimeOffset.Now.ToUnixTimeMilliseconds()); + leftClicks.Add(DateTimeOffset.Now.ToUnixTimeMilliseconds()); + } + } else if (button.Equals(MouseButtons.Right)) { + totalRightClicks++; + var timeDifference = Math.Abs(lastRightClickedTimeStamp - e.Timestamp); + lastRightClickedTimeStamp = e.Timestamp; + if (timeDifference != e.Timestamp && !(timeDifference >= 2000)) { + if ((timeDifference < SwimLoader.clockSpeed && rightClicks.Count >= 5) || rightClicks.Count >= 17) { + e.Handled = true; + totalFilteredRightClicks++; + unfilteredRightClicks.Add(DateTimeOffset.Now.ToUnixTimeMilliseconds()); + msg = "Suppressed Right Double Click | " + timeDifference + "ms"; + } else { + msg = "Right Click | " + timeDifference + "ms"; + } + } else { + msg = "Right Click | Started Clicking"; + } + if (e.Handled == false) { + unfilteredRightClicks.Add(DateTimeOffset.Now.ToUnixTimeMilliseconds()); + rightClicks.Add(DateTimeOffset.Now.ToUnixTimeMilliseconds()); + } + } + // send message to logs after all this + if (!msg.Equals("")) { + App.updateLogBox(" " + msg); + } + } + } +} diff --git a/Swim Prevent/Detections.cs b/Swim Prevent/Detections.cs new file mode 100644 index 0000000..14e7423 --- /dev/null +++ b/Swim Prevent/Detections.cs @@ -0,0 +1,192 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Management; +using System.Runtime.InteropServices; + +namespace Swim_Prevent { + + // all of these detections are ring 3 and are super simple, congrats if you bypassed, it is not hard + // dc prevent with mouse stats is what matters more for this program + + class Detections { + + // every 250 clicks checks are run (and on the start of the program) + public static void runChecks() { + readModules(); // get dlls for minecraft exe to detect the internal cheats, semi reliable + scanProcesses(); // does like 3 checks as I scan process hashes and shit, sorta mid if I am being honest with my self + autoClickerCheck(); // could also keep track of how long mouse button is held between each click but meh + virtualMachineCheck(); // sort of useless + } + + // I am lazy as fuck and only bother to check for left auto clickers, right click autoing is visually blatant anyways + private static void autoClickerCheck() { + int[] clicks = (int[])ClickListener.tempClickHistory.ToArray(typeof(int)); + ClickListener.tempClickHistory.Clear(); + Dictionary clickTally = new Dictionary(); + double total = 0; + int count = 0; + int trueCount = -1; // for keeping track of clicks array index + // sorting and getting average of clicks + foreach (int click in clicks) { + trueCount++; + if (click > 200) { + clicks = clicks.Where((source, index) => index != trueCount).ToArray(); + continue; // to avoid useless outliers when the user just started clicking or is normal clicking + } + if (clickTally.ContainsKey(click)) { + clickTally[click]++; + } else { + clickTally[click] = 1; + } + total += click; + count++; + } + double avg = total / count; + // now for variance of clicks + // the reason I loop again is because now I have the average value I needed beforehand + double sqrSums = 0; + foreach (int click in clicks) { + if (click > 200) { + continue; // again just in case to avoid outliers + } + sqrSums += Math.Pow((click - avg), 2.0); + } + // the important values: + int uniqueness = clickTally.Count; + double variance = sqrSums / (count - 1); + double deviation = Math.Sqrt(variance); + double skewness = MathUtil.getSkewness(clicks); + // double kurtosis = MathUtil.getKurtosis(clicks); // honestly a near useless value + Debug.WriteLine("Variance: " + variance + " | Average: " + avg + " | Deviation: " + deviation + " | Skewness: " + skewness); + // all these checks are kind of bad and might false flag or be bypassed + // checks with our values and sorted click tally array + foreach (var kvp in clickTally) { + Debug.WriteLine("Wait Time = {0}ms, Occurances = {1}", kvp.Key, kvp.Value); + if (kvp.Value >= 100) { + App.updateLogBox("Auto Clicking Suspected [A]"); // if to many occurances of the same wait time between each click + } + } + if (deviation < 10 && deviation > 1) { + App.updateLogBox("Auto Clicking Suspected [B]"); // if clicks pattern is to similar + } + if (skewness > 20) { + App.updateLogBox("Auto Clicking Suspected [C]"); // if click pattern 'feels' artificially randomized + } + if (uniqueness < 10) { + App.updateLogBox("Auto Clicking Suspected [D]"); // if not very many different click wait times, also sorta doubles as an exhaustion check + } + } + + private static void readModules() { + Process[] mcproc = Process.GetProcessesByName("Minecraft.Windows"); + foreach (Process proc in mcproc) { + int dllCount = 0; + foreach (ProcessModule module in proc.Modules) { + dllCount++; + string md5 = InfoUtil.getCheckSum(module.FileName); + if (!CheatTable.checkMD5(md5).Equals("clean") || !checkProcessName(module.FileName)) { + App.updateLogBox("Illegal Process Detected: " + module.FileName + " | " + CheatTable.checkMD5(md5)); + } + Debug.WriteLine(dllCount + " : " + module.ModuleName + " -> " + module.FileName); + } + /* + if (dllCount > 173) { // very very very unreliable false flaggy and shitty way to detect injection + App.updateLogBox("Suspicous DLL Count: " + dllCount + ", this log however does not always mean cheats"); + } + */ + } + } + + // this could possibly create false flags, very easy to bypass, but does not hurt to have it + // basically a good back up for hash value checks and can confirm blatant cheats + public static bool checkProcessName(string name) { + foreach (string str in CheatTable.illegalStrings) { + if (name.ToLower().Contains(str.ToLower()) || name.ToLower().Equals(str.ToLower())) { + return false; + } + } + return true; + } + + private static void scanProcesses() { + var wmiQueryString = "SELECT ProcessId, ExecutablePath, CommandLine FROM Win32_Process"; + using (var searcher = new ManagementObjectSearcher(wmiQueryString)) + using (var results = searcher.Get()) { + var query = from p in Process.GetProcesses() + join mo in results.Cast() + on p.Id equals (int)(uint)mo["ProcessId"] + select new { + Process = p, + Name = p.ProcessName, + Pid = p.Id, + Path = (string)mo["ExecutablePath"], + CommandLine = (string)mo["CommandLine"], + }; + // the checks to be done on every running process + string selfPath = InfoUtil.getSelfFilePath(); + foreach (var item in query) { + string path = item.Path; + if (path == null) { + continue; + } + if (path.Equals(selfPath)) { + continue; // don't want to scan ourselves lmao + } + string md5 = InfoUtil.getCheckSum(path); + string checksum = CheatTable.checkMD5(md5); + //string readStrings = readProcessStrings(path); + string name = item.Name; + // now do checks + if (!checksum.Equals("clean")) { + App.updateLogBox("Illegal Process Detected: " + path + " | " + checksum + " | Named as: " + name); + } + if (!checkProcessName(name)) { + App.updateLogBox("Possibly Illegal Process Detected: " + path + " | " + checksum + " | Proc Name: " + name); + } + /* + if (!readStrings.Equals("clean")) { + App.updateLogBox("Possibly Illegal Process Detected: " + path + " | " + checksum + " | Proc Name: " + name + " | Illegal String Found: " + readStrings); + } */ + } + } + } + + private static void virtualMachineCheck() { + if (new ManagementObjectSearcher("SELECT * FROM Win32_PortConnector").Get().Count == 0) { + App.updateLogBox("Virtual Machine Detected"); + } + } + + // performance wise this last one just is not possible + /* + public static string readProcessStrings(string filePath) { + string line; + if (filePath != null) { + try { + using (StreamReader sr = new StreamReader(filePath)) { + line = sr.ReadLine(); + // Debug.WriteLine(line + " | " + filePath); + while (line != null) { + for (int i = 0; i < CheatTable.illegalStrings.Length; i++) { + string ill = CheatTable.illegalStrings[i].ToLower(); + if (line.Contains(ill)) { + return ill; + } + } + line = sr.ReadLine(); + } + } + } catch (Exception ex) { + Console.WriteLine(ex.ToString()); + } + } + return "clean"; + } */ + + } + +} diff --git a/Swim Prevent/FileManager.cs b/Swim Prevent/FileManager.cs new file mode 100644 index 0000000..5f6625f --- /dev/null +++ b/Swim Prevent/FileManager.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Swim_Prevent { + class FileManager { + + private static string logFilePath; + private static string logDir; + + public static void createLogs() { + string appdataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); + logDir = appdataPath + "\\swim_prevent_logs"; + DateTime now = DateTime.UtcNow; + long unixTimeMilliseconds = new DateTimeOffset(now).ToUnixTimeMilliseconds(); + logFilePath = logDir + "\\" + unixTimeMilliseconds + ".log"; + if (!Directory.Exists(logDir)) { + Directory.CreateDirectory(logDir); + } + if (!File.Exists(logFilePath)) { + File.Create(logFilePath).Dispose(); + } + } + + public static void appendLogs(string msg) { + if (!Directory.Exists(logDir)) { + createLogs(); + return; + } + if (!File.Exists(logFilePath)) { + createLogs(); + return; + } + try { + using StreamWriter sw = File.AppendText(logFilePath); + sw.WriteLine(msg); + sw.Close(); + } catch (Exception ex) { + Debug.WriteLine(ex.ToString()); + } + } + + } +} diff --git a/Swim Prevent/Gma.System.MouseKeyHook.dll b/Swim Prevent/Gma.System.MouseKeyHook.dll new file mode 100644 index 0000000000000000000000000000000000000000..fa1dba7bede22e776f238e968c5e61fd1036d340 GIT binary patch literal 49152 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 GetUSBDevices() { + List devices = new List(); + + ManagementObjectCollection collection; + using (var searcher = new ManagementObjectSearcher(@"SELECT * FROM Win32_PnPEntity where Description Like ""USB Input Device%""")) + collection = searcher.Get(); + + foreach (var device in collection) { + devices.Add(new USBDeviceInfo( + (string)device.GetPropertyValue("DeviceID"), + (string)device.GetPropertyValue("PNPDeviceID"), + (string)device.GetPropertyValue("Description") + )); + } + + collection.Dispose(); + return devices; + } + + } + +} +class USBDeviceInfo { + public USBDeviceInfo(string deviceID, string pnpDeviceID, string description) { + DeviceID = deviceID; + PnpDeviceID = pnpDeviceID; + Description = description; + } + public string DeviceID { get; private set; } + public string PnpDeviceID { get; private set; } + public string Description { get; private set; } +} diff --git a/Swim Prevent/MathUtil.cs b/Swim Prevent/MathUtil.cs new file mode 100644 index 0000000..99aea5c --- /dev/null +++ b/Swim Prevent/MathUtil.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Swim_Prevent { + + // a lot of this is from https://www.geeksforgeeks.org/program-find-skewness-statistical-data/ + // and also translated some pocketmine php from https://github.com/ethaniccc/Mockingbird/blob/stable/src/ethaniccc/Mockingbird/utils/MathUtils.php + class MathUtil { + + static float mean(int[] arr, int n) { + double sum = 0; + for (int i = 0; i < n; i++) { + sum = sum + arr[i]; + } + return (float)sum / n; + } + + static float standardDeviation(int[] arr, int n) { + double sum = 0; + for (int i = 0; i < n; i++) { + sum = (arr[i] - mean(arr, n)) * (arr[i] - mean(arr, n)); + } + return (float)Math.Sqrt(sum / n); + } + + public static float getSkewness(int[] arr) { + double sum = 0; + int n = arr.Length; + for (int i = 0; i < n; i++) { + sum = (arr[i] - mean(arr, n)) * (arr[i] - mean(arr, n)) * (arr[i] - mean(arr, n)); + } + return (float)sum / (n * standardDeviation(arr, n) * standardDeviation(arr, n) * standardDeviation(arr, n) * standardDeviation(arr, n)); + } + + // I probably did the math wrong so just not going to use this one + public static double getKurtosis(int[] arr) { + int sum = arr.Sum(); + int length = arr.Length; + double average = sum / length; + double first = length * (length + 1) / ((length - 1) * (length - 2) * (length - 3)); + double second = 3 * Math.Pow(length - 1, 2) / ((length - 2) * (length - 3)); + double variance = 0.0; + double varianceSquared = 0.0; + foreach (int num in arr) { + variance += Math.Pow(average - num, 2); + varianceSquared += Math.Pow(average - num, 4); + } + return first * (varianceSquared / Math.Pow(variance / sum, 2)) - second; + } + + } +} diff --git a/Swim Prevent/Properties/AssemblyInfo.cs b/Swim Prevent/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..187f562 --- /dev/null +++ b/Swim Prevent/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("Swim Prevent")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Swim Prevent")] +[assembly: AssemblyCopyright("Copyright © 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("dd7bd759-dfb7-479b-bdac-b11d11aa8e17")] + +// 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/Swim Prevent/Properties/Resources.Designer.cs b/Swim Prevent/Properties/Resources.Designer.cs new file mode 100644 index 0000000..1c82502 --- /dev/null +++ b/Swim Prevent/Properties/Resources.Designer.cs @@ -0,0 +1,70 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + + +namespace Swim_Prevent.Properties +{ + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Swim_Prevent.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Swim Prevent/Properties/Resources.resx b/Swim Prevent/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Swim Prevent/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Swim Prevent/Properties/Settings.Designer.cs b/Swim Prevent/Properties/Settings.Designer.cs new file mode 100644 index 0000000..461414c --- /dev/null +++ b/Swim Prevent/Properties/Settings.Designer.cs @@ -0,0 +1,29 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + + +namespace Swim_Prevent.Properties +{ + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Swim Prevent/Properties/Settings.settings b/Swim Prevent/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Swim Prevent/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Swim Prevent/Swim Prevent.csproj b/Swim Prevent/Swim Prevent.csproj new file mode 100644 index 0000000..a31ef8e --- /dev/null +++ b/Swim Prevent/Swim Prevent.csproj @@ -0,0 +1,156 @@ + + + + + + Debug + AnyCPU + {DD7BD759-DFB7-479B-BDAC-B11D11AA8E17} + WinExe + Swim_Prevent + Swim Prevent + v4.7.2 + 512 + true + true + 8.0 + + + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + true + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + true + + + true + bin\x64\Debug\ + DEBUG;TRACE + full + x64 + 8.0 + prompt + true + true + + + bin\x64\Release\ + TRACE + true + pdbonly + x64 + 8.0 + prompt + true + true + + + swim_logo.ico + + + + ..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.3.0.2\lib\net462\Dia2Lib.dll + True + + + .\Gma.System.MouseKeyHook.dll + + + ..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.3.0.2\lib\net462\Microsoft.Diagnostics.FastSerialization.dll + + + ..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.3.0.2\lib\net462\Microsoft.Diagnostics.Tracing.TraceEvent.dll + + + ..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.3.0.2\lib\net462\OSExtensions.dll + + + + + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + + + + + + + + + + + ..\packages\Microsoft.Diagnostics.Tracing.TraceEvent.3.0.2\lib\net462\TraceReloggerLib.dll + True + + + + + + + + + + + + + Form + + + App.cs + + + + + App.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + \ No newline at end of file diff --git a/Swim Prevent/SwimLoader.cs b/Swim Prevent/SwimLoader.cs new file mode 100644 index 0000000..533cd42 --- /dev/null +++ b/Swim Prevent/SwimLoader.cs @@ -0,0 +1,30 @@ +using System; +using System.Windows.Forms; +using System.Collections; + +namespace Swim_Prevent { + class SwimLoader { + public static App SwimApp; + + // 50 milliseconds is the time it takes for one minecraft tick + // You should never be able to click more than once in a minecraft tick, that is unfair and not humanely possible legit. + // This program solves that issue by measuring the time difference of each click and filtering out anything under 50 ms. + // This program also has some very basic Minecraft Bedrock client side anti cheat features, hopefully none to invasive. + // Idea sourced from: https://github.com/Schellmr/dcPrevent/tree/master/dcPrevent/dcPrevent + // All code written by Swimfan72 in like 3 days or something lol, property of Swim Services + // discord.gg/swim + + public static readonly int clockSpeed = 50; // milliseconds, same speed as one minecraft in game tick + + [STAThread] + public static void Main() { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + SwimApp = new App(); + Application.Run(SwimApp); + // all code under here is executed once the application is closed + _ = App.closeAsync(); + } + + } +} diff --git a/Swim Prevent/TimeManager.cs b/Swim Prevent/TimeManager.cs new file mode 100644 index 0000000..71b5642 --- /dev/null +++ b/Swim Prevent/TimeManager.cs @@ -0,0 +1,95 @@ +using System; +using System.Diagnostics; + +namespace Swim_Prevent { + class TimeManager { + + private static System.Timers.Timer leftClickTimer; + private static System.Timers.Timer rightClickTimer; + private static System.Timers.Timer uncappedLeftClickTimer; + private static System.Timers.Timer uncappedRightClickTimer; + private static System.Timers.Timer cpsInfoBoxRenderTimer; + private static System.Timers.Timer clockTimer; + public static string clock = "00:00:00"; // place holder before updating + + public static void startTimers() { + leftClickTimer = new System.Timers.Timer(SwimLoader.clockSpeed); + leftClickTimer.AutoReset = true; + leftClickTimer.Elapsed += new System.Timers.ElapsedEventHandler(CPS.leftCpsManager); + leftClickTimer.Start(); + + rightClickTimer = new System.Timers.Timer(SwimLoader.clockSpeed); + rightClickTimer.AutoReset = true; + rightClickTimer.Elapsed += new System.Timers.ElapsedEventHandler(CPS.rightCpsManager); + rightClickTimer.Start(); + + uncappedLeftClickTimer = new System.Timers.Timer(SwimLoader.clockSpeed); + uncappedLeftClickTimer.AutoReset = true; + uncappedLeftClickTimer.Elapsed += new System.Timers.ElapsedEventHandler(CPS.uncappedLeftCpsManager); + uncappedLeftClickTimer.Start(); + + uncappedRightClickTimer = new System.Timers.Timer(SwimLoader.clockSpeed); + uncappedRightClickTimer.AutoReset = true; + uncappedRightClickTimer.Elapsed += new System.Timers.ElapsedEventHandler(CPS.uncappedRightCpsManager); + uncappedRightClickTimer.Start(); + + cpsInfoBoxRenderTimer = new System.Timers.Timer(10); // very fast refresh speed so cps is displayed accurately + cpsInfoBoxRenderTimer.AutoReset = true; + cpsInfoBoxRenderTimer.Elapsed += new System.Timers.ElapsedEventHandler(App.render); + cpsInfoBoxRenderTimer.Start(); + + clockTimer = new System.Timers.Timer(1000); // every second + clockTimer.AutoReset = true; + clockTimer.Elapsed += new System.Timers.ElapsedEventHandler(clockTick); + clockTimer.Start(); + } + + public static void stopTimers() { + leftClickTimer.Stop(); + rightClickTimer.Stop(); + uncappedLeftClickTimer.Stop(); + uncappedRightClickTimer.Stop(); + cpsInfoBoxRenderTimer.Stop(); + clockTimer.Stop(); + } + + private static int seconds = 0; + private static int minutes = 0; + private static int hours = 0; + + // clock tick is each second + private static void clockTick(Object foo, System.Timers.ElapsedEventArgs bar) { + if (App.closed) return; + seconds++; + string formattedHours = hours.ToString(); + string formattedMinutes = minutes.ToString(); + string formattedSeconds = seconds.ToString(); + + if (seconds == 60) { // check if we hit a minute + seconds = 0; + formattedSeconds = "00"; + minutes++; + } + + if (minutes == 60) { // check if we hit an hour + minutes = 0; + formattedMinutes = "00"; + hours++; + } + + if (seconds < 10) { // format for the seconds if single digit + formattedSeconds = "0" + seconds.ToString(); + } + + if (minutes < 10) { // formate for the minutes if single digit + formattedMinutes = "0" + minutes.ToString(); + } + + if (hours < 10) { // formate for the hours if single digit + formattedHours = "0" + hours.ToString(); + } + + clock = formattedHours + ":" + formattedMinutes + ":" + formattedSeconds; + } + } +} diff --git a/Swim Prevent/packages.config b/Swim Prevent/packages.config new file mode 100644 index 0000000..a1becd1 --- /dev/null +++ b/Swim Prevent/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Swim Prevent/swim_logo.ico b/Swim Prevent/swim_logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..e134714a9506923cf502f11f4e0b1e6bdf7c9eaf GIT binary patch literal 205933 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

$2HQ>koY_JeW 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