├── OACService └── .placeholder ├── common ├── .placeholder ├── IBaseInterface.h ├── OACString.h ├── ClientInterface.h ├── EngineInterface.h ├── OACBuffer.h └── OACMessage.h ├── thirdparty └── .placeholder ├── README.md ├── OACEngine └── Interface │ ├── IWinUser.h │ ├── IWinKernel.h │ ├── IBaseWin.h │ ├── IDriver.h │ ├── Plugins │ ├── IGameIntegrity.h │ └── ISelfIntegrity.h │ ├── IMachineIdentifier.h │ ├── IBasePlugin.h │ ├── IDispatcher.h │ ├── IEngine.h │ ├── IMessageCodec.h │ ├── IAlerter.h │ ├── IReport.h │ ├── IFileSystem.h │ └── INetwork.h └── OACClient └── Interface └── IMachineIdentifier.h /OACService/.placeholder: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/.placeholder: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /thirdparty/.placeholder: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # OAC 2 | Open Anti Cheat 3 | 4 | # Coming soon 5 | -------------------------------------------------------------------------------- /common/IBaseInterface.h: -------------------------------------------------------------------------------- 1 | namespace OAC 2 | { 3 | 4 | #define INTERFACE_PACKED_ID(name, index, ver) const int InterfaceID_##name = ((index << 3) | ver) 5 | 6 | } -------------------------------------------------------------------------------- /common/OACString.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace OAC 4 | { 5 | 6 | class OACString : public OACBuffer 7 | { 8 | public: 9 | 10 | }; 11 | 12 | } -------------------------------------------------------------------------------- /OACEngine/Interface/IWinUser.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace OAC 4 | { 5 | 6 | class IWinUser : public IBaseWin 7 | { 8 | public: 9 | 10 | }; 11 | 12 | } -------------------------------------------------------------------------------- /OACEngine/Interface/IWinKernel.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace OAC 4 | { 5 | 6 | class IWinKernel : public IBaseWin 7 | { 8 | public: 9 | 10 | }; 11 | 12 | } -------------------------------------------------------------------------------- /OACEngine/Interface/IBaseWin.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace OAC 4 | { 5 | 6 | class IBaseWin : public IBaseInterface 7 | { 8 | public: 9 | 10 | }; 11 | 12 | } -------------------------------------------------------------------------------- /OACEngine/Interface/IDriver.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace OAC 4 | { 5 | 6 | class IDriver : public IBaseInterface 7 | { 8 | public: 9 | 10 | }; 11 | 12 | } -------------------------------------------------------------------------------- /OACEngine/Interface/Plugins/IGameIntegrity.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace OAC 4 | { 5 | 6 | class IGameIntegrity : public IPlugin 7 | { 8 | public: 9 | }; 10 | 11 | } -------------------------------------------------------------------------------- /OACEngine/Interface/Plugins/ISelfIntegrity.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace OAC 4 | { 5 | 6 | class ISelfIntegrity : public IPlugin 7 | { 8 | public: 9 | 10 | }; 11 | 12 | } -------------------------------------------------------------------------------- /OACEngine/Interface/IMachineIdentifier.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace OAC 4 | { 5 | 6 | class IIdentifier : public IBaseInterface 7 | { 8 | public: 9 | 10 | }; 11 | 12 | } -------------------------------------------------------------------------------- /OACClient/Interface/IMachineIdentifier.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace OAC 4 | { 5 | 6 | class IMachineIdentifier : public IBaseInterface 7 | { 8 | public: 9 | 10 | }; 11 | 12 | } -------------------------------------------------------------------------------- /OACEngine/Interface/IBasePlugin.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace OAC 4 | { 5 | 6 | class IBasePlugin : public IBaseInterface 7 | { 8 | public: 9 | /* Will be called on initialize */ 10 | void Initialize() = 0; 11 | 12 | /* Will be called on shutdown */ 13 | void Shutdown() = 0; 14 | 15 | void OnNetworkMessage() = 0; 16 | }; 17 | 18 | } -------------------------------------------------------------------------------- /OACEngine/Interface/IDispatcher.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace OAC 4 | { 5 | 6 | class IDispatcher : public IBaseInterface 7 | { 8 | public: 9 | void Initialize() = 0; 10 | 11 | /* Block here until all workers completely shutdown */ 12 | void Shutdown() = 0; 13 | 14 | /* Dispatch a job to worker thread */ 15 | void Dispatch(IDispatchable *job) = 0; 16 | }; 17 | 18 | } -------------------------------------------------------------------------------- /OACEngine/Interface/IEngine.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace OAC 4 | { 5 | 6 | class IEngine : public IBaseInterface 7 | { 8 | public: 9 | void Initialize() = 0; 10 | 11 | void Shutdown() = 0; 12 | 13 | /* Call this if load as a dedicated service */ 14 | void RunService() = 0; 15 | 16 | /* Call this in main frame loop */ 17 | void RunFrame() = 0; 18 | }; 19 | 20 | } -------------------------------------------------------------------------------- /OACEngine/Interface/IMessageCodec.h: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | namespace OAC 5 | { 6 | 7 | class IMessageEncodec : public IBaseInterface 8 | { 9 | public: 10 | void Initialize() = 0; 11 | 12 | void Shutdown() = 0; 13 | 14 | OACMessage* Parse(OACBuffer *buffer) = 0; 15 | 16 | void Serialize(OACMessage *message, OACBuffer *buffer) = 0; 17 | }; 18 | 19 | } -------------------------------------------------------------------------------- /common/ClientInterface.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace OAC 4 | { 5 | 6 | INTERFACE_PACKED_ID(IGameIntegrity, 10, 0); 7 | INTERFACE_PACKED_ID(ISelfIntegrity, 11, 0); 8 | INTERFACE_PACKED_ID(IScreenShot, 12, 0); 9 | INTERFACE_PACKED_ID(IMachineIdentifier, 13, 0); 10 | INTERFACE_PACKED_ID(IWin32Image, 14, 0); 11 | INTERFACE_PACKED_ID(IMemoryImage, 15, 0); 12 | INTERFACE_PACKED_ID(IWin32Process, 16, 0); 13 | INTERFACE_PACKED_ID(IWin32Window, 17, 0); 14 | 15 | } -------------------------------------------------------------------------------- /common/EngineInterface.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace OAC 4 | { 5 | 6 | INTERFACE_PACKED_ID(IAlerter, 0, 0); 7 | INTERFACE_PACKED_ID(IDispatcher, 1, 0); 8 | INTERFACE_PACKED_ID(IDriver, 2, 0); 9 | INTERFACE_PACKED_ID(IEngine, 3, 0); 10 | INTERFACE_PACKED_ID(IFileSystem, 4, 0); 11 | INTERFACE_PACKED_ID(INetwork, 5, 0); 12 | INTERFACE_PACKED_ID(IReport, 6, 0); 13 | INTERFACE_PACKED_ID(IWinKernel , 7, 0); 14 | INTERFACE_PACKED_ID(IWinUser, 8, 0); 15 | 16 | } -------------------------------------------------------------------------------- /common/OACBuffer.h: -------------------------------------------------------------------------------- 1 | namespace OAC 2 | { 3 | 4 | class OACBuffer 5 | { 6 | public: 7 | virtual ~OACBuffer() = 0; 8 | 9 | bool Alloc(size_t bytesCount) = 0; 10 | 11 | bool GetSpace(size_t bytesCount) = 0; 12 | 13 | void Release() = 0; 14 | 15 | void *GetRawPtr() const = 0; 16 | 17 | void *GetSize() const = 0; 18 | 19 | void BeginAccess() = 0; 20 | 21 | void EndAccess() = 0; 22 | 23 | bool IsAccessable() const = 0; 24 | }; 25 | 26 | } -------------------------------------------------------------------------------- /OACEngine/Interface/IAlerter.h: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | namespace OAC 5 | { 6 | 7 | const int AlertLevel_Log = 1; 8 | const int AlertLevel_Info = 2; 9 | const int AlertLevel_Warning = 3; 10 | const int AlertLevel_Error = 4; 11 | 12 | using fnOnAlertCallback = void(*)(int level, int code, const char *msg, const char **argv, int argc, void *context); 13 | 14 | class IAlerter : public IBaseInterface 15 | { 16 | public: 17 | void Alert(int level, int code, const char *msg, const char **argv, int argc) = 0; 18 | 19 | void RegisterOnAlertCallback(const fnOnAlertCallback &callback, void *context) = 0; 20 | }; 21 | 22 | } -------------------------------------------------------------------------------- /OACEngine/Interface/IReport.h: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | namespace OAC 5 | { 6 | 7 | /* return false to block the data from report */ 8 | using fnOnBeforeReportCallback = bool(*)(OACReportMessage *data, void *context); 9 | 10 | using fnOnAfterReportCallback = void(*)(OACReportMessage *data, void *context); 11 | 12 | class IReport : public IBaseInterface 13 | { 14 | public: 15 | void Report(OACReportMessage *data) = 0; 16 | 17 | void RegisterOnBeforeReportCallback(const fnOnBeforeReportCallback &callback, void *context) = 0; 18 | 19 | void RegisterOnAfterReportCallback(const fnOnAfterReportCallback &callback, void *context) = 0; 20 | }; 21 | 22 | } -------------------------------------------------------------------------------- /common/OACMessage.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace OAC 4 | { 5 | 6 | class OACMessage 7 | { 8 | public: 9 | virtual ~OACMessage() = 0; 10 | 11 | virtual void Release() = 0; 12 | 13 | virtual void Parse(OACBuffer *buffer) = 0; 14 | 15 | virtual void Serialize(OACBuffer *buffer) = 0; 16 | 17 | virtual int GetProtocolId() const = 0; 18 | 19 | virtual bool IsReportMessage() const = 0; 20 | }; 21 | 22 | class OACReportMessage : public OACMessage 23 | { 24 | public: 25 | const int Qos_Unreliable = 0; 26 | const int Qos_Reliable = 1; 27 | const int Qos_Reliable_Once = 2; 28 | 29 | int GetQosLevel() const = 0; 30 | 31 | void Serialize(OACBuffer *buffer) = 0; 32 | 33 | virtual bool IsReportMessage() const 34 | { 35 | return true; 36 | } 37 | }; 38 | 39 | } -------------------------------------------------------------------------------- /OACEngine/Interface/IFileSystem.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace OAC 4 | { 5 | 6 | using fnReadFileCallback = void(*)(OACBuffer *output, uint64_t bytesRead, void *context); 7 | 8 | using fnQueryFileSizeCallback = void(*)(uint64_t fileSize, void *context); 9 | 10 | using OACFileHandle_t = void *; 11 | 12 | class IFileSystem : public IBaseInterface 13 | { 14 | public: 15 | void Initialize() = 0; 16 | 17 | void Shutdown() = 0; 18 | 19 | //Synchronous API 20 | 21 | OACFileHandle_t Open(OACString_t *fileName) = 0; 22 | 23 | void Close(OACFileHandle_t handle) = 0; 24 | 25 | uint64_t Read(OACBuffer* output, uint64_t bytesToRead, OACFileHandle_t fileHandle) = 0; 26 | 27 | uint64_t QuerySize(OACFileHandle_t fileHandle) = 0; 28 | 29 | //Asynchronous API 30 | 31 | void AsyncRead(fnReadFileCallback callback, void *context, uint64_t bytesToRead, OACFileHandle_t fileHandle) = 0; 32 | 33 | void AsyncQuerySize(fnQueryFileSizeCallback callback, void *context, OACFileHandle_t fileHandle) = 0; 34 | }; 35 | 36 | } -------------------------------------------------------------------------------- /OACEngine/Interface/INetwork.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace OAC 4 | { 5 | 6 | using fnOnConnectedCallback = void(*)(void *context); 7 | 8 | using fnOnDisconnectedCallback = void(*)(QACString *reason, void *context); 9 | 10 | using fnOnMessageCallback = void(*)(OACBuffer *buffer, void *context); 11 | 12 | class INetwork : public IBaseInterface 13 | { 14 | public: 15 | void Initialize() = 0; 16 | 17 | //Block here until all sockets completely shutdown 18 | void Shutdown() = 0; 19 | 20 | /* Asynchronously connect to server */ 21 | void Connect() = 0; 22 | 23 | /* Disconnect from server */ 24 | void Disconnect() = 0; 25 | 26 | /* Call this every frame */ 27 | void Poll() = 0; 28 | 29 | /* Send buffer bytes to server */ 30 | void Send(OACBuffer *buffer, bool reilable) = 0; 31 | 32 | void RegisterOnConnectedCallback(const fnOnConnectedCallback &callback, void *context) = 0; 33 | 34 | void RegisterOnDisconnectedCallback(const fnOnDisconnectedCallback &callback, void *context) = 0; 35 | 36 | void RegisterOnMessageCallback(const fnOnMessageCallback &callback, void *context) = 0; 37 | }; 38 | 39 | } --------------------------------------------------------------------------------