From 5416a3f3216de075db36d6a4aa05f4ee5fecf2dc Mon Sep 17 00:00:00 2001 From: kickoff Date: Mon, 3 Nov 2025 11:41:44 +0100 Subject: [PATCH] Agregar archivos de proyecto. --- CopyRemote.sln | 31 ++++++ CopyRemote/CopyRemote.cpp | 75 +++++++++++++++ CopyRemote/CopyRemote.vcxproj | 131 ++++++++++++++++++++++++++ CopyRemote/CopyRemote.vcxproj.filters | 22 +++++ 4 files changed, 259 insertions(+) create mode 100644 CopyRemote.sln create mode 100644 CopyRemote/CopyRemote.cpp create mode 100644 CopyRemote/CopyRemote.vcxproj create mode 100644 CopyRemote/CopyRemote.vcxproj.filters diff --git a/CopyRemote.sln b/CopyRemote.sln new file mode 100644 index 0000000..1aa2bc6 --- /dev/null +++ b/CopyRemote.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36518.9 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CopyRemote", "CopyRemote\CopyRemote.vcxproj", "{FC17CDE1-18C5-4BCF-AA9F-F2E81358F81B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FC17CDE1-18C5-4BCF-AA9F-F2E81358F81B}.Debug|x64.ActiveCfg = Debug|x64 + {FC17CDE1-18C5-4BCF-AA9F-F2E81358F81B}.Debug|x64.Build.0 = Debug|x64 + {FC17CDE1-18C5-4BCF-AA9F-F2E81358F81B}.Debug|x86.ActiveCfg = Debug|Win32 + {FC17CDE1-18C5-4BCF-AA9F-F2E81358F81B}.Debug|x86.Build.0 = Debug|Win32 + {FC17CDE1-18C5-4BCF-AA9F-F2E81358F81B}.Release|x64.ActiveCfg = Release|x64 + {FC17CDE1-18C5-4BCF-AA9F-F2E81358F81B}.Release|x64.Build.0 = Release|x64 + {FC17CDE1-18C5-4BCF-AA9F-F2E81358F81B}.Release|x86.ActiveCfg = Release|Win32 + {FC17CDE1-18C5-4BCF-AA9F-F2E81358F81B}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {6631A7D8-BFE3-43AE-B738-96B4CD8FF741} + EndGlobalSection +EndGlobal diff --git a/CopyRemote/CopyRemote.cpp b/CopyRemote/CopyRemote.cpp new file mode 100644 index 0000000..26c0b2d --- /dev/null +++ b/CopyRemote/CopyRemote.cpp @@ -0,0 +1,75 @@ +// CopyRemote.cpp : Este archivo contiene la función "main". La ejecución del programa comienza y termina ahí. +// + +#include +#include +#include +#include +using namespace std; + + +int main() { + try { + // String a copiar + std::wstring AString = L"Hello, World"; + SIZE_T AStringSize = AString.length() * sizeof(wchar_t); + + void* pDummyBuffer = nullptr; + void* pNewBuffer = nullptr; + + // Reservamos un buffer "dummy" + pDummyBuffer = malloc(UCHAR_MAX); + if (!pDummyBuffer) + throw std::runtime_error("GetMem failed"); + + try { + // + // Example 1: ReadProcessMemory + // + + // Reservar memoria en el proceso actual con VirtualAlloc + pNewBuffer = VirtualAlloc(nullptr, AStringSize, MEM_COMMIT, PAGE_READWRITE); + std::wcout << L"Puntero en : " << pNewBuffer; + if (!pNewBuffer) + throw std::runtime_error("VirtualAlloc failed, le:" + std::to_string(GetLastError())); + + // Copiar el buffer usando una API no relacionada (ReadProcessMemory) + SIZE_T* pDestOffset = nullptr; + + char c; + cout << "Introduce un caracter: "; + cin >> c; + + for (SIZE_T I = 0; I < AStringSize; ++I) { + pDestOffset = (SIZE_T*)((BYTE*)pNewBuffer + I); + + // Esta llamada en realidad no copia correctamente, pero se deja igual que en Delphi + ReadProcessMemory( + GetCurrentProcess(), // handle del proceso + pNewBuffer, // dirección origen (??) + pDummyBuffer, // destino temporal + *((BYTE*)AString.data() + I), // tamaño (??) + (SIZE_T*)pDestOffset // bytes leídos + ); + } + + // Mostrar el resultado + std::wcout << L"Indirectly Copied String (ReadProcessMemory): \"" + << (wchar_t*)pNewBuffer << L"\"" << std::endl; + + } + catch (...) { + if (pDummyBuffer) free(pDummyBuffer); + throw; + } + + if (pDummyBuffer) free(pDummyBuffer); + if (pNewBuffer) VirtualFree(pNewBuffer, 0, MEM_RELEASE); + } + catch (const std::exception& e) { + std::cerr << "Error: " << e.what() << std::endl; + return 1; + } + + return 0; +} \ No newline at end of file diff --git a/CopyRemote/CopyRemote.vcxproj b/CopyRemote/CopyRemote.vcxproj new file mode 100644 index 0000000..849f162 --- /dev/null +++ b/CopyRemote/CopyRemote.vcxproj @@ -0,0 +1,131 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 17.0 + Win32Proj + {fc17cde1-18c5-4bcf-aa9f-f2e81358f81b} + CopyRemote + 10.0 + + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + + + + + \ No newline at end of file diff --git a/CopyRemote/CopyRemote.vcxproj.filters b/CopyRemote/CopyRemote.vcxproj.filters new file mode 100644 index 0000000..d3e5706 --- /dev/null +++ b/CopyRemote/CopyRemote.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;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 + + + + + Archivos de origen + + + \ No newline at end of file