Ver Mensaje Individual
  #6  
Antiguo 05-09-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Reputación: 20
cHackAll Va por buen camino
Luego de haber seguido el anterior hilo y éste, repito lo que ya dije:

Cita:
Empezado por cHackAll Ver Mensaje
Para acceder a la memoria RAM necesitas modificar los privilegios de acceso a dicho objeto (restringido por su naturaleza crítica), luego realizar un mapeado del mismo en tu proceso y leer por bloques razonables múltiplos de 4 Kb que es el tamaño del PAGE_SIZE en arquitecturas x86...
Y recalco que es MUY peligroso escribir en la memoria RAM puesto que allí recide el núcleo del SO, los Drivers y muchos otros componentes del SO que al ser modificados provocarían las peores excepciones y la perdida de datos.

Código Delphi [-]
uses Windows, SysUtils;
 
const Section: array [0..7] of PWideChar = (Ptr(24), nil, @Section[6], Ptr(64), nil, nil, Ptr(3014700), '\Device\PhysicalMemory');
function NtOpenSection(var Handle: Cardinal; Access: Cardinal; const Section): Cardinal; stdcall; external 'ntdll';
 
var
 Handle, Time, Size, Offset: Cardinal;
 MemoryStatus: TMemoryStatus;
 lpBuffer: PChar;
 
begin
 if NtOpenSection(Handle, 4, Section) = 0 then
  begin
   GlobalMemoryStatus(MemoryStatus);
   Size := MemoryStatus.dwTotalPhys;
   Offset := 0;
   Time := GetTickCount;
   repeat lpBuffer := MapViewOfFile(Handle, 4, 0, Offset, $1000);
    if Assigned(lpBuffer) then
     UnmapViewOfFile(lpBuffer);
    Inc(Offset, $1000);
   until Offset = Size;
   Time := GetTickCount - Time;
   CloseHandle(Handle);
   MessageBox(0, PChar(IntToStr(Time div 1000)+'.'+IntToStr(Time mod 1000)), nil, 0);
  end;
end.

El anterior ejemplo hace lo que comentaba en mi post citado, pero te aconsejo utilizar la API LocalAlloc para emular lo que necesitas, caso contrario no dejes de considerar lo comentado por HySTD en el anterior hilo.

Saludos
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx

Última edición por cHackAll fecha: 08-09-2008 a las 02:25:44. Razón: Informacion erronea
Responder Con Cita