├── .gitattributes ├── .gitignore ├── README.md ├── raybot-zero-loader ├── App.config ├── Main.Designer.cs ├── Main.cs ├── Main.resx ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── ServiceInstaller.cs ├── app.manifest ├── raybot-icon.ico └── raybot-zero-loader.csproj ├── raybot-zero.sln └── raybot-zero ├── csgo in vm.txt ├── driver.cpp ├── features.h ├── includes.h ├── keyinput.h ├── memory.h ├── mini_sdk.h ├── ntos.h ├── raybot-zero.inf ├── raybot-zero.vcxproj ├── raybot-zero.vcxproj.filters ├── raybot-zero.vcxproj.user ├── utils.h └── xorstr.h /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | *.cs linguist-detectable=false 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | *.vsidx 3 | *.ipch 4 | *.db 5 | *.lock 6 | .vs/raybot-zero/v17/.suo 7 | *.tlog 8 | *.log 9 | *.pdb 10 | *.cache 11 | *.recipe 12 | *.obj 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # raybot-zero 2 | 3 | kernelmode csgo cheat without the need of a usermode controller. 4 | 5 | note: offsets outdated, gafAsyncKeyState offset might differ for you (keyinput.h) 6 | -------------------------------------------------------------------------------- /raybot-zero-loader/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /raybot-zero-loader/Main.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace raybot_zero_loader 2 | { 3 | partial class Main 4 | { 5 | /// 6 | /// Erforderliche Designervariable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Verwendete Ressourcen bereinigen. 12 | /// 13 | /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Vom Windows Form-Designer generierter Code 24 | 25 | /// 26 | /// Erforderliche Methode für die Designerunterstützung. 27 | /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main)); 32 | this.loadBtn = new System.Windows.Forms.Button(); 33 | this.label1 = new System.Windows.Forms.Label(); 34 | this.label2 = new System.Windows.Forms.Label(); 35 | this.closeLabel = new System.Windows.Forms.Label(); 36 | this.SuspendLayout(); 37 | // 38 | // loadBtn 39 | // 40 | this.loadBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat; 41 | this.loadBtn.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 42 | this.loadBtn.Location = new System.Drawing.Point(12, 106); 43 | this.loadBtn.Name = "loadBtn"; 44 | this.loadBtn.Size = new System.Drawing.Size(169, 27); 45 | this.loadBtn.TabIndex = 0; 46 | this.loadBtn.Text = "load"; 47 | this.loadBtn.UseVisualStyleBackColor = true; 48 | this.loadBtn.Click += new System.EventHandler(this.loadBtn_Click); 49 | // 50 | // label1 51 | // 52 | this.label1.AutoSize = true; 53 | this.label1.Font = new System.Drawing.Font("Consolas", 24F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 54 | this.label1.Location = new System.Drawing.Point(36, 18); 55 | this.label1.Name = "label1"; 56 | this.label1.Size = new System.Drawing.Size(125, 37); 57 | this.label1.TabIndex = 1; 58 | this.label1.Text = "RAYBOT"; 59 | // 60 | // label2 61 | // 62 | this.label2.AutoSize = true; 63 | this.label2.Font = new System.Drawing.Font("Consolas", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 64 | this.label2.Location = new System.Drawing.Point(74, 48); 65 | this.label2.Name = "label2"; 66 | this.label2.Size = new System.Drawing.Size(45, 19); 67 | this.label2.TabIndex = 2; 68 | this.label2.Text = "ZERO"; 69 | // 70 | // closeLabel 71 | // 72 | this.closeLabel.AutoSize = true; 73 | this.closeLabel.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 74 | this.closeLabel.Location = new System.Drawing.Point(168, 2); 75 | this.closeLabel.Name = "closeLabel"; 76 | this.closeLabel.Size = new System.Drawing.Size(25, 13); 77 | this.closeLabel.TabIndex = 4; 78 | this.closeLabel.Text = "[X]"; 79 | this.closeLabel.Click += new System.EventHandler(this.closeLabel_Click); 80 | // 81 | // Main 82 | // 83 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 84 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 85 | this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(30)))), ((int)(((byte)(30))))); 86 | this.ClientSize = new System.Drawing.Size(193, 146); 87 | this.Controls.Add(this.closeLabel); 88 | this.Controls.Add(this.label2); 89 | this.Controls.Add(this.label1); 90 | this.Controls.Add(this.loadBtn); 91 | this.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); 92 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 93 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 94 | this.Name = "Main"; 95 | this.Text = "rbzero"; 96 | this.Load += new System.EventHandler(this.Main_Load); 97 | this.ResumeLayout(false); 98 | this.PerformLayout(); 99 | 100 | } 101 | 102 | #endregion 103 | 104 | private System.Windows.Forms.Button loadBtn; 105 | private System.Windows.Forms.Label label1; 106 | private System.Windows.Forms.Label label2; 107 | private System.Windows.Forms.Label closeLabel; 108 | } 109 | } 110 | 111 | -------------------------------------------------------------------------------- /raybot-zero-loader/Main.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.IO; 7 | using System.Linq; 8 | using System.Net; 9 | using System.Text; 10 | using System.Threading.Tasks; 11 | using System.Windows.Forms; 12 | 13 | namespace raybot_zero_loader 14 | { 15 | public partial class Main : Form 16 | { 17 | public Main() 18 | { 19 | InitializeComponent(); 20 | } 21 | 22 | protected override void WndProc(ref Message m) 23 | { 24 | if (m.Msg == 0x84) { 25 | base.WndProc(ref m); 26 | if ((int)m.Result == 0x1) 27 | m.Result = (IntPtr)0x2; 28 | return; 29 | } 30 | 31 | base.WndProc(ref m); 32 | } 33 | 34 | private void closeLabel_Click(object sender, EventArgs e) 35 | { 36 | Environment.Exit(0); 37 | } 38 | 39 | private void loadBtn_Click(object sender, EventArgs e) 40 | { 41 | loadBtn.Text = "please wait..."; 42 | Application.DoEvents(); 43 | if (ServiceInstaller.GetServiceStatus("rbzero") == ServiceState.NotFound) 44 | { 45 | ServiceInstaller.InstallAndStart("rbzero", "raybot-zero", Directory.GetCurrentDirectory() + "\\driver\\rbzero.sys"); 46 | System.Threading.Thread.Sleep(500); 47 | loadBtn.Text = "done!"; 48 | Application.DoEvents(); 49 | System.Threading.Thread.Sleep(2000); 50 | Environment.Exit(1); 51 | } 52 | else 53 | { 54 | ServiceInstaller.StopService("rbzero"); 55 | ServiceInstaller.Uninstall("rbzero"); 56 | System.Threading.Thread.Sleep(500); 57 | loadBtn.Text = "load"; 58 | } 59 | } 60 | 61 | private void Main_Load(object sender, EventArgs e) 62 | { 63 | this.Text = RandomString(16); 64 | 65 | if (ServiceInstaller.GetServiceStatus("rbzero") != ServiceState.NotFound) 66 | { 67 | loadBtn.Text = "unload"; 68 | return; 69 | } 70 | 71 | try 72 | { 73 | Directory.CreateDirectory("driver"); 74 | WebClient wc = new WebClient(); 75 | wc.DownloadFile("https://example.com/raybot/rbzero.sys", "driver\\rbzero.sys"); 76 | } 77 | catch 78 | { 79 | MessageBox.Show("could not download the driver!", "error!", MessageBoxButtons.OK, MessageBoxIcon.Error); 80 | Environment.Exit(666); 81 | } 82 | } 83 | 84 | private static Random random = new Random(); 85 | 86 | public static string RandomString(int length) 87 | { 88 | const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; 89 | return new string(Enumerable.Repeat(chars, length) 90 | .Select(s => s[random.Next(s.Length)]).ToArray()); 91 | } 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /raybot-zero-loader/Main.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 | 121 | 122 | 123 | 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 317 | iKZNmeNq5rMAAAAASUVORK5CYII= 318 | 319 | 320 | -------------------------------------------------------------------------------- /raybot-zero-loader/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 raybot_zero_loader 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 Main()); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /raybot-zero-loader/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("raybot-zero-loader")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("7476")] 12 | [assembly: AssemblyProduct("raybot-zero-loader")] 13 | [assembly: AssemblyCopyright("Copyright © 7476 2022")] 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("83419a10-ecf9-4330-98e8-a294ed6afd57")] 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 | -------------------------------------------------------------------------------- /raybot-zero-loader/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 raybot_zero_loader.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("raybot_zero_loader.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 | -------------------------------------------------------------------------------- /raybot-zero-loader/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 | -------------------------------------------------------------------------------- /raybot-zero-loader/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 raybot_zero_loader.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 | -------------------------------------------------------------------------------- /raybot-zero-loader/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /raybot-zero-loader/ServiceInstaller.cs: -------------------------------------------------------------------------------- 1 |  2 | using System; 3 | using System.Runtime.InteropServices; 4 | using System.Threading; 5 | 6 | 7 | public static class ServiceInstaller 8 | { 9 | private const int STANDARD_RIGHTS_REQUIRED = 0xF0000; 10 | private const int SERVICE_WIN32_OWN_PROCESS = 0x00000010; 11 | 12 | [StructLayout(LayoutKind.Sequential)] 13 | private class SERVICE_STATUS 14 | { 15 | public int dwServiceType = 0; 16 | public ServiceState dwCurrentState = 0; 17 | public int dwControlsAccepted = 0; 18 | public int dwWin32ExitCode = 0; 19 | public int dwServiceSpecificExitCode = 0; 20 | public int dwCheckPoint = 0; 21 | public int dwWaitHint = 0; 22 | } 23 | 24 | #region OpenSCManager 25 | [DllImport("advapi32.dll", EntryPoint = "OpenSCManagerW", ExactSpelling = true, CharSet = CharSet.Unicode, SetLastError = true)] 26 | static extern IntPtr OpenSCManager(string machineName, string databaseName, ScmAccessRights dwDesiredAccess); 27 | #endregion 28 | 29 | #region OpenService 30 | [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Auto)] 31 | static extern IntPtr OpenService(IntPtr hSCManager, string lpServiceName, ServiceAccessRights dwDesiredAccess); 32 | #endregion 33 | 34 | #region CreateService 35 | [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Auto)] 36 | private static extern IntPtr CreateService(IntPtr hSCManager, string lpServiceName, string lpDisplayName, ServiceAccessRights dwDesiredAccess, int dwServiceType, ServiceBootFlag dwStartType, ServiceError dwErrorControl, string lpBinaryPathName, string lpLoadOrderGroup, IntPtr lpdwTagId, string lpDependencies, string lp, string lpPassword); 37 | #endregion 38 | 39 | #region CloseServiceHandle 40 | [DllImport("advapi32.dll", SetLastError = true)] 41 | [return: MarshalAs(UnmanagedType.Bool)] 42 | static extern bool CloseServiceHandle(IntPtr hSCObject); 43 | #endregion 44 | 45 | #region QueryServiceStatus 46 | [DllImport("advapi32.dll")] 47 | private static extern int QueryServiceStatus(IntPtr hService, SERVICE_STATUS lpServiceStatus); 48 | #endregion 49 | 50 | #region DeleteService 51 | [DllImport("advapi32.dll", SetLastError = true)] 52 | [return: MarshalAs(UnmanagedType.Bool)] 53 | private static extern bool DeleteService(IntPtr hService); 54 | #endregion 55 | 56 | #region ControlService 57 | [DllImport("advapi32.dll")] 58 | private static extern int ControlService(IntPtr hService, ServiceControl dwControl, SERVICE_STATUS lpServiceStatus); 59 | #endregion 60 | 61 | #region StartService 62 | [DllImport("advapi32.dll", SetLastError = true)] 63 | private static extern int StartService(IntPtr hService, int dwNumServiceArgs, int lpServiceArgVectors); 64 | #endregion 65 | 66 | public static void Uninstall(string serviceName) 67 | { 68 | IntPtr scm = OpenSCManager(ScmAccessRights.AllAccess); 69 | 70 | try 71 | { 72 | IntPtr service = OpenService(scm, serviceName, ServiceAccessRights.AllAccess); 73 | if (service == IntPtr.Zero) 74 | throw new ApplicationException("Service not installed."); 75 | 76 | try 77 | { 78 | StopService(service); 79 | if (!DeleteService(service)) 80 | throw new ApplicationException("Could not delete service " + Marshal.GetLastWin32Error()); 81 | } 82 | finally 83 | { 84 | CloseServiceHandle(service); 85 | } 86 | } 87 | finally 88 | { 89 | CloseServiceHandle(scm); 90 | } 91 | } 92 | 93 | public static bool ServiceIsInstalled(string serviceName) 94 | { 95 | IntPtr scm = OpenSCManager(ScmAccessRights.Connect); 96 | 97 | try 98 | { 99 | IntPtr service = OpenService(scm, serviceName, ServiceAccessRights.QueryStatus); 100 | 101 | if (service == IntPtr.Zero) 102 | return false; 103 | 104 | CloseServiceHandle(service); 105 | return true; 106 | } 107 | finally 108 | { 109 | CloseServiceHandle(scm); 110 | } 111 | } 112 | 113 | public static void InstallAndStart(string serviceName, string displayName, string fileName) 114 | { 115 | IntPtr scm = OpenSCManager(ScmAccessRights.AllAccess); 116 | 117 | try 118 | { 119 | IntPtr service = OpenService(scm, serviceName, ServiceAccessRights.AllAccess); 120 | 121 | if (service == IntPtr.Zero) 122 | service = CreateService(scm, serviceName, displayName, ServiceAccessRights.AllAccess, 0x00000001, ServiceBootFlag.AutoStart, ServiceError.Normal, fileName, null, IntPtr.Zero, null, null, null); 123 | 124 | if (service == IntPtr.Zero) 125 | throw new ApplicationException("Failed to install service."); 126 | 127 | try 128 | { 129 | StartService(service); 130 | } 131 | finally 132 | { 133 | CloseServiceHandle(service); 134 | } 135 | } 136 | finally 137 | { 138 | CloseServiceHandle(scm); 139 | } 140 | } 141 | 142 | public static void Install(string serviceName, string displayName, string fileName) 143 | { 144 | IntPtr scm = OpenSCManager(ScmAccessRights.AllAccess); 145 | 146 | try 147 | { 148 | IntPtr service = OpenService(scm, serviceName, ServiceAccessRights.AllAccess); 149 | 150 | if (service == IntPtr.Zero) 151 | service = CreateService(scm, serviceName, displayName, ServiceAccessRights.AllAccess, SERVICE_WIN32_OWN_PROCESS, ServiceBootFlag.AutoStart, ServiceError.Normal, fileName, null, IntPtr.Zero, null, null, null); 152 | 153 | if (service == IntPtr.Zero) 154 | throw new ApplicationException("Failed to install service."); 155 | } 156 | finally 157 | { 158 | CloseServiceHandle(scm); 159 | } 160 | } 161 | 162 | public static void StartService(string serviceName) 163 | { 164 | IntPtr scm = OpenSCManager(ScmAccessRights.Connect); 165 | 166 | try 167 | { 168 | IntPtr service = OpenService(scm, serviceName, ServiceAccessRights.QueryStatus | ServiceAccessRights.Start); 169 | if (service == IntPtr.Zero) 170 | throw new ApplicationException("Could not open service."); 171 | 172 | try 173 | { 174 | StartService(service); 175 | } 176 | finally 177 | { 178 | CloseServiceHandle(service); 179 | } 180 | } 181 | finally 182 | { 183 | CloseServiceHandle(scm); 184 | } 185 | } 186 | 187 | public static void StopService(string serviceName) 188 | { 189 | IntPtr scm = OpenSCManager(ScmAccessRights.Connect); 190 | 191 | try 192 | { 193 | IntPtr service = OpenService(scm, serviceName, ServiceAccessRights.QueryStatus | ServiceAccessRights.Stop); 194 | if (service == IntPtr.Zero) 195 | throw new ApplicationException("Could not open service."); 196 | 197 | try 198 | { 199 | StopService(service); 200 | } 201 | finally 202 | { 203 | CloseServiceHandle(service); 204 | } 205 | } 206 | finally 207 | { 208 | CloseServiceHandle(scm); 209 | } 210 | } 211 | 212 | private static void StartService(IntPtr service) 213 | { 214 | SERVICE_STATUS status = new SERVICE_STATUS(); 215 | StartService(service, 0, 0); 216 | var changedStatus = WaitForServiceStatus(service, ServiceState.StartPending, ServiceState.Running); 217 | if (!changedStatus) 218 | throw new ApplicationException("Unable to start service"); 219 | } 220 | 221 | private static void StopService(IntPtr service) 222 | { 223 | SERVICE_STATUS status = new SERVICE_STATUS(); 224 | ControlService(service, ServiceControl.Stop, status); 225 | var changedStatus = WaitForServiceStatus(service, ServiceState.StopPending, ServiceState.Stopped); 226 | if (!changedStatus) 227 | throw new ApplicationException("Unable to stop service"); 228 | } 229 | 230 | public static ServiceState GetServiceStatus(string serviceName) 231 | { 232 | IntPtr scm = OpenSCManager(ScmAccessRights.Connect); 233 | 234 | try 235 | { 236 | IntPtr service = OpenService(scm, serviceName, ServiceAccessRights.QueryStatus); 237 | if (service == IntPtr.Zero) 238 | return ServiceState.NotFound; 239 | 240 | try 241 | { 242 | return GetServiceStatus(service); 243 | } 244 | finally 245 | { 246 | CloseServiceHandle(service); 247 | } 248 | } 249 | finally 250 | { 251 | CloseServiceHandle(scm); 252 | } 253 | } 254 | 255 | private static ServiceState GetServiceStatus(IntPtr service) 256 | { 257 | SERVICE_STATUS status = new SERVICE_STATUS(); 258 | 259 | if (QueryServiceStatus(service, status) == 0) 260 | throw new ApplicationException("Failed to query service status."); 261 | 262 | return status.dwCurrentState; 263 | } 264 | 265 | private static bool WaitForServiceStatus(IntPtr service, ServiceState waitStatus, ServiceState desiredStatus) 266 | { 267 | SERVICE_STATUS status = new SERVICE_STATUS(); 268 | 269 | QueryServiceStatus(service, status); 270 | if (status.dwCurrentState == desiredStatus) return true; 271 | 272 | int dwStartTickCount = Environment.TickCount; 273 | int dwOldCheckPoint = status.dwCheckPoint; 274 | 275 | while (status.dwCurrentState == waitStatus) 276 | { 277 | // Do not wait longer than the wait hint. A good interval is 278 | // one tenth the wait hint, but no less than 1 second and no 279 | // more than 10 seconds. 280 | 281 | int dwWaitTime = status.dwWaitHint / 10; 282 | 283 | if (dwWaitTime < 1000) dwWaitTime = 1000; 284 | else if (dwWaitTime > 10000) dwWaitTime = 10000; 285 | 286 | Thread.Sleep(dwWaitTime); 287 | 288 | // Check the status again. 289 | 290 | if (QueryServiceStatus(service, status) == 0) break; 291 | 292 | if (status.dwCheckPoint > dwOldCheckPoint) 293 | { 294 | // The service is making progress. 295 | dwStartTickCount = Environment.TickCount; 296 | dwOldCheckPoint = status.dwCheckPoint; 297 | } 298 | else 299 | { 300 | if (Environment.TickCount - dwStartTickCount > status.dwWaitHint) 301 | { 302 | // No progress made within the wait hint 303 | break; 304 | } 305 | } 306 | } 307 | return (status.dwCurrentState == desiredStatus); 308 | } 309 | 310 | private static IntPtr OpenSCManager(ScmAccessRights rights) 311 | { 312 | IntPtr scm = OpenSCManager(null, null, rights); 313 | if (scm == IntPtr.Zero) 314 | throw new ApplicationException("Could not connect to service control manager."); 315 | 316 | return scm; 317 | } 318 | } 319 | 320 | 321 | public enum ServiceState 322 | { 323 | Unknown = -1, // The state cannot be (has not been) retrieved. 324 | NotFound = 0, // The service is not known on the host server. 325 | Stopped = 1, 326 | StartPending = 2, 327 | StopPending = 3, 328 | Running = 4, 329 | ContinuePending = 5, 330 | PausePending = 6, 331 | Paused = 7 332 | } 333 | 334 | [Flags] 335 | public enum ScmAccessRights 336 | { 337 | Connect = 0x0001, 338 | CreateService = 0x0002, 339 | EnumerateService = 0x0004, 340 | Lock = 0x0008, 341 | QueryLockStatus = 0x0010, 342 | ModifyBootConfig = 0x0020, 343 | StandardRightsRequired = 0xF0000, 344 | AllAccess = (StandardRightsRequired | Connect | CreateService | 345 | EnumerateService | Lock | QueryLockStatus | ModifyBootConfig) 346 | } 347 | 348 | [Flags] 349 | public enum ServiceAccessRights 350 | { 351 | QueryConfig = 0x1, 352 | ChangeConfig = 0x2, 353 | QueryStatus = 0x4, 354 | EnumerateDependants = 0x8, 355 | Start = 0x10, 356 | Stop = 0x20, 357 | PauseContinue = 0x40, 358 | Interrogate = 0x80, 359 | UserDefinedControl = 0x100, 360 | Delete = 0x00010000, 361 | StandardRightsRequired = 0xF0000, 362 | AllAccess = (StandardRightsRequired | QueryConfig | ChangeConfig | 363 | QueryStatus | EnumerateDependants | Start | Stop | PauseContinue | 364 | Interrogate | UserDefinedControl) 365 | } 366 | 367 | public enum ServiceBootFlag 368 | { 369 | Start = 0x00000000, 370 | SystemStart = 0x00000001, 371 | AutoStart = 0x00000002, 372 | DemandStart = 0x00000003, 373 | Disabled = 0x00000004 374 | } 375 | 376 | public enum ServiceControl 377 | { 378 | Stop = 0x00000001, 379 | Pause = 0x00000002, 380 | Continue = 0x00000003, 381 | Interrogate = 0x00000004, 382 | Shutdown = 0x00000005, 383 | ParamChange = 0x00000006, 384 | NetBindAdd = 0x00000007, 385 | NetBindRemove = 0x00000008, 386 | NetBindEnable = 0x00000009, 387 | NetBindDisable = 0x0000000A 388 | } 389 | 390 | public enum ServiceError 391 | { 392 | Ignore = 0x00000000, 393 | Normal = 0x00000001, 394 | Severe = 0x00000002, 395 | Critical = 0x00000003 396 | } 397 | -------------------------------------------------------------------------------- /raybot-zero-loader/app.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 | -------------------------------------------------------------------------------- /raybot-zero-loader/raybot-icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emlinhax/raybot-zero/002fa8de97369893ee62869de7a81e4a3662c764/raybot-zero-loader/raybot-icon.ico -------------------------------------------------------------------------------- /raybot-zero-loader/raybot-zero-loader.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {83419A10-ECF9-4330-98E8-A294ED6AFD57} 8 | WinExe 9 | raybot_zero_loader 10 | rayzero_control 11 | v4.5 12 | 512 13 | true 14 | 15 | 16 | AnyCPU 17 | true 18 | full 19 | false 20 | ..\build\loader\ 21 | DEBUG;TRACE 22 | prompt 23 | 4 24 | 25 | 26 | AnyCPU 27 | pdbonly 28 | true 29 | ..\build\loader\ 30 | TRACE 31 | prompt 32 | 4 33 | 34 | 35 | raybot-icon.ico 36 | 37 | 38 | app.manifest 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | Form 56 | 57 | 58 | Main.cs 59 | 60 | 61 | 62 | 63 | 64 | Main.cs 65 | 66 | 67 | ResXFileCodeGenerator 68 | Resources.Designer.cs 69 | Designer 70 | 71 | 72 | True 73 | Resources.resx 74 | 75 | 76 | 77 | SettingsSingleFileGenerator 78 | Settings.Designer.cs 79 | 80 | 81 | True 82 | Settings.settings 83 | True 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /raybot-zero.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.3.32505.426 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "raybot-zero", "raybot-zero\raybot-zero.vcxproj", "{3386F618-A986-4738-B677-7D3669154D54}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "raybot-zero-loader", "raybot-zero-loader\raybot-zero-loader.csproj", "{83419A10-ECF9-4330-98E8-A294ED6AFD57}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Debug|ARM = Debug|ARM 14 | Debug|ARM64 = Debug|ARM64 15 | Debug|x64 = Debug|x64 16 | Debug|x86 = Debug|x86 17 | Release|Any CPU = Release|Any CPU 18 | Release|ARM = Release|ARM 19 | Release|ARM64 = Release|ARM64 20 | Release|x64 = Release|x64 21 | Release|x86 = Release|x86 22 | EndGlobalSection 23 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 24 | {3386F618-A986-4738-B677-7D3669154D54}.Debug|Any CPU.ActiveCfg = Debug|x64 25 | {3386F618-A986-4738-B677-7D3669154D54}.Debug|Any CPU.Build.0 = Debug|x64 26 | {3386F618-A986-4738-B677-7D3669154D54}.Debug|ARM.ActiveCfg = Debug|ARM 27 | {3386F618-A986-4738-B677-7D3669154D54}.Debug|ARM.Build.0 = Debug|ARM 28 | {3386F618-A986-4738-B677-7D3669154D54}.Debug|ARM64.ActiveCfg = Debug|ARM64 29 | {3386F618-A986-4738-B677-7D3669154D54}.Debug|ARM64.Build.0 = Debug|ARM64 30 | {3386F618-A986-4738-B677-7D3669154D54}.Debug|x64.ActiveCfg = Debug|x64 31 | {3386F618-A986-4738-B677-7D3669154D54}.Debug|x64.Build.0 = Debug|x64 32 | {3386F618-A986-4738-B677-7D3669154D54}.Debug|x86.ActiveCfg = Debug|Win32 33 | {3386F618-A986-4738-B677-7D3669154D54}.Debug|x86.Build.0 = Debug|Win32 34 | {3386F618-A986-4738-B677-7D3669154D54}.Release|Any CPU.ActiveCfg = Release|x64 35 | {3386F618-A986-4738-B677-7D3669154D54}.Release|Any CPU.Build.0 = Release|x64 36 | {3386F618-A986-4738-B677-7D3669154D54}.Release|ARM.ActiveCfg = Release|ARM 37 | {3386F618-A986-4738-B677-7D3669154D54}.Release|ARM.Build.0 = Release|ARM 38 | {3386F618-A986-4738-B677-7D3669154D54}.Release|ARM64.ActiveCfg = Release|ARM64 39 | {3386F618-A986-4738-B677-7D3669154D54}.Release|ARM64.Build.0 = Release|ARM64 40 | {3386F618-A986-4738-B677-7D3669154D54}.Release|x64.ActiveCfg = Release|x64 41 | {3386F618-A986-4738-B677-7D3669154D54}.Release|x64.Build.0 = Release|x64 42 | {3386F618-A986-4738-B677-7D3669154D54}.Release|x86.ActiveCfg = Release|Win32 43 | {3386F618-A986-4738-B677-7D3669154D54}.Release|x86.Build.0 = Release|Win32 44 | {83419A10-ECF9-4330-98E8-A294ED6AFD57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 45 | {83419A10-ECF9-4330-98E8-A294ED6AFD57}.Debug|Any CPU.Build.0 = Debug|Any CPU 46 | {83419A10-ECF9-4330-98E8-A294ED6AFD57}.Debug|ARM.ActiveCfg = Debug|Any CPU 47 | {83419A10-ECF9-4330-98E8-A294ED6AFD57}.Debug|ARM.Build.0 = Debug|Any CPU 48 | {83419A10-ECF9-4330-98E8-A294ED6AFD57}.Debug|ARM64.ActiveCfg = Debug|Any CPU 49 | {83419A10-ECF9-4330-98E8-A294ED6AFD57}.Debug|ARM64.Build.0 = Debug|Any CPU 50 | {83419A10-ECF9-4330-98E8-A294ED6AFD57}.Debug|x64.ActiveCfg = Debug|Any CPU 51 | {83419A10-ECF9-4330-98E8-A294ED6AFD57}.Debug|x64.Build.0 = Debug|Any CPU 52 | {83419A10-ECF9-4330-98E8-A294ED6AFD57}.Debug|x86.ActiveCfg = Debug|Any CPU 53 | {83419A10-ECF9-4330-98E8-A294ED6AFD57}.Debug|x86.Build.0 = Debug|Any CPU 54 | {83419A10-ECF9-4330-98E8-A294ED6AFD57}.Release|Any CPU.ActiveCfg = Release|Any CPU 55 | {83419A10-ECF9-4330-98E8-A294ED6AFD57}.Release|Any CPU.Build.0 = Release|Any CPU 56 | {83419A10-ECF9-4330-98E8-A294ED6AFD57}.Release|ARM.ActiveCfg = Release|Any CPU 57 | {83419A10-ECF9-4330-98E8-A294ED6AFD57}.Release|ARM.Build.0 = Release|Any CPU 58 | {83419A10-ECF9-4330-98E8-A294ED6AFD57}.Release|ARM64.ActiveCfg = Release|Any CPU 59 | {83419A10-ECF9-4330-98E8-A294ED6AFD57}.Release|ARM64.Build.0 = Release|Any CPU 60 | {83419A10-ECF9-4330-98E8-A294ED6AFD57}.Release|x64.ActiveCfg = Release|Any CPU 61 | {83419A10-ECF9-4330-98E8-A294ED6AFD57}.Release|x64.Build.0 = Release|Any CPU 62 | {83419A10-ECF9-4330-98E8-A294ED6AFD57}.Release|x86.ActiveCfg = Release|Any CPU 63 | {83419A10-ECF9-4330-98E8-A294ED6AFD57}.Release|x86.Build.0 = Release|Any CPU 64 | EndGlobalSection 65 | GlobalSection(SolutionProperties) = preSolution 66 | HideSolutionNode = FALSE 67 | EndGlobalSection 68 | GlobalSection(ExtensibilityGlobals) = postSolution 69 | SolutionGuid = {E16B3FD5-576B-4482-9E04-84384E9F5FB4} 70 | EndGlobalSection 71 | EndGlobal 72 | -------------------------------------------------------------------------------- /raybot-zero/csgo in vm.txt: -------------------------------------------------------------------------------- 1 | For the future me! 2 | 3 | Add these two launch parameters: 4 | -force_device_id 0x2e42 -force_vendor_id 0x8086 -------------------------------------------------------------------------------- /raybot-zero/driver.cpp: -------------------------------------------------------------------------------- 1 | #include "includes.h" 2 | 3 | void unload_driver(); 4 | 5 | void main_thread(PVOID pStartContext) { 6 | 7 | UNREFERENCED_PARAMETER(pStartContext); 8 | PRNT("main thread launched!\n"); 9 | 10 | g_Input::initialize(); 11 | 12 | find_csgo: 13 | while ((_::pCsgoProc == NULL || _::pClient == NULL) && !_::bStopThread) 14 | { 15 | PRNT("waiting for csgo...\n"); 16 | _::pCsgoProc = utils::process_by_name(xor("csgo.exe"), 0); 17 | if (_::pCsgoProc != NULL) 18 | { 19 | _::pClient = (client_t*)utils::get_module_base(_::pCsgoProc, xor (L"client.dll")); 20 | } 21 | 22 | utils::kernel_sleep(1000); 23 | } 24 | 25 | while (!_::bStopThread) 26 | { 27 | utils::kernel_sleep(1); 28 | 29 | //for input 30 | g_Input::update_key_state_bitmap(); 31 | 32 | if (utils::is_process_terminating(_::pCsgoProc)) 33 | { 34 | _::pCsgoProc = NULL; 35 | _::pClient = NULL; 36 | goto find_csgo; 37 | } 38 | 39 | g_Cycle::localPlayer = reinterpret_cast(memory::read((_::pClient->base() + g_Offsets::dwLocalPlayer))); 40 | if (g_Cycle::localPlayer->base() == NULL) 41 | continue; 42 | 43 | //************************** 44 | //*******RUN FEATURES******* 45 | 46 | cheat::aim::run_triggerbot(g_Cycle::localPlayer); 47 | cheat::misc::run_bhop(g_Cycle::localPlayer); 48 | cheat::visuals::run_glow(g_Cycle::localPlayer); 49 | 50 | //*******END FEATURES******* 51 | //************************** 52 | } 53 | 54 | PRNT("main thread terminated!\n"); 55 | PsTerminateSystemThread(0); 56 | } 57 | 58 | void unload_driver() 59 | { 60 | //stop main thread 61 | _::bStopThread = true; 62 | if (_::hSysThread != 0) 63 | { 64 | PRNT("stopping main-thread...\n"); 65 | 66 | LARGE_INTEGER timeout; 67 | timeout.QuadPart = -(5000) * 10 * 1000; 68 | ZwWaitForSingleObject(_::hSysThread, FALSE, &timeout); 69 | ZwClose(_::hSysThread); 70 | } 71 | 72 | PRNT("successfully unloaded! byebye :)\n"); 73 | } 74 | 75 | void mf_device_unload(DRIVER_OBJECT* pDriverObject) 76 | { 77 | UNREFERENCED_PARAMETER(pDriverObject); 78 | unload_driver(); 79 | } 80 | 81 | NTSTATUS mf_device_close(PDEVICE_OBJECT pDeviceObject, PIRP pIrp) 82 | { 83 | UNREFERENCED_PARAMETER(pDeviceObject); 84 | 85 | pIrp->IoStatus.Status = STATUS_SUCCESS; 86 | pIrp->IoStatus.Information = 0; 87 | IoCompleteRequest(pIrp, IO_NO_INCREMENT); 88 | 89 | return STATUS_SUCCESS; 90 | } 91 | 92 | extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegistryPath) 93 | { 94 | UNREFERENCED_PARAMETER(pDriverObject); 95 | UNREFERENCED_PARAMETER(pRegistryPath); 96 | 97 | pDriverObject->MajorFunction[IRP_MJ_CLOSE] = &mf_device_close; 98 | pDriverObject->DriverUnload = &mf_device_unload; 99 | 100 | PRNT("starting main_thread...\n"); 101 | NTSTATUS lThreadCreationStatus = PsCreateSystemThread(&_::hSysThread, THREAD_ALL_ACCESS, NULL, NULL, NULL, (PKSTART_ROUTINE)main_thread, NULL); 102 | 103 | PRNT("successfully loaded! waiting for csgo...\n"); 104 | return STATUS_SUCCESS; 105 | } -------------------------------------------------------------------------------- /raybot-zero/features.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "includes.h" 3 | 4 | namespace cheat 5 | { 6 | namespace aim 7 | { 8 | inline void run_triggerbot(entity_t* local) 9 | { 10 | if (local->is_alive() == FALSE || !g_Input::is_key_down(0x06)) 11 | return; 12 | 13 | i32 cId = local->crosshair_id(); 14 | if (cId < 64 && cId > 0) 15 | { 16 | entity_t* player = reinterpret_cast(memory::read(_::pClient->base() + g_Offsets::dwEntityList + ((cId - 1) * 0x10))); 17 | if ((player->health() > 0) && (player->team_id() != local->team_id()) && _::pClient->read_force_attack() == 4) { 18 | _::pClient->write_force_attack(6); 19 | } 20 | } 21 | } 22 | } 23 | 24 | namespace misc 25 | { 26 | inline void run_bhop(entity_t* local) 27 | { 28 | if (local->is_alive() == FALSE || !g_Input::is_key_down(0x20)) 29 | return; 30 | 31 | u32 flags = memory::read(local->base() + g_Offsets::m_fFlags); 32 | if (flags & (1 << 0)) 33 | memory::write(_::pClient->base() + g_Offsets::dwForceJump, 6); 34 | else 35 | memory::write(_::pClient->base() + g_Offsets::dwForceJump, 4); 36 | } 37 | } 38 | 39 | namespace visuals 40 | { 41 | inline void run_glow(entity_t* local) 42 | { 43 | u32 pGlowObj = memory::read(_::pClient->base() + g_Offsets::dwGlowObjectManager); 44 | 45 | for(int i = 0; i < 32; i++) 46 | { 47 | entity_t* player = reinterpret_cast(memory::read(_::pClient->base() + g_Offsets::dwEntityList + (i * 0x10))); 48 | if (player == NULL) 49 | continue; 50 | 51 | if ((player->health() > 0 && !player->is_dormant()) && player->team_id() != local->team_id()) 52 | { 53 | u32 iGlowIndex = memory::read(player->base() + g_Offsets::m_iGlowIndex); 54 | 55 | memory::write(pGlowObj + (iGlowIndex * 0x38) + 0x8, 1.0f); 56 | memory::write(pGlowObj + (iGlowIndex * 0x38) + 0xC, 0.f); 57 | memory::write(pGlowObj + (iGlowIndex * 0x38) + 0x10, 0.f); 58 | memory::write(pGlowObj + (iGlowIndex * 0x38) + 0x14, 1.0f); 59 | 60 | memory::write(pGlowObj + (iGlowIndex * 0x38) + 0x28, 1); 61 | memory::write(pGlowObj + (iGlowIndex * 0x38) + 0x29, 0); 62 | } 63 | } 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /raybot-zero/includes.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #define PRNT(...) DbgPrintEx( DPFLTR_SYSTEM_ID, DPFLTR_ERROR_LEVEL, "[raybot-zero] " __VA_ARGS__); 4 | 5 | //custom types to give the code some uniform 6 | typedef unsigned char b8; 7 | typedef int i32; 8 | typedef unsigned int u32; 9 | typedef float f32; 10 | typedef unsigned __int64 u64; 11 | 12 | //kernelmode floating point fix 13 | extern "C" { 14 | unsigned int _fltused = 1; 15 | } 16 | 17 | #include "ntos.h" 18 | #include "xorstr.h" 19 | #include "utils.h" 20 | #include "memory.h" 21 | #include "mini_sdk.h" 22 | 23 | //all the global variables. 24 | namespace _ 25 | { 26 | static bool bStopThread = false; 27 | static HANDLE hSysThread = 0; 28 | 29 | static PEPROCESS pCsgoProc = 0; 30 | static client_t* pClient; 31 | } 32 | 33 | //for anyone wondering: a cycle means a loop in the main thread. 34 | //g_Cycle just contains info about the current "mainthread-while-loop-tick" (ex: localPlayer etc). 35 | //could also be referred to as a tick but i thought it might get confused with the actual ingame tick 36 | //--- 37 | //TL;DR just put everything here that might change (round-end, switching servers etc) 38 | namespace g_Cycle 39 | { 40 | static entity_t* localPlayer; 41 | } 42 | 43 | //yes. you wanna complain? thought so. 44 | #include "keyinput.h" 45 | #include "features.h" 46 | -------------------------------------------------------------------------------- /raybot-zero/keyinput.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | //thanks to yazzn https://www.unknowncheats.me/forum/c-and-c-/327461-kernel-mode-key-input.html 4 | namespace g_Input { 5 | 6 | PEPROCESS csrssProc; 7 | PVOID gafAsyncKeyState; 8 | 9 | UINT8 uksBitmap[64] = { 0 }; 10 | UINT8 uksRecentBitmap[32] = { 0 }; 11 | 12 | bool initialize() { 13 | 14 | csrssProc = utils::process_by_name("csrss.exe", 1); 15 | 16 | //PVOID X = memory::get_system_module_base("\\SystemRoot\\System32\\win32kbase.sys"); 17 | //PRNT("X: %p", X) 18 | 19 | //we have to hardcode it for now since RtlFindExportedRoutineByName keeps bluescreening me :( 20 | gafAsyncKeyState = (PVOID)((u64) 21 | memory::get_system_module_base("\\SystemRoot\\System32\\win32kbase.sys") 22 | + 0x24B8A0); 23 | 24 | if (!gafAsyncKeyState) { 25 | return false; 26 | } 27 | } 28 | 29 | bool is_key_down(UINT8 const vk) { 30 | uksRecentBitmap[vk / 8] &= ~(1 << vk % 8); 31 | return uksBitmap[(vk * 2 / 8)] & 1 << vk % 4 * 2; 32 | } 33 | 34 | bool was_key_pressed(UINT8 const vk) { 35 | bool const result = uksRecentBitmap[vk / 8] & 1 << vk % 8; 36 | uksRecentBitmap[vk / 8] &= ~(1 << vk % 8); 37 | return result; 38 | } 39 | 40 | void update_key_state_bitmap() { 41 | 42 | auto previousKsBitmap = uksBitmap; 43 | SIZE_T size = 0; 44 | NTSTATUS status = MmCopyVirtualMemory(csrssProc, 45 | (void*)gafAsyncKeyState, 46 | PsGetCurrentProcess(), &uksBitmap, 47 | sizeof(UINT8[64]), KernelMode, 48 | &size); 49 | 50 | for (auto vk = 0u; vk < 256; ++vk) { 51 | if ((uksBitmap[(vk * 2 / 8)] & 1 << vk % 4 * 2) && 52 | !(previousKsBitmap[(vk * 2 / 8)] & 1 << vk % 4 * 2)) 53 | uksRecentBitmap[vk / 8] |= 1 << vk % 8; 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /raybot-zero/memory.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | 5 | namespace memory 6 | { 7 | inline void __wp_off() 8 | { 9 | auto cr0 = __readcr0(); 10 | cr0 &= 0xfffffffffffeffff; 11 | __writecr0(cr0); 12 | _disable(); 13 | } 14 | 15 | inline void __wp_on() 16 | { 17 | auto cr0 = __readcr0(); 18 | cr0 |= 0x10000; 19 | _enable(); 20 | __writecr0(cr0); 21 | } 22 | 23 | template 24 | inline auto _read(u32 address) -> T 25 | { 26 | if (MmIsAddressValid((PVOID)address)) 27 | return *reinterpret_cast(address); 28 | 29 | PRNT("INVALID READ AT ADDRESS: 0x%p\n", address); 30 | T zero; 31 | RtlZeroMemory(&zero, sizeof(T)); 32 | return zero; 33 | } 34 | 35 | template 36 | inline void _write(u32 address, T val) 37 | { 38 | if (MmIsAddressValid((PVOID)address)) 39 | *reinterpret_cast(address) = val; 40 | else 41 | PRNT("INVALID WRITE AT ADDRESS: 0x%p\n", address); 42 | } 43 | 44 | template 45 | inline auto read(u32 address) -> T 46 | { 47 | KAPC_STATE apcState; 48 | KeStackAttachProcess(_::pCsgoProc, &apcState); 49 | auto ret = _read(address); 50 | KeUnstackDetachProcess(&apcState); 51 | 52 | return ret; 53 | } 54 | 55 | template 56 | inline void write(u32 address, T val) 57 | { 58 | KAPC_STATE apcState; 59 | KeStackAttachProcess(_::pCsgoProc, &apcState); 60 | _write(address, val); 61 | KeUnstackDetachProcess(&apcState); 62 | } 63 | 64 | PVOID get_system_module_base(const char* module_name) 65 | { 66 | ULONG bytes = 0; 67 | NTSTATUS status = ZwQuerySystemInformation(0x0B, NULL, bytes, &bytes); 68 | 69 | if (!bytes) 70 | return NULL; 71 | 72 | PRTL_PROCESS_MODULES modules = (PRTL_PROCESS_MODULES)ExAllocatePoolWithTag(NonPagedPool, bytes, 0x4e554c4c); 73 | 74 | status = ZwQuerySystemInformation(0x0B, modules, bytes, &bytes); 75 | 76 | if (!NT_SUCCESS(status)) 77 | return NULL; 78 | 79 | PRTL_PROCESS_MODULE_INFORMATION module = modules->Modules; 80 | PVOID module_base = 0, module_size = 0; 81 | 82 | for (ULONG i = 0; i < modules->NumberOfModules; i++) 83 | { 84 | if (strcmp((char*)module[i].FullPathName, module_name) == NULL) 85 | { 86 | module_base = module[i].ImageBase; 87 | module_size = (PVOID)module[i].ImageSize; 88 | break; 89 | } 90 | } 91 | 92 | if (modules) 93 | ExFreePoolWithTag(modules, NULL); 94 | 95 | if (module_base <= NULL) 96 | return NULL; 97 | 98 | return module_base; 99 | } 100 | 101 | PVOID get_system_module_export(const char* module_name, LPCSTR routine_name) 102 | { 103 | PVOID lpModule = get_system_module_base(module_name); 104 | 105 | if (!lpModule) 106 | return NULL; 107 | 108 | //crashes the system :( 109 | return RtlFindExportedRoutineByName(lpModule, routine_name); 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /raybot-zero/mini_sdk.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace g_Offsets 4 | { 5 | constexpr u32 dwEntityList = 0x4DDB8FC; 6 | constexpr u32 dwForceAttack = 0x320BDC8; 7 | constexpr u32 dwForceJump = 0x52858A0; 8 | constexpr u32 dwLocalPlayer = 0xDBF4BC; 9 | constexpr u32 dwGlowObjectManager = 0x5324590; 10 | 11 | constexpr u32 m_iCrosshairId = 0x11838; 12 | constexpr u32 m_bDormant = 0xED; 13 | constexpr u32 m_fFlags = 0x104; 14 | constexpr u32 m_iGlowIndex = 0x10488; 15 | constexpr u32 m_iHealth = 0x100; 16 | constexpr u32 m_iTeamNum = 0xF4; 17 | } 18 | 19 | class client_t 20 | { 21 | public: 22 | 23 | u32 base() 24 | { 25 | return reinterpret_cast(this); 26 | } 27 | 28 | void write_force_attack(i32 v) 29 | { 30 | memory::write(base() + g_Offsets::dwForceAttack, v); 31 | } 32 | 33 | i32 read_force_attack() 34 | { 35 | return memory::read(base() + g_Offsets::dwForceAttack); 36 | } 37 | }; 38 | 39 | class entity_t 40 | { 41 | 42 | public: 43 | u32 base() 44 | { 45 | return reinterpret_cast(this); 46 | } 47 | 48 | i32 health() 49 | { 50 | return memory::read((base() + g_Offsets::m_iHealth)); 51 | } 52 | 53 | b8 is_alive() 54 | { 55 | return health() > 0; 56 | } 57 | 58 | i32 is_dormant() 59 | { 60 | return memory::read((base() + g_Offsets::m_bDormant)); 61 | } 62 | 63 | i32 crosshair_id() 64 | { 65 | return memory::read((base() + g_Offsets::m_iCrosshairId)); 66 | } 67 | 68 | i32 team_id() 69 | { 70 | return memory::read((base() + g_Offsets::m_iTeamNum)); 71 | } 72 | }; 73 | -------------------------------------------------------------------------------- /raybot-zero/ntos.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | 6 | typedef unsigned long long QWORD; 7 | 8 | typedef struct _RTL_PROCESS_MODULE_INFORMATION 9 | { 10 | HANDLE Section; 11 | PVOID MappedBase; 12 | PVOID ImageBase; 13 | ULONG ImageSize; 14 | ULONG Flags; 15 | USHORT LoadOrderIndex; 16 | USHORT InitOrderIndex; 17 | USHORT LoadCount; 18 | USHORT OffsetToFileName; 19 | UCHAR FullPathName[256]; 20 | } RTL_PROCESS_MODULE_INFORMATION, * PRTL_PROCESS_MODULE_INFORMATION; 21 | 22 | typedef struct _RTL_PROCESS_MODULES 23 | { 24 | ULONG NumberOfModules; 25 | RTL_PROCESS_MODULE_INFORMATION Modules[1]; 26 | } RTL_PROCESS_MODULES, * PRTL_PROCESS_MODULES; 27 | 28 | typedef struct _LDR_DATA_TABLE_ENTRY { 29 | LIST_ENTRY InLoadOrderModuleList; 30 | LIST_ENTRY InMemoryOrderModuleList; 31 | LIST_ENTRY InInitializationOrderModuleList; 32 | PVOID DllBase; 33 | PVOID EntryPoint; 34 | ULONG SizeOfImage; // in bytes 35 | UNICODE_STRING FullDllName; 36 | UNICODE_STRING BaseDllName; 37 | ULONG Flags; // LDR_* 38 | USHORT LoadCount; 39 | USHORT TlsIndex; 40 | LIST_ENTRY HashLinks; 41 | PVOID SectionPointer; 42 | ULONG CheckSum; 43 | ULONG TimeDateStamp; 44 | } LDR_DATA_TABLE_ENTRY, * PLDR_DATA_TABLE_ENTRY; 45 | 46 | typedef struct _PEB_LDR_DATA32 { 47 | ULONG Length; 48 | UCHAR Initialized; 49 | ULONG SsHandle; 50 | LIST_ENTRY32 InLoadOrderModuleList; 51 | LIST_ENTRY32 InMemoryOrderModuleList; 52 | LIST_ENTRY32 InInitializationOrderModuleList; 53 | } PEB_LDR_DATA32, * PPEB_LDR_DATA32; 54 | 55 | typedef struct _LDR_DATA_TABLE_ENTRY32 { 56 | LIST_ENTRY32 InLoadOrderLinks; 57 | LIST_ENTRY32 InMemoryOrderLinks; 58 | LIST_ENTRY32 InInitializationOrderLinks; 59 | ULONG DllBase; 60 | ULONG EntryPoint; 61 | ULONG SizeOfImage; 62 | UNICODE_STRING32 FullDllName; 63 | UNICODE_STRING32 BaseDllName; 64 | ULONG Flags; 65 | USHORT LoadCount; 66 | USHORT TlsIndex; 67 | LIST_ENTRY32 HashLinks; 68 | ULONG TimeDateStamp; 69 | } LDR_DATA_TABLE_ENTRY32, * PLDR_DATA_TABLE_ENTRY32; 70 | 71 | typedef struct _PEB32 { 72 | UCHAR InheritedAddressSpace; 73 | UCHAR ReadImageFileExecOptions; 74 | UCHAR BeingDebugged; 75 | UCHAR BitField; 76 | ULONG Mutant; 77 | ULONG ImageBaseAddress; 78 | ULONG Ldr; 79 | ULONG ProcessParameters; 80 | ULONG SubSystemData; 81 | ULONG ProcessHeap; 82 | ULONG FastPebLock; 83 | ULONG AtlThunkSListPtr; 84 | ULONG IFEOKey; 85 | ULONG CrossProcessFlags; 86 | ULONG UserSharedInfoPtr; 87 | ULONG SystemReserved; 88 | ULONG AtlThunkSListPtr32; 89 | ULONG ApiSetMap; 90 | } PEB32, * PPEB32; 91 | 92 | typedef PVOID(*fnPsGetProcessWow64Process)(PEPROCESS Process); 93 | 94 | EXTERN_C NTKERNELAPI PIMAGE_NT_HEADERS RtlImageNtHeader(PVOID Base); 95 | 96 | EXTERN_C NTKERNELAPI NTSTATUS MmCopyVirtualMemory(PEPROCESS SourceProcess,PVOID SourceAddress,PEPROCESS TargetProcess,PVOID TargetAddress,SIZE_T BufferSize,KPROCESSOR_MODE PreviousMode,PSIZE_T ReturnSize); 97 | 98 | EXTERN_C NTKERNELAPI PVOID PsGetProcessWow64Process(_In_ PEPROCESS Process); 99 | 100 | EXTERN_C NTKERNELAPI PVOID PsGetProcessPeb(_In_ PEPROCESS Process); 101 | 102 | EXTERN_C NTKERNELAPI PVOID RtlFindExportedRoutineByName(_In_ PVOID ImageBase, _In_ PCCH RoutineName); 103 | 104 | EXTERN_C NTKERNELAPI PCHAR PsGetProcessImageFileName(PEPROCESS Process); 105 | 106 | extern "C" NTSTATUS ZwQuerySystemInformation(ULONG InfoClass, PVOID Buffer, ULONG Length, PULONG ReturnLength); 107 | 108 | //__declspec(dllimport) SHORT __stdcall GetAsyncKeyState(int vKey); -------------------------------------------------------------------------------- /raybot-zero/raybot-zero.inf: -------------------------------------------------------------------------------- 1 | ; 2 | ; CS-Driver.inf 3 | ; 4 | 5 | [Version] 6 | Signature="$WINDOWS NT$" 7 | Class=System ; TODO: specify appropriate Class 8 | ClassGuid={4d36e97d-e325-11ce-bfc1-08002be10318} ; TODO: specify appropriate ClassGuid 9 | Provider=%ManufacturerName% 10 | CatalogFile=CS-Driver.cat 11 | DriverVer= ; TODO: set DriverVer in stampinf property pages 12 | PnpLockdown=1 13 | 14 | [DestinationDirs] 15 | DefaultDestDir = 12 16 | CS-Driver_Device_CoInstaller_CopyFiles = 11 17 | 18 | [SourceDisksNames] 19 | 1 = %DiskName%,,,"" 20 | 21 | [SourceDisksFiles] 22 | CS-Driver.sys = 1,, 23 | WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll=1 ; make sure the number matches with SourceDisksNames 24 | 25 | ;***************************************** 26 | ; Install Section 27 | ;***************************************** 28 | 29 | [Manufacturer] 30 | %ManufacturerName%=Standard,NT$ARCH$ 31 | 32 | [Standard.NT$ARCH$] 33 | %CS-Driver.DeviceDesc%=CS-Driver_Device, Root\CS-Driver ; TODO: edit hw-id 34 | 35 | [CS-Driver_Device.NT] 36 | CopyFiles=Drivers_Dir 37 | 38 | [Drivers_Dir] 39 | CS-Driver.sys 40 | 41 | ;-------------- Service installation 42 | [CS-Driver_Device.NT.Services] 43 | AddService = CS-Driver,%SPSVCINST_ASSOCSERVICE%, CS-Driver_Service_Inst 44 | 45 | ; -------------- CS-Driver driver install sections 46 | [CS-Driver_Service_Inst] 47 | DisplayName = %CS-Driver.SVCDESC% 48 | ServiceType = 1 ; SERVICE_KERNEL_DRIVER 49 | StartType = 3 ; SERVICE_DEMAND_START 50 | ErrorControl = 1 ; SERVICE_ERROR_NORMAL 51 | ServiceBinary = %12%\CS-Driver.sys 52 | 53 | ; 54 | ;--- CS-Driver_Device Coinstaller installation ------ 55 | ; 56 | 57 | [CS-Driver_Device.NT.CoInstallers] 58 | AddReg=CS-Driver_Device_CoInstaller_AddReg 59 | CopyFiles=CS-Driver_Device_CoInstaller_CopyFiles 60 | 61 | [CS-Driver_Device_CoInstaller_AddReg] 62 | HKR,,CoInstallers32,0x00010000, "WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll,WdfCoInstaller" 63 | 64 | [CS-Driver_Device_CoInstaller_CopyFiles] 65 | WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll 66 | 67 | [CS-Driver_Device.NT.Wdf] 68 | KmdfService = CS-Driver, CS-Driver_wdfsect 69 | [CS-Driver_wdfsect] 70 | KmdfLibraryVersion = $KMDFVERSION$ 71 | 72 | [Strings] 73 | SPSVCINST_ASSOCSERVICE= 0x00000002 74 | ManufacturerName="" ;TODO: Replace with your manufacturer name 75 | DiskName = "CS-Driver Installation Disk" 76 | CS-Driver.DeviceDesc = "CS-Driver Device" 77 | CS-Driver.SVCDESC = "CS-Driver Service" 78 | -------------------------------------------------------------------------------- /raybot-zero/raybot-zero.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | Debug 14 | x64 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | Debug 22 | ARM 23 | 24 | 25 | Release 26 | ARM 27 | 28 | 29 | Debug 30 | ARM64 31 | 32 | 33 | Release 34 | ARM64 35 | 36 | 37 | 38 | {3386F618-A986-4738-B677-7D3669154D54} 39 | {1bc93793-694f-48fe-9372-81e2b05556fd} 40 | v4.5 41 | 12.0 42 | Debug 43 | Win32 44 | CS_Driver 45 | $(LatestTargetPlatformVersion) 46 | 47 | 48 | 49 | Windows10 50 | true 51 | WindowsKernelModeDriver10.0 52 | Driver 53 | KMDF 54 | Universal 55 | 56 | 57 | Windows10 58 | false 59 | WindowsKernelModeDriver10.0 60 | Driver 61 | KMDF 62 | Universal 63 | 64 | 65 | Windows10 66 | true 67 | WindowsKernelModeDriver10.0 68 | Driver 69 | KMDF 70 | Universal 71 | false 72 | 73 | 74 | Windows10 75 | false 76 | WindowsKernelModeDriver10.0 77 | Driver 78 | KMDF 79 | Universal 80 | 81 | 82 | Windows10 83 | true 84 | WindowsKernelModeDriver10.0 85 | Driver 86 | KMDF 87 | Universal 88 | 89 | 90 | Windows10 91 | false 92 | WindowsKernelModeDriver10.0 93 | Driver 94 | KMDF 95 | Universal 96 | 97 | 98 | Windows10 99 | true 100 | WindowsKernelModeDriver10.0 101 | Driver 102 | KMDF 103 | Universal 104 | 105 | 106 | Windows10 107 | false 108 | WindowsKernelModeDriver10.0 109 | Driver 110 | KMDF 111 | Universal 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | DbgengKernelDebugger 123 | 124 | 125 | DbgengKernelDebugger 126 | 127 | 128 | DbgengKernelDebugger 129 | false 130 | rbzero 131 | $(SolutionDir)build\driver\temp 132 | $(SolutionDir)build\driver 133 | 134 | 135 | DbgengKernelDebugger 136 | 137 | 138 | DbgengKernelDebugger 139 | 140 | 141 | DbgengKernelDebugger 142 | 143 | 144 | DbgengKernelDebugger 145 | 146 | 147 | DbgengKernelDebugger 148 | 149 | 150 | 151 | sha256 152 | 153 | 154 | stdcpp17 155 | 156 | 157 | 158 | 159 | sha256 160 | 161 | 162 | 163 | 164 | sha256 165 | 166 | 167 | false 168 | true 169 | true 170 | 171 | 172 | false 173 | stdcpp17 174 | 175 | 176 | /integritycheck %(AdditionalOptions) 177 | 178 | 179 | call "$(SolutionDir)signing\sign.bat" 180 | 181 | 182 | 183 | 184 | sha256 185 | 186 | 187 | 188 | 189 | sha256 190 | 191 | 192 | 193 | 194 | sha256 195 | 196 | 197 | 198 | 199 | sha256 200 | 201 | 202 | 203 | 204 | sha256 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | -------------------------------------------------------------------------------- /raybot-zero/raybot-zero.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | {8E41214B-6785-4CFE-B992-037D68949A14} 18 | inf;inv;inx;mof;mc; 19 | 20 | 21 | 22 | 23 | Driver Files 24 | 25 | 26 | 27 | 28 | Source Files 29 | 30 | 31 | 32 | 33 | Header Files 34 | 35 | 36 | Header Files 37 | 38 | 39 | Header Files 40 | 41 | 42 | Header Files 43 | 44 | 45 | Header Files 46 | 47 | 48 | Header Files 49 | 50 | 51 | Header Files 52 | 53 | 54 | Header Files 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /raybot-zero/raybot-zero.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Off 5 | 6 | -------------------------------------------------------------------------------- /raybot-zero/utils.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | //one might notice that I did not use my custom types here 7 | //which *may* lead to the conclusion that some of this code is pasted. 8 | //tho i cant give credits since i just smashed it all together 9 | 10 | namespace utils 11 | { 12 | inline void kernel_sleep(int ms) 13 | { 14 | LARGE_INTEGER time; 15 | time.QuadPart = -(ms) * 10 * 1000; 16 | KeDelayExecutionThread(KernelMode, TRUE, &time); 17 | } 18 | 19 | inline uintptr_t get_module_base(PEPROCESS peProc, WCHAR* wcModuleName) 20 | { 21 | fnPsGetProcessWow64Process fPsGetProcessWow64Process; 22 | UNICODE_STRING sRoutineName; 23 | RtlInitUnicodeString(&sRoutineName, L"PsGetProcessWow64Process"); 24 | fPsGetProcessWow64Process = (fnPsGetProcessWow64Process)MmGetSystemRoutineAddress(&sRoutineName); 25 | 26 | KAPC_STATE apcAttachState; 27 | KeStackAttachProcess(peProc, &apcAttachState); 28 | 29 | PPEB32 pPeb32 = (PPEB32)fPsGetProcessWow64Process(peProc); 30 | if (!pPeb32 || !pPeb32->Ldr) 31 | { 32 | KeUnstackDetachProcess(&apcAttachState); 33 | return 0; 34 | } 35 | 36 | for (PLIST_ENTRY32 pListEntry = (PLIST_ENTRY32)((PPEB_LDR_DATA32)pPeb32->Ldr)->InLoadOrderModuleList.Flink; pListEntry != &((PPEB_LDR_DATA32)pPeb32->Ldr)->InLoadOrderModuleList; pListEntry = (PLIST_ENTRY32)pListEntry->Flink) 37 | { 38 | PLDR_DATA_TABLE_ENTRY32 pEntry = CONTAINING_RECORD(pListEntry, LDR_DATA_TABLE_ENTRY32, InLoadOrderLinks); 39 | if (wcscmp((PWCH)pEntry->BaseDllName.Buffer, wcModuleName) == 0) 40 | { 41 | uintptr_t pModuleBase = pEntry->DllBase; 42 | KeUnstackDetachProcess(&apcAttachState); 43 | return pModuleBase; 44 | } 45 | } 46 | 47 | KeUnstackDetachProcess(&apcAttachState); 48 | return 0; 49 | } 50 | 51 | inline PEPROCESS process_by_name(CHAR* cProcessName, int index) 52 | { 53 | PEPROCESS peSystemProcess = PsInitialSystemProcess; 54 | PEPROCESS peCurrentEntry = peSystemProcess; 55 | 56 | CHAR cImageName[15]; 57 | 58 | b8 iterationFound = 0; 59 | bool firstItteration = true; 60 | while (true) 61 | { 62 | if ((peCurrentEntry == peSystemProcess) && !firstItteration) 63 | break; 64 | 65 | firstItteration = false; 66 | RtlCopyMemory((PVOID)(&cImageName), (PVOID)((uintptr_t)peCurrentEntry + 0x5a8), sizeof(cImageName)); 67 | 68 | if (strstr(cImageName, cProcessName)) 69 | { 70 | DWORD32 iActiveThreads; 71 | RtlCopyMemory((PVOID)&iActiveThreads, (PVOID)((uintptr_t)peCurrentEntry + 0x5f0), sizeof(iActiveThreads)); 72 | 73 | if (iActiveThreads) 74 | { 75 | if(iterationFound == index) 76 | return peCurrentEntry; 77 | 78 | iterationFound++; 79 | } 80 | } 81 | 82 | PLIST_ENTRY pList = (PLIST_ENTRY)((uintptr_t)(peCurrentEntry)+0x448); 83 | peCurrentEntry = (PEPROCESS)((uintptr_t)pList->Flink - 0x448); 84 | } 85 | 86 | return NULL; 87 | } 88 | 89 | inline BOOLEAN is_process_terminating(PEPROCESS pProcess) 90 | { 91 | LARGE_INTEGER zeroTime = { 0 }; 92 | return KeWaitForSingleObject(pProcess, Executive, KernelMode, FALSE, &zeroTime) == STATUS_WAIT_0; 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /raybot-zero/xorstr.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | /*____________________________________________________________________________________________________________ 4 | 5 | Original Author: skadro 6 | Github: https://github.com/skadro-official 7 | ____________________________________________________________________________________________________________*/ 8 | 9 | #ifdef _KERNEL_MODE 10 | namespace std 11 | { 12 | // STRUCT TEMPLATE remove_reference 13 | template 14 | struct remove_reference { 15 | using type = _Ty; 16 | }; 17 | 18 | template 19 | struct remove_reference<_Ty&> { 20 | using type = _Ty; 21 | }; 22 | 23 | template 24 | struct remove_reference<_Ty&&> { 25 | using type = _Ty; 26 | }; 27 | 28 | template 29 | using remove_reference_t = typename remove_reference<_Ty>::type; 30 | 31 | // STRUCT TEMPLATE remove_const 32 | template 33 | struct remove_const { // remove top-level const qualifier 34 | using type = _Ty; 35 | }; 36 | 37 | template 38 | struct remove_const { 39 | using type = _Ty; 40 | }; 41 | 42 | template 43 | using remove_const_t = typename remove_const<_Ty>::type; 44 | } 45 | #else 46 | #include 47 | #endif 48 | 49 | namespace skc 50 | { 51 | template 52 | using clean_type = typename std::remove_const_t>; 53 | 54 | template 55 | class skCrypter 56 | { 57 | public: 58 | __forceinline constexpr skCrypter(T* data) 59 | { 60 | crypt(data); 61 | } 62 | 63 | __forceinline T* get() 64 | { 65 | return _storage; 66 | } 67 | 68 | __forceinline int size() // (w)char count 69 | { 70 | return _size; 71 | } 72 | 73 | __forceinline char key() 74 | { 75 | return _key1; 76 | } 77 | 78 | __forceinline T* encrypt() 79 | { 80 | if (!isEncrypted()) 81 | crypt(_storage); 82 | 83 | return _storage; 84 | } 85 | 86 | __forceinline T* decrypt() 87 | { 88 | if (isEncrypted()) 89 | crypt(_storage); 90 | 91 | return _storage; 92 | } 93 | 94 | __forceinline bool isEncrypted() 95 | { 96 | return _storage[_size - 1] != 0; 97 | } 98 | 99 | __forceinline void clear() // set full storage to 0 100 | { 101 | for (int i = 0; i < _size; i++) 102 | { 103 | _storage[i] = 0; 104 | } 105 | } 106 | 107 | __forceinline operator T* () 108 | { 109 | decrypt(); 110 | 111 | return _storage; 112 | } 113 | 114 | private: 115 | __forceinline constexpr void crypt(T* data) 116 | { 117 | for (int i = 0; i < _size; i++) 118 | { 119 | _storage[i] = data[i] ^ (_key1 + i % (1 + _key2)); 120 | } 121 | } 122 | 123 | T _storage[_size]{}; 124 | }; 125 | } 126 | 127 | #define xor(str) skCrypt_key(str, __TIME__[4], __TIME__[7]) 128 | #define skCrypt_key(str, key1, key2) []() { \ 129 | constexpr static auto crypted = skc::skCrypter \ 130 | >((skc::clean_type*)str); \ 131 | return crypted; }() 132 | 133 | /*________________________________________________________________________________ 134 | 135 | MIT License 136 | 137 | Copyright (c) 2020 skadro 138 | 139 | Permission is hereby granted, free of charge, to any person obtaining a copy 140 | of this software and associated documentation files (the "Software"), to deal 141 | in the Software without restriction, including without limitation the rights 142 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 143 | copies of the Software, and to permit persons to whom the Software is 144 | furnished to do so, subject to the following conditions: 145 | 146 | The above copyright notice and this permission notice shall be included in all 147 | copies or substantial portions of the Software. 148 | 149 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 150 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 151 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 152 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 153 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 154 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 155 | SOFTWARE. 156 | 157 | ________________________________________________________________________________*/ 158 | --------------------------------------------------------------------------------