示例#1
0
 public void WriteByte(IntPtr memoryAddress, byte byteToWrite)
 {
     byte[] buffer = new byte[1];
     buffer[0]     = byteToWrite;
     pBytesWritten = IntPtr.Zero;
     Win32MemoryApi.WriteProcessMemory(handle, memoryAddress, buffer, 1, out pBytesWritten);
 }
示例#2
0
        public void WriteToPtr_x64(long[] PointerChain, byte[] Data)
        {
            IntPtr pBytesWritten;
            IntPtr pBytesRead;

            byte[] buffer  = new byte[8];
            bool   isbase  = true;
            long   Pointer = 0;

            foreach (long Chain in PointerChain)
            {
                if (isbase)
                {
                    Win32MemoryApi.ReadProcessMemory(handle, (IntPtr)((long)process.Modules[0].BaseAddress + Chain), buffer, 8, out pBytesRead);
                    Pointer = BitConverter.ToInt64(buffer, 0);
                    isbase  = false;
                }
                else
                {
                    Win32MemoryApi.ReadProcessMemory(handle, (IntPtr)(Pointer + Chain), buffer, 8, out pBytesRead);
                    Pointer = BitConverter.ToInt64(buffer, 0);
                }
            }
            Win32MemoryApi.WriteProcessMemory(handle, (IntPtr)Pointer, Data, (uint)Data.Length, out pBytesWritten);
        }
示例#3
0
        public double ReadDouble(IntPtr memoryAddress)
        {
            byte[] buffer = new byte[8];
            Win32MemoryApi.ReadProcessMemory(handle, memoryAddress, buffer, 8, out pBytesRead);
            double i = BitConverter.ToDouble(buffer, 0);

            return(i);
        }
示例#4
0
        public float ReadSingle(IntPtr memoryAddress)
        {
            byte[] buffer = new byte[4];
            Win32MemoryApi.ReadProcessMemory(handle, memoryAddress, buffer, 4, out pBytesRead);
            float i = BitConverter.ToSingle(buffer, 0);

            return(i);
        }
示例#5
0
        public long ReadInt64(IntPtr memoryAddress)
        {
            byte[] buffer = new byte[8];
            Win32MemoryApi.ReadProcessMemory(handle, memoryAddress, buffer, 8, out pBytesRead);
            long i = BitConverter.ToInt64(buffer, 0);

            return(i);
        }
示例#6
0
        public int ReadInt32(IntPtr memoryAddress)
        {
            byte[] buffer = new byte[4];
            Win32MemoryApi.ReadProcessMemory(handle, memoryAddress, buffer, 4, out pBytesRead);
            int i = BitConverter.ToInt32(buffer, 0);

            return(i);
        }
示例#7
0
        public void CloseHandle()
        {
            int returnValue = Win32MemoryApi.CloseHandle(handle);

            if (returnValue != 0)
            {
                throw new Exception("Closing handle failed.");
            }
        }
示例#8
0
 public void OpenProcess()
 {
     Win32MemoryApi.ProcessAccessType access =
         Win32MemoryApi.ProcessAccessType.PROCESS_QUERY_INFORMATION |
         Win32MemoryApi.ProcessAccessType.PROCESS_VM_READ |
         Win32MemoryApi.ProcessAccessType.PROCESS_VM_WRITE |
         Win32MemoryApi.ProcessAccessType.PROCESS_VM_OPERATION;
     handle       = Win32MemoryApi.OpenProcess((uint)access, 1, (uint)process.Id);
     pBaseAddress = process.MainModule.BaseAddress;
     pEndAddress  = IntPtr.Add(pBaseAddress, process.MainModule.ModuleMemorySize);
     ModuleSize   = (long)pEndAddress - (long)pBaseAddress;
     ModuleCopy   = new byte[ModuleSize];
 }
示例#9
0
        public long ReadPtr_x64(long[] PointerChain)
        {
            bool   isbase = true;
            IntPtr pBytesRead;

            byte[] buffer  = new byte[8];
            long   Pointer = 0;

            foreach (long Chain in PointerChain)
            {
                if (isbase)
                {
                    Win32MemoryApi.ReadProcessMemory(handle, (IntPtr)((long)process.Modules[0].BaseAddress + Chain), buffer, 8, out pBytesRead);
                    Pointer = BitConverter.ToInt64(buffer, 0);
                    isbase  = false;
                }
                else
                {
                    Win32MemoryApi.ReadProcessMemory(handle, (IntPtr)(Pointer + Chain), buffer, 8, out pBytesRead);
                    Pointer = BitConverter.ToInt64(buffer, 0);
                }
            }
            return(Pointer);
        }
示例#10
0
 public void WriteDouble(IntPtr memoryAddress, double i)
 {
     pBytesWritten = IntPtr.Zero;
     byte[] buffer = BitConverter.GetBytes(i);
     Win32MemoryApi.WriteProcessMemory(handle, memoryAddress, buffer, 8, out pBytesWritten);
 }
示例#11
0
 public void WriteByteArray(IntPtr memoryAddress, byte[] bytesToWrite)
 {
     pBytesWritten = IntPtr.Zero;
     Win32MemoryApi.WriteProcessMemory(handle, memoryAddress, bytesToWrite, (uint)bytesToWrite.Length, out pBytesWritten);
 }
示例#12
0
 public byte[] ReadByteArray(IntPtr memoryAddress, uint length)
 {
     byte[] buffer = new byte[length];
     Win32MemoryApi.ReadProcessMemory(handle, memoryAddress, buffer, length, out pBytesRead);
     return(buffer);
 }
示例#13
0
 public byte ReadByte(IntPtr memoryAddress)
 {
     byte[] buffer = new byte[1];
     Win32MemoryApi.ReadProcessMemory(handle, memoryAddress, buffer, 1, out pBytesRead);
     return(buffer[0]);
 }