From 23d6db15a3a0fa5a2949a68b13150657d15f2fac Mon Sep 17 00:00:00 2001 From: zer0fl4g Date: Fri, 13 Jul 2012 13:24:10 +0200 Subject: [PATCH] initial release --- ....Plugin.CheckRemoteDebuggerPresent.vcxproj | 146 ++++++++++++++ ...CheckRemoteDebuggerPresent.vcxproj.filters | 27 +++ ...in.CheckRemoteDebuggerPresent.vcxproj.user | 3 + .../DLLMain.cpp | 30 +++ .../DLLMain.h | 16 ++ .../DD.Plugin.DebugObject.vcxproj | 146 ++++++++++++++ .../DD.Plugin.DebugObject.vcxproj.filters | 27 +++ .../DD.Plugin.DebugObject.vcxproj.user | 3 + DD.Plugin.DebugObject/DLLMain.cpp | 41 ++++ DD.Plugin.DebugObject/DLLMain.h | 16 ++ .../DD.Plugin.FindBadDrivers.vcxproj | 87 ++++++++ .../DD.Plugin.FindBadDrivers.vcxproj.filters | 27 +++ .../DD.Plugin.FindBadDrivers.vcxproj.user | 3 + DD.Plugin.FindBadDrivers/DLLMain.cpp | 49 +++++ DD.Plugin.FindBadDrivers/DLLMain.h | 22 +++ .../DD.Plugin.FindBadProcesses.vcxproj | 85 ++++++++ ...DD.Plugin.FindBadProcesses.vcxproj.filters | 27 +++ .../DD.Plugin.FindBadProcesses.vcxproj.user | 3 + DD.Plugin.FindBadProcesses/DLLMain.cpp | 56 ++++++ DD.Plugin.FindBadProcesses/DLLMain.h | 20 ++ .../DD.Plugin.FindBadWindows.vcxproj | 85 ++++++++ .../DD.Plugin.FindBadWindows.vcxproj.filters | 27 +++ .../DD.Plugin.FindBadWindows.vcxproj.user | 3 + DD.Plugin.FindBadWindows/DLLMain.cpp | 53 +++++ DD.Plugin.FindBadWindows/DLLMain.h | 21 ++ .../DD.Plugin.HardwareBreakpoint.vcxproj | 146 ++++++++++++++ ....Plugin.HardwareBreakpoint.vcxproj.filters | 27 +++ .../DD.Plugin.HardwareBreakpoint.vcxproj.user | 3 + DD.Plugin.HardwareBreakpoint/DLLMain.cpp | 47 +++++ DD.Plugin.HardwareBreakpoint/DLLMain.h | 16 ++ .../DD.Plugin.IsDebuggerPresent.vcxproj | 146 ++++++++++++++ ...D.Plugin.IsDebuggerPresent.vcxproj.filters | 27 +++ .../DD.Plugin.IsDebuggerPresent.vcxproj.user | 3 + DD.Plugin.IsDebuggerPresent/DLLMain.cpp | 29 +++ DD.Plugin.IsDebuggerPresent/DLLMain.h | 16 ++ .../DD.Plugin.MemoryBreakpoint.vcxproj | 146 ++++++++++++++ ...DD.Plugin.MemoryBreakpoint.vcxproj.filters | 27 +++ .../DD.Plugin.MemoryBreakpoint.vcxproj.user | 3 + DD.Plugin.MemoryBreakpoint/DLLMain.cpp | 65 ++++++ DD.Plugin.MemoryBreakpoint/DLLMain.h | 16 ++ .../DD.Plugin.OpenCSRSS.vcxproj | 146 ++++++++++++++ .../DD.Plugin.OpenCSRSS.vcxproj.filters | 27 +++ .../DD.Plugin.OpenCSRSS.vcxproj.user | 3 + DD.Plugin.OpenCSRSS/DLLMain.cpp | 52 +++++ DD.Plugin.OpenCSRSS/DLLMain.h | 17 ++ .../DD.Plugin.OutputDebugString.vcxproj | 146 ++++++++++++++ ...D.Plugin.OutputDebugString.vcxproj.filters | 27 +++ .../DD.Plugin.OutputDebugString.vcxproj.user | 3 + DD.Plugin.OutputDebugString/DLLMain.cpp | 40 ++++ DD.Plugin.OutputDebugString/DLLMain.h | 16 ++ .../DD.Plugin.PEBDebugFlag.vcxproj | 146 ++++++++++++++ .../DD.Plugin.PEBDebugFlag.vcxproj.filters | 27 +++ .../DD.Plugin.PEBDebugFlag.vcxproj.user | 3 + DD.Plugin.PEBDebugFlag/DLLMain.cpp | 55 ++++++ DD.Plugin.PEBDebugFlag/DLLMain.h | 16 ++ .../DD.Plugin.PEBGlobalFlags.vcxproj | 146 ++++++++++++++ .../DD.Plugin.PEBGlobalFlags.vcxproj.filters | 27 +++ .../DD.Plugin.PEBGlobalFlags.vcxproj.user | 3 + DD.Plugin.PEBGlobalFlags/DLLMain.cpp | 57 ++++++ DD.Plugin.PEBGlobalFlags/DLLMain.h | 16 ++ .../DD.Plugin.PEBProcHeapFlag.vcxproj | 146 ++++++++++++++ .../DD.Plugin.PEBProcHeapFlag.vcxproj.filters | 27 +++ .../DD.Plugin.PEBProcHeapFlag.vcxproj.user | 3 + DD.Plugin.PEBProcHeapFlag/DLLMain.cpp | 78 ++++++++ DD.Plugin.PEBProcHeapFlag/DLLMain.h | 18 ++ .../DD.Plugin.ParentProcess.vcxproj | 146 ++++++++++++++ .../DD.Plugin.ParentProcess.vcxproj.filters | 27 +++ .../DD.Plugin.ParentProcess.vcxproj.user | 3 + DD.Plugin.ParentProcess/DLLMain.cpp | 50 +++++ DD.Plugin.ParentProcess/DLLMain.h | 17 ++ .../DD.Plugin.ProcessDebugFlag.vcxproj | 146 ++++++++++++++ ...DD.Plugin.ProcessDebugFlag.vcxproj.filters | 27 +++ .../DD.Plugin.ProcessDebugFlag.vcxproj.user | 3 + DD.Plugin.ProcessDebugFlag/DLLMain.cpp | 45 +++++ DD.Plugin.ProcessDebugFlag/DLLMain.h | 16 ++ .../DD.Plugin.UnhandledException.vcxproj | 146 ++++++++++++++ ....Plugin.UnhandledException.vcxproj.filters | 27 +++ .../DD.Plugin.UnhandledException.vcxproj.user | 3 + DD.Plugin.UnhandledException/DLLMain.cpp | 42 ++++ DD.Plugin.UnhandledException/DLLMain.h | 18 ++ DebugDetector.sln | 185 ++++++++++++++++++ DebugDetector.suo | Bin 0 -> 51200 bytes DebugDetector/DDMain.cpp | 162 +++++++++++++++ DebugDetector/DDMain.h | 33 ++++ DebugDetector/DebugDetector.aps | Bin 0 -> 34204 bytes DebugDetector/DebugDetector.rc | Bin 0 -> 4218 bytes DebugDetector/DebugDetector.vcxproj | 150 ++++++++++++++ DebugDetector/DebugDetector.vcxproj.filters | 35 ++++ DebugDetector/DebugDetector.vcxproj.user | 3 + DebugDetector/resource.h | Bin 0 -> 1098 bytes ReadMe.txt | 75 +++++++ .../DD.Plugin.CheckRemoteDebuggerPresent.dll | Bin 0 -> 7168 bytes Release/DD.Plugin.DebugObject.dll | Bin 0 -> 7168 bytes Release/DD.Plugin.FindBadDrivers.dll | Bin 0 -> 11776 bytes Release/DD.Plugin.FindBadProcesses.dll | Bin 0 -> 11776 bytes Release/DD.Plugin.FindBadWindows.dll | Bin 0 -> 12288 bytes Release/DD.Plugin.HardwareBreakpoint.dll | Bin 0 -> 7168 bytes Release/DD.Plugin.IsDebuggerPresent.dll | Bin 0 -> 6656 bytes Release/DD.Plugin.MemoryBreakpoint.dll | Bin 0 -> 7680 bytes Release/DD.Plugin.OpenCSRSS.dll | Bin 0 -> 7168 bytes Release/DD.Plugin.OutputDebugString.dll | Bin 0 -> 6656 bytes Release/DD.Plugin.PEBDebugFlag.dll | Bin 0 -> 6656 bytes Release/DD.Plugin.PEBGlobalFlags.dll | Bin 0 -> 6656 bytes Release/DD.Plugin.PEBProcHeapFlag.dll | Bin 0 -> 7168 bytes Release/DD.Plugin.ParentProcess.dll | Bin 0 -> 7168 bytes Release/DD.Plugin.ProcessDebugFlag.dll | Bin 0 -> 7168 bytes Release/DD.Plugin.UnhandledException.dll | Bin 0 -> 6656 bytes Release/DebugDetector.exe | Bin 0 -> 12288 bytes 108 files changed, 4344 insertions(+) create mode 100644 DD.Plugin.CheckRemoteDebuggerPresent/DD.Plugin.CheckRemoteDebuggerPresent.vcxproj create mode 100644 DD.Plugin.CheckRemoteDebuggerPresent/DD.Plugin.CheckRemoteDebuggerPresent.vcxproj.filters create mode 100644 DD.Plugin.CheckRemoteDebuggerPresent/DD.Plugin.CheckRemoteDebuggerPresent.vcxproj.user create mode 100644 DD.Plugin.CheckRemoteDebuggerPresent/DLLMain.cpp create mode 100644 DD.Plugin.CheckRemoteDebuggerPresent/DLLMain.h create mode 100644 DD.Plugin.DebugObject/DD.Plugin.DebugObject.vcxproj create mode 100644 DD.Plugin.DebugObject/DD.Plugin.DebugObject.vcxproj.filters create mode 100644 DD.Plugin.DebugObject/DD.Plugin.DebugObject.vcxproj.user create mode 100644 DD.Plugin.DebugObject/DLLMain.cpp create mode 100644 DD.Plugin.DebugObject/DLLMain.h create mode 100644 DD.Plugin.FindBadDrivers/DD.Plugin.FindBadDrivers.vcxproj create mode 100644 DD.Plugin.FindBadDrivers/DD.Plugin.FindBadDrivers.vcxproj.filters create mode 100644 DD.Plugin.FindBadDrivers/DD.Plugin.FindBadDrivers.vcxproj.user create mode 100644 DD.Plugin.FindBadDrivers/DLLMain.cpp create mode 100644 DD.Plugin.FindBadDrivers/DLLMain.h create mode 100644 DD.Plugin.FindBadProcesses/DD.Plugin.FindBadProcesses.vcxproj create mode 100644 DD.Plugin.FindBadProcesses/DD.Plugin.FindBadProcesses.vcxproj.filters create mode 100644 DD.Plugin.FindBadProcesses/DD.Plugin.FindBadProcesses.vcxproj.user create mode 100644 DD.Plugin.FindBadProcesses/DLLMain.cpp create mode 100644 DD.Plugin.FindBadProcesses/DLLMain.h create mode 100644 DD.Plugin.FindBadWindows/DD.Plugin.FindBadWindows.vcxproj create mode 100644 DD.Plugin.FindBadWindows/DD.Plugin.FindBadWindows.vcxproj.filters create mode 100644 DD.Plugin.FindBadWindows/DD.Plugin.FindBadWindows.vcxproj.user create mode 100644 DD.Plugin.FindBadWindows/DLLMain.cpp create mode 100644 DD.Plugin.FindBadWindows/DLLMain.h create mode 100644 DD.Plugin.HardwareBreakpoint/DD.Plugin.HardwareBreakpoint.vcxproj create mode 100644 DD.Plugin.HardwareBreakpoint/DD.Plugin.HardwareBreakpoint.vcxproj.filters create mode 100644 DD.Plugin.HardwareBreakpoint/DD.Plugin.HardwareBreakpoint.vcxproj.user create mode 100644 DD.Plugin.HardwareBreakpoint/DLLMain.cpp create mode 100644 DD.Plugin.HardwareBreakpoint/DLLMain.h create mode 100644 DD.Plugin.IsDebuggerPresent/DD.Plugin.IsDebuggerPresent.vcxproj create mode 100644 DD.Plugin.IsDebuggerPresent/DD.Plugin.IsDebuggerPresent.vcxproj.filters create mode 100644 DD.Plugin.IsDebuggerPresent/DD.Plugin.IsDebuggerPresent.vcxproj.user create mode 100644 DD.Plugin.IsDebuggerPresent/DLLMain.cpp create mode 100644 DD.Plugin.IsDebuggerPresent/DLLMain.h create mode 100644 DD.Plugin.MemoryBreakpoint/DD.Plugin.MemoryBreakpoint.vcxproj create mode 100644 DD.Plugin.MemoryBreakpoint/DD.Plugin.MemoryBreakpoint.vcxproj.filters create mode 100644 DD.Plugin.MemoryBreakpoint/DD.Plugin.MemoryBreakpoint.vcxproj.user create mode 100644 DD.Plugin.MemoryBreakpoint/DLLMain.cpp create mode 100644 DD.Plugin.MemoryBreakpoint/DLLMain.h create mode 100644 DD.Plugin.OpenCSRSS/DD.Plugin.OpenCSRSS.vcxproj create mode 100644 DD.Plugin.OpenCSRSS/DD.Plugin.OpenCSRSS.vcxproj.filters create mode 100644 DD.Plugin.OpenCSRSS/DD.Plugin.OpenCSRSS.vcxproj.user create mode 100644 DD.Plugin.OpenCSRSS/DLLMain.cpp create mode 100644 DD.Plugin.OpenCSRSS/DLLMain.h create mode 100644 DD.Plugin.OutputDebugString/DD.Plugin.OutputDebugString.vcxproj create mode 100644 DD.Plugin.OutputDebugString/DD.Plugin.OutputDebugString.vcxproj.filters create mode 100644 DD.Plugin.OutputDebugString/DD.Plugin.OutputDebugString.vcxproj.user create mode 100644 DD.Plugin.OutputDebugString/DLLMain.cpp create mode 100644 DD.Plugin.OutputDebugString/DLLMain.h create mode 100644 DD.Plugin.PEBDebugFlag/DD.Plugin.PEBDebugFlag.vcxproj create mode 100644 DD.Plugin.PEBDebugFlag/DD.Plugin.PEBDebugFlag.vcxproj.filters create mode 100644 DD.Plugin.PEBDebugFlag/DD.Plugin.PEBDebugFlag.vcxproj.user create mode 100644 DD.Plugin.PEBDebugFlag/DLLMain.cpp create mode 100644 DD.Plugin.PEBDebugFlag/DLLMain.h create mode 100644 DD.Plugin.PEBGlobalFlags/DD.Plugin.PEBGlobalFlags.vcxproj create mode 100644 DD.Plugin.PEBGlobalFlags/DD.Plugin.PEBGlobalFlags.vcxproj.filters create mode 100644 DD.Plugin.PEBGlobalFlags/DD.Plugin.PEBGlobalFlags.vcxproj.user create mode 100644 DD.Plugin.PEBGlobalFlags/DLLMain.cpp create mode 100644 DD.Plugin.PEBGlobalFlags/DLLMain.h create mode 100644 DD.Plugin.PEBProcHeapFlag/DD.Plugin.PEBProcHeapFlag.vcxproj create mode 100644 DD.Plugin.PEBProcHeapFlag/DD.Plugin.PEBProcHeapFlag.vcxproj.filters create mode 100644 DD.Plugin.PEBProcHeapFlag/DD.Plugin.PEBProcHeapFlag.vcxproj.user create mode 100644 DD.Plugin.PEBProcHeapFlag/DLLMain.cpp create mode 100644 DD.Plugin.PEBProcHeapFlag/DLLMain.h create mode 100644 DD.Plugin.ParentProcess/DD.Plugin.ParentProcess.vcxproj create mode 100644 DD.Plugin.ParentProcess/DD.Plugin.ParentProcess.vcxproj.filters create mode 100644 DD.Plugin.ParentProcess/DD.Plugin.ParentProcess.vcxproj.user create mode 100644 DD.Plugin.ParentProcess/DLLMain.cpp create mode 100644 DD.Plugin.ParentProcess/DLLMain.h create mode 100644 DD.Plugin.ProcessDebugFlag/DD.Plugin.ProcessDebugFlag.vcxproj create mode 100644 DD.Plugin.ProcessDebugFlag/DD.Plugin.ProcessDebugFlag.vcxproj.filters create mode 100644 DD.Plugin.ProcessDebugFlag/DD.Plugin.ProcessDebugFlag.vcxproj.user create mode 100644 DD.Plugin.ProcessDebugFlag/DLLMain.cpp create mode 100644 DD.Plugin.ProcessDebugFlag/DLLMain.h create mode 100644 DD.Plugin.UnhandledException/DD.Plugin.UnhandledException.vcxproj create mode 100644 DD.Plugin.UnhandledException/DD.Plugin.UnhandledException.vcxproj.filters create mode 100644 DD.Plugin.UnhandledException/DD.Plugin.UnhandledException.vcxproj.user create mode 100644 DD.Plugin.UnhandledException/DLLMain.cpp create mode 100644 DD.Plugin.UnhandledException/DLLMain.h create mode 100644 DebugDetector.sln create mode 100644 DebugDetector.suo create mode 100644 DebugDetector/DDMain.cpp create mode 100644 DebugDetector/DDMain.h create mode 100644 DebugDetector/DebugDetector.aps create mode 100644 DebugDetector/DebugDetector.rc create mode 100644 DebugDetector/DebugDetector.vcxproj create mode 100644 DebugDetector/DebugDetector.vcxproj.filters create mode 100644 DebugDetector/DebugDetector.vcxproj.user create mode 100644 DebugDetector/resource.h create mode 100644 ReadMe.txt create mode 100644 Release/DD.Plugin.CheckRemoteDebuggerPresent.dll create mode 100644 Release/DD.Plugin.DebugObject.dll create mode 100644 Release/DD.Plugin.FindBadDrivers.dll create mode 100644 Release/DD.Plugin.FindBadProcesses.dll create mode 100644 Release/DD.Plugin.FindBadWindows.dll create mode 100644 Release/DD.Plugin.HardwareBreakpoint.dll create mode 100644 Release/DD.Plugin.IsDebuggerPresent.dll create mode 100644 Release/DD.Plugin.MemoryBreakpoint.dll create mode 100644 Release/DD.Plugin.OpenCSRSS.dll create mode 100644 Release/DD.Plugin.OutputDebugString.dll create mode 100644 Release/DD.Plugin.PEBDebugFlag.dll create mode 100644 Release/DD.Plugin.PEBGlobalFlags.dll create mode 100644 Release/DD.Plugin.PEBProcHeapFlag.dll create mode 100644 Release/DD.Plugin.ParentProcess.dll create mode 100644 Release/DD.Plugin.ProcessDebugFlag.dll create mode 100644 Release/DD.Plugin.UnhandledException.dll create mode 100644 Release/DebugDetector.exe diff --git a/DD.Plugin.CheckRemoteDebuggerPresent/DD.Plugin.CheckRemoteDebuggerPresent.vcxproj b/DD.Plugin.CheckRemoteDebuggerPresent/DD.Plugin.CheckRemoteDebuggerPresent.vcxproj new file mode 100644 index 0000000..1a93694 --- /dev/null +++ b/DD.Plugin.CheckRemoteDebuggerPresent/DD.Plugin.CheckRemoteDebuggerPresent.vcxproj @@ -0,0 +1,146 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {55C478DF-FC39-4BB5-A37C-EE81E4BBA12A} + Win32Proj + DDPluginCheckRemoteDebuggerPresent + + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINCHECKREMOTEDEBUGGERPRESENT_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINCHECKREMOTEDEBUGGERPRESENT_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + Level3 + + + Full + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINCHECKREMOTEDEBUGGERPRESENT_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINCHECKREMOTEDEBUGGERPRESENT_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/DD.Plugin.CheckRemoteDebuggerPresent/DD.Plugin.CheckRemoteDebuggerPresent.vcxproj.filters b/DD.Plugin.CheckRemoteDebuggerPresent/DD.Plugin.CheckRemoteDebuggerPresent.vcxproj.filters new file mode 100644 index 0000000..4aa3883 --- /dev/null +++ b/DD.Plugin.CheckRemoteDebuggerPresent/DD.Plugin.CheckRemoteDebuggerPresent.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Quelldateien + + + + + Headerdateien + + + \ No newline at end of file diff --git a/DD.Plugin.CheckRemoteDebuggerPresent/DD.Plugin.CheckRemoteDebuggerPresent.vcxproj.user b/DD.Plugin.CheckRemoteDebuggerPresent/DD.Plugin.CheckRemoteDebuggerPresent.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/DD.Plugin.CheckRemoteDebuggerPresent/DD.Plugin.CheckRemoteDebuggerPresent.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/DD.Plugin.CheckRemoteDebuggerPresent/DLLMain.cpp b/DD.Plugin.CheckRemoteDebuggerPresent/DLLMain.cpp new file mode 100644 index 0000000..d02f02d --- /dev/null +++ b/DD.Plugin.CheckRemoteDebuggerPresent/DLLMain.cpp @@ -0,0 +1,30 @@ +#include "DLLMain.h" + +BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) +{ + return true; +} + +__declspec(dllexport) TCHAR* __cdecl PluginName(void) +{ + return L"CheckRemoteDebuggerPresent"; +} +__declspec(dllexport) TCHAR* __cdecl PluginVersion(void) +{ + return L"0.1"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void) +{ + return sErrorMessage; +} + +__declspec(dllexport) DWORD __cdecl PluginDebugCheck(void) +{ + BOOL bDebugged = false; + CheckRemoteDebuggerPresent(GetCurrentProcess(),&bDebugged); + if(bDebugged) + return 1; + else + return 0; +} \ No newline at end of file diff --git a/DD.Plugin.CheckRemoteDebuggerPresent/DLLMain.h b/DD.Plugin.CheckRemoteDebuggerPresent/DLLMain.h new file mode 100644 index 0000000..c79fc18 --- /dev/null +++ b/DD.Plugin.CheckRemoteDebuggerPresent/DLLMain.h @@ -0,0 +1,16 @@ +#include + +#ifdef __cplusplus +extern "C" { +#endif + + __declspec(dllexport) TCHAR* __cdecl PluginName(void); + __declspec(dllexport) TCHAR* __cdecl PluginVersion(void); + __declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void); + __declspec(dllexport) DWORD __cdecl PluginDebugCheck(void); + +#ifdef __cplusplus +} +#endif + +TCHAR* sErrorMessage; \ No newline at end of file diff --git a/DD.Plugin.DebugObject/DD.Plugin.DebugObject.vcxproj b/DD.Plugin.DebugObject/DD.Plugin.DebugObject.vcxproj new file mode 100644 index 0000000..e749d16 --- /dev/null +++ b/DD.Plugin.DebugObject/DD.Plugin.DebugObject.vcxproj @@ -0,0 +1,146 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {3A3E2EE6-1EC5-4FB2-8009-CE4F1F0A5A6A} + Win32Proj + DDPluginDebugObject + + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINDEBUGOBJECT_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINDEBUGOBJECT_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + Level3 + + + Full + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINDEBUGOBJECT_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINDEBUGOBJECT_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/DD.Plugin.DebugObject/DD.Plugin.DebugObject.vcxproj.filters b/DD.Plugin.DebugObject/DD.Plugin.DebugObject.vcxproj.filters new file mode 100644 index 0000000..4aa3883 --- /dev/null +++ b/DD.Plugin.DebugObject/DD.Plugin.DebugObject.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Quelldateien + + + + + Headerdateien + + + \ No newline at end of file diff --git a/DD.Plugin.DebugObject/DD.Plugin.DebugObject.vcxproj.user b/DD.Plugin.DebugObject/DD.Plugin.DebugObject.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/DD.Plugin.DebugObject/DD.Plugin.DebugObject.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/DD.Plugin.DebugObject/DLLMain.cpp b/DD.Plugin.DebugObject/DLLMain.cpp new file mode 100644 index 0000000..bb594b7 --- /dev/null +++ b/DD.Plugin.DebugObject/DLLMain.cpp @@ -0,0 +1,41 @@ +#include "DLLMain.h" + +BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) +{ + return true; +} + +__declspec(dllexport) TCHAR* __cdecl PluginName(void) +{ + return L"DebugObject"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginVersion(void) +{ + return L"0.1"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void) +{ + return sErrorMessage; +} + +__declspec(dllexport) DWORD __cdecl PluginDebugCheck(void) +{ + typedef NTSTATUS (WINAPI *pNtQueryInformationProcess)(HANDLE,UINT,PVOID,ULONG,PULONG); + + HANDLE hDebugObject = NULL; + NTSTATUS Status; + + pNtQueryInformationProcess NtQIP = (pNtQueryInformationProcess)GetProcAddress(GetModuleHandle(L"ntdll.dll"),"NtQueryInformationProcess"); + + Status = NtQIP(GetCurrentProcess(),0x1e,&hDebugObject,4,NULL); + + if (Status != 0x00000000) + return 0; + + if(hDebugObject) + return 1; + else + return 0; +} \ No newline at end of file diff --git a/DD.Plugin.DebugObject/DLLMain.h b/DD.Plugin.DebugObject/DLLMain.h new file mode 100644 index 0000000..c79fc18 --- /dev/null +++ b/DD.Plugin.DebugObject/DLLMain.h @@ -0,0 +1,16 @@ +#include + +#ifdef __cplusplus +extern "C" { +#endif + + __declspec(dllexport) TCHAR* __cdecl PluginName(void); + __declspec(dllexport) TCHAR* __cdecl PluginVersion(void); + __declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void); + __declspec(dllexport) DWORD __cdecl PluginDebugCheck(void); + +#ifdef __cplusplus +} +#endif + +TCHAR* sErrorMessage; \ No newline at end of file diff --git a/DD.Plugin.FindBadDrivers/DD.Plugin.FindBadDrivers.vcxproj b/DD.Plugin.FindBadDrivers/DD.Plugin.FindBadDrivers.vcxproj new file mode 100644 index 0000000..73e8c8f --- /dev/null +++ b/DD.Plugin.FindBadDrivers/DD.Plugin.FindBadDrivers.vcxproj @@ -0,0 +1,87 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {534F66C5-627F-4086-BD7D-D8BA55189E30} + Win32Proj + DDPluginFindBadDrivers + + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + + + + + + + + + + + true + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINFINDBADDRIVERS_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + psapi.lib;%(AdditionalDependencies) + + + + + Level3 + + + Full + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINFINDBADDRIVERS_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + psapi.lib;%(AdditionalDependencies) + + + + + + + + + + + + \ No newline at end of file diff --git a/DD.Plugin.FindBadDrivers/DD.Plugin.FindBadDrivers.vcxproj.filters b/DD.Plugin.FindBadDrivers/DD.Plugin.FindBadDrivers.vcxproj.filters new file mode 100644 index 0000000..4aa3883 --- /dev/null +++ b/DD.Plugin.FindBadDrivers/DD.Plugin.FindBadDrivers.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Quelldateien + + + + + Headerdateien + + + \ No newline at end of file diff --git a/DD.Plugin.FindBadDrivers/DD.Plugin.FindBadDrivers.vcxproj.user b/DD.Plugin.FindBadDrivers/DD.Plugin.FindBadDrivers.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/DD.Plugin.FindBadDrivers/DD.Plugin.FindBadDrivers.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/DD.Plugin.FindBadDrivers/DLLMain.cpp b/DD.Plugin.FindBadDrivers/DLLMain.cpp new file mode 100644 index 0000000..7296e56 --- /dev/null +++ b/DD.Plugin.FindBadDrivers/DLLMain.cpp @@ -0,0 +1,49 @@ +#include "DLLMain.h" + +BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) +{ + return true; +} + +__declspec(dllexport) TCHAR* __cdecl PluginName(void) +{ + return L"BadDriversList"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginVersion(void) +{ + return L"0.1"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void) +{ + return sErrorMessage; +} + +__declspec(dllexport) DWORD __cdecl PluginDebugCheck(void) +{ + LPVOID lpDrivers[1024]; + DWORD cbNeeded = 0; + int cDrivers = 0; + vector vDriverList; + + vDriverList.push_back(L"olly.sys"); + + if(EnumDeviceDrivers(lpDrivers,sizeof(lpDrivers),&cbNeeded) && cbNeeded < sizeof(lpDrivers)) + { + TCHAR szDriver[1024]; + + cDrivers = cbNeeded / sizeof(lpDrivers[0]); + + for (int i = 0; i < cDrivers; i++ ) + { + if(GetDeviceDriverBaseName(lpDrivers[i],szDriver,sizeof(szDriver) / sizeof(szDriver[0]))) + { + for(int a = 0;a < vDriverList.size(); a++) + if(wcsstr(szDriver,vDriverList[a].c_str()) != NULL) + return 1; + } + } + } + return 0; +} \ No newline at end of file diff --git a/DD.Plugin.FindBadDrivers/DLLMain.h b/DD.Plugin.FindBadDrivers/DLLMain.h new file mode 100644 index 0000000..2ae0680 --- /dev/null +++ b/DD.Plugin.FindBadDrivers/DLLMain.h @@ -0,0 +1,22 @@ +#include +#include +#include + +using namespace std; + +#ifdef __cplusplus +extern "C" { +#endif + + __declspec(dllexport) TCHAR* __cdecl PluginName(void); + __declspec(dllexport) TCHAR* __cdecl PluginVersion(void); + __declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void); + __declspec(dllexport) DWORD __cdecl PluginDebugCheck(void); + +#ifdef __cplusplus +} +#endif + +BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam); + +TCHAR* sErrorMessage; \ No newline at end of file diff --git a/DD.Plugin.FindBadProcesses/DD.Plugin.FindBadProcesses.vcxproj b/DD.Plugin.FindBadProcesses/DD.Plugin.FindBadProcesses.vcxproj new file mode 100644 index 0000000..7641490 --- /dev/null +++ b/DD.Plugin.FindBadProcesses/DD.Plugin.FindBadProcesses.vcxproj @@ -0,0 +1,85 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {FC1FB81C-8272-4B79-B807-1331335DFA0A} + Win32Proj + DDPluginFindBadProcesses + + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + + + + + + + + + + + true + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINFINDBADPROCESSES_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + Level3 + + + Full + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINFINDBADPROCESSES_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/DD.Plugin.FindBadProcesses/DD.Plugin.FindBadProcesses.vcxproj.filters b/DD.Plugin.FindBadProcesses/DD.Plugin.FindBadProcesses.vcxproj.filters new file mode 100644 index 0000000..4aa3883 --- /dev/null +++ b/DD.Plugin.FindBadProcesses/DD.Plugin.FindBadProcesses.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Quelldateien + + + + + Headerdateien + + + \ No newline at end of file diff --git a/DD.Plugin.FindBadProcesses/DD.Plugin.FindBadProcesses.vcxproj.user b/DD.Plugin.FindBadProcesses/DD.Plugin.FindBadProcesses.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/DD.Plugin.FindBadProcesses/DD.Plugin.FindBadProcesses.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/DD.Plugin.FindBadProcesses/DLLMain.cpp b/DD.Plugin.FindBadProcesses/DLLMain.cpp new file mode 100644 index 0000000..13e0a28 --- /dev/null +++ b/DD.Plugin.FindBadProcesses/DLLMain.cpp @@ -0,0 +1,56 @@ +#include "DLLMain.h" + +BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) +{ + return true; +} + +__declspec(dllexport) TCHAR* __cdecl PluginName(void) +{ + return L"BadProcessList"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginVersion(void) +{ + return L"0.1"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void) +{ + return sErrorMessage; +} + +__declspec(dllexport) DWORD __cdecl PluginDebugCheck(void) +{ + vector vProcList; + + vProcList.push_back(L"ollydbg.exe"); + vProcList.push_back(L"windbg.exe"); + vProcList.push_back(L"devenv.exe"); + vProcList.push_back(L"ImmunityDebugger.exe"); + + HANDLE hProcessSnap = NULL,hProc = NULL; + PROCESSENTRY32W pe32w; + bool bDebugged = false; + + hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); + if(hProcessSnap != INVALID_HANDLE_VALUE) + { + pe32w.dwSize = sizeof(PROCESSENTRY32W); + if(Process32First(hProcessSnap,&pe32w)) + { + do + { + for(int i = 0; i < vProcList.size(); i++) + if(wcsstr(wcsupr(pe32w.szExeFile),wcsupr((TCHAR*)vProcList[i].c_str())) != NULL) + bDebugged = true; + } while(Process32Next(hProcessSnap,&pe32w)); + } + CloseHandle(hProcessSnap); + } + + if(bDebugged) + return 1; + else + return 0; +} \ No newline at end of file diff --git a/DD.Plugin.FindBadProcesses/DLLMain.h b/DD.Plugin.FindBadProcesses/DLLMain.h new file mode 100644 index 0000000..fc1e430 --- /dev/null +++ b/DD.Plugin.FindBadProcesses/DLLMain.h @@ -0,0 +1,20 @@ +#include +#include +#include + +using namespace std; + +#ifdef __cplusplus +extern "C" { +#endif + + __declspec(dllexport) TCHAR* __cdecl PluginName(void); + __declspec(dllexport) TCHAR* __cdecl PluginVersion(void); + __declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void); + __declspec(dllexport) DWORD __cdecl PluginDebugCheck(void); + +#ifdef __cplusplus +} +#endif + +TCHAR* sErrorMessage; \ No newline at end of file diff --git a/DD.Plugin.FindBadWindows/DD.Plugin.FindBadWindows.vcxproj b/DD.Plugin.FindBadWindows/DD.Plugin.FindBadWindows.vcxproj new file mode 100644 index 0000000..c11bcaa --- /dev/null +++ b/DD.Plugin.FindBadWindows/DD.Plugin.FindBadWindows.vcxproj @@ -0,0 +1,85 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {83557B77-5625-49F4-B246-BD7BBDB78687} + Win32Proj + DDPluginFindBadWindows + + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + + + + + + + + + + + true + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINFINDBADWINDOWS_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + Level3 + + + Full + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINFINDBADWINDOWS_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/DD.Plugin.FindBadWindows/DD.Plugin.FindBadWindows.vcxproj.filters b/DD.Plugin.FindBadWindows/DD.Plugin.FindBadWindows.vcxproj.filters new file mode 100644 index 0000000..f980685 --- /dev/null +++ b/DD.Plugin.FindBadWindows/DD.Plugin.FindBadWindows.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Headerdateien + + + + + Quelldateien + + + \ No newline at end of file diff --git a/DD.Plugin.FindBadWindows/DD.Plugin.FindBadWindows.vcxproj.user b/DD.Plugin.FindBadWindows/DD.Plugin.FindBadWindows.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/DD.Plugin.FindBadWindows/DD.Plugin.FindBadWindows.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/DD.Plugin.FindBadWindows/DLLMain.cpp b/DD.Plugin.FindBadWindows/DLLMain.cpp new file mode 100644 index 0000000..364a544 --- /dev/null +++ b/DD.Plugin.FindBadWindows/DLLMain.cpp @@ -0,0 +1,53 @@ +#include "DLLMain.h" + +BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) +{ + return true; +} + +__declspec(dllexport) TCHAR* __cdecl PluginName(void) +{ + return L"BadWindowsList"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginVersion(void) +{ + return L"0.1"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void) +{ + return sErrorMessage; +} + +__declspec(dllexport) DWORD __cdecl PluginDebugCheck(void) +{ + bool bDebugged = false; + EnumWindows(EnumWindowsProc,(LPARAM)&bDebugged); + if(bDebugged) + return 1; + else + return 0; +} + +BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam) +{ + vector vWindowList; + TCHAR* sTitel = (TCHAR*)malloc(255); + bool* bDebugged = (bool*)lParam; + + vWindowList.push_back(L"Immunity Debugger"); + vWindowList.push_back(L"Debug"); + vWindowList.push_back(L"Olly"); + vWindowList.push_back(L"- [CPU]"); + + GetWindowText(hwnd,sTitel,255); + + for(int i = 0;i < vWindowList.size(); i++) + { + if(wcsstr(sTitel,vWindowList[i].c_str())) + *bDebugged = true; + } + free(sTitel); + return true; +} \ No newline at end of file diff --git a/DD.Plugin.FindBadWindows/DLLMain.h b/DD.Plugin.FindBadWindows/DLLMain.h new file mode 100644 index 0000000..8b0f715 --- /dev/null +++ b/DD.Plugin.FindBadWindows/DLLMain.h @@ -0,0 +1,21 @@ +#include +#include + +using namespace std; + +#ifdef __cplusplus +extern "C" { +#endif + + __declspec(dllexport) TCHAR* __cdecl PluginName(void); + __declspec(dllexport) TCHAR* __cdecl PluginVersion(void); + __declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void); + __declspec(dllexport) DWORD __cdecl PluginDebugCheck(void); + +#ifdef __cplusplus +} +#endif + +BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam); + +TCHAR* sErrorMessage; \ No newline at end of file diff --git a/DD.Plugin.HardwareBreakpoint/DD.Plugin.HardwareBreakpoint.vcxproj b/DD.Plugin.HardwareBreakpoint/DD.Plugin.HardwareBreakpoint.vcxproj new file mode 100644 index 0000000..fee36ee --- /dev/null +++ b/DD.Plugin.HardwareBreakpoint/DD.Plugin.HardwareBreakpoint.vcxproj @@ -0,0 +1,146 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {A2F953E5-622D-4302-A630-E4E4D5988C60} + Win32Proj + DDPluginHardwareBreakpoint + + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINHARDWAREBREAKPOINT_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINHARDWAREBREAKPOINT_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + Level3 + + + Full + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINHARDWAREBREAKPOINT_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINHARDWAREBREAKPOINT_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/DD.Plugin.HardwareBreakpoint/DD.Plugin.HardwareBreakpoint.vcxproj.filters b/DD.Plugin.HardwareBreakpoint/DD.Plugin.HardwareBreakpoint.vcxproj.filters new file mode 100644 index 0000000..4aa3883 --- /dev/null +++ b/DD.Plugin.HardwareBreakpoint/DD.Plugin.HardwareBreakpoint.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Quelldateien + + + + + Headerdateien + + + \ No newline at end of file diff --git a/DD.Plugin.HardwareBreakpoint/DD.Plugin.HardwareBreakpoint.vcxproj.user b/DD.Plugin.HardwareBreakpoint/DD.Plugin.HardwareBreakpoint.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/DD.Plugin.HardwareBreakpoint/DD.Plugin.HardwareBreakpoint.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/DD.Plugin.HardwareBreakpoint/DLLMain.cpp b/DD.Plugin.HardwareBreakpoint/DLLMain.cpp new file mode 100644 index 0000000..dcfdca8 --- /dev/null +++ b/DD.Plugin.HardwareBreakpoint/DLLMain.cpp @@ -0,0 +1,47 @@ +#include "DLLMain.h" + +BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) +{ + return true; +} + +__declspec(dllexport) TCHAR* __cdecl PluginName(void) +{ + return L"Hardware Breakpoints"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginVersion(void) +{ + return L"0.1"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void) +{ + return sErrorMessage; +} + +__declspec(dllexport) DWORD __cdecl PluginDebugCheck(void) +{ + HANDLE hThread = GetCurrentThread(); + CONTEXT cTT; + bool bDebugged = false; + + ZeroMemory(&cTT,sizeof(CONTEXT)); + cTT.ContextFlags = CONTEXT_ALL; + + GetThreadContext(hThread,&cTT); + + if(cTT.Dr0 != NULL) + bDebugged = true; + if(cTT.Dr1 != NULL) + bDebugged = true; + if(cTT.Dr2 != NULL) + bDebugged = true; + if(cTT.Dr3 != NULL) + bDebugged = true; + + if(bDebugged) + return 1; + else + return 0; +} \ No newline at end of file diff --git a/DD.Plugin.HardwareBreakpoint/DLLMain.h b/DD.Plugin.HardwareBreakpoint/DLLMain.h new file mode 100644 index 0000000..c79fc18 --- /dev/null +++ b/DD.Plugin.HardwareBreakpoint/DLLMain.h @@ -0,0 +1,16 @@ +#include + +#ifdef __cplusplus +extern "C" { +#endif + + __declspec(dllexport) TCHAR* __cdecl PluginName(void); + __declspec(dllexport) TCHAR* __cdecl PluginVersion(void); + __declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void); + __declspec(dllexport) DWORD __cdecl PluginDebugCheck(void); + +#ifdef __cplusplus +} +#endif + +TCHAR* sErrorMessage; \ No newline at end of file diff --git a/DD.Plugin.IsDebuggerPresent/DD.Plugin.IsDebuggerPresent.vcxproj b/DD.Plugin.IsDebuggerPresent/DD.Plugin.IsDebuggerPresent.vcxproj new file mode 100644 index 0000000..dc14963 --- /dev/null +++ b/DD.Plugin.IsDebuggerPresent/DD.Plugin.IsDebuggerPresent.vcxproj @@ -0,0 +1,146 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {88549293-AA98-4E27-AA04-2696AAD141FB} + Win32Proj + DDPluginIsDebuggerPresent + + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINISDEBUGGERPRESENT_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINISDEBUGGERPRESENT_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + Level3 + + + Full + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINISDEBUGGERPRESENT_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINISDEBUGGERPRESENT_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/DD.Plugin.IsDebuggerPresent/DD.Plugin.IsDebuggerPresent.vcxproj.filters b/DD.Plugin.IsDebuggerPresent/DD.Plugin.IsDebuggerPresent.vcxproj.filters new file mode 100644 index 0000000..4aa3883 --- /dev/null +++ b/DD.Plugin.IsDebuggerPresent/DD.Plugin.IsDebuggerPresent.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Quelldateien + + + + + Headerdateien + + + \ No newline at end of file diff --git a/DD.Plugin.IsDebuggerPresent/DD.Plugin.IsDebuggerPresent.vcxproj.user b/DD.Plugin.IsDebuggerPresent/DD.Plugin.IsDebuggerPresent.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/DD.Plugin.IsDebuggerPresent/DD.Plugin.IsDebuggerPresent.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/DD.Plugin.IsDebuggerPresent/DLLMain.cpp b/DD.Plugin.IsDebuggerPresent/DLLMain.cpp new file mode 100644 index 0000000..27eea3d --- /dev/null +++ b/DD.Plugin.IsDebuggerPresent/DLLMain.cpp @@ -0,0 +1,29 @@ +#include "DLLMain.h" + +BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) +{ + return true; +} + +__declspec(dllexport) TCHAR* __cdecl PluginName(void) +{ + return L"IsDebuggerPresent"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginVersion(void) +{ + return L"0.1"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void) +{ + return sErrorMessage; +} + +__declspec(dllexport) DWORD __cdecl PluginDebugCheck(void) +{ + if(IsDebuggerPresent()) + return 1; + else + return 0; +} \ No newline at end of file diff --git a/DD.Plugin.IsDebuggerPresent/DLLMain.h b/DD.Plugin.IsDebuggerPresent/DLLMain.h new file mode 100644 index 0000000..c79fc18 --- /dev/null +++ b/DD.Plugin.IsDebuggerPresent/DLLMain.h @@ -0,0 +1,16 @@ +#include + +#ifdef __cplusplus +extern "C" { +#endif + + __declspec(dllexport) TCHAR* __cdecl PluginName(void); + __declspec(dllexport) TCHAR* __cdecl PluginVersion(void); + __declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void); + __declspec(dllexport) DWORD __cdecl PluginDebugCheck(void); + +#ifdef __cplusplus +} +#endif + +TCHAR* sErrorMessage; \ No newline at end of file diff --git a/DD.Plugin.MemoryBreakpoint/DD.Plugin.MemoryBreakpoint.vcxproj b/DD.Plugin.MemoryBreakpoint/DD.Plugin.MemoryBreakpoint.vcxproj new file mode 100644 index 0000000..038df81 --- /dev/null +++ b/DD.Plugin.MemoryBreakpoint/DD.Plugin.MemoryBreakpoint.vcxproj @@ -0,0 +1,146 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {81A1BF40-3F97-43E2-B84A-6D787278900F} + Win32Proj + DDPluginMemoryBreakpoint + + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINMEMORYBREAKPOINT_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINMEMORYBREAKPOINT_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + Level3 + + + Full + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINMEMORYBREAKPOINT_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINMEMORYBREAKPOINT_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/DD.Plugin.MemoryBreakpoint/DD.Plugin.MemoryBreakpoint.vcxproj.filters b/DD.Plugin.MemoryBreakpoint/DD.Plugin.MemoryBreakpoint.vcxproj.filters new file mode 100644 index 0000000..4aa3883 --- /dev/null +++ b/DD.Plugin.MemoryBreakpoint/DD.Plugin.MemoryBreakpoint.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Quelldateien + + + + + Headerdateien + + + \ No newline at end of file diff --git a/DD.Plugin.MemoryBreakpoint/DD.Plugin.MemoryBreakpoint.vcxproj.user b/DD.Plugin.MemoryBreakpoint/DD.Plugin.MemoryBreakpoint.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/DD.Plugin.MemoryBreakpoint/DD.Plugin.MemoryBreakpoint.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/DD.Plugin.MemoryBreakpoint/DLLMain.cpp b/DD.Plugin.MemoryBreakpoint/DLLMain.cpp new file mode 100644 index 0000000..679c011 --- /dev/null +++ b/DD.Plugin.MemoryBreakpoint/DLLMain.cpp @@ -0,0 +1,65 @@ +#include "DLLMain.h" + +BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) +{ + return true; +} + +__declspec(dllexport) TCHAR* __cdecl PluginName(void) +{ + return L"PageGuard Check"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginVersion(void) +{ + return L"0.1"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void) +{ + return sErrorMessage; +} + +__declspec(dllexport) DWORD __cdecl PluginDebugCheck(void) +{ + unsigned char *pMem = NULL; + SYSTEM_INFO sysinfo = {0}; + DWORD OldProtect = 0; + void *pAllocation = NULL; + + GetSystemInfo(&sysinfo); + + pAllocation = VirtualAlloc(NULL,sysinfo.dwPageSize,MEM_COMMIT | MEM_RESERVE,PAGE_EXECUTE_READWRITE); + + if (pAllocation == NULL) + { + sErrorMessage = (TCHAR*)malloc(255); + wsprintf(sErrorMessage,L"%s","Alloc failed!"); + return -1; + } + + pMem = (unsigned char*)pAllocation; + *pMem = 0xc3; // ret + + if (VirtualProtect(pAllocation, sysinfo.dwPageSize,PAGE_EXECUTE_READWRITE | PAGE_GUARD,&OldProtect) == 0) + return false; + + __try + { + __asm + { + mov eax, pAllocation + push MemBpBeingDebugged + jmp eax + } + } + __except(EXCEPTION_EXECUTE_HANDLER) + { + VirtualFree(pAllocation, NULL, MEM_RELEASE); + return 0; + } + + __asm{MemBpBeingDebugged:} + VirtualFree(pAllocation, NULL, MEM_RELEASE); + return 1; +} \ No newline at end of file diff --git a/DD.Plugin.MemoryBreakpoint/DLLMain.h b/DD.Plugin.MemoryBreakpoint/DLLMain.h new file mode 100644 index 0000000..c79fc18 --- /dev/null +++ b/DD.Plugin.MemoryBreakpoint/DLLMain.h @@ -0,0 +1,16 @@ +#include + +#ifdef __cplusplus +extern "C" { +#endif + + __declspec(dllexport) TCHAR* __cdecl PluginName(void); + __declspec(dllexport) TCHAR* __cdecl PluginVersion(void); + __declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void); + __declspec(dllexport) DWORD __cdecl PluginDebugCheck(void); + +#ifdef __cplusplus +} +#endif + +TCHAR* sErrorMessage; \ No newline at end of file diff --git a/DD.Plugin.OpenCSRSS/DD.Plugin.OpenCSRSS.vcxproj b/DD.Plugin.OpenCSRSS/DD.Plugin.OpenCSRSS.vcxproj new file mode 100644 index 0000000..bcd3c28 --- /dev/null +++ b/DD.Plugin.OpenCSRSS/DD.Plugin.OpenCSRSS.vcxproj @@ -0,0 +1,146 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {37FD77D1-5F5E-4132-A320-41D97D091F42} + Win32Proj + DDPluginOpenCSRSS + + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINOPENCSRSS_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINOPENCSRSS_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + Level3 + + + Full + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINOPENCSRSS_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINOPENCSRSS_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/DD.Plugin.OpenCSRSS/DD.Plugin.OpenCSRSS.vcxproj.filters b/DD.Plugin.OpenCSRSS/DD.Plugin.OpenCSRSS.vcxproj.filters new file mode 100644 index 0000000..4aa3883 --- /dev/null +++ b/DD.Plugin.OpenCSRSS/DD.Plugin.OpenCSRSS.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Quelldateien + + + + + Headerdateien + + + \ No newline at end of file diff --git a/DD.Plugin.OpenCSRSS/DD.Plugin.OpenCSRSS.vcxproj.user b/DD.Plugin.OpenCSRSS/DD.Plugin.OpenCSRSS.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/DD.Plugin.OpenCSRSS/DD.Plugin.OpenCSRSS.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/DD.Plugin.OpenCSRSS/DLLMain.cpp b/DD.Plugin.OpenCSRSS/DLLMain.cpp new file mode 100644 index 0000000..9dc6274 --- /dev/null +++ b/DD.Plugin.OpenCSRSS/DLLMain.cpp @@ -0,0 +1,52 @@ +#include "DLLMain.h" + +BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) +{ + return true; +} + +__declspec(dllexport) TCHAR* __cdecl PluginName(void) +{ + return L"Open CSRSS Process"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginVersion(void) +{ + return L"0.1"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void) +{ + return sErrorMessage; +} + +__declspec(dllexport) DWORD __cdecl PluginDebugCheck(void) +{ + HANDLE hProcessSnap = NULL,hProc = NULL; + PROCESSENTRY32W pe32w; + bool bDebugged = false; + + hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); + if(hProcessSnap != INVALID_HANDLE_VALUE) + { + pe32w.dwSize = sizeof(PROCESSENTRY32W); + if(Process32First(hProcessSnap,&pe32w)) + { + do + { + if(wcsstr(pe32w.szExeFile,L"csrss.exe") != NULL) + { + hProc = OpenProcess(PROCESS_ALL_ACCESS,false,pe32w.th32ProcessID); + + if(hProc != INVALID_HANDLE_VALUE) + { + bDebugged = true; + CloseHandle(hProc); + } + } + } while(Process32Next(hProcessSnap,&pe32w)); + } + CloseHandle(hProcessSnap); + } + return bDebugged; +} \ No newline at end of file diff --git a/DD.Plugin.OpenCSRSS/DLLMain.h b/DD.Plugin.OpenCSRSS/DLLMain.h new file mode 100644 index 0000000..7c7ddcd --- /dev/null +++ b/DD.Plugin.OpenCSRSS/DLLMain.h @@ -0,0 +1,17 @@ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + __declspec(dllexport) TCHAR* __cdecl PluginName(void); + __declspec(dllexport) TCHAR* __cdecl PluginVersion(void); + __declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void); + __declspec(dllexport) DWORD __cdecl PluginDebugCheck(void); + +#ifdef __cplusplus +} +#endif + +TCHAR* sErrorMessage; \ No newline at end of file diff --git a/DD.Plugin.OutputDebugString/DD.Plugin.OutputDebugString.vcxproj b/DD.Plugin.OutputDebugString/DD.Plugin.OutputDebugString.vcxproj new file mode 100644 index 0000000..44fc5b0 --- /dev/null +++ b/DD.Plugin.OutputDebugString/DD.Plugin.OutputDebugString.vcxproj @@ -0,0 +1,146 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {7877EF61-890C-4190-B60B-369E1C703BB4} + Win32Proj + DDPluginOutputDebugString + + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINOUTPUTDEBUGSTRING_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINOUTPUTDEBUGSTRING_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + Level3 + + + Full + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINOUTPUTDEBUGSTRING_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINOUTPUTDEBUGSTRING_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/DD.Plugin.OutputDebugString/DD.Plugin.OutputDebugString.vcxproj.filters b/DD.Plugin.OutputDebugString/DD.Plugin.OutputDebugString.vcxproj.filters new file mode 100644 index 0000000..4aa3883 --- /dev/null +++ b/DD.Plugin.OutputDebugString/DD.Plugin.OutputDebugString.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Quelldateien + + + + + Headerdateien + + + \ No newline at end of file diff --git a/DD.Plugin.OutputDebugString/DD.Plugin.OutputDebugString.vcxproj.user b/DD.Plugin.OutputDebugString/DD.Plugin.OutputDebugString.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/DD.Plugin.OutputDebugString/DD.Plugin.OutputDebugString.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/DD.Plugin.OutputDebugString/DLLMain.cpp b/DD.Plugin.OutputDebugString/DLLMain.cpp new file mode 100644 index 0000000..fe2fc8a --- /dev/null +++ b/DD.Plugin.OutputDebugString/DLLMain.cpp @@ -0,0 +1,40 @@ +#include "DLLMain.h" + +BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) +{ + return true; +} + +__declspec(dllexport) TCHAR* __cdecl PluginName(void) +{ + return L"OutputDebugString"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginVersion(void) +{ + return L"0.1"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void) +{ + return sErrorMessage; +} + +__declspec(dllexport) DWORD __cdecl PluginDebugCheck(void) +{ + char szMessage[] = "DebugCheck"; + + __asm + { + xor eax,eax + lea ebx, szMessage + push ebx + call dword ptr OutputDebugStringA + cmp eax,1 + ja DebuggerFound + } + return 0; + + __asm{DebuggerFound:} + return 1; +} \ No newline at end of file diff --git a/DD.Plugin.OutputDebugString/DLLMain.h b/DD.Plugin.OutputDebugString/DLLMain.h new file mode 100644 index 0000000..c79fc18 --- /dev/null +++ b/DD.Plugin.OutputDebugString/DLLMain.h @@ -0,0 +1,16 @@ +#include + +#ifdef __cplusplus +extern "C" { +#endif + + __declspec(dllexport) TCHAR* __cdecl PluginName(void); + __declspec(dllexport) TCHAR* __cdecl PluginVersion(void); + __declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void); + __declspec(dllexport) DWORD __cdecl PluginDebugCheck(void); + +#ifdef __cplusplus +} +#endif + +TCHAR* sErrorMessage; \ No newline at end of file diff --git a/DD.Plugin.PEBDebugFlag/DD.Plugin.PEBDebugFlag.vcxproj b/DD.Plugin.PEBDebugFlag/DD.Plugin.PEBDebugFlag.vcxproj new file mode 100644 index 0000000..f2d535d --- /dev/null +++ b/DD.Plugin.PEBDebugFlag/DD.Plugin.PEBDebugFlag.vcxproj @@ -0,0 +1,146 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {35074703-DCA4-4085-8D5B-548E87B1A6B1} + Win32Proj + DDPluginPEBDebugFlag + + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINPEBDEBUGFLAG_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINPEBDEBUGFLAG_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + Level3 + + + Full + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINPEBDEBUGFLAG_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINPEBDEBUGFLAG_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/DD.Plugin.PEBDebugFlag/DD.Plugin.PEBDebugFlag.vcxproj.filters b/DD.Plugin.PEBDebugFlag/DD.Plugin.PEBDebugFlag.vcxproj.filters new file mode 100644 index 0000000..4aa3883 --- /dev/null +++ b/DD.Plugin.PEBDebugFlag/DD.Plugin.PEBDebugFlag.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Quelldateien + + + + + Headerdateien + + + \ No newline at end of file diff --git a/DD.Plugin.PEBDebugFlag/DD.Plugin.PEBDebugFlag.vcxproj.user b/DD.Plugin.PEBDebugFlag/DD.Plugin.PEBDebugFlag.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/DD.Plugin.PEBDebugFlag/DD.Plugin.PEBDebugFlag.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/DD.Plugin.PEBDebugFlag/DLLMain.cpp b/DD.Plugin.PEBDebugFlag/DLLMain.cpp new file mode 100644 index 0000000..e9c5b9b --- /dev/null +++ b/DD.Plugin.PEBDebugFlag/DLLMain.cpp @@ -0,0 +1,55 @@ +#include "DLLMain.h" + +BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) +{ + return true; +} + +__declspec(dllexport) TCHAR* __cdecl PluginName(void) +{ + return L"PEBDebugFlag"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginVersion(void) +{ + return L"0.1"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void) +{ + return sErrorMessage; +} + +__declspec(dllexport) DWORD __cdecl PluginDebugCheck(void) +{ + __asm + { + mov eax, fs:[18h] ;TEB + mov eax, [eax + 30h] ;PEB + movzx eax, [eax + 2h] ;BeingDebugged + cmp eax, 1h + je DebuggerDetected + } + + return 0; + __asm{DebuggerDetected:} + return 1; + + //PROCESS_BASIC_INFORMATION pPBI; + //HANDLE hDebugObject = NULL; + //NTSTATUS Status; + //typedef NTSTATUS (WINAPI *pNtQueryInformationProcess)(HANDLE,UINT,PVOID,ULONG,PULONG); + + //pNtQueryInformationProcess NtQIP = (pNtQueryInformationProcess)GetProcAddress(GetModuleHandle(L"ntdll.dll"),"NtQueryInformationProcess"); + + //Status = NtQIP(GetCurrentProcess(),0,&pPBI,sizeof(PROCESS_BASIC_INFORMATION),NULL); + + //if (Status == 0x00000000) + //{ + // if(pPBI.PebBaseAddress->BeingDebugged == 1) + // return true; + // else + // return false; + //} + //return false; +} \ No newline at end of file diff --git a/DD.Plugin.PEBDebugFlag/DLLMain.h b/DD.Plugin.PEBDebugFlag/DLLMain.h new file mode 100644 index 0000000..c79fc18 --- /dev/null +++ b/DD.Plugin.PEBDebugFlag/DLLMain.h @@ -0,0 +1,16 @@ +#include + +#ifdef __cplusplus +extern "C" { +#endif + + __declspec(dllexport) TCHAR* __cdecl PluginName(void); + __declspec(dllexport) TCHAR* __cdecl PluginVersion(void); + __declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void); + __declspec(dllexport) DWORD __cdecl PluginDebugCheck(void); + +#ifdef __cplusplus +} +#endif + +TCHAR* sErrorMessage; \ No newline at end of file diff --git a/DD.Plugin.PEBGlobalFlags/DD.Plugin.PEBGlobalFlags.vcxproj b/DD.Plugin.PEBGlobalFlags/DD.Plugin.PEBGlobalFlags.vcxproj new file mode 100644 index 0000000..a69baf1 --- /dev/null +++ b/DD.Plugin.PEBGlobalFlags/DD.Plugin.PEBGlobalFlags.vcxproj @@ -0,0 +1,146 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {CD4B8AE6-D5A3-4336-B430-09BCEAF874FE} + Win32Proj + DDPluginPEBGlobalFlags + + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINPEBGLOBALFLAGS_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINPEBGLOBALFLAGS_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + Level3 + + + Full + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINPEBGLOBALFLAGS_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINPEBGLOBALFLAGS_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/DD.Plugin.PEBGlobalFlags/DD.Plugin.PEBGlobalFlags.vcxproj.filters b/DD.Plugin.PEBGlobalFlags/DD.Plugin.PEBGlobalFlags.vcxproj.filters new file mode 100644 index 0000000..4aa3883 --- /dev/null +++ b/DD.Plugin.PEBGlobalFlags/DD.Plugin.PEBGlobalFlags.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Quelldateien + + + + + Headerdateien + + + \ No newline at end of file diff --git a/DD.Plugin.PEBGlobalFlags/DD.Plugin.PEBGlobalFlags.vcxproj.user b/DD.Plugin.PEBGlobalFlags/DD.Plugin.PEBGlobalFlags.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/DD.Plugin.PEBGlobalFlags/DD.Plugin.PEBGlobalFlags.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/DD.Plugin.PEBGlobalFlags/DLLMain.cpp b/DD.Plugin.PEBGlobalFlags/DLLMain.cpp new file mode 100644 index 0000000..e6d6561 --- /dev/null +++ b/DD.Plugin.PEBGlobalFlags/DLLMain.cpp @@ -0,0 +1,57 @@ +#include "DLLMain.h" + +BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) +{ + return true; +} + +__declspec(dllexport) TCHAR* __cdecl PluginName(void) +{ + return L"PEBGlobalFlag"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginVersion(void) +{ + return L"0.1"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void) +{ + return sErrorMessage; +} + +__declspec(dllexport) DWORD __cdecl PluginDebugCheck(void) +{ + __asm + { + mov eax, fs:[18h] ;TEB + mov eax, [eax + 30h] ;PEB + mov eax, [eax + 68h] ;NtGlobalFlag + cmp eax,70h + je DebuggerDetected + } + + return 0; + __asm{DebuggerDetected:} + return 1; + + //PROCESS_BASIC_INFORMATION pPBI; + //HANDLE hDebugObject = NULL; + //NTSTATUS Status; + //typedef NTSTATUS (WINAPI *pNtQueryInformationProcess)(HANDLE,UINT,PVOID,ULONG,PULONG); + + //pNtQueryInformationProcess NtQIP = (pNtQueryInformationProcess)GetProcAddress(GetModuleHandle(L"ntdll.dll"),"NtQueryInformationProcess"); + + //Status = NtQIP(GetCurrentProcess(),0,&pPBI,sizeof(PROCESS_BASIC_INFORMATION),NULL); + + //if (Status == 0x00000000) + //{ + // char* voFlag = (char*)pPBI.PebBaseAddress + 0x68; + + // if(*voFlag == 0x70) + // return true; + // else + // return false; + //} + //return false; +} \ No newline at end of file diff --git a/DD.Plugin.PEBGlobalFlags/DLLMain.h b/DD.Plugin.PEBGlobalFlags/DLLMain.h new file mode 100644 index 0000000..c79fc18 --- /dev/null +++ b/DD.Plugin.PEBGlobalFlags/DLLMain.h @@ -0,0 +1,16 @@ +#include + +#ifdef __cplusplus +extern "C" { +#endif + + __declspec(dllexport) TCHAR* __cdecl PluginName(void); + __declspec(dllexport) TCHAR* __cdecl PluginVersion(void); + __declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void); + __declspec(dllexport) DWORD __cdecl PluginDebugCheck(void); + +#ifdef __cplusplus +} +#endif + +TCHAR* sErrorMessage; \ No newline at end of file diff --git a/DD.Plugin.PEBProcHeapFlag/DD.Plugin.PEBProcHeapFlag.vcxproj b/DD.Plugin.PEBProcHeapFlag/DD.Plugin.PEBProcHeapFlag.vcxproj new file mode 100644 index 0000000..ba59044 --- /dev/null +++ b/DD.Plugin.PEBProcHeapFlag/DD.Plugin.PEBProcHeapFlag.vcxproj @@ -0,0 +1,146 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {B0370AE7-386D-46AF-AABB-34E5784944FA} + Win32Proj + DDPluginPEBProcHeapFlag + + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINPEBPROCHEAPFLAG_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINPEBPROCHEAPFLAG_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + Level3 + + + Full + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINPEBPROCHEAPFLAG_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINPEBPROCHEAPFLAG_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/DD.Plugin.PEBProcHeapFlag/DD.Plugin.PEBProcHeapFlag.vcxproj.filters b/DD.Plugin.PEBProcHeapFlag/DD.Plugin.PEBProcHeapFlag.vcxproj.filters new file mode 100644 index 0000000..4aa3883 --- /dev/null +++ b/DD.Plugin.PEBProcHeapFlag/DD.Plugin.PEBProcHeapFlag.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Quelldateien + + + + + Headerdateien + + + \ No newline at end of file diff --git a/DD.Plugin.PEBProcHeapFlag/DD.Plugin.PEBProcHeapFlag.vcxproj.user b/DD.Plugin.PEBProcHeapFlag/DD.Plugin.PEBProcHeapFlag.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/DD.Plugin.PEBProcHeapFlag/DD.Plugin.PEBProcHeapFlag.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/DD.Plugin.PEBProcHeapFlag/DLLMain.cpp b/DD.Plugin.PEBProcHeapFlag/DLLMain.cpp new file mode 100644 index 0000000..a01d4e4 --- /dev/null +++ b/DD.Plugin.PEBProcHeapFlag/DLLMain.cpp @@ -0,0 +1,78 @@ +#include "DLLMain.h" + +BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) +{ + return true; +} + +__declspec(dllexport) TCHAR* __cdecl PluginName(void) +{ + return L"PEBProcHeapFlag"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginVersion(void) +{ + return L"0.1"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void) +{ + return sErrorMessage; +} + +__declspec(dllexport) DWORD __cdecl PluginDebugCheck(void) +{ + if(GetWinVersion() == 3) + { + __asm + { + mov eax, fs:[18h] ;TEB + mov eax, [eax + 30h] ;PEB + mov eax, [eax + 18h] ;process heap + cmp [eax + 44h],0 ;heap force flags //seems changed on win7 xp = 10h + jne DebuggerDetected + } + } + else if (GetWinVersion() < 3) + { + __asm + { + mov eax, fs:[18h] ;TEB + mov eax, [eax + 30h] ;PEB + mov eax, [eax + 18h] ;process heap + cmp [eax + 10h],0 ;heap force flags //seems changed on win7 xp = 10h + jne DebuggerDetected + } + } + return 0; + __asm{DebuggerDetected:} + return 1; +} + +int GetWinVersion() +{ + OSVERSIONINFO osVerInfo; + OSVERSIONINFOEX osVerEx; + + ZeroMemory(&osVerInfo,sizeof(OSVERSIONINFO)); + ZeroMemory(&osVerEx,sizeof(OSVERSIONINFOEX)); + osVerInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + osVerEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); + + GetVersionEx(&osVerInfo); + GetVersionEx((OSVERSIONINFO*)&osVerEx); + + if(osVerInfo.dwMajorVersion == 5 && osVerInfo.dwMinorVersion == 0 ) + return 0;//WIN_2000; + + if(osVerInfo.dwMajorVersion == 5 && osVerInfo.dwMinorVersion == 1 ) + return 1;//WIN_XP; + + if(osVerInfo.dwMajorVersion == 6 && osVerInfo.dwMinorVersion == 0 && osVerEx.wProductType == VER_NT_WORKSTATION ) + return 2;//WIN_VISTA; + + if(osVerInfo.dwMajorVersion == 6 && osVerInfo.dwMinorVersion == 1 && osVerEx.wProductType == VER_NT_WORKSTATION ) + return 3;//WIN_7; + + return -1; +} \ No newline at end of file diff --git a/DD.Plugin.PEBProcHeapFlag/DLLMain.h b/DD.Plugin.PEBProcHeapFlag/DLLMain.h new file mode 100644 index 0000000..38032b1 --- /dev/null +++ b/DD.Plugin.PEBProcHeapFlag/DLLMain.h @@ -0,0 +1,18 @@ +#include + +#ifdef __cplusplus +extern "C" { +#endif + + __declspec(dllexport) TCHAR* __cdecl PluginName(void); + __declspec(dllexport) TCHAR* __cdecl PluginVersion(void); + __declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void); + __declspec(dllexport) DWORD __cdecl PluginDebugCheck(void); + +#ifdef __cplusplus +} +#endif + +int GetWinVersion(); + +TCHAR* sErrorMessage; \ No newline at end of file diff --git a/DD.Plugin.ParentProcess/DD.Plugin.ParentProcess.vcxproj b/DD.Plugin.ParentProcess/DD.Plugin.ParentProcess.vcxproj new file mode 100644 index 0000000..f26440c --- /dev/null +++ b/DD.Plugin.ParentProcess/DD.Plugin.ParentProcess.vcxproj @@ -0,0 +1,146 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {1B5C3EB4-63B2-4314-91FE-BC69537262A8} + Win32Proj + DDPluginParentProcess + + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINPARENTPROCESS_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINPARENTPROCESS_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + Level3 + + + Full + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINPARENTPROCESS_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINPARENTPROCESS_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/DD.Plugin.ParentProcess/DD.Plugin.ParentProcess.vcxproj.filters b/DD.Plugin.ParentProcess/DD.Plugin.ParentProcess.vcxproj.filters new file mode 100644 index 0000000..4aa3883 --- /dev/null +++ b/DD.Plugin.ParentProcess/DD.Plugin.ParentProcess.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Quelldateien + + + + + Headerdateien + + + \ No newline at end of file diff --git a/DD.Plugin.ParentProcess/DD.Plugin.ParentProcess.vcxproj.user b/DD.Plugin.ParentProcess/DD.Plugin.ParentProcess.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/DD.Plugin.ParentProcess/DD.Plugin.ParentProcess.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/DD.Plugin.ParentProcess/DLLMain.cpp b/DD.Plugin.ParentProcess/DLLMain.cpp new file mode 100644 index 0000000..2e6d348 --- /dev/null +++ b/DD.Plugin.ParentProcess/DLLMain.cpp @@ -0,0 +1,50 @@ +#include "DLLMain.h" + +BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) +{ + return true; +} + +__declspec(dllexport) TCHAR* __cdecl PluginName(void) +{ + return L"ParentProcess"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginVersion(void) +{ + return L"0.1"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void) +{ + return sErrorMessage; +} + +__declspec(dllexport) DWORD __cdecl PluginDebugCheck(void) +{ + HANDLE hProcessSnap = NULL,hProc = NULL; + PROCESSENTRY32W pe32w; + DWORD dwThis = 0,dwExplorer = 0; + + hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); + if(hProcessSnap != INVALID_HANDLE_VALUE) + { + pe32w.dwSize = sizeof(PROCESSENTRY32W); + if(Process32First(hProcessSnap,&pe32w)) + { + do + { + if(wcsstr(pe32w.szExeFile,L"explorer.exe") != NULL) + dwExplorer = pe32w.th32ProcessID; + else if(pe32w.th32ProcessID == GetCurrentProcessId()) + dwThis = pe32w.th32ParentProcessID; + } while(Process32Next(hProcessSnap,&pe32w)); + } + CloseHandle(hProcessSnap); + } + + if(dwThis == dwExplorer) + return 0; + else + return 1; +} \ No newline at end of file diff --git a/DD.Plugin.ParentProcess/DLLMain.h b/DD.Plugin.ParentProcess/DLLMain.h new file mode 100644 index 0000000..eca1609 --- /dev/null +++ b/DD.Plugin.ParentProcess/DLLMain.h @@ -0,0 +1,17 @@ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + __declspec(dllexport) TCHAR* __cdecl PluginName(void); + __declspec(dllexport) TCHAR* __cdecl PluginVersion(void); + __declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void); + __declspec(dllexport) DWORD __cdecl PluginDebugCheck(void); + +#ifdef __cplusplus +} +#endif + +TCHAR* sErrorMessage; \ No newline at end of file diff --git a/DD.Plugin.ProcessDebugFlag/DD.Plugin.ProcessDebugFlag.vcxproj b/DD.Plugin.ProcessDebugFlag/DD.Plugin.ProcessDebugFlag.vcxproj new file mode 100644 index 0000000..04e6af6 --- /dev/null +++ b/DD.Plugin.ProcessDebugFlag/DD.Plugin.ProcessDebugFlag.vcxproj @@ -0,0 +1,146 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {DE1B58DE-B1C1-41CC-8E00-DA072EAB1066} + Win32Proj + DDPluginProcessDebugFlag + + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINPROCESSDEBUGFLAG_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINPROCESSDEBUGFLAG_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + Level3 + + + Full + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINPROCESSDEBUGFLAG_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINPROCESSDEBUGFLAG_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/DD.Plugin.ProcessDebugFlag/DD.Plugin.ProcessDebugFlag.vcxproj.filters b/DD.Plugin.ProcessDebugFlag/DD.Plugin.ProcessDebugFlag.vcxproj.filters new file mode 100644 index 0000000..4aa3883 --- /dev/null +++ b/DD.Plugin.ProcessDebugFlag/DD.Plugin.ProcessDebugFlag.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Quelldateien + + + + + Headerdateien + + + \ No newline at end of file diff --git a/DD.Plugin.ProcessDebugFlag/DD.Plugin.ProcessDebugFlag.vcxproj.user b/DD.Plugin.ProcessDebugFlag/DD.Plugin.ProcessDebugFlag.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/DD.Plugin.ProcessDebugFlag/DD.Plugin.ProcessDebugFlag.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/DD.Plugin.ProcessDebugFlag/DLLMain.cpp b/DD.Plugin.ProcessDebugFlag/DLLMain.cpp new file mode 100644 index 0000000..258652f --- /dev/null +++ b/DD.Plugin.ProcessDebugFlag/DLLMain.cpp @@ -0,0 +1,45 @@ +#include "DLLMain.h" + +BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) +{ + return true; +} + +__declspec(dllexport) TCHAR* __cdecl PluginName(void) +{ + return L"ProcessDebugFlags"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginVersion(void) +{ + return L"0.1"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void) +{ + return sErrorMessage; +} + +__declspec(dllexport) DWORD __cdecl PluginDebugCheck(void) +{ + typedef NTSTATUS (WINAPI *pNtQueryInformationProcess)(HANDLE ,UINT ,PVOID ,ULONG , PULONG); + + DWORD NoDebugInherit = 0; + NTSTATUS Status; + + pNtQueryInformationProcess NtQIP = (pNtQueryInformationProcess)GetProcAddress(GetModuleHandle(L"ntdll.dll"),"NtQueryInformationProcess"); + + Status = NtQIP(GetCurrentProcess(),0x1f,&NoDebugInherit,4,NULL); + + if (Status != 0x00000000) + { + sErrorMessage = (TCHAR*)malloc(255); + wsprintf(sErrorMessage,L"0x%08",Status); + return -1; + } + + if(NoDebugInherit == FALSE) + return 1; + else + return 0; +} \ No newline at end of file diff --git a/DD.Plugin.ProcessDebugFlag/DLLMain.h b/DD.Plugin.ProcessDebugFlag/DLLMain.h new file mode 100644 index 0000000..c79fc18 --- /dev/null +++ b/DD.Plugin.ProcessDebugFlag/DLLMain.h @@ -0,0 +1,16 @@ +#include + +#ifdef __cplusplus +extern "C" { +#endif + + __declspec(dllexport) TCHAR* __cdecl PluginName(void); + __declspec(dllexport) TCHAR* __cdecl PluginVersion(void); + __declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void); + __declspec(dllexport) DWORD __cdecl PluginDebugCheck(void); + +#ifdef __cplusplus +} +#endif + +TCHAR* sErrorMessage; \ No newline at end of file diff --git a/DD.Plugin.UnhandledException/DD.Plugin.UnhandledException.vcxproj b/DD.Plugin.UnhandledException/DD.Plugin.UnhandledException.vcxproj new file mode 100644 index 0000000..6def374 --- /dev/null +++ b/DD.Plugin.UnhandledException/DD.Plugin.UnhandledException.vcxproj @@ -0,0 +1,146 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {565AFF97-5D1F-43EB-A6CE-DA997EF70D50} + Win32Proj + DDPluginUnhandledException + + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + DynamicLibrary + false + true + Unicode + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINUNHANDLEDEXCEPTION_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;DDPLUGINUNHANDLEDEXCEPTION_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + + + + + Level3 + + + Full + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINUNHANDLEDEXCEPTION_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;DDPLUGINUNHANDLEDEXCEPTION_EXPORTS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/DD.Plugin.UnhandledException/DD.Plugin.UnhandledException.vcxproj.filters b/DD.Plugin.UnhandledException/DD.Plugin.UnhandledException.vcxproj.filters new file mode 100644 index 0000000..4aa3883 --- /dev/null +++ b/DD.Plugin.UnhandledException/DD.Plugin.UnhandledException.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Quelldateien + + + + + Headerdateien + + + \ No newline at end of file diff --git a/DD.Plugin.UnhandledException/DD.Plugin.UnhandledException.vcxproj.user b/DD.Plugin.UnhandledException/DD.Plugin.UnhandledException.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/DD.Plugin.UnhandledException/DD.Plugin.UnhandledException.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/DD.Plugin.UnhandledException/DLLMain.cpp b/DD.Plugin.UnhandledException/DLLMain.cpp new file mode 100644 index 0000000..ca4fc88 --- /dev/null +++ b/DD.Plugin.UnhandledException/DLLMain.cpp @@ -0,0 +1,42 @@ +#include "DLLMain.h" + +BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) +{ + return true; +} + +__declspec(dllexport) TCHAR* __cdecl PluginName(void) +{ + return L"Unhandled Exception"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginVersion(void) +{ + return L"0.1"; +} + +__declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void) +{ + return sErrorMessage; +} + +__declspec(dllexport) DWORD __cdecl PluginDebugCheck(void) +{ + SetUnhandledExceptionFilter(UnhandledExcepFilter); + __asm + { + xor eax, eax + div eax + } + + return 0; +} + +LONG WINAPI UnhandledExcepFilter(PEXCEPTION_POINTERS pExcepPointers) +{ + SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)pExcepPointers->ContextRecord->Eax); + + pExcepPointers->ContextRecord->Eip += 2; + + return EXCEPTION_CONTINUE_EXECUTION; +} diff --git a/DD.Plugin.UnhandledException/DLLMain.h b/DD.Plugin.UnhandledException/DLLMain.h new file mode 100644 index 0000000..1f4b36c --- /dev/null +++ b/DD.Plugin.UnhandledException/DLLMain.h @@ -0,0 +1,18 @@ +#include + +#ifdef __cplusplus +extern "C" { +#endif + + __declspec(dllexport) TCHAR* __cdecl PluginName(void); + __declspec(dllexport) TCHAR* __cdecl PluginVersion(void); + __declspec(dllexport) TCHAR* __cdecl PluginErrorMessage(void); + __declspec(dllexport) DWORD __cdecl PluginDebugCheck(void); + +#ifdef __cplusplus +} +#endif + +LONG WINAPI UnhandledExcepFilter(PEXCEPTION_POINTERS pExcepPointers); + +TCHAR* sErrorMessage; \ No newline at end of file diff --git a/DebugDetector.sln b/DebugDetector.sln new file mode 100644 index 0000000..75dc315 --- /dev/null +++ b/DebugDetector.sln @@ -0,0 +1,185 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DebugDetector", "DebugDetector\DebugDetector.vcxproj", "{290D1AC8-C7F5-43F9-977F-E78B8FA59E5D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DD.Plugin.IsDebuggerPresent", "DD.Plugin.IsDebuggerPresent\DD.Plugin.IsDebuggerPresent.vcxproj", "{88549293-AA98-4E27-AA04-2696AAD141FB}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DD.Plugin.CheckRemoteDebuggerPresent", "DD.Plugin.CheckRemoteDebuggerPresent\DD.Plugin.CheckRemoteDebuggerPresent.vcxproj", "{55C478DF-FC39-4BB5-A37C-EE81E4BBA12A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DD.Plugin.OutputDebugString", "DD.Plugin.OutputDebugString\DD.Plugin.OutputDebugString.vcxproj", "{7877EF61-890C-4190-B60B-369E1C703BB4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DD.Plugin.OpenCSRSS", "DD.Plugin.OpenCSRSS\DD.Plugin.OpenCSRSS.vcxproj", "{37FD77D1-5F5E-4132-A320-41D97D091F42}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DD.Plugin.MemoryBreakpoint", "DD.Plugin.MemoryBreakpoint\DD.Plugin.MemoryBreakpoint.vcxproj", "{81A1BF40-3F97-43E2-B84A-6D787278900F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DD.Plugin.HardwareBreakpoint", "DD.Plugin.HardwareBreakpoint\DD.Plugin.HardwareBreakpoint.vcxproj", "{A2F953E5-622D-4302-A630-E4E4D5988C60}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DD.Plugin.ProcessDebugFlag", "DD.Plugin.ProcessDebugFlag\DD.Plugin.ProcessDebugFlag.vcxproj", "{DE1B58DE-B1C1-41CC-8E00-DA072EAB1066}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DD.Plugin.DebugObject", "DD.Plugin.DebugObject\DD.Plugin.DebugObject.vcxproj", "{3A3E2EE6-1EC5-4FB2-8009-CE4F1F0A5A6A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DD.Plugin.ParentProcess", "DD.Plugin.ParentProcess\DD.Plugin.ParentProcess.vcxproj", "{1B5C3EB4-63B2-4314-91FE-BC69537262A8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DD.Plugin.UnhandledException", "DD.Plugin.UnhandledException\DD.Plugin.UnhandledException.vcxproj", "{565AFF97-5D1F-43EB-A6CE-DA997EF70D50}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{A696071B-0766-46BC-94CE-929530321D6F}" + ProjectSection(SolutionItems) = preProject + ReadMe.txt = ReadMe.txt + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DD.Plugin.PEBDebugFlag", "DD.Plugin.PEBDebugFlag\DD.Plugin.PEBDebugFlag.vcxproj", "{35074703-DCA4-4085-8D5B-548E87B1A6B1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DD.Plugin.PEBGlobalFlags", "DD.Plugin.PEBGlobalFlags\DD.Plugin.PEBGlobalFlags.vcxproj", "{CD4B8AE6-D5A3-4336-B430-09BCEAF874FE}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DD.Plugin.PEBProcHeapFlag", "DD.Plugin.PEBProcHeapFlag\DD.Plugin.PEBProcHeapFlag.vcxproj", "{B0370AE7-386D-46AF-AABB-34E5784944FA}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DD.Plugin.FindBadProcesses", "DD.Plugin.FindBadProcesses\DD.Plugin.FindBadProcesses.vcxproj", "{FC1FB81C-8272-4B79-B807-1331335DFA0A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DD.Plugin.FindBadWindows", "DD.Plugin.FindBadWindows\DD.Plugin.FindBadWindows.vcxproj", "{83557B77-5625-49F4-B246-BD7BBDB78687}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DD.Plugin.FindBadDrivers", "DD.Plugin.FindBadDrivers\DD.Plugin.FindBadDrivers.vcxproj", "{534F66C5-627F-4086-BD7D-D8BA55189E30}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {290D1AC8-C7F5-43F9-977F-E78B8FA59E5D}.Debug|Win32.ActiveCfg = Debug|Win32 + {290D1AC8-C7F5-43F9-977F-E78B8FA59E5D}.Debug|Win32.Build.0 = Debug|Win32 + {290D1AC8-C7F5-43F9-977F-E78B8FA59E5D}.Debug|x64.ActiveCfg = Debug|x64 + {290D1AC8-C7F5-43F9-977F-E78B8FA59E5D}.Debug|x64.Build.0 = Debug|x64 + {290D1AC8-C7F5-43F9-977F-E78B8FA59E5D}.Release|Win32.ActiveCfg = Release|Win32 + {290D1AC8-C7F5-43F9-977F-E78B8FA59E5D}.Release|Win32.Build.0 = Release|Win32 + {290D1AC8-C7F5-43F9-977F-E78B8FA59E5D}.Release|x64.ActiveCfg = Release|x64 + {290D1AC8-C7F5-43F9-977F-E78B8FA59E5D}.Release|x64.Build.0 = Release|x64 + {88549293-AA98-4E27-AA04-2696AAD141FB}.Debug|Win32.ActiveCfg = Debug|Win32 + {88549293-AA98-4E27-AA04-2696AAD141FB}.Debug|Win32.Build.0 = Debug|Win32 + {88549293-AA98-4E27-AA04-2696AAD141FB}.Debug|x64.ActiveCfg = Debug|x64 + {88549293-AA98-4E27-AA04-2696AAD141FB}.Debug|x64.Build.0 = Debug|x64 + {88549293-AA98-4E27-AA04-2696AAD141FB}.Release|Win32.ActiveCfg = Release|Win32 + {88549293-AA98-4E27-AA04-2696AAD141FB}.Release|Win32.Build.0 = Release|Win32 + {88549293-AA98-4E27-AA04-2696AAD141FB}.Release|x64.ActiveCfg = Release|x64 + {88549293-AA98-4E27-AA04-2696AAD141FB}.Release|x64.Build.0 = Release|x64 + {55C478DF-FC39-4BB5-A37C-EE81E4BBA12A}.Debug|Win32.ActiveCfg = Debug|Win32 + {55C478DF-FC39-4BB5-A37C-EE81E4BBA12A}.Debug|Win32.Build.0 = Debug|Win32 + {55C478DF-FC39-4BB5-A37C-EE81E4BBA12A}.Debug|x64.ActiveCfg = Debug|x64 + {55C478DF-FC39-4BB5-A37C-EE81E4BBA12A}.Debug|x64.Build.0 = Debug|x64 + {55C478DF-FC39-4BB5-A37C-EE81E4BBA12A}.Release|Win32.ActiveCfg = Release|Win32 + {55C478DF-FC39-4BB5-A37C-EE81E4BBA12A}.Release|Win32.Build.0 = Release|Win32 + {55C478DF-FC39-4BB5-A37C-EE81E4BBA12A}.Release|x64.ActiveCfg = Release|x64 + {55C478DF-FC39-4BB5-A37C-EE81E4BBA12A}.Release|x64.Build.0 = Release|x64 + {7877EF61-890C-4190-B60B-369E1C703BB4}.Debug|Win32.ActiveCfg = Debug|Win32 + {7877EF61-890C-4190-B60B-369E1C703BB4}.Debug|Win32.Build.0 = Debug|Win32 + {7877EF61-890C-4190-B60B-369E1C703BB4}.Debug|x64.ActiveCfg = Debug|x64 + {7877EF61-890C-4190-B60B-369E1C703BB4}.Debug|x64.Build.0 = Debug|x64 + {7877EF61-890C-4190-B60B-369E1C703BB4}.Release|Win32.ActiveCfg = Release|Win32 + {7877EF61-890C-4190-B60B-369E1C703BB4}.Release|Win32.Build.0 = Release|Win32 + {7877EF61-890C-4190-B60B-369E1C703BB4}.Release|x64.ActiveCfg = Release|x64 + {7877EF61-890C-4190-B60B-369E1C703BB4}.Release|x64.Build.0 = Release|x64 + {37FD77D1-5F5E-4132-A320-41D97D091F42}.Debug|Win32.ActiveCfg = Debug|Win32 + {37FD77D1-5F5E-4132-A320-41D97D091F42}.Debug|Win32.Build.0 = Debug|Win32 + {37FD77D1-5F5E-4132-A320-41D97D091F42}.Debug|x64.ActiveCfg = Debug|x64 + {37FD77D1-5F5E-4132-A320-41D97D091F42}.Debug|x64.Build.0 = Debug|x64 + {37FD77D1-5F5E-4132-A320-41D97D091F42}.Release|Win32.ActiveCfg = Release|Win32 + {37FD77D1-5F5E-4132-A320-41D97D091F42}.Release|Win32.Build.0 = Release|Win32 + {37FD77D1-5F5E-4132-A320-41D97D091F42}.Release|x64.ActiveCfg = Release|x64 + {37FD77D1-5F5E-4132-A320-41D97D091F42}.Release|x64.Build.0 = Release|x64 + {81A1BF40-3F97-43E2-B84A-6D787278900F}.Debug|Win32.ActiveCfg = Debug|Win32 + {81A1BF40-3F97-43E2-B84A-6D787278900F}.Debug|Win32.Build.0 = Debug|Win32 + {81A1BF40-3F97-43E2-B84A-6D787278900F}.Debug|x64.ActiveCfg = Debug|x64 + {81A1BF40-3F97-43E2-B84A-6D787278900F}.Debug|x64.Build.0 = Debug|x64 + {81A1BF40-3F97-43E2-B84A-6D787278900F}.Release|Win32.ActiveCfg = Release|Win32 + {81A1BF40-3F97-43E2-B84A-6D787278900F}.Release|Win32.Build.0 = Release|Win32 + {81A1BF40-3F97-43E2-B84A-6D787278900F}.Release|x64.ActiveCfg = Release|x64 + {81A1BF40-3F97-43E2-B84A-6D787278900F}.Release|x64.Build.0 = Release|x64 + {A2F953E5-622D-4302-A630-E4E4D5988C60}.Debug|Win32.ActiveCfg = Debug|Win32 + {A2F953E5-622D-4302-A630-E4E4D5988C60}.Debug|Win32.Build.0 = Debug|Win32 + {A2F953E5-622D-4302-A630-E4E4D5988C60}.Debug|x64.ActiveCfg = Debug|x64 + {A2F953E5-622D-4302-A630-E4E4D5988C60}.Debug|x64.Build.0 = Debug|x64 + {A2F953E5-622D-4302-A630-E4E4D5988C60}.Release|Win32.ActiveCfg = Release|Win32 + {A2F953E5-622D-4302-A630-E4E4D5988C60}.Release|Win32.Build.0 = Release|Win32 + {A2F953E5-622D-4302-A630-E4E4D5988C60}.Release|x64.ActiveCfg = Release|x64 + {A2F953E5-622D-4302-A630-E4E4D5988C60}.Release|x64.Build.0 = Release|x64 + {DE1B58DE-B1C1-41CC-8E00-DA072EAB1066}.Debug|Win32.ActiveCfg = Debug|Win32 + {DE1B58DE-B1C1-41CC-8E00-DA072EAB1066}.Debug|Win32.Build.0 = Debug|Win32 + {DE1B58DE-B1C1-41CC-8E00-DA072EAB1066}.Debug|x64.ActiveCfg = Debug|x64 + {DE1B58DE-B1C1-41CC-8E00-DA072EAB1066}.Debug|x64.Build.0 = Debug|x64 + {DE1B58DE-B1C1-41CC-8E00-DA072EAB1066}.Release|Win32.ActiveCfg = Release|Win32 + {DE1B58DE-B1C1-41CC-8E00-DA072EAB1066}.Release|Win32.Build.0 = Release|Win32 + {DE1B58DE-B1C1-41CC-8E00-DA072EAB1066}.Release|x64.ActiveCfg = Release|x64 + {DE1B58DE-B1C1-41CC-8E00-DA072EAB1066}.Release|x64.Build.0 = Release|x64 + {3A3E2EE6-1EC5-4FB2-8009-CE4F1F0A5A6A}.Debug|Win32.ActiveCfg = Debug|Win32 + {3A3E2EE6-1EC5-4FB2-8009-CE4F1F0A5A6A}.Debug|Win32.Build.0 = Debug|Win32 + {3A3E2EE6-1EC5-4FB2-8009-CE4F1F0A5A6A}.Debug|x64.ActiveCfg = Debug|x64 + {3A3E2EE6-1EC5-4FB2-8009-CE4F1F0A5A6A}.Debug|x64.Build.0 = Debug|x64 + {3A3E2EE6-1EC5-4FB2-8009-CE4F1F0A5A6A}.Release|Win32.ActiveCfg = Release|Win32 + {3A3E2EE6-1EC5-4FB2-8009-CE4F1F0A5A6A}.Release|Win32.Build.0 = Release|Win32 + {3A3E2EE6-1EC5-4FB2-8009-CE4F1F0A5A6A}.Release|x64.ActiveCfg = Release|x64 + {3A3E2EE6-1EC5-4FB2-8009-CE4F1F0A5A6A}.Release|x64.Build.0 = Release|x64 + {1B5C3EB4-63B2-4314-91FE-BC69537262A8}.Debug|Win32.ActiveCfg = Debug|Win32 + {1B5C3EB4-63B2-4314-91FE-BC69537262A8}.Debug|Win32.Build.0 = Debug|Win32 + {1B5C3EB4-63B2-4314-91FE-BC69537262A8}.Debug|x64.ActiveCfg = Debug|x64 + {1B5C3EB4-63B2-4314-91FE-BC69537262A8}.Debug|x64.Build.0 = Debug|x64 + {1B5C3EB4-63B2-4314-91FE-BC69537262A8}.Release|Win32.ActiveCfg = Release|Win32 + {1B5C3EB4-63B2-4314-91FE-BC69537262A8}.Release|Win32.Build.0 = Release|Win32 + {1B5C3EB4-63B2-4314-91FE-BC69537262A8}.Release|x64.ActiveCfg = Release|x64 + {1B5C3EB4-63B2-4314-91FE-BC69537262A8}.Release|x64.Build.0 = Release|x64 + {565AFF97-5D1F-43EB-A6CE-DA997EF70D50}.Debug|Win32.ActiveCfg = Debug|Win32 + {565AFF97-5D1F-43EB-A6CE-DA997EF70D50}.Debug|Win32.Build.0 = Debug|Win32 + {565AFF97-5D1F-43EB-A6CE-DA997EF70D50}.Debug|x64.ActiveCfg = Debug|x64 + {565AFF97-5D1F-43EB-A6CE-DA997EF70D50}.Debug|x64.Build.0 = Debug|x64 + {565AFF97-5D1F-43EB-A6CE-DA997EF70D50}.Release|Win32.ActiveCfg = Release|Win32 + {565AFF97-5D1F-43EB-A6CE-DA997EF70D50}.Release|Win32.Build.0 = Release|Win32 + {565AFF97-5D1F-43EB-A6CE-DA997EF70D50}.Release|x64.ActiveCfg = Release|x64 + {565AFF97-5D1F-43EB-A6CE-DA997EF70D50}.Release|x64.Build.0 = Release|x64 + {35074703-DCA4-4085-8D5B-548E87B1A6B1}.Debug|Win32.ActiveCfg = Debug|Win32 + {35074703-DCA4-4085-8D5B-548E87B1A6B1}.Debug|Win32.Build.0 = Debug|Win32 + {35074703-DCA4-4085-8D5B-548E87B1A6B1}.Debug|x64.ActiveCfg = Debug|x64 + {35074703-DCA4-4085-8D5B-548E87B1A6B1}.Debug|x64.Build.0 = Debug|x64 + {35074703-DCA4-4085-8D5B-548E87B1A6B1}.Release|Win32.ActiveCfg = Release|Win32 + {35074703-DCA4-4085-8D5B-548E87B1A6B1}.Release|Win32.Build.0 = Release|Win32 + {35074703-DCA4-4085-8D5B-548E87B1A6B1}.Release|x64.ActiveCfg = Release|x64 + {35074703-DCA4-4085-8D5B-548E87B1A6B1}.Release|x64.Build.0 = Release|x64 + {CD4B8AE6-D5A3-4336-B430-09BCEAF874FE}.Debug|Win32.ActiveCfg = Debug|Win32 + {CD4B8AE6-D5A3-4336-B430-09BCEAF874FE}.Debug|Win32.Build.0 = Debug|Win32 + {CD4B8AE6-D5A3-4336-B430-09BCEAF874FE}.Debug|x64.ActiveCfg = Debug|x64 + {CD4B8AE6-D5A3-4336-B430-09BCEAF874FE}.Debug|x64.Build.0 = Debug|x64 + {CD4B8AE6-D5A3-4336-B430-09BCEAF874FE}.Release|Win32.ActiveCfg = Release|Win32 + {CD4B8AE6-D5A3-4336-B430-09BCEAF874FE}.Release|Win32.Build.0 = Release|Win32 + {CD4B8AE6-D5A3-4336-B430-09BCEAF874FE}.Release|x64.ActiveCfg = Release|x64 + {CD4B8AE6-D5A3-4336-B430-09BCEAF874FE}.Release|x64.Build.0 = Release|x64 + {B0370AE7-386D-46AF-AABB-34E5784944FA}.Debug|Win32.ActiveCfg = Debug|Win32 + {B0370AE7-386D-46AF-AABB-34E5784944FA}.Debug|Win32.Build.0 = Debug|Win32 + {B0370AE7-386D-46AF-AABB-34E5784944FA}.Debug|x64.ActiveCfg = Debug|x64 + {B0370AE7-386D-46AF-AABB-34E5784944FA}.Debug|x64.Build.0 = Debug|x64 + {B0370AE7-386D-46AF-AABB-34E5784944FA}.Release|Win32.ActiveCfg = Release|Win32 + {B0370AE7-386D-46AF-AABB-34E5784944FA}.Release|Win32.Build.0 = Release|Win32 + {B0370AE7-386D-46AF-AABB-34E5784944FA}.Release|x64.ActiveCfg = Release|x64 + {B0370AE7-386D-46AF-AABB-34E5784944FA}.Release|x64.Build.0 = Release|x64 + {FC1FB81C-8272-4B79-B807-1331335DFA0A}.Debug|Win32.ActiveCfg = Debug|Win32 + {FC1FB81C-8272-4B79-B807-1331335DFA0A}.Debug|Win32.Build.0 = Debug|Win32 + {FC1FB81C-8272-4B79-B807-1331335DFA0A}.Debug|x64.ActiveCfg = Debug|Win32 + {FC1FB81C-8272-4B79-B807-1331335DFA0A}.Release|Win32.ActiveCfg = Release|Win32 + {FC1FB81C-8272-4B79-B807-1331335DFA0A}.Release|Win32.Build.0 = Release|Win32 + {FC1FB81C-8272-4B79-B807-1331335DFA0A}.Release|x64.ActiveCfg = Release|Win32 + {83557B77-5625-49F4-B246-BD7BBDB78687}.Debug|Win32.ActiveCfg = Debug|Win32 + {83557B77-5625-49F4-B246-BD7BBDB78687}.Debug|Win32.Build.0 = Debug|Win32 + {83557B77-5625-49F4-B246-BD7BBDB78687}.Debug|x64.ActiveCfg = Debug|Win32 + {83557B77-5625-49F4-B246-BD7BBDB78687}.Release|Win32.ActiveCfg = Release|Win32 + {83557B77-5625-49F4-B246-BD7BBDB78687}.Release|Win32.Build.0 = Release|Win32 + {83557B77-5625-49F4-B246-BD7BBDB78687}.Release|x64.ActiveCfg = Release|Win32 + {534F66C5-627F-4086-BD7D-D8BA55189E30}.Debug|Win32.ActiveCfg = Debug|Win32 + {534F66C5-627F-4086-BD7D-D8BA55189E30}.Debug|Win32.Build.0 = Debug|Win32 + {534F66C5-627F-4086-BD7D-D8BA55189E30}.Debug|x64.ActiveCfg = Debug|Win32 + {534F66C5-627F-4086-BD7D-D8BA55189E30}.Release|Win32.ActiveCfg = Release|Win32 + {534F66C5-627F-4086-BD7D-D8BA55189E30}.Release|Win32.Build.0 = Release|Win32 + {534F66C5-627F-4086-BD7D-D8BA55189E30}.Release|x64.ActiveCfg = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/DebugDetector.suo b/DebugDetector.suo new file mode 100644 index 0000000000000000000000000000000000000000..74bfb86173162ac7266a002c05d82ee8fe3a88dc GIT binary patch literal 51200 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 literal 0 HcmV?d00001 diff --git a/DebugDetector/DDMain.cpp b/DebugDetector/DDMain.cpp new file mode 100644 index 0000000..24d6ae4 --- /dev/null +++ b/DebugDetector/DDMain.cpp @@ -0,0 +1,162 @@ +#include "DDMain.h" + +INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow) +{ + DialogBox(hInstance,MAKEINTRESOURCE(IDD_MAINFRAME),NULL,reinterpret_cast(MainDLGProc)); + return false; +} + +LRESULT CALLBACK MainDLGProc(HWND hWndDlg, UINT Msg, WPARAM wParam, LPARAM lParam) +{ + hwDlgMainFrame = hWndDlg; + switch(Msg) + { + case WM_INITDIALOG: + { + LVCOLUMN LvCol; + HWND hwPluginList = GetDlgItem(hwDlgMainFrame,IDC_PLUGINS); + SendMessage(hwPluginList,LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); + + memset(&LvCol,0,sizeof(LvCol)); + LvCol.mask=LVCF_TEXT|LVCF_WIDTH|LVCF_SUBITEM; + LvCol.pszText = L"Name"; + LvCol.cx = 0x100; + SendMessage(hwPluginList,LVM_INSERTCOLUMN,0,(LPARAM)&LvCol); + LvCol.pszText = L"Version"; + LvCol.cx = 0x30; + SendMessage(hwPluginList,LVM_INSERTCOLUMN,1,(LPARAM)&LvCol); + LvCol.pszText = L"Debugged"; + LvCol.cx = 0x40; + SendMessage(hwPluginList,LVM_INSERTCOLUMN,2,(LPARAM)&LvCol); + LvCol.pszText = L"ErrorMessage"; + LvCol.cx = 0x80; + SendMessage(hwPluginList,LVM_INSERTCOLUMN,3,(LPARAM)&LvCol); + + if(!LoadPlugins()) + { + MessageBox(hwDlgMainFrame,L"No Plugins found!",L"Debug Detector",MB_OK); + EndDialog(hwDlgMainFrame,0); + } + else + { + ExecutePlugins(); + TCHAR* sTemp = (TCHAR*)malloc(255); + swprintf(sTemp,L"DebugCheck: loaded %d Plugins! - %d of %d detections - ratio: %0.2f %%", + vPluginList.size(), + iDetectNum, + vPluginList.size(), + ((iDetectNum* 1.0 / vPluginList.size() * 1.0) * 100)); + + SetWindowTextW(GetDlgItem(hwDlgMainFrame,IDC_STATE),sTemp); + free(sTemp); + } + return true; + } + case WM_CLOSE: + { + EndDialog(hwDlgMainFrame,0); + return true; + } + } + return false; +} + +bool LoadPlugins() +{ + WIN32_FIND_DATA FindDataw32; + HANDLE hFind = INVALID_HANDLE_VALUE; + + TCHAR* szCurDir = (TCHAR*)malloc(MAX_PATH); + GetCurrentDirectory(MAX_PATH,szCurDir); + wcscat(szCurDir,L"\\*"); + + hFind = FindFirstFile(szCurDir,&FindDataw32); + + if (INVALID_HANDLE_VALUE == hFind) + return false; + + do + { + if (!(FindDataw32.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) + { + if(wcsstr(FindDataw32.cFileName,L".dll") != NULL) + { + HMODULE hPlugin = LoadLibrary(FindDataw32.cFileName); + + if(hPlugin != NULL) + { + srcPlugin newPlugin; + newPlugin.dwVersion = (DWORD)GetProcAddress(hPlugin,"PluginVersion"); + newPlugin.dwName = (DWORD)GetProcAddress(hPlugin,"PluginName"); + newPlugin.dwDebugCheck = (DWORD)GetProcAddress(hPlugin,"PluginDebugCheck"); + newPlugin.dwErrorMessage = (DWORD)GetProcAddress(hPlugin,"PluginErrorMessage"); + newPlugin.hPlugin = hPlugin; + + if(newPlugin.dwDebugCheck != NULL && newPlugin.dwName != NULL && newPlugin.dwVersion != NULL && newPlugin.dwErrorMessage != NULL) + vPluginList.push_back(newPlugin); + else + FreeLibrary(hPlugin); + } + } + } + } + while (FindNextFile(hFind,&FindDataw32) != 0); + + free(szCurDir); + if(vPluginList.size() > 0) + return true; + else + return false; +} + +bool ExecutePlugins() +{ + for(int i = 0; i < vPluginList.size(); i++) + { + PluginName newPluginName = (PluginName)vPluginList[i].dwName; + PluginVersion newPluginVersion = (PluginVersion)vPluginList[i].dwVersion; + PluginDebugCheck newPluginDebugCheck = (PluginDebugCheck)vPluginList[i].dwDebugCheck; + PluginErrorMessage newPluginErrorMessage = (PluginErrorMessage)vPluginList[i].dwErrorMessage; + + LVITEM LvItem; + TCHAR* sTemp = (TCHAR*)malloc(255); + HWND hwPluginList = GetDlgItem(hwDlgMainFrame,IDC_PLUGINS); + int itemIndex = SendMessage(hwPluginList,LVM_GETITEMCOUNT,0,0); + + memset(&LvItem,0,sizeof(LvItem)); + wsprintf(sTemp,L"%s",newPluginName()); + LvItem.mask = LVIF_TEXT; + LvItem.cchTextMax = 255; + LvItem.iItem = itemIndex; + LvItem.iSubItem = 0; + LvItem.pszText = sTemp; + SendMessage(hwPluginList,LVM_INSERTITEM,0,(LPARAM)&LvItem); + + wsprintf(sTemp,L"%s",newPluginVersion()); + LvItem.iSubItem = 1; + SendMessage(hwPluginList,LVM_SETITEM,0,(LPARAM)&LvItem); + + memset(sTemp,0,255); + switch(newPluginDebugCheck()) + { + case 0: + wsprintf(sTemp,L"%s",L"FALSE"); + break; + case 1: + wsprintf(sTemp,L"%s",L"TRUE"); + iDetectNum++; + break; + case -1: + wsprintf(sTemp,L"%s",newPluginErrorMessage()); + LvItem.iSubItem = 3; + SendMessage(hwPluginList,LVM_SETITEM,0,(LPARAM)&LvItem); + break; + } + + LvItem.iSubItem = 2; + SendMessage(hwPluginList,LVM_SETITEM,0,(LPARAM)&LvItem); + + free(sTemp); + } + return true; +} \ No newline at end of file diff --git a/DebugDetector/DDMain.h b/DebugDetector/DDMain.h new file mode 100644 index 0000000..fb078c5 --- /dev/null +++ b/DebugDetector/DDMain.h @@ -0,0 +1,33 @@ +#include +#include +#include +#include +#include "resource.h" + +using namespace std; + +struct srcPlugin +{ + DWORD dwName; + DWORD dwVersion; + DWORD dwDebugCheck; + DWORD dwErrorMessage; + HMODULE hPlugin; +}; + +LRESULT CALLBACK MainDLGProc(HWND hWndDlg, UINT Msg, WPARAM wParam, LPARAM lParam); + +bool LoadPlugins(); +bool ExecutePlugins(); + +typedef TCHAR* (*PluginVersion)(void); +typedef TCHAR* (*PluginName)(void); +typedef TCHAR* (*PluginErrorMessage)(void); +typedef bool (*PluginDebugCheck)(void); + + +HWND hwDlgMainFrame = NULL; + +int iDetectNum = 0; + +vector vPluginList; \ No newline at end of file diff --git a/DebugDetector/DebugDetector.aps b/DebugDetector/DebugDetector.aps new file mode 100644 index 0000000000000000000000000000000000000000..a48e029f4a31c6a7cfb92eb260cf60c760751c70 GIT binary patch literal 34204 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 REe#$wx4xMB<^O-&{9l4mLks`_ literal 0 HcmV?d00001 diff --git a/DebugDetector/DebugDetector.rc b/DebugDetector/DebugDetector.rc new file mode 100644 index 0000000000000000000000000000000000000000..7a9e16a586c3fc07f70b309d47a55af61483d4bb GIT binary patch literal 4218 zcmdUzTTc@~6vxlAiQi!@FA@Wv^>SR*^cE=e2rvC_4DLH{w< zksVrSeZsSh)&=yGJxaiLm`RWP-v<|X{l^4v-u|m+u^>?#9k@;hs8#)e4x8p zYmhF&zdf>M?Ai4hZC@rJLvm8KSWk(7(M&!K+*U8<@~R89oE;ERaXvN4oi>?OAg0dY zQ(=hiFGjQ!vjvR?@hglH`0LKK0<;RW&3foD8X)KX-XK?XVgt%ePUYbhW6Xb-C1RgT zgXKO~MjRvmJ9rhJT=u8ub%=ssgDkd6KN-2kd2~PY+8~T*GSX}9nQc$%Z3)Z8788~# z$wPRg)%XmtnXE7wJEP*95wmf%pGvt*qTL5dbYDJeUV*#ZIjSo0P*q5)FpJR^e6(71 zWL6qUsQ0j{wha8HzvhMy(4a?|uSIfNSt@N0$nhL+x@~j^=g8NZXYvVi%v)K^3M5R2*yUM1Pj&^!owaPr%mcQ|2tLDwpV$ zkT!Z+IKzsM5Vr*?A0fA zsN2^>dt~33+jK?B;E$8YpX$Ev*2jZcX!rhOV9hl z#I_CA3i!#9ak}zz0jt+J)1Fk1Cj2tU@snGpLX3>iL!DvIzT?{+$EyI5x73Hpx{ZHc zj4iG{tO4z$Cv;on!EEup4j*Zx8KNd@Z`sS@LEeh{Q(aGh%&(Gk?47A3?RX!#flp(- z#3|<#Hn5ha=!;+0*L~+TUjsuf%x2H(?1OY+RTP%6K^gB=c`8?Hu2sl(om73k-~Fk( zTUIO)1EMM(%Xy{8;PNV>h@Pz@k}>!-o!0bg4Sy(8A^Aj66=yzrrkq7tl literal 0 HcmV?d00001 diff --git a/DebugDetector/DebugDetector.vcxproj b/DebugDetector/DebugDetector.vcxproj new file mode 100644 index 0000000..a0a58ff --- /dev/null +++ b/DebugDetector/DebugDetector.vcxproj @@ -0,0 +1,150 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {290D1AC8-C7F5-43F9-977F-E78B8FA59E5D} + Win32Proj + DebugDetector + + + + Application + true + Unicode + + + Application + true + Unicode + + + Application + false + true + Unicode + + + Application + false + true + Unicode + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Windows + true + + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Windows + true + + + + + Level3 + + + Full + true + true + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/DebugDetector/DebugDetector.vcxproj.filters b/DebugDetector/DebugDetector.vcxproj.filters new file mode 100644 index 0000000..1b8bf49 --- /dev/null +++ b/DebugDetector/DebugDetector.vcxproj.filters @@ -0,0 +1,35 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Quelldateien + + + + + Headerdateien + + + Headerdateien + + + + + Ressourcendateien + + + \ No newline at end of file diff --git a/DebugDetector/DebugDetector.vcxproj.user b/DebugDetector/DebugDetector.vcxproj.user new file mode 100644 index 0000000..ace9a86 --- /dev/null +++ b/DebugDetector/DebugDetector.vcxproj.user @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/DebugDetector/resource.h b/DebugDetector/resource.h new file mode 100644 index 0000000000000000000000000000000000000000..45f0d371fc34454fb779483037de8a4b581347c6 GIT binary patch literal 1098 zcma)*-A=+l5QWdRiSN+FOA`?F1(2dK(n4A!dez8J35Gxd)Snn%UHxVYhzgZ#7G|b1 zXJ^lu{ro7atT$GurV{z8tHlnT6{@Cdyjbt7LmiM?mZv}?^)%B|b9Sl)u@14hGCgRF zSJN@e(@+CV*fZh_{`D$QY}%al$QFd3IN?4b={YSnT>+?0+ z-jbCO`8l3PuPx@K4Ie&y*i0Gc9jqJf;BQn+3Th&9t7JE+ZRj49nBPDbL>k!JbWWCM zC)Ct+M-K@~+w?Z+CSoS*L^@=dT7T6y#&W)X>%0xQ25R7D%HB#5uBUUS^Dd=#p@-Zc ka`!Dp&y_ygo0FVL)1nyHCdsf@vu`iC&#Ow8C;jxl0DXm$pa1{> literal 0 HcmV?d00001 diff --git a/ReadMe.txt b/ReadMe.txt new file mode 100644 index 0000000..7f5347c --- /dev/null +++ b/ReadMe.txt @@ -0,0 +1,75 @@ +Name : DD - DebugDetector +Version : 0.1 +Coded by : Zer0Flag +Coded in : C++ / inline asm +Date : 08.07.2012 + +Notes : - This tool should help to test if your debugger is invisible against the targets + Maybe some can learn something about the anti debug techniques while browsing the source + Ofcourse the most things are easy to bypass but you should see what you need to fix in your debugger + + - If you have some ideas, other techniques (no time related things currently) or other suggestions than + feel free to contact me! + +Contact : zer0fl4g@gmail.com + irc.rizion.net / irc.freenode.de / irc.seilen.de + +Ideas & +Techniques & +collected Links : http://www.codeproject.com/Articles/30815/An-Anti-Reverse-Engineering-Guide + http://www.veracode.com/images/pdf/whitepaper_antidebugging.pdf + http://spareclockcycles.org/2012/02/14/stack-necromancy-defeating-debuggers-by-raising-the-dead/ + http://www.symantec.com/connect/articles/windows-anti-debug-reference + http://tuts4you.com/download.php?view.3260 + +Legend : + = done; + * = fix it; + - = not done yet; + ! = optional; + -- = comment; + +ToDo : - Add more Plugins + - Add color incase of debug detection + +Features : + Plugin Interface + + simple to use + + error messages + + Show percentage of detection + ! x64 support (inline asm needs to be ported to C++ cause visualstudio doesn´t support inline asm in x64 mode + the other modules should work more or less) + + 16 Plugins + + DebugObject + -- Using NtQueryInformationProcess to see if there are Debugging Objects for our process + + CheckRemoteDebuggerPresent + -- simple api which checks if a debugger is present + + HardwareBreakpoint + -- checking the current thread for breakpoints in CONTEXT.dr0 - .dr3 + + IsDebuggerPresent + -- simple api which checks if a debugger is present + + MemoryBreakpoint + -- places a page guard and in case there is no exception we know that we are debugged + + OpenCSRSS (doesn´t work anymore ?) + -- Opens a handle for csrss , should not be able to without DebuggingFlag + + OutputDebugString + -- if eax == 1 we are in normal mode. else offset of string is found in eax + + ParentProcess + -- normaly we run with explorer.exe as parent + + ProcessDebugFlags + -- uses NtQueryInformationProcess to check if our process has debugflags + + Unhandled Exception + -- raises a division by 0 exception and in case we are not debugged everything wents + good since we capture the exception + ! add few more exceptions + + PEB.BeingDebugged + -- Checks the Process Enviroment Block if the debugbit is set + + PEB.GlobalFlags + -- checks if flag is set in PEB (FLG_HEAP_ENABLE_TAIL_CHECK && FLG_HEAP_ENABLE_FREE_CHECK && + FLG_HEAP_VALIDATE_PARAMETERS) + + PEB.ProcHeapFlag + -- checks if the ForceFlag is set in the PEB + + FindBadProcesses + -- enums the process list and checks if given processes are running + + FindBadWindows + -- enums the window list and checks if given windows are found + + FindBadDrivers + -- enums the driver list and checks if given drivers are found \ No newline at end of file diff --git a/Release/DD.Plugin.CheckRemoteDebuggerPresent.dll b/Release/DD.Plugin.CheckRemoteDebuggerPresent.dll new file mode 100644 index 0000000000000000000000000000000000000000..73255528af4d3a0bf8d49218048de5ec67864f7c GIT binary patch literal 7168 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 literal 0 HcmV?d00001 diff --git a/Release/DD.Plugin.DebugObject.dll b/Release/DD.Plugin.DebugObject.dll new file mode 100644 index 0000000000000000000000000000000000000000..b2813e469dad895e36e64652e27df10e8b53feb1 GIT binary patch literal 7168 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 literal 0 HcmV?d00001 diff --git a/Release/DD.Plugin.FindBadDrivers.dll b/Release/DD.Plugin.FindBadDrivers.dll new file mode 100644 index 0000000000000000000000000000000000000000..23dae31f9da436c561e8dac1e790cefff7e5a798 GIT binary patch literal 11776 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

l{7E}~e6*SPhMk&1xk{xr{aL+M(z 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 be9hQTzY3b^b&YJK)2%{4`1A9B+XDXqoszK- literal 0 HcmV?d00001 diff --git a/Release/DD.Plugin.FindBadWindows.dll b/Release/DD.Plugin.FindBadWindows.dll new file mode 100644 index 0000000000000000000000000000000000000000..bff62ce51242a21c1dd327b15e354a8f7a9b9fd1 GIT binary patch literal 12288 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 Kv*-Vg1^x>UKl_XT literal 0 HcmV?d00001 diff --git a/Release/DD.Plugin.HardwareBreakpoint.dll b/Release/DD.Plugin.HardwareBreakpoint.dll new file mode 100644 index 0000000000000000000000000000000000000000..a4e84a1d127b3f6c90bca54f7c146bd421cf531e GIT binary patch literal 7168 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 literal 0 HcmV?d00001 diff --git a/Release/DD.Plugin.IsDebuggerPresent.dll b/Release/DD.Plugin.IsDebuggerPresent.dll new file mode 100644 index 0000000000000000000000000000000000000000..b40b4589fcda48d1f4b748924c06cf9d734c9f8b GIT binary patch literal 6656 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 literal 0 HcmV?d00001 diff --git a/Release/DD.Plugin.MemoryBreakpoint.dll b/Release/DD.Plugin.MemoryBreakpoint.dll new file mode 100644 index 0000000000000000000000000000000000000000..9b6e90dd8790b24e5c3477882a963aa96d012a8b GIT binary patch literal 7680 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 Sa4ce-l}?w_?F8fhsQnFQ2d@_Z literal 0 HcmV?d00001 diff --git a/Release/DD.Plugin.OutputDebugString.dll b/Release/DD.Plugin.OutputDebugString.dll new file mode 100644 index 0000000000000000000000000000000000000000..2127955d613a4d653b714421755e5318a6062b91 GIT binary patch literal 6656 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 TVM7wDQyNQ+OO4?FpS6DjJS2AO literal 0 HcmV?d00001 diff --git a/Release/DD.Plugin.PEBDebugFlag.dll b/Release/DD.Plugin.PEBDebugFlag.dll new file mode 100644 index 0000000000000000000000000000000000000000..a754c43d64dc11b46d1f00e184b1e26f559e3020 GIT binary patch literal 6656 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 J39uT&Yj6DCwd~pQ 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 HKeYW770%&I literal 0 HcmV?d00001 diff --git a/Release/DD.Plugin.ParentProcess.dll b/Release/DD.Plugin.ParentProcess.dll new file mode 100644 index 0000000000000000000000000000000000000000..83b08feba220c9b9ec9fa611d45c2d542c1c0f6d GIT binary patch literal 7168 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 SGHsc$6j^OnyA|~RqxMh8-M*Co literal 0 HcmV?d00001 diff --git a/Release/DD.Plugin.ProcessDebugFlag.dll b/Release/DD.Plugin.ProcessDebugFlag.dll new file mode 100644 index 0000000000000000000000000000000000000000..b36e6d75cdab177d5874b1a8cfcefcc08f70847c GIT binary patch literal 7168 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 Q*%pVT-qK_N;s2=p8yMKLO#lD@ literal 0 HcmV?d00001 diff --git a/Release/DD.Plugin.UnhandledException.dll b/Release/DD.Plugin.UnhandledException.dll new file mode 100644 index 0000000000000000000000000000000000000000..5b8eaa9c7925d184c3aa563ee164bde9a8ec9751 GIT binary patch literal 6656 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 literal 0 HcmV?d00001 diff --git a/Release/DebugDetector.exe b/Release/DebugDetector.exe new file mode 100644 index 0000000000000000000000000000000000000000..1c22ba4e2822a19d13d1d5c3266e1ee96b359183 GIT binary patch literal 12288 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 literal 0 HcmV?d00001