mirror of
https://github.com/chmod760/CopyReadProcessMemory
synced 2026-06-06 15:24:30 +00:00
Agregar archivos de proyecto.
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
// CopyRemote.cpp : Este archivo contiene la función "main". La ejecución del programa comienza y termina ahí.
|
||||
//
|
||||
|
||||
#include <windows.h>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <stdexcept>
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user