From 2b747cf568e2685e556e4c8b404b7882b47f6fd2 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Thu, 19 Oct 2017 17:26:19 +0200 Subject: [PATCH] WIP Injector + Patcher for maniaplanet --- .gitignore | 305 ++++++++++++++++++++++++++++++ IDATest/IDATest.cpp | 27 +++ IDATest/IDATest.vcxproj | 163 ++++++++++++++++ IDATest/IDATest.vcxproj.filters | 36 ++++ IDATest/ReadMe.txt | 30 +++ IDATest/stdafx.cpp | 8 + IDATest/stdafx.h | 15 ++ IDATest/targetver.h | 8 + Observer/Observer.cpp | 6 + Observer/Observer.vcxproj | 177 +++++++++++++++++ Observer/Observer.vcxproj.filters | 39 ++++ Observer/ReadMe.txt | 32 ++++ Observer/dllmain.cpp | 78 ++++++++ Observer/stdafx.cpp | 8 + Observer/stdafx.h | 16 ++ Observer/targetver.h | 8 + UnTest.sln | 56 ++++++ UnTest/UnTest.vcxproj | 121 ++++++++++++ UnTest/UnTest.vcxproj.filters | 27 +++ UnTest/main.cpp | 69 +++++++ UnTest/main.h | 0 21 files changed, 1229 insertions(+) create mode 100644 .gitignore create mode 100644 IDATest/IDATest.cpp create mode 100644 IDATest/IDATest.vcxproj create mode 100644 IDATest/IDATest.vcxproj.filters create mode 100644 IDATest/ReadMe.txt create mode 100644 IDATest/stdafx.cpp create mode 100644 IDATest/stdafx.h create mode 100644 IDATest/targetver.h create mode 100644 Observer/Observer.cpp create mode 100644 Observer/Observer.vcxproj create mode 100644 Observer/Observer.vcxproj.filters create mode 100644 Observer/ReadMe.txt create mode 100644 Observer/dllmain.cpp create mode 100644 Observer/stdafx.cpp create mode 100644 Observer/stdafx.h create mode 100644 Observer/targetver.h create mode 100644 UnTest.sln create mode 100644 UnTest/UnTest.vcxproj create mode 100644 UnTest/UnTest.vcxproj.filters create mode 100644 UnTest/main.cpp create mode 100644 UnTest/main.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..509668d --- /dev/null +++ b/.gitignore @@ -0,0 +1,305 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ +**/Properties/launchSettings.json + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Typescript v1 declaration files +typings/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ diff --git a/IDATest/IDATest.cpp b/IDATest/IDATest.cpp new file mode 100644 index 0000000..6da3d67 --- /dev/null +++ b/IDATest/IDATest.cpp @@ -0,0 +1,27 @@ +// IDATest.cpp : définit le point d'entrée pour l'application console. +// + +#include "stdafx.h" +#include + +class Toto { +public: + int age; + Toto(int _age) : age(_age) { + std::cout << "Toto::Toto(int)" << std::endl; + }; + + void grandir(int nA) { + std::cout << "Toto::grandir(int)" << std::endl; + age += nA; + } +}; + +int main() +{ + Toto a = Toto(5); + a.grandir(10); + std::cin.get(); + return 0; +} + diff --git a/IDATest/IDATest.vcxproj b/IDATest/IDATest.vcxproj new file mode 100644 index 0000000..79dc3b8 --- /dev/null +++ b/IDATest/IDATest.vcxproj @@ -0,0 +1,163 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {430EB809-BEB0-4389-BD8E-8249F4D0D6E9} + Win32Proj + IDATest + 8.1 + + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + Use + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Use + Level3 + Disabled + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + Use + Disabled + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + Use + MaxSpeed + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + + + + + Create + Create + Create + Create + + + + + + \ No newline at end of file diff --git a/IDATest/IDATest.vcxproj.filters b/IDATest/IDATest.vcxproj.filters new file mode 100644 index 0000000..f3c0233 --- /dev/null +++ b/IDATest/IDATest.vcxproj.filters @@ -0,0 +1,36 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;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 + + + + + + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + + + Fichiers sources + + + Fichiers sources + + + \ No newline at end of file diff --git a/IDATest/ReadMe.txt b/IDATest/ReadMe.txt new file mode 100644 index 0000000..8238220 --- /dev/null +++ b/IDATest/ReadMe.txt @@ -0,0 +1,30 @@ +======================================================================== + APPLICATION CONSOLE : Vue d'ensemble du projet IDATest +======================================================================== + +AppWizard a créé cette application IDATest pour vous. + +Ce fichier contient un résumé du contenu de chacun des fichiers qui constituent votre application IDATest. + + +IDATest.vcxproj + Il s'agit du fichier projet principal pour les projets VC++ générés à l'aide d'un Assistant Application. Il contient des informations sur la version de Visual C++ utilisée pour générer le fichier ainsi que des informations relatives aux plateformes, configurations et fonctionnalités du projet que vous avez sélectionnées dans l'Assistant Application. + +IDATest.vcxproj.filters + Il s'agit du fichier de filtres pour les projets VC++ générés à l'aide d'un Assistant Application. Il contient des informations sur l'association entre les fichiers de votre projet et les filtres. Cette association est utilisée dans l'IDE pour afficher le regroupement des fichiers qui ont des extensions similaires sous un nÅ“ud spécifique (par exemple, les fichiers ".cpp" sont associés au filtre "Fichiers sources"). + +IDATest.cpp + Il s'agit du fichier source principal de l'application. + +///////////////////////////////////////////////////////////////////////////// +Autres fichiers standard : + +StdAfx.h, StdAfx.cpp + Ces fichiers sont utilisés pour générer un fichier d'en-tête précompilé (PCH) IDATest.pch et un fichier de type précompilé nommé StdAfx.obj. + +///////////////////////////////////////////////////////////////////////////// +Autres remarques : + +AppWizard utilise des commentaires "TODO:" pour indiquer les parties du code source où vous devrez ajouter ou modifier du code. + +///////////////////////////////////////////////////////////////////////////// diff --git a/IDATest/stdafx.cpp b/IDATest/stdafx.cpp new file mode 100644 index 0000000..4df7190 --- /dev/null +++ b/IDATest/stdafx.cpp @@ -0,0 +1,8 @@ +// stdafx.cpp : fichier source incluant simplement les fichiers Include standard +// IDATest.pch représente l'en-tête précompilé +// stdafx.obj contient les informations de type précompilées + +#include "stdafx.h" + +// TODO: faites référence aux en-têtes supplémentaires nécessaires dans STDAFX.H +// absents de ce fichier diff --git a/IDATest/stdafx.h b/IDATest/stdafx.h new file mode 100644 index 0000000..16ac0be --- /dev/null +++ b/IDATest/stdafx.h @@ -0,0 +1,15 @@ +// stdafx.h : fichier Include pour les fichiers Include système standard, +// ou les fichiers Include spécifiques aux projets qui sont utilisés fréquemment, +// et sont rarement modifiés +// + +#pragma once + +#include "targetver.h" + +#include +#include + + + +// TODO: faites référence ici aux en-têtes supplémentaires nécessaires au programme diff --git a/IDATest/targetver.h b/IDATest/targetver.h new file mode 100644 index 0000000..c8351ff --- /dev/null +++ b/IDATest/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// Si vous incluez SDKDDKVer.h, cela définit la dernière plateforme Windows disponible. + +// Si vous souhaitez générer votre application pour une plateforme Windows précédente, incluez WinSDKVer.h et +// définissez la macro _WIN32_WINNT à la plateforme que vous souhaitez prendre en charge avant d'inclure SDKDDKVer.h. + +#include diff --git a/Observer/Observer.cpp b/Observer/Observer.cpp new file mode 100644 index 0000000..4bc1bbf --- /dev/null +++ b/Observer/Observer.cpp @@ -0,0 +1,6 @@ +// Observer.cpp : définit les fonctions exportées pour l'application DLL. +// + +#include "stdafx.h" + + diff --git a/Observer/Observer.vcxproj b/Observer/Observer.vcxproj new file mode 100644 index 0000000..859bd17 --- /dev/null +++ b/Observer/Observer.vcxproj @@ -0,0 +1,177 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {4A1A6807-729C-4BBE-BE34-18067F227ABD} + Win32Proj + Observer + 8.1 + + + + DynamicLibrary + true + v140 + Unicode + + + DynamicLibrary + false + v140 + true + Unicode + + + DynamicLibrary + true + v140 + Unicode + + + DynamicLibrary + false + v140 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + Use + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;OBSERVER_EXPORTS;%(PreprocessorDefinitions) + true + + + Windows + true + + + + + Use + Level3 + Disabled + _DEBUG;_WINDOWS;_USRDLL;OBSERVER_EXPORTS;%(PreprocessorDefinitions) + true + + + Windows + true + + + + + Level3 + Use + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;OBSERVER_EXPORTS;%(PreprocessorDefinitions) + true + + + Windows + true + true + true + + + + + Level3 + Use + MaxSpeed + true + true + NDEBUG;_WINDOWS;_USRDLL;OBSERVER_EXPORTS;%(PreprocessorDefinitions) + true + + + Windows + true + true + true + + + + + + + + + + + + false + + + false + + + false + + + false + + + + + + Create + Create + Create + Create + + + + + + \ No newline at end of file diff --git a/Observer/Observer.vcxproj.filters b/Observer/Observer.vcxproj.filters new file mode 100644 index 0000000..c6cdc4e --- /dev/null +++ b/Observer/Observer.vcxproj.filters @@ -0,0 +1,39 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;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 + + + + + + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + \ No newline at end of file diff --git a/Observer/ReadMe.txt b/Observer/ReadMe.txt new file mode 100644 index 0000000..96ee2b0 --- /dev/null +++ b/Observer/ReadMe.txt @@ -0,0 +1,32 @@ +======================================================================== + BIBLIOTHÈQUE DE LIENS DYNAMIQUES : Vue d'ensemble du projet Observer +======================================================================== + +AppWizard a créé cette DLL Observer pour vous. + +Ce fichier contient un résumé du contenu de chacun des fichiers qui constituent votre application Observer. + + +Observer.vcxproj + Il s'agit du fichier projet principal pour les projets VC++ générés à l'aide d'un Assistant Application. Il contient des informations sur la version de Visual C++ utilisée pour générer le fichier ainsi que des informations relatives aux plateformes, configurations et fonctionnalités du projet que vous avez sélectionnées dans l'Assistant Application. + +Observer.vcxproj.filters + Il s'agit du fichier de filtres pour les projets VC++ générés à l'aide d'un Assistant Application. Il contient des informations sur l'association entre les fichiers de votre projet et les filtres. Cette association est utilisée dans l'IDE pour afficher le regroupement des fichiers qui ont des extensions similaires sous un nÅ“ud spécifique (par exemple, les fichiers ".cpp" sont associés au filtre "Fichiers sources"). + +Observer.cpp + Il s'agit du fichier source principal de la DLL. + + Une fois créée, cette DLL n'exporte aucun symbole. Il en résulte qu'elle ne produira pas un fichier .lib lors de la génération. Si vous souhaitez que ce projet soit une dépendance d'un autre projet, vous devez ajouter du code pour exporter des symboles à partir de la DLL afin qu'une bibliothèque d'exportation soit créée, ou vous pouvez affecter la valeur Yes à la propriété Ignore Input Library dans la page de propriétés Général du dossier Éditeur de liens de la boîte de dialogue Pages de propriétés du projet. + +///////////////////////////////////////////////////////////////////////////// +Autres fichiers standard : + +StdAfx.h, StdAfx.cpp + Ces fichiers sont utilisés pour générer un fichier d'en-tête précompilé (PCH) Observer.pch et un fichier de type précompilé nommé StdAfx.obj. + +///////////////////////////////////////////////////////////////////////////// +Autres remarques : + +AppWizard utilise des commentaires "TODO:" pour indiquer les parties du code source où vous devrez ajouter ou modifier du code. + +///////////////////////////////////////////////////////////////////////////// diff --git a/Observer/dllmain.cpp b/Observer/dllmain.cpp new file mode 100644 index 0000000..6bf30ff --- /dev/null +++ b/Observer/dllmain.cpp @@ -0,0 +1,78 @@ +// dllmain.cpp : Définit le point d'entrée pour l'application DLL. +#include "stdafx.h" +#include +#include +/* +void __stdcall LogMessageWrapperHook() { + std::cout << "Message wrapped called" << std::endl; +} + +__declspec(naked) void TrampolineLogMessageWrapperHook() +{ + __asm + { + // Overwrited instructions by the patch + PUSH esi + PUSH [esp+0xC] // push [esp + 4 + messageLength] + + // Save registers + PUSHAD + + // Call our hook + CALL LogMessageWrapperHook + + // Restore registers + POPAD + + // Not really sure... + RET + } +}*/ + +void initDll() { + AllocConsole(); + SetConsoleTitleA("Maniaplanet Observer"); + FILE* console; + freopen_s(&console, "CONIN$", "r", stdin); + freopen_s(&console, "CONOUT$", "w", stdout); + freopen_s(&console, "CONOUT$", "w", stderr); + + std::cout << "Observer.dll was successfully injected, time to patch now..." << std::endl; + + return; + /* + unsigned int* addressToPatch = (unsigned int*)0x403b70; + DWORD oldProtection = 0; + + // Enable writing in memory + if (!VirtualProtect(addressToPatch, 5, PAGE_EXECUTE_READWRITE, &oldProtection)) { + std::cout << "Failed to change VirtualProtect status while attempting to patch your binary" << std::endl; + return; + } + + // Change the instruction by JMP Trampoline + *addressToPatch = 0xE9; // JMP INT32 + *(addressToPatch + 1) = (unsigned int)TrampolineLogMessageWrapperHook - ((unsigned int)addressToPatch + 5); + */ + +} + +BOOL APIENTRY DllMain( HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved + ) +{ + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + initDll(); + break; + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + + return TRUE; +} + diff --git a/Observer/stdafx.cpp b/Observer/stdafx.cpp new file mode 100644 index 0000000..7abaa69 --- /dev/null +++ b/Observer/stdafx.cpp @@ -0,0 +1,8 @@ +// stdafx.cpp : fichier source incluant simplement les fichiers Include standard +// Observer.pch représente l'en-tête précompilé +// stdafx.obj contient les informations de type précompilées + +#include "stdafx.h" + +// TODO: faites référence aux en-têtes supplémentaires nécessaires dans STDAFX.H +// absents de ce fichier diff --git a/Observer/stdafx.h b/Observer/stdafx.h new file mode 100644 index 0000000..d8b4039 --- /dev/null +++ b/Observer/stdafx.h @@ -0,0 +1,16 @@ +// stdafx.h : fichier Include pour les fichiers Include système standard, +// ou les fichiers Include spécifiques aux projets qui sont utilisés fréquemment, +// et sont rarement modifiés +// + +#pragma once + +#include "targetver.h" + +#define WIN32_LEAN_AND_MEAN // Exclure les en-têtes Windows rarement utilisés +// Fichiers d'en-tête Windows : +#include + + + +// TODO: faites référence ici aux en-têtes supplémentaires nécessaires au programme diff --git a/Observer/targetver.h b/Observer/targetver.h new file mode 100644 index 0000000..c8351ff --- /dev/null +++ b/Observer/targetver.h @@ -0,0 +1,8 @@ +#pragma once + +// Si vous incluez SDKDDKVer.h, cela définit la dernière plateforme Windows disponible. + +// Si vous souhaitez générer votre application pour une plateforme Windows précédente, incluez WinSDKVer.h et +// définissez la macro _WIN32_WINNT à la plateforme que vous souhaitez prendre en charge avant d'inclure SDKDDKVer.h. + +#include diff --git a/UnTest.sln b/UnTest.sln new file mode 100644 index 0000000..feae98a --- /dev/null +++ b/UnTest.sln @@ -0,0 +1,56 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UnTest", "UnTest\UnTest.vcxproj", "{924745E0-8FA7-429B-87AE-60423BE6DD5B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Observer", "Observer\Observer.vcxproj", "{4A1A6807-729C-4BBE-BE34-18067F227ABD}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IDATest", "IDATest\IDATest.vcxproj", "{430EB809-BEB0-4389-BD8E-8249F4D0D6E9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM = Debug|ARM + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|ARM = Release|ARM + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {924745E0-8FA7-429B-87AE-60423BE6DD5B}.Debug|ARM.ActiveCfg = Debug|Win32 + {924745E0-8FA7-429B-87AE-60423BE6DD5B}.Debug|x64.ActiveCfg = Debug|x64 + {924745E0-8FA7-429B-87AE-60423BE6DD5B}.Debug|x64.Build.0 = Debug|x64 + {924745E0-8FA7-429B-87AE-60423BE6DD5B}.Debug|x86.ActiveCfg = Debug|Win32 + {924745E0-8FA7-429B-87AE-60423BE6DD5B}.Debug|x86.Build.0 = Debug|Win32 + {924745E0-8FA7-429B-87AE-60423BE6DD5B}.Release|ARM.ActiveCfg = Release|Win32 + {924745E0-8FA7-429B-87AE-60423BE6DD5B}.Release|x64.ActiveCfg = Release|x64 + {924745E0-8FA7-429B-87AE-60423BE6DD5B}.Release|x64.Build.0 = Release|x64 + {924745E0-8FA7-429B-87AE-60423BE6DD5B}.Release|x86.ActiveCfg = Release|Win32 + {924745E0-8FA7-429B-87AE-60423BE6DD5B}.Release|x86.Build.0 = Release|Win32 + {4A1A6807-729C-4BBE-BE34-18067F227ABD}.Debug|ARM.ActiveCfg = Debug|Win32 + {4A1A6807-729C-4BBE-BE34-18067F227ABD}.Debug|x64.ActiveCfg = Debug|x64 + {4A1A6807-729C-4BBE-BE34-18067F227ABD}.Debug|x64.Build.0 = Debug|x64 + {4A1A6807-729C-4BBE-BE34-18067F227ABD}.Debug|x86.ActiveCfg = Debug|Win32 + {4A1A6807-729C-4BBE-BE34-18067F227ABD}.Debug|x86.Build.0 = Debug|Win32 + {4A1A6807-729C-4BBE-BE34-18067F227ABD}.Release|ARM.ActiveCfg = Release|Win32 + {4A1A6807-729C-4BBE-BE34-18067F227ABD}.Release|x64.ActiveCfg = Release|x64 + {4A1A6807-729C-4BBE-BE34-18067F227ABD}.Release|x64.Build.0 = Release|x64 + {4A1A6807-729C-4BBE-BE34-18067F227ABD}.Release|x86.ActiveCfg = Release|Win32 + {4A1A6807-729C-4BBE-BE34-18067F227ABD}.Release|x86.Build.0 = Release|Win32 + {430EB809-BEB0-4389-BD8E-8249F4D0D6E9}.Debug|ARM.ActiveCfg = Debug|Win32 + {430EB809-BEB0-4389-BD8E-8249F4D0D6E9}.Debug|x64.ActiveCfg = Debug|x64 + {430EB809-BEB0-4389-BD8E-8249F4D0D6E9}.Debug|x64.Build.0 = Debug|x64 + {430EB809-BEB0-4389-BD8E-8249F4D0D6E9}.Debug|x86.ActiveCfg = Debug|Win32 + {430EB809-BEB0-4389-BD8E-8249F4D0D6E9}.Debug|x86.Build.0 = Debug|Win32 + {430EB809-BEB0-4389-BD8E-8249F4D0D6E9}.Release|ARM.ActiveCfg = Release|Win32 + {430EB809-BEB0-4389-BD8E-8249F4D0D6E9}.Release|x64.ActiveCfg = Release|x64 + {430EB809-BEB0-4389-BD8E-8249F4D0D6E9}.Release|x64.Build.0 = Release|x64 + {430EB809-BEB0-4389-BD8E-8249F4D0D6E9}.Release|x86.ActiveCfg = Release|Win32 + {430EB809-BEB0-4389-BD8E-8249F4D0D6E9}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/UnTest/UnTest.vcxproj b/UnTest/UnTest.vcxproj new file mode 100644 index 0000000..1e8e29b --- /dev/null +++ b/UnTest/UnTest.vcxproj @@ -0,0 +1,121 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {924745E0-8FA7-429B-87AE-60423BE6DD5B} + UnTest + 8.1 + + + + Application + true + v140 + MultiByte + + + Application + false + v140 + true + MultiByte + + + Application + true + v140 + MultiByte + + + Application + false + v140 + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + Level3 + Disabled + true + + + + + Level3 + Disabled + true + + + + + Level3 + MaxSpeed + true + true + true + + + true + true + + + + + Level3 + MaxSpeed + true + true + true + + + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/UnTest/UnTest.vcxproj.filters b/UnTest/UnTest.vcxproj.filters new file mode 100644 index 0000000..6375749 --- /dev/null +++ b/UnTest/UnTest.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;hh;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 + + + + + Fichiers sources + + + + + Fichiers d%27en-tête + + + \ No newline at end of file diff --git a/UnTest/main.cpp b/UnTest/main.cpp new file mode 100644 index 0000000..1fffd24 --- /dev/null +++ b/UnTest/main.cpp @@ -0,0 +1,69 @@ +#define NOMINMAX +#define BUFSIZE 4096 + +#include +#include +#include +#include +#include "main.h" + +// Source : http://blog.opensecurityresearch.com/2013/01/windows-dll-injection-basics.html +int main(int argc, char* argv[]) { + int pid; + DWORD dwBytesRead; + HANDLE hHandle; + HANDLE hRemoteThread; + LPVOID remoteDllAddr; + FARPROC loadLibAddr; + TCHAR dllPath[BUFSIZE] = TEXT(""); + + std::cout << "Enter PID: "; + std::cin >> pid; + + // [1] Attaching to the Process + hHandle = OpenProcess( + PROCESS_CREATE_THREAD | + PROCESS_QUERY_INFORMATION | + PROCESS_VM_OPERATION | + PROCESS_VM_WRITE | + PROCESS_VM_READ, + FALSE, + pid + ); + + // [1.1] Check if OpenProcess succeed + if (hHandle == NULL) { + std::cout << "Unable to open process. Error code: " << GetLastError() << std::endl; + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cin.get(); + return 1; + } + + // [2] Allocating memory - using DLL Path + + // [2.1] Get absolute path to the DLL from the given relative path + GetFullPathName(TEXT("../Debug/Observer.dll"), BUFSIZE, dllPath, NULL); + std::cout << "Generated full path name is: " << dllPath << std::endl; + + // [2.2] Allocate memory in our remote process to push the string containing the path of our dll + remoteDllAddr = VirtualAllocEx(hHandle, NULL, strlen(dllPath), MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE); + + // [3] Copying the DLL / Determine Addresses + + // [3.1] Copy the absolute path of our dll to the remote process. + WriteProcessMemory(hHandle, remoteDllAddr, dllPath, strlen(dllPath), NULL); + + // [3.2] Get the address of the LoadLibraryA function contained in kernel32.dll which is loaded by every apps. + loadLibAddr = GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "LoadLibraryA"); + + // [4] Executing the DLL! + // We call LoadLibraryA with our dllPath as parameter in our remote Process. + hRemoteThread = CreateRemoteThread(hHandle, NULL, 0, (LPTHREAD_START_ROUTINE)loadLibAddr, remoteDllAddr, 0, NULL); + WaitForSingleObject(hRemoteThread, INFINITE); + + /*std::cout << "Press Enter to Continue"; + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cin.get();*/ + + return 0; +} \ No newline at end of file diff --git a/UnTest/main.h b/UnTest/main.h new file mode 100644 index 0000000..e69de29