diff options
| author | boris <wzn@moneybot.cc> | 2018-12-19 00:13:24 +1300 |
|---|---|---|
| committer | boris <wzn@moneybot.cc> | 2018-12-19 00:13:24 +1300 |
| commit | 77b52da44b263df4884be2f35f885d8edccbb6fa (patch) | |
| tree | 54a9a07c67d507cb5120ae7e4ee86669dfec7c6b /csgo-loader/csgo-client/RemoteCode/RemoteProcess.hpp | |
| parent | 1270999026bd77165edfffebfce277a34761710c (diff) | |
added new loader project :)
merry christmas
Diffstat (limited to 'csgo-loader/csgo-client/RemoteCode/RemoteProcess.hpp')
| -rw-r--r-- | csgo-loader/csgo-client/RemoteCode/RemoteProcess.hpp | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/csgo-loader/csgo-client/RemoteCode/RemoteProcess.hpp b/csgo-loader/csgo-client/RemoteCode/RemoteProcess.hpp new file mode 100644 index 0000000..b1c716b --- /dev/null +++ b/csgo-loader/csgo-client/RemoteCode/RemoteProcess.hpp @@ -0,0 +1,91 @@ +#pragma once
+
+#include <windows.h>
+#include <psapi.h>
+
+#include <Security/FnvHash.hpp>
+#include <Security/SyscallManager.hpp>
+
+namespace RemoteCode {
+ // The module wrapper.
+ class RemoteProcess;
+ class RemoteModule {
+ HANDLE m_Module;
+ int32_t m_SizeOfModule;
+
+ // All the module data will be read upon class initialisation.
+ ByteArray m_ModuleData;
+
+ public:
+ // The constructor (reads all module data into m_ModuleData).
+ RemoteModule(HANDLE Module, RemoteProcess &Process);
+
+ // TODO: Add support for wild-cards (not currently implemented)
+ uintptr_t Scan(ByteArray &Pattern);
+
+ // Allow us to access the module by just passing the
+ // handle as a parameter.
+ operator HANDLE() { return m_Module; }
+ operator HINSTANCE() { return (HINSTANCE)m_Module; }
+ };
+
+ // The process wrapper.
+ class RemoteProcess {
+ HANDLE m_Process;
+ int32_t m_ProcessId;
+
+ // Exposing the syscalls in a convenient way to use with templating.
+ void ReadMemoryWrapper_Internal(void *Address, void *Data, size_t SizeOfData);
+ void WriteMemoryWrapper_Internal(void *Address, void *Data, size_t SizeOfData);
+
+ public:
+ RemoteProcess() = default;
+
+ // For portability, will ignore exceptions.
+ RemoteProcess(const char *ProcessName) {
+ Start(ProcessName);
+ }
+
+ // Release the handle when the process goes out of scope.
+ ~RemoteProcess() {
+ if(m_Process)
+ CloseHandle(m_Process);
+ }
+
+ // Find the process ID and initialise the process.
+ bool Start(const char *ProcessName);
+
+ // Writes to the process memory.
+ template <typename T>
+ void Write(void *Address, T Data) {
+ WriteMemoryWrapper_Internal(Address, (void *)&Data, sizeof T);
+ }
+
+ void Write(void *Address, uint8_t *Data, size_t SizeOfData) {
+ WriteMemoryWrapper_Internal(Address, (void *)Data, SizeOfData);
+ }
+
+ // Reads from the process memory.
+ template <typename T>
+ T Read(void *Address) {
+ T Buffer{};
+ ReadMemoryWrapper_Internal(Address, (void *)&Buffer, sizeof T);
+
+ return Buffer;
+ }
+
+ void Read(void *Address, uint8_t *Data, size_t SizeOfData) {
+ ReadMemoryWrapper_Internal(Address, (void *)Data, SizeOfData);
+ }
+
+ // Allocates a memory region in the process.
+ void *Allocate(size_t AllocationSize);
+
+ // Finds a module in the process.
+ RemoteModule FindModule(const char *ModuleName);
+
+ // Allow us to access the process by just passing the
+ // handle as a parameter.
+ operator HANDLE() { return m_Process; }
+ };
+}
\ No newline at end of file |
