diff --git a/data/meterpreter/ext_server_stdapi.dll b/data/meterpreter/ext_server_stdapi.dll index e6109f1501..18e6e4138e 100755 Binary files a/data/meterpreter/ext_server_stdapi.dll and b/data/meterpreter/ext_server_stdapi.dll differ diff --git a/external/source/meterpreter/source/extensions/stdapi/server/sys/process/memory.c b/external/source/meterpreter/source/extensions/stdapi/server/sys/process/memory.c index 8b172baf8a..5eb79807b7 100755 --- a/external/source/meterpreter/source/extensions/stdapi/server/sys/process/memory.c +++ b/external/source/meterpreter/source/extensions/stdapi/server/sys/process/memory.c @@ -107,7 +107,8 @@ DWORD request_sys_process_memory_read(Remote *remote, Packet *packet) } // Read the memory from the process...break out on failure - if (!ReadProcessMemory(handle, base, buffer, size, &bytesRead)) + if ((!ReadProcessMemory(handle, base, buffer, size, &bytesRead)) && + (GetLastError() != ERROR_PARTIAL_COPY)) { result = GetLastError(); break; @@ -161,8 +162,9 @@ DWORD request_sys_process_memory_write(Remote *remote, Packet *packet) } // Write the memory - if (!WriteProcessMemory(handle, base, data.buffer, data.header.length, - &written)) + if ((!WriteProcessMemory(handle, base, data.buffer, data.header.length, + &written)) && + (GetLastError() != ERROR_PARTIAL_COPY)) { result = GetLastError(); break; @@ -203,8 +205,7 @@ DWORD request_sys_process_memory_query(Remote *remote, Packet *packet) do { // Validate parameters - if ((!handle) || - (!base)) + if (!handle) { result = ERROR_INVALID_PARAMETER; break; diff --git a/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb b/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb index 05e10b492f..68e392415a 100644 --- a/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +++ b/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb @@ -174,7 +174,7 @@ class Memory info['Available'] = true elsif (state == MEM_COMMIT) info['Available'] = false - elsif (state == MEM_RESERVED) + elsif (state == MEM_RESERVE) info['Reserved'] = true end