From 3047edc22b834f89b5f8b08f61de82aa41803ec9 Mon Sep 17 00:00:00 2001 From: "Mr. eXoDia" Date: Fri, 14 Mar 2014 21:42:08 +0100 Subject: [PATCH] - added function EngineCheckStructAlignment (resolved issue #33) --- SDK/C/TitanEngine.h | 15 +++++++++ SDK/CPP/TitanEngine.h | 15 +++++++++ SDK/CPP/TitanEngine.hpp | 22 +++++++++++++ TitanEngine/TitanEngine.Engine.cpp | 41 ++++++++++++++++++++++++- TitanEngine/TitanEngine.def | 1 + TitanEngine/TitanEngine.vcxproj.filters | 2 +- TitanEngine/definitions.h | 1 + TitanEngine/stdafx.h | 21 +++++++++++++ 8 files changed, 116 insertions(+), 2 deletions(-) diff --git a/SDK/C/TitanEngine.h b/SDK/C/TitanEngine.h index 9cdc845..64e7263 100644 --- a/SDK/C/TitanEngine.h +++ b/SDK/C/TitanEngine.h @@ -13,6 +13,20 @@ // Global.Constant.Structure.Declaration: // Engine.External: +#define UE_STRUCT_PE32STRUCT 1 +#define UE_STRUCT_PE64STRUCT 2 +#define UE_STRUCT_PESTRUCT 3 +#define UE_STRUCT_IMPORTENUMDATA 4 +#define UE_STRUCT_THREAD_ITEM_DATA 5 +#define UE_STRUCT_LIBRARY_ITEM_DATA 6 +#define UE_STRUCT_LIBRARY_ITEM_DATAW 7 +#define UE_STRUCT_PROCESS_ITEM_DATA 8 +#define UE_STRUCT_HANDLERARRAY 9 +#define UE_STRUCT_PLUGININFORMATION 10 +#define UE_STRUCT_HOOK_ENTRY 11 +#define UE_STRUCT_FILE_STATUS_INFO 12 +#define UE_STRUCT_FILE_FIX_INFO 13 + #define UE_ACCESS_READ 0 #define UE_ACCESS_WRITE 1 #define UE_ACCESS_ALL 2 @@ -920,6 +934,7 @@ __declspec(dllexport) bool TITCALL EngineFakeMissingDependencies(HANDLE hProcess __declspec(dllexport) bool TITCALL EngineDeleteCreatedDependencies(); __declspec(dllexport) bool TITCALL EngineCreateUnpackerWindow(char* WindowUnpackerTitle, char* WindowUnpackerLongTitle, char* WindowUnpackerName, char* WindowUnpackerAuthor, void* StartUnpackingCallBack); __declspec(dllexport) void TITCALL EngineAddUnpackerWindowLogMessage(char* szLogMessage); +__declspec(dllexport) bool TITCALL EngineCheckStructAlignment(DWORD StructureType, ULONG_PTR StructureSize); // Global.Engine.Extension.Functions: __declspec(dllexport) bool TITCALL ExtensionManagerIsPluginLoaded(char* szPluginName); __declspec(dllexport) bool TITCALL ExtensionManagerIsPluginEnabled(char* szPluginName); diff --git a/SDK/CPP/TitanEngine.h b/SDK/CPP/TitanEngine.h index 1c0c71d..ca4834d 100644 --- a/SDK/CPP/TitanEngine.h +++ b/SDK/CPP/TitanEngine.h @@ -13,6 +13,20 @@ // Global.Constant.Structure.Declaration: // Engine.External: +const BYTE UE_STRUCT_PE32STRUCT = 1; +const BYTE UE_STRUCT_PE64STRUCT = 2; +const BYTE UE_STRUCT_PESTRUCT = 3; +const BYTE UE_STRUCT_IMPORTENUMDATA = 4; +const BYTE UE_STRUCT_THREAD_ITEM_DATA = 5; +const BYTE UE_STRUCT_LIBRARY_ITEM_DATA = 6; +const BYTE UE_STRUCT_LIBRARY_ITEM_DATAW = 7; +const BYTE UE_STRUCT_PROCESS_ITEM_DATA = 8; +const BYTE UE_STRUCT_HANDLERARRAY = 9; +const BYTE UE_STRUCT_PLUGININFORMATION = 10; +const BYTE UE_STRUCT_HOOK_ENTRY = 11; +const BYTE UE_STRUCT_FILE_STATUS_INFO = 12; +const BYTE UE_STRUCT_FILE_FIX_INFO = 13; + const BYTE UE_ACCESS_READ = 0; const BYTE UE_ACCESS_WRITE = 1; const BYTE UE_ACCESS_ALL = 2; @@ -914,6 +928,7 @@ __declspec(dllimport) bool TITCALL EngineFakeMissingDependencies(HANDLE hProcess __declspec(dllimport) bool TITCALL EngineDeleteCreatedDependencies(); __declspec(dllimport) bool TITCALL EngineCreateUnpackerWindow(char* WindowUnpackerTitle, char* WindowUnpackerLongTitle, char* WindowUnpackerName, char* WindowUnpackerAuthor, void* StartUnpackingCallBack); __declspec(dllimport) void TITCALL EngineAddUnpackerWindowLogMessage(char* szLogMessage); +__declspec(dllexport) bool TITCALL EngineCheckStructAlignment(DWORD StructureType, ULONG_PTR StructureSize); // Global.Engine.Extension.Functions: __declspec(dllimport) bool TITCALL ExtensionManagerIsPluginLoaded(char* szPluginName); __declspec(dllimport) bool TITCALL ExtensionManagerIsPluginEnabled(char* szPluginName); diff --git a/SDK/CPP/TitanEngine.hpp b/SDK/CPP/TitanEngine.hpp index a8f8ecf..325d48a 100644 --- a/SDK/CPP/TitanEngine.hpp +++ b/SDK/CPP/TitanEngine.hpp @@ -23,6 +23,23 @@ namespace UE // ---- +enum eStructType : DWORD +{ + UE_STRUCT_PE32STRUCT = UE::UE_STRUCT_PE32STRUCT, + UE_STRUCT_PE64STRUCT = UE::UE_STRUCT_PE64STRUCT, + UE_STRUCT_PESTRUCT = UE::UE_STRUCT_PESTRUCT, + UE_STRUCT_IMPORTENUMDATA = UE::UE_STRUCT_IMPORTENUMDATA, + UE_STRUCT_THREAD_ITEM_DATA = UE::UE_STRUCT_THREAD_ITEM_DATA, + UE_STRUCT_LIBRARY_ITEM_DATA = UE::UE_STRUCT_LIBRARY_ITEM_DATA, + UE_STRUCT_LIBRARY_ITEM_DATAW = UE::UE_STRUCT_LIBRARY_ITEM_DATAW, + UE_STRUCT_PROCESS_ITEM_DATA = UE::UE_STRUCT_PROCESS_ITEM_DATA, + UE_STRUCT_HANDLERARRAY = UE::UE_STRUCT_HANDLERARRAY, + UE_STRUCT_PLUGININFORMATION = UE::UE_STRUCT_PLUGININFORMATION, + UE_STRUCT_HOOK_ENTRY = UE::UE_STRUCT_HOOK_ENTRY, + UE_STRUCT_FILE_STATUS_INFO = UE::UE_STRUCT_FILE_STATUS_INFO, + UE_STRUCT_FILE_FIX_INFO = UE::UE_STRUCT_FILE_FIX_INFO +}; + enum eHideLevel : DWORD { UE_HIDE_PEBONLY = UE::UE_HIDE_PEBONLY, @@ -2740,6 +2757,10 @@ protected: { return UE::EngineAddUnpackerWindowLogMessage(szLogMessage); } + static bool EngineCheckStructAlignment(DWORD StructureType, ULONG_PTR StructureSize) + { + return UE::EngineCheckStructAlignment(StructureType, StructureSize); + } }; class EngineA @@ -2773,6 +2794,7 @@ public: using EngineX::DeleteCreatedDependencies; using EngineX::CreateUnpackerWindow; using EngineX::AddUnpackerWindowLogMessage; + using EngineX::EngineCheckStructAlignment; }; class ExtensionManager diff --git a/TitanEngine/TitanEngine.Engine.cpp b/TitanEngine/TitanEngine.Engine.cpp index c286054..e07ff33 100644 --- a/TitanEngine/TitanEngine.Engine.cpp +++ b/TitanEngine/TitanEngine.Engine.cpp @@ -4,6 +4,7 @@ #include "Global.Mapping.h" #include "Global.Engine.Hook.h" #include "Global.Engine.GUI.h" +#include "Global.Engine.Extension.h" // TitanEngine.Engine.functions: __declspec(dllexport) void TITCALL SetEngineVariable(DWORD VariableId, bool VariableSet) @@ -56,6 +57,7 @@ __declspec(dllexport) bool TITCALL EngineCreateMissingDependencies(char* szFileN return(NULL); } } + __declspec(dllexport) bool TITCALL EngineCreateMissingDependenciesW(wchar_t* szFileName, wchar_t* szOutputFolder, bool LogCreatedFiles) { @@ -226,6 +228,7 @@ __declspec(dllexport) bool TITCALL EngineCreateMissingDependenciesW(wchar_t* szF } return false; } + __declspec(dllexport) bool TITCALL EngineFakeMissingDependencies(HANDLE hProcess) { @@ -236,6 +239,7 @@ __declspec(dllexport) bool TITCALL EngineFakeMissingDependencies(HANDLE hProcess } return false; } + __declspec(dllexport) bool TITCALL EngineDeleteCreatedDependencies() { @@ -292,9 +296,9 @@ __declspec(dllexport) bool TITCALL EngineCreateUnpackerWindow(char* WindowUnpack return false; } } + __declspec(dllexport) void TITCALL EngineAddUnpackerWindowLogMessage(char* szLogMessage) { - int cSelect; SendMessageA(EngineBoxHandle, LB_ADDSTRING, NULL, (LPARAM)szLogMessage); @@ -302,3 +306,38 @@ __declspec(dllexport) void TITCALL EngineAddUnpackerWindowLogMessage(char* szLog cSelect--; SendMessageA(EngineBoxHandle, LB_SETCURSEL, (WPARAM)cSelect, NULL); } + +__declspec(dllexport) bool TITCALL EngineCheckStructAlignment(DWORD StructureType, ULONG_PTR StructureSize) +{ + int blub=1; + switch(StructureType) + { + case UE_STRUCT_PE32STRUCT: + return (sizeof(PE32Struct)==StructureSize); + case UE_STRUCT_PE64STRUCT: + return (sizeof(PE64Struct)==StructureSize); + case UE_STRUCT_PESTRUCT: + return (sizeof(PEStruct)==StructureSize); + case UE_STRUCT_IMPORTENUMDATA: + return (sizeof(ImportEnumData)==StructureSize); + case UE_STRUCT_THREAD_ITEM_DATA: + return (sizeof(THREAD_ITEM_DATA)==StructureSize); + case UE_STRUCT_LIBRARY_ITEM_DATA: + return (sizeof(LIBRARY_ITEM_DATA)==StructureSize); + case UE_STRUCT_LIBRARY_ITEM_DATAW: + return (sizeof(LIBRARY_ITEM_DATAW)==StructureSize); + case UE_STRUCT_PROCESS_ITEM_DATA: + return (sizeof(PROCESS_ITEM_DATA)==StructureSize); + case UE_STRUCT_HANDLERARRAY: + return (sizeof(HandlerArray)==StructureSize); + case UE_STRUCT_PLUGININFORMATION: + return (sizeof(PluginInformation)==StructureSize); + case UE_STRUCT_HOOK_ENTRY: + return (sizeof(HOOK_ENTRY)==StructureSize); + case UE_STRUCT_FILE_STATUS_INFO: + return (sizeof(FILE_STATUS_INFO)==StructureSize); + case UE_STRUCT_FILE_FIX_INFO: + return (sizeof(FILE_FIX_INFO)==StructureSize); + } + return false; +} diff --git a/TitanEngine/TitanEngine.def b/TitanEngine/TitanEngine.def index 8171706..e4db0d0 100644 --- a/TitanEngine/TitanEngine.def +++ b/TitanEngine/TitanEngine.def @@ -390,6 +390,7 @@ EngineCreateMissingDependencies EngineCreateMissingDependenciesW EngineCreateUnpackerWindow EngineAddUnpackerWindowLogMessage +EngineCheckStructAlignment ExtensionManagerIsPluginLoaded ExtensionManagerIsPluginEnabled ExtensionManagerDisablePlugin diff --git a/TitanEngine/TitanEngine.vcxproj.filters b/TitanEngine/TitanEngine.vcxproj.filters index edd5f5b..a3564d6 100644 --- a/TitanEngine/TitanEngine.vcxproj.filters +++ b/TitanEngine/TitanEngine.vcxproj.filters @@ -208,7 +208,7 @@ Source Files\TitanEngine - Source Files + Source Files\TitanEngine diff --git a/TitanEngine/definitions.h b/TitanEngine/definitions.h index 3b868df..ad33cba 100644 --- a/TitanEngine/definitions.h +++ b/TitanEngine/definitions.h @@ -425,6 +425,7 @@ __declspec(dllexport) bool TITCALL EngineFakeMissingDependencies(HANDLE hProcess __declspec(dllexport) bool TITCALL EngineDeleteCreatedDependencies(); __declspec(dllexport) bool TITCALL EngineCreateUnpackerWindow(char* WindowUnpackerTitle, char* WindowUnpackerLongTitle, char* WindowUnpackerName, char* WindowUnpackerAuthor, void* StartUnpackingCallBack); __declspec(dllexport) void TITCALL EngineAddUnpackerWindowLogMessage(char* szLogMessage); +__declspec(dllexport) bool TITCALL EngineCheckStructAlignment(DWORD StructureType, ULONG_PTR StructureSize); // Global.Engine.Extension.Functions: __declspec(dllexport) bool TITCALL ExtensionManagerIsPluginLoaded(char* szPluginName); __declspec(dllexport) bool TITCALL ExtensionManagerIsPluginEnabled(char* szPluginName); diff --git a/TitanEngine/stdafx.h b/TitanEngine/stdafx.h index ccf8f95..32dc48d 100644 --- a/TitanEngine/stdafx.h +++ b/TitanEngine/stdafx.h @@ -70,6 +70,21 @@ #pragma pack(push) #pragma pack(1) +//EngineCheckStructAlignment +#define UE_STRUCT_PE32STRUCT 1 +#define UE_STRUCT_PE64STRUCT 2 +#define UE_STRUCT_PESTRUCT 3 +#define UE_STRUCT_IMPORTENUMDATA 4 +#define UE_STRUCT_THREAD_ITEM_DATA 5 +#define UE_STRUCT_LIBRARY_ITEM_DATA 6 +#define UE_STRUCT_LIBRARY_ITEM_DATAW 7 +#define UE_STRUCT_PROCESS_ITEM_DATA 8 +#define UE_STRUCT_HANDLERARRAY 9 +#define UE_STRUCT_PLUGININFORMATION 10 +#define UE_STRUCT_HOOK_ENTRY 11 +#define UE_STRUCT_FILE_STATUS_INFO 12 +#define UE_STRUCT_FILE_FIX_INFO 13 + typedef struct { ULONG_PTR BreakPointAddress; @@ -588,6 +603,12 @@ typedef struct DWORD NumberOfRvaAndSizes; } PE64Struct, *PPE64Struct; +#ifdef _WIN64 +typedef PE64Struct PEStruct; +#else +typedef PE32Struct PEStruct; +#endif + typedef struct { bool NewDll;