├── .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 |
--------------------------------------------------------------------------------