summaryrefslogtreecommitdiff
path: root/csgo-loader/csgo-server/RemoteCode
diff options
context:
space:
mode:
authorboris <wzn@moneybot.cc>2018-12-24 20:39:09 +1300
committerboris <wzn@moneybot.cc>2018-12-24 20:39:09 +1300
commitace9ae2117175dfe5e14b259db2e0536f8ec7a8a (patch)
treee657af71b250546fb3e135fdadb1cd31f1a07671 /csgo-loader/csgo-server/RemoteCode
parent8a6e64f020047709f53ddd35797c511a5d3239fe (diff)
fffffffff
Diffstat (limited to 'csgo-loader/csgo-server/RemoteCode')
-rw-r--r--csgo-loader/csgo-server/RemoteCode/RemoteCodeServer.cpp52
-rw-r--r--csgo-loader/csgo-server/RemoteCode/RemoteCodeServer.hpp33
-rw-r--r--csgo-loader/csgo-server/RemoteCode/RemoteInjectionServer.hpp7
3 files changed, 90 insertions, 2 deletions
diff --git a/csgo-loader/csgo-server/RemoteCode/RemoteCodeServer.cpp b/csgo-loader/csgo-server/RemoteCode/RemoteCodeServer.cpp
index 7e4b553..daa42ae 100644
--- a/csgo-loader/csgo-server/RemoteCode/RemoteCodeServer.cpp
+++ b/csgo-loader/csgo-server/RemoteCode/RemoteCodeServer.cpp
@@ -1 +1,53 @@
#include <RemoteCode/RemoteCodeServer.hpp>
+
+namespace RemoteCode
+{
+ ByteArray Shellcode = {
+ // TODO: Add shellcode.
+ };
+
+ bool RemoteCodeServer::Start(ByteArray &Parameters)
+ {
+ RemoteCodeParameters CodeParams = *(RemoteCodeParameters *)&Parameters[0];
+
+ // Check if the header is valid.
+ if((!CodeParams.m_EndSceneVmt || !CodeParams.m_OriginalEndScene) ||
+ (CodeParams.m_EntryPoint || CodeParams.m_CheatHeader))
+ {
+ // TODO: Ban user (probably using fake client)
+ return false;
+ }
+
+ // Set up shellcode.
+ m_CustomCode.insert(
+ m_CustomCode.begin(),
+ Shellcode.begin(),
+ Shellcode.end()
+ );
+
+ // TODO: Set up pointers in shellcode.
+
+ return true;
+ }
+
+ uintptr_t RemoteCodeServer::GetOffsetByPattern(ByteArray &Data, ByteArray Pattern)
+ {
+ if(Data.empty())
+ return uintptr_t{};
+
+ ByteArray::iterator Position = std::search(
+ Data.begin(),
+ Data.end(),
+ Pattern.begin(),
+ Pattern.end()
+ );
+
+ if(Position != Data.end())
+ return (uintptr_t)std::distance(Data.begin(), Position);
+
+ return uintptr_t{};
+ }
+
+ // is this loss?
+ ByteArray RemoteCodeServer::GetShellcode() { return m_CustomCode; }
+} \ No newline at end of file
diff --git a/csgo-loader/csgo-server/RemoteCode/RemoteCodeServer.hpp b/csgo-loader/csgo-server/RemoteCode/RemoteCodeServer.hpp
index 57f1499..dde8b7d 100644
--- a/csgo-loader/csgo-server/RemoteCode/RemoteCodeServer.hpp
+++ b/csgo-loader/csgo-server/RemoteCode/RemoteCodeServer.hpp
@@ -1,6 +1,37 @@
#pragma once
+#include <cstdint>
+#include <vector>
+#include <algorithm>
+
+using ByteArray = std::vector<uint8_t>;
+
namespace RemoteCode
{
-
+ struct RemoteCodeParameters
+ {
+ uintptr_t m_EndSceneVmt;
+ uintptr_t m_OriginalEndScene;
+ uintptr_t m_EntryPoint;
+ uintptr_t m_CheatHeader;
+ uintptr_t m_VirtualProtect;
+ };
+
+ class RemoteCodeServer
+ {
+ ByteArray m_CustomCode;
+
+ // swoo
+ uintptr_t GetOffsetByPattern(ByteArray &Data, ByteArray Pattern);
+
+ public:
+ RemoteCodeServer() = default;
+
+ // Send client the prepared shellcode.
+ // This will also send the original and vmt address of endscene.
+ bool Start(ByteArray &Parameters);
+
+ // Get the response for the client
+ ByteArray GetShellcode();
+ };
} \ No newline at end of file
diff --git a/csgo-loader/csgo-server/RemoteCode/RemoteInjectionServer.hpp b/csgo-loader/csgo-server/RemoteCode/RemoteInjectionServer.hpp
index 57f1499..f8f7274 100644
--- a/csgo-loader/csgo-server/RemoteCode/RemoteInjectionServer.hpp
+++ b/csgo-loader/csgo-server/RemoteCode/RemoteInjectionServer.hpp
@@ -1,6 +1,11 @@
#pragma once
+#include <windows.h>
+
namespace RemoteCode
{
-
+ class RemoteInjectionServer
+ {
+
+ };
} \ No newline at end of file