From 2f14427e3406b3722bbf944cd64693a6f1db26bc Mon Sep 17 00:00:00 2001 From: KN4CK3R Date: Sun, 11 Dec 2016 18:07:13 +0100 Subject: [PATCH 01/14] Sync with ReClass.NET changes. --- PipeServer/MemoryHelper.cpp | 74 ++++++++++---- PipeServer/MessageClient.cpp | 2 +- PipeServer/Messages.cpp | 4 +- PipeServer/Messages.hpp | 104 ++++++++++--------- PipeServer/PipeServer.vcxproj | 1 + PipeServer/PipeServer.vcxproj.filters | 1 + PipeServer/ReClassNET_Plugin.hpp | 138 ++++++++++++++++++++++++++ PipeServer/dllmain.cpp | 20 ++-- Plugin/MemoryPipePluginExt.cs | 43 +++++--- Plugin/MessageClient.cs | 2 +- Plugin/Messages.cs | 75 +++++++------- 11 files changed, 319 insertions(+), 145 deletions(-) create mode 100644 PipeServer/ReClassNET_Plugin.hpp diff --git a/PipeServer/MemoryHelper.cpp b/PipeServer/MemoryHelper.cpp index 1a4e93a..62767e7 100644 --- a/PipeServer/MemoryHelper.cpp +++ b/PipeServer/MemoryHelper.cpp @@ -4,6 +4,8 @@ #include #include +#include "ReClassNET_Plugin.hpp" + bool IsValidMemoryRange(LPCVOID address, int length) { auto endAddress = static_cast(address) + length; @@ -72,19 +74,9 @@ bool WriteMemory(LPVOID address, const std::vector& buffer) return false; } //--------------------------------------------------------------------------- -void EnumerateRemoteSectionsAndModules(const std::function& moduleCallback, const std::function& sectionCallback) +void EnumerateRemoteSectionsAndModules(const std::function& moduleCallback, const std::function& sectionCallback) { - struct SectionInfo - { - LPVOID BaseAddress; - SIZE_T RegionSize; - WCHAR Name[IMAGE_SIZEOF_SHORT_NAME + 1]; - DWORD State; - DWORD Protection; - DWORD Type; - WCHAR ModulePath[260]; - }; - std::vector sections; + std::vector sections; // First enumerate all memory sections. MEMORY_BASIC_INFORMATION memInfo = { 0 }; @@ -94,12 +86,50 @@ void EnumerateRemoteSectionsAndModules(const std::function(peb->LoaderData->InLoadOrderModuleList.Flink); while (ldr->BaseAddress != nullptr) { - moduleCallback(ldr->BaseAddress, (const void*)(intptr_t)ldr->SizeOfImage, ldr->FullDllName.Buffer); + moduleCallback((RC_Pointer)ldr->BaseAddress, (RC_Pointer)(intptr_t)ldr->SizeOfImage, ldr->FullDllName.Buffer); - auto it = std::lower_bound(std::begin(sections), std::end(sections), ldr->BaseAddress, [§ions](const SectionInfo& lhs, const LPVOID& rhs) + auto it = std::lower_bound(std::begin(sections), std::end(sections), ldr->BaseAddress, [§ions](const auto& lhs, const LPVOID& rhs) { return lhs.BaseAddress < rhs; }); @@ -176,7 +206,7 @@ void EnumerateRemoteSectionsAndModules(const std::functionBaseAddress + (intptr_t)sectionHeader->VirtualAddress; for (auto j = it; j != std::end(sections); ++j) { - if (sectionAddress >= (intptr_t)j->BaseAddress && sectionAddress < (intptr_t)j->BaseAddress + (intptr_t)j->RegionSize) + if (sectionAddress >= (intptr_t)j->BaseAddress && sectionAddress < (intptr_t)j->BaseAddress + (intptr_t)j->Size) { // Copy the name because it is not null padded. char buffer[IMAGE_SIZEOF_SHORT_NAME + 1] = { 0 }; @@ -184,7 +214,7 @@ void EnumerateRemoteSectionsAndModules(const std::functionName, IMAGE_SIZEOF_SHORT_NAME, buffer, _TRUNCATE); - std::memcpy(j->ModulePath, ldr->FullDllName.Buffer, sizeof(SectionInfo::ModulePath)); + std::memcpy(j->ModulePath, ldr->FullDllName.Buffer, sizeof(EnumerateRemoteSectionData::ModulePath)); break; } } @@ -195,7 +225,7 @@ void EnumerateRemoteSectionsAndModules(const std::function&); extern bool WriteMemory(LPVOID, const std::vector&); -extern void EnumerateRemoteSectionsAndModules(const std::function&, const std::function&); +extern void EnumerateRemoteSectionsAndModules(const std::function&, const std::function&); bool OpenProcessMessage::Handle(MessageClient& client) { @@ -56,7 +56,7 @@ bool EnumerateRemoteSectionsAndModulesMessage::Handle(MessageClient& client) { EnumerateRemoteSectionsAndModules( [&](auto p1, auto p2, auto p3) { client.Send(EnumerateRemoteModuleCallbackMessage(p1, p2, std::move(p3))); }, - [&](auto p1, auto p2, auto p3, auto p4, auto p5, auto p6, auto p7) { client.Send(EnumerateRemoteSectionCallbackMessage(p1, p2, std::move(p3), p4, p5, p6, std::move(p7))); } + [&](auto p1, auto p2, auto p3, auto p4, auto p5, auto p6) { client.Send(EnumerateRemoteSectionCallbackMessage(p1, p2, p3, p4, std::move(p5), std::move(p6))); } ); // Report enumeration complete to client. diff --git a/PipeServer/Messages.hpp b/PipeServer/Messages.hpp index d2c54a3..196a756 100644 --- a/PipeServer/Messages.hpp +++ b/PipeServer/Messages.hpp @@ -2,6 +2,8 @@ #include +#include "ReClassNET_Plugin.hpp" + #include "BinaryReader.hpp" #include "BinaryWriter.hpp" @@ -10,7 +12,7 @@ class MessageClient; class IMessage { public: - virtual int GetType() const = 0; + virtual int GetMessageType() const = 0; virtual void ReadFrom(BinaryReader& br) = 0; virtual void WriteTo(BinaryWriter& bw) const = 0; @@ -24,8 +26,8 @@ class IMessage class StatusMessage : public IMessage { public: - static const int StaticType = 1; - virtual int GetType() const override { return StaticType; } + static const int StaticMessageType = 1; + virtual int GetMessageType() const override { return StaticMessageType; } bool GetSuccess() const { return success; } @@ -58,8 +60,8 @@ class StatusMessage : public IMessage class OpenProcessMessage : public IMessage { public: - static const int StaticType = 2; - virtual int GetType() const override { return StaticType; } + static const int StaticMessageType = 2; + virtual int GetMessageType() const override { return StaticMessageType; } virtual void ReadFrom(BinaryReader& reader) override { @@ -77,8 +79,8 @@ class OpenProcessMessage : public IMessage class CloseProcessMessage : public IMessage { public: - static const int StaticType = 3; - virtual int GetType() const override { return StaticType; } + static const int StaticMessageType = 3; + virtual int GetMessageType() const override { return StaticMessageType; } virtual void ReadFrom(BinaryReader& reader) override { @@ -96,8 +98,8 @@ class CloseProcessMessage : public IMessage class IsValidMessage : public IMessage { public: - static const int StaticType = 4; - virtual int GetType() const override { return StaticType; } + static const int StaticMessageType = 4; + virtual int GetMessageType() const override { return StaticMessageType; } virtual void ReadFrom(BinaryReader& reader) override { @@ -115,8 +117,8 @@ class IsValidMessage : public IMessage class ReadMemoryMessage : public IMessage { public: - static const int StaticType = 5; - virtual int GetType() const override { return StaticType; } + static const int StaticMessageType = 5; + virtual int GetMessageType() const override { return StaticMessageType; } const void* GetAddress() const { return address; } const int GetSize() const { return size; } @@ -157,8 +159,8 @@ class ReadMemoryMessage : public IMessage class ReadMemoryDataMessage : public IMessage { public: - static const int StaticType = 6; - virtual int GetType() const override { return StaticType; } + static const int StaticMessageType = 6; + virtual int GetMessageType() const override { return StaticMessageType; } const std::vector& GetData() const { return data; } @@ -192,8 +194,8 @@ class ReadMemoryDataMessage : public IMessage class WriteMemoryMessage : public IMessage { public: - static const int StaticType = 7; - virtual int GetType() const override { return StaticType; } + static const int StaticMessageType = 7; + virtual int GetMessageType() const override { return StaticMessageType; } const void* GetAddress() const { return address; } const std::vector& GetData() const { return data; } @@ -234,8 +236,8 @@ class WriteMemoryMessage : public IMessage class EnumerateRemoteSectionsAndModulesMessage : public IMessage { public: - static const int StaticType = 8; - virtual int GetType() const override { return StaticType; } + static const int StaticMessageType = 8; + virtual int GetMessageType() const override { return StaticMessageType; } virtual void ReadFrom(BinaryReader& reader) override { @@ -253,34 +255,31 @@ class EnumerateRemoteSectionsAndModulesMessage : public IMessage class EnumerateRemoteSectionCallbackMessage : public IMessage { public: - static const int StaticType = 9; - virtual int GetType() const override { return StaticType; } + static const int StaticMessageType = 9; + virtual int GetMessageType() const override { return StaticMessageType; } - const void* GetBaseAddress() const { return baseAddress; } - const void* GetRegionSize() const { return regionSize; } + RC_Pointer GetBaseAddress() const { return baseAddress; } + RC_Pointer GetRegionSize() const { return size; } + SectionType GetType() const { return type; } + SectionProtection GetProtection() const { return protection; } const std::wstring& GetName() const { return name; } - int GetState() const { return state; } - int GetProtection() const { return protection; } - int GetSectionType() const { return sectionType; } const std::wstring& GetModulePath() const { return modulePath; } EnumerateRemoteSectionCallbackMessage() : baseAddress(0), - regionSize(0), - state(0), - protection(0), - sectionType(0) + size(0), + type(SectionType::Unknown), + protection(SectionProtection::NoAccess) { } - EnumerateRemoteSectionCallbackMessage(const void* _baseAddress, const void* _regionSize, std::wstring&& _name, int _state, int _protection, int _type, std::wstring&& _modulePath) + EnumerateRemoteSectionCallbackMessage(RC_Pointer _baseAddress, RC_Pointer _size, SectionType _type, SectionProtection _protection, std::wstring&& _name, std::wstring&& _modulePath) : baseAddress(_baseAddress), - regionSize(_regionSize), - name(std::move(_name)), - state(_state), + size(_size), + type(_type), protection(_protection), - sectionType(_type), + name(std::move(_name)), modulePath(std::move(_modulePath)) { @@ -289,55 +288,52 @@ class EnumerateRemoteSectionCallbackMessage : public IMessage virtual void ReadFrom(BinaryReader& reader) override { baseAddress = reader.ReadIntPtr(); - regionSize = reader.ReadIntPtr(); + size = reader.ReadIntPtr(); + type = (SectionType)reader.ReadInt32(); + protection = (SectionProtection)reader.ReadInt32(); name = reader.ReadString(); - state = reader.ReadInt32(); - protection = reader.ReadInt32(); - sectionType = reader.ReadInt32(); modulePath = reader.ReadString(); } virtual void WriteTo(BinaryWriter& writer) const override { writer.Write(baseAddress); - writer.Write(regionSize); + writer.Write(size); + writer.Write((int)type); + writer.Write((int)protection); writer.Write(name); - writer.Write(state); - writer.Write(protection); - writer.Write(sectionType); writer.Write(modulePath); } private: - const void* baseAddress; - const void* regionSize; + RC_Pointer baseAddress; + RC_Pointer size; + SectionType type; + SectionProtection protection; std::wstring name; - int state; - int protection; - int sectionType; std::wstring modulePath; }; //--------------------------------------------------------------------------- class EnumerateRemoteModuleCallbackMessage : public IMessage { public: - static const int StaticType = 10; - virtual int GetType() const override { return StaticType; } + static const int StaticMessageType = 10; + virtual int GetMessageType() const override { return StaticMessageType; } const void* GetBaseAddress() const { return baseAddress; } - const void* GetRegionSize() const { return regionSize; } + const void* GetRegionSize() const { return size; } const std::wstring& GetModulePath() const { return modulePath; } EnumerateRemoteModuleCallbackMessage() : baseAddress(0), - regionSize(0) + size(0) { } EnumerateRemoteModuleCallbackMessage(const void* _baseAddress, const void* _regionSize, std::wstring&& _modulePath) : baseAddress(_baseAddress), - regionSize(_regionSize), + size(_regionSize), modulePath(std::move(_modulePath)) { @@ -346,20 +342,20 @@ class EnumerateRemoteModuleCallbackMessage : public IMessage virtual void ReadFrom(BinaryReader& reader) override { baseAddress = reader.ReadIntPtr(); - regionSize = reader.ReadIntPtr(); + size = reader.ReadIntPtr(); modulePath = reader.ReadString(); } virtual void WriteTo(BinaryWriter& writer) const override { writer.Write(baseAddress); - writer.Write(regionSize); + writer.Write(size); writer.Write(modulePath); } private: const void* baseAddress; - const void* regionSize; + const void* size; std::wstring modulePath; }; //--------------------------------------------------------------------------- diff --git a/PipeServer/PipeServer.vcxproj b/PipeServer/PipeServer.vcxproj index cec2389..6699729 100644 --- a/PipeServer/PipeServer.vcxproj +++ b/PipeServer/PipeServer.vcxproj @@ -165,6 +165,7 @@ + diff --git a/PipeServer/PipeServer.vcxproj.filters b/PipeServer/PipeServer.vcxproj.filters index d0861f2..b157156 100644 --- a/PipeServer/PipeServer.vcxproj.filters +++ b/PipeServer/PipeServer.vcxproj.filters @@ -22,5 +22,6 @@ + \ No newline at end of file diff --git a/PipeServer/ReClassNET_Plugin.hpp b/PipeServer/ReClassNET_Plugin.hpp new file mode 100644 index 0000000..472e430 --- /dev/null +++ b/PipeServer/ReClassNET_Plugin.hpp @@ -0,0 +1,138 @@ +#pragma once + +#include + +// Types + +using RC_Pointer = void*; +using RC_Size = size_t; +using RC_UnicodeChar = wchar_t; + +// Constants + +const int PATH_MAXIMUM_LENGTH = 260; + +// Enumerations + +enum class RequestFunction +{ + IsProcessValid, + OpenRemoteProcess, + CloseRemoteProcess, + ReadRemoteMemory, + WriteRemoteMemory, + EnumerateProcesses, + EnumerateRemoteSectionsAndModules, + DisassembleCode, + ControlRemoteProcess +}; + +enum class ProcessAccess +{ + Read, + Write, + Full +}; + +enum class SectionType +{ + Unknown, + + Private, + Mapped, + Image +}; + +enum class SectionProtection +{ + NoAccess = 0, + + Read = 1, + Write = 2, + Execute = 4, + + Guard = 8 +}; + +inline SectionProtection operator|(SectionProtection lhs, SectionProtection rhs) +{ + using T = std::underlying_type_t; + + return static_cast(static_cast(lhs) | static_cast(rhs)); +} + +inline SectionProtection& operator|=(SectionProtection& lhs, SectionProtection rhs) +{ + using T = std::underlying_type_t; + + lhs = static_cast(static_cast(lhs) | static_cast(rhs)); + + return lhs; +} + +enum class ControlRemoteProcessAction +{ + Suspend, + Resume, + Terminate +}; + +// Structures + +struct EnumerateProcessData +{ + RC_Size Id; + RC_UnicodeChar ModulePath[PATH_MAXIMUM_LENGTH]; +}; + +struct InstructionData +{ + int Length; + RC_UnicodeChar Instruction[64]; +}; + +struct EnumerateRemoteSectionData +{ + RC_Pointer BaseAddress; + RC_Size Size; + SectionType Type; + SectionProtection Protection; + RC_UnicodeChar Name[16]; + RC_UnicodeChar ModulePath[PATH_MAXIMUM_LENGTH]; +}; + +struct EnumerateRemoteModuleData +{ + RC_Pointer BaseAddress; + RC_Size Size; + RC_UnicodeChar Path[PATH_MAXIMUM_LENGTH]; +}; + +// Callbacks + +typedef RC_Pointer(__stdcall *RequestFunctionPtrCallback)(RequestFunction request); + +typedef void(__stdcall *EnumerateProcessCallback)(EnumerateProcessData* data); + +typedef void(__stdcall EnumerateRemoteSectionsCallback)(EnumerateRemoteSectionData* data); +typedef void(__stdcall EnumerateRemoteModulesCallback)(EnumerateRemoteModuleData* data); + +// Delegates + +typedef bool(__stdcall *IsProcessValid_Delegate)(RC_Pointer handle); + +typedef RC_Pointer(__stdcall *OpenRemoteProcess_Delegate)(RC_Size processId, ProcessAccess desiredAccess); + +typedef void(__stdcall *CloseRemoteProcess_Delegate)(RC_Pointer handle); + +typedef bool(__stdcall *ReadRemoteMemory_Delegate)(RC_Pointer handle, RC_Pointer address, RC_Pointer buffer, RC_Size size); + +typedef bool(__stdcall *WriteRemoteMemory_Delegate)(RC_Pointer handle, RC_Pointer address, RC_Pointer buffer, RC_Size size); + +typedef void(__stdcall *EnumerateProcesses_Delegate)(EnumerateProcessCallback callbackProcess); + +typedef void(__stdcall *EnumerateRemoteSectionsAndModules_Delegate)(RC_Pointer handle, EnumerateRemoteSectionsCallback callbackSection, EnumerateRemoteModulesCallback callbackModule); + +typedef bool(__stdcall *DisassembleCode_Delegate)(RC_Pointer address, RC_Size length, RC_Pointer virtualAddress, InstructionData* instruction); + +typedef void(__stdcall *ControlRemoteProcess_Delegate)(RC_Pointer handle, ControlRemoteProcessAction action); diff --git a/PipeServer/dllmain.cpp b/PipeServer/dllmain.cpp index 2c9ebea..62fd2e4 100644 --- a/PipeServer/dllmain.cpp +++ b/PipeServer/dllmain.cpp @@ -25,16 +25,16 @@ MessageClient CreateClient(NamedPipeServerStream& pipe) { MessageClient client(pipe); - client.RegisterMessage(StatusMessage::StaticType, []() { return std::make_unique(); }); - client.RegisterMessage(OpenProcessMessage::StaticType, []() { return std::make_unique(); }); - client.RegisterMessage(CloseProcessMessage::StaticType, []() { return std::make_unique(); }); - client.RegisterMessage(IsValidMessage::StaticType, []() { return std::make_unique(); }); - client.RegisterMessage(ReadMemoryMessage::StaticType, []() { return std::make_unique(); }); - client.RegisterMessage(ReadMemoryDataMessage::StaticType, []() { return std::make_unique(); }); - client.RegisterMessage(WriteMemoryMessage::StaticType, []() { return std::make_unique(); }); - client.RegisterMessage(EnumerateRemoteSectionsAndModulesMessage::StaticType, []() { return std::make_unique(); }); - client.RegisterMessage(EnumerateRemoteSectionCallbackMessage::StaticType, []() { return std::make_unique(); }); - client.RegisterMessage(EnumerateRemoteModuleCallbackMessage::StaticType, []() { return std::make_unique(); }); + client.RegisterMessage(StatusMessage::StaticMessageType, []() { return std::make_unique(); }); + client.RegisterMessage(OpenProcessMessage::StaticMessageType, []() { return std::make_unique(); }); + client.RegisterMessage(CloseProcessMessage::StaticMessageType, []() { return std::make_unique(); }); + client.RegisterMessage(IsValidMessage::StaticMessageType, []() { return std::make_unique(); }); + client.RegisterMessage(ReadMemoryMessage::StaticMessageType, []() { return std::make_unique(); }); + client.RegisterMessage(ReadMemoryDataMessage::StaticMessageType, []() { return std::make_unique(); }); + client.RegisterMessage(WriteMemoryMessage::StaticMessageType, []() { return std::make_unique(); }); + client.RegisterMessage(EnumerateRemoteSectionsAndModulesMessage::StaticMessageType, []() { return std::make_unique(); }); + client.RegisterMessage(EnumerateRemoteSectionCallbackMessage::StaticMessageType, []() { return std::make_unique(); }); + client.RegisterMessage(EnumerateRemoteModuleCallbackMessage::StaticMessageType, []() { return std::make_unique(); }); return client; } diff --git a/Plugin/MemoryPipePluginExt.cs b/Plugin/MemoryPipePluginExt.cs index 311e468..7ac59ce 100644 --- a/Plugin/MemoryPipePluginExt.cs +++ b/Plugin/MemoryPipePluginExt.cs @@ -160,7 +160,7 @@ private static IntPtr OpenRemoteProcess(int pid, int desiredAccess) client.RegisteredMessages.Add(ReadMemoryDataMessage.StaticType, () => new ReadMemoryDataMessage()); client.RegisteredMessages.Add(WriteMemoryMessage.StaticType, () => new WriteMemoryMessage()); client.RegisteredMessages.Add(EnumerateRemoteSectionsAndModulesMessage.StaticType, () => new EnumerateRemoteSectionsAndModulesMessage()); - client.RegisteredMessages.Add(EnumerateRemoteSectionCallbackMessage.StaticType, () => new EnumerateRemoteSectionCallbackMessage()); + client.RegisteredMessages.Add(EnumerateRemoteSectionCallbackMessage.StaticMessageType, () => new EnumerateRemoteSectionCallbackMessage()); client.RegisteredMessages.Add(EnumerateRemoteModuleCallbackMessage.StaticType, () => new EnumerateRemoteModuleCallbackMessage()); var handle = pipe.SafePipeHandle.DangerousGetHandle(); @@ -327,7 +327,13 @@ private static void EnumerateProcesses(EnumerateProcessCallback callbackProcess) if (platform.ToLower() == "x86") #endif { - callbackProcess(pipe.GetHashCode(), pipe); + var data = new EnumerateProcessData + { + Id = (IntPtr)pipe.GetHashCode(), + Path = pipe + }; + + callbackProcess(ref data); } } } @@ -373,25 +379,30 @@ private static void EnumerateRemoteSectionsAndModules(IntPtr process, EnumerateR var callbackSectionMessage = message as EnumerateRemoteSectionCallbackMessage; if (callbackSectionMessage != null) { - callbackSection?.Invoke( - callbackSectionMessage.BaseAddress, - callbackSectionMessage.RegionSize, - callbackSectionMessage.Name, - callbackSectionMessage.State, - callbackSectionMessage.Protection, - callbackSectionMessage.SectionType, - callbackSectionMessage.ModulePath - ); + var data = new EnumerateRemoteSectionData + { + BaseAddress = callbackSectionMessage.BaseAddress, + Size = callbackSectionMessage.Size, + Type = callbackSectionMessage.Type, + Protection = callbackSectionMessage.Protection, + Name = callbackSectionMessage.Name, + ModulePath = callbackSectionMessage.ModulePath + }; + + callbackSection?.Invoke(ref data); } var callbackModuleMessage = message as EnumerateRemoteModuleCallbackMessage; if (callbackModuleMessage != null) { - callbackModule?.Invoke( - callbackModuleMessage.BaseAddress, - callbackModuleMessage.RegionSize, - callbackModuleMessage.ModulePath - ); + var data = new EnumerateRemoteModuleData + { + BaseAddress = callbackModuleMessage.BaseAddress, + Size = callbackModuleMessage.Size, + Path = callbackModuleMessage.Path + }; + + callbackModule?.Invoke(ref data); } } } diff --git a/Plugin/MessageClient.cs b/Plugin/MessageClient.cs index 0aaf6de..00e9f84 100644 --- a/Plugin/MessageClient.cs +++ b/Plugin/MessageClient.cs @@ -61,7 +61,7 @@ public void Send(IMessage message) { using (var bw = new BinaryWriter(ms, Encoding.Unicode, true)) { - bw.Write(message.Type); + bw.Write(message.MessageType); message.WriteTo(bw); } diff --git a/Plugin/Messages.cs b/Plugin/Messages.cs index 1f0fdda..90a66f6 100644 --- a/Plugin/Messages.cs +++ b/Plugin/Messages.cs @@ -1,13 +1,14 @@ using System; using System.Diagnostics.Contracts; using System.IO; +using ReClassNET.Memory; using ReClassNET.Util; namespace MemoryPipePlugin { interface IMessage { - int Type { get; } + int MessageType { get; } void ReadFrom(BinaryReader reader); void WriteTo(BinaryWriter writer); @@ -16,7 +17,7 @@ interface IMessage [ContractClassFor(typeof(IMessage))] internal class ICodeGeneratorContract : IMessage { - public int Type + public int MessageType { get { @@ -42,7 +43,7 @@ public void WriteTo(BinaryWriter writer) class StatusMessage : IMessage { public static int StaticType = 1; - public int Type => StaticType; + public int MessageType => StaticType; public bool Success { get; private set; } @@ -70,7 +71,7 @@ public void WriteTo(BinaryWriter writer) class OpenProcessMessage : IMessage { public static int StaticType = 2; - public int Type => StaticType; + public int MessageType => StaticType; public void ReadFrom(BinaryReader reader) { @@ -86,7 +87,7 @@ public void WriteTo(BinaryWriter writer) class CloseProcessMessage : IMessage { public static int StaticType = 3; - public int Type => StaticType; + public int MessageType => StaticType; public void ReadFrom(BinaryReader reader) { @@ -102,7 +103,7 @@ public void WriteTo(BinaryWriter writer) class IsValidMessage : IMessage { public static int StaticType = 4; - public int Type => StaticType; + public int MessageType => StaticType; public void ReadFrom(BinaryReader reader) { @@ -118,7 +119,7 @@ public void WriteTo(BinaryWriter writer) class ReadMemoryMessage : IMessage { public static int StaticType = 5; - public int Type => StaticType; + public int MessageType => StaticType; public IntPtr Address { get; private set; } public int Size { get; private set; } @@ -150,7 +151,7 @@ public void WriteTo(BinaryWriter writer) class ReadMemoryDataMessage : IMessage { public static int StaticType = 6; - public int Type => StaticType; + public int MessageType => StaticType; public byte[] Data { get; private set; } @@ -180,7 +181,7 @@ public void WriteTo(BinaryWriter writer) class WriteMemoryMessage : IMessage { public static int StaticType = 7; - public int Type => StaticType; + public int MessageType => StaticType; public IntPtr Address { get; private set; } public byte[] Data { get; private set; } @@ -214,7 +215,7 @@ public void WriteTo(BinaryWriter writer) class EnumerateRemoteSectionsAndModulesMessage : IMessage { public static int StaticType = 8; - public int Type => StaticType; + public int MessageType => StaticType; public void ReadFrom(BinaryReader reader) { @@ -229,15 +230,14 @@ public void WriteTo(BinaryWriter writer) class EnumerateRemoteSectionCallbackMessage : IMessage { - public static int StaticType = 9; - public int Type => StaticType; + public static int StaticMessageType = 9; + public int MessageType => StaticMessageType; public IntPtr BaseAddress { get; private set; } - public IntPtr RegionSize { get; private set; } + public IntPtr Size { get; private set; } + public SectionType Type { get; private set; } + public SectionProtection Protection { get; private set; } public string Name { get; private set; } - public NativeMethods.StateEnum State { get; private set; } - public NativeMethods.AllocationProtectEnum Protection { get; private set; } - public NativeMethods.TypeEnum SectionType { get; private set; } public string ModulePath { get; private set; } public EnumerateRemoteSectionCallbackMessage() @@ -245,36 +245,33 @@ public EnumerateRemoteSectionCallbackMessage() } - public EnumerateRemoteSectionCallbackMessage(IntPtr baseAddress, IntPtr regionSize, string name, NativeMethods.StateEnum state, NativeMethods.AllocationProtectEnum protection, NativeMethods.TypeEnum type, string modulePath) + public EnumerateRemoteSectionCallbackMessage(IntPtr baseAddress, IntPtr regionSize, SectionType type, SectionProtection protection, string name, string modulePath) { BaseAddress = baseAddress; - RegionSize = regionSize; - Name = name; - State = state; + Size = regionSize; + Type = type; Protection = protection; - SectionType = type; + Name = name; ModulePath = modulePath; } public void ReadFrom(BinaryReader reader) { BaseAddress = reader.ReadIntPtr(); - RegionSize = reader.ReadIntPtr(); + Size = reader.ReadIntPtr(); + Type = (SectionType)reader.ReadInt32(); + Protection = (SectionProtection)reader.ReadInt32(); Name = reader.ReadString(); - State = (NativeMethods.StateEnum)reader.ReadInt32(); - Protection = (NativeMethods.AllocationProtectEnum)reader.ReadInt32(); - SectionType = (NativeMethods.TypeEnum)reader.ReadInt32(); ModulePath = reader.ReadString(); } public void WriteTo(BinaryWriter writer) { writer.Write(BaseAddress); - writer.Write(RegionSize); - writer.Write(Name); - writer.Write((int)State); + writer.Write(Size); + writer.Write((int)Type); writer.Write((int)Protection); - writer.Write((int)SectionType); + writer.Write(Name); writer.Write(ModulePath); } } @@ -282,36 +279,36 @@ public void WriteTo(BinaryWriter writer) class EnumerateRemoteModuleCallbackMessage : IMessage { public static int StaticType = 10; - public int Type => StaticType; + public int MessageType => StaticType; public IntPtr BaseAddress { get; private set; } - public IntPtr RegionSize { get; private set; } - public string ModulePath { get; private set; } + public IntPtr Size { get; private set; } + public string Path { get; private set; } public EnumerateRemoteModuleCallbackMessage() { } - public EnumerateRemoteModuleCallbackMessage(IntPtr baseAddress, IntPtr regionSize, string modulePath) + public EnumerateRemoteModuleCallbackMessage(IntPtr baseAddress, IntPtr regionSize, string path) { BaseAddress = baseAddress; - RegionSize = regionSize; - ModulePath = modulePath; + Size = regionSize; + Path = path; } public void ReadFrom(BinaryReader reader) { BaseAddress = reader.ReadIntPtr(); - RegionSize = reader.ReadIntPtr(); - ModulePath = reader.ReadString(); + Size = reader.ReadIntPtr(); + Path = reader.ReadString(); } public void WriteTo(BinaryWriter writer) { writer.Write(BaseAddress); - writer.Write(RegionSize); - writer.Write(ModulePath); + writer.Write(Size); + writer.Write(Path); } } } From 5dcc0246b6f36e6996ea4637d8b69d4cd1913642 Mon Sep 17 00:00:00 2001 From: KN4CK3R Date: Tue, 20 Dec 2016 02:05:14 +0100 Subject: [PATCH 02/14] Sync with ReClass.NET changes. --- Plugin/MemoryPipePlugin.csproj | 8 ---- Plugin/MemoryPipePluginExt.cs | 86 +++++++++++++++++++++++----------- Plugin/packages.config | 4 -- 3 files changed, 58 insertions(+), 40 deletions(-) delete mode 100644 Plugin/packages.config diff --git a/Plugin/MemoryPipePlugin.csproj b/Plugin/MemoryPipePlugin.csproj index f7e2668..9cd484d 100644 --- a/Plugin/MemoryPipePlugin.csproj +++ b/Plugin/MemoryPipePlugin.csproj @@ -56,10 +56,6 @@ - - ..\packages\UnmanagedExports.1.2.7\lib\net\RGiesecke.DllExport.Metadata.dll - False - @@ -95,14 +91,10 @@ Designer - - - -