示例#1
0
        public void SetExecuteReadAccess(ulong Address, ulong Size = 0, bool UseBaseAddress = false)
        {
            ++this._framesRendered;
            if ((DateTime.Now - this._lastTime).TotalSeconds >= 1.0)
            {
                this._framesRendered = 0;
                this._lastTime       = DateTime.Now;
            }
            if (!this.Driver.get_IO().get_IsConnected())
            {
                throw new Exception("Driver is disconnected.");
            }
            if (Size <= 0UL)
            {
                throw new ArgumentException("Size is inferior or equal to zero at Read(ProcessId, Address, Size).", nameof(Size));
            }
            if (Size > 2147483591UL)
            {
                throw new ArgumentException("Size is superior to the limit at Read(ProcessId, Address, Size).", nameof(Size));
            }
            if (Address == 0UL || Address >= 140737488289791UL)
            {
                return;
            }
            bool flag = false;
            KernelReadRequest kernelReadRequest = new KernelReadRequest();
            uint num = (uint)Marshal.SizeOf <KernelReadRequest>();

            kernelReadRequest.ProcessId      = this.LastProcessId;
            kernelReadRequest.Size           = (UIntPtr)Size;
            kernelReadRequest.Response       = (UIntPtr)32UL;
            kernelReadRequest.Address        = (UIntPtr)Address;
            kernelReadRequest.UseBaseAddress = UseBaseAddress;
            flag = this.Driver.get_IO().TryIoControl <KernelReadRequest, uint>(2235412U, (M0)kernelReadRequest, (M1)(int)num);
        }
示例#2
0
        public byte[] Read(ulong Address, ulong Size, bool UseBaseAddress = false)
        {
            ++this._framesRendered;
            if ((DateTime.Now - this._lastTime).TotalSeconds >= 1.0)
            {
                this._framesRendered = 0;
                this._lastTime       = DateTime.Now;
            }
            if (!this.Driver.get_IO().get_IsConnected())
            {
                throw new Exception("Driver is disconnected.");
            }
            if (Size <= 0UL)
            {
                throw new ArgumentException("Size is inferior or equal to zero at Read(ProcessId, Address, Size).", nameof(Size));
            }
            if (Size > 2147483591UL)
            {
                throw new ArgumentException("Size is superior to the limit at Read(ProcessId, Address, Size).", nameof(Size));
            }
            if (Address == 0UL || Address >= 140737488289791UL)
            {
                return((byte[])null);
            }
            KernelReadRequest kernelReadRequest = new KernelReadRequest();
            uint num1 = (uint)Marshal.SizeOf <KernelReadRequest>();

            byte[]   numArray = new byte[Size];
            GCHandle gcHandle = GCHandle.Alloc((object)numArray, GCHandleType.Pinned);

            if (!gcHandle.IsAllocated)
            {
                throw new InsufficientMemoryException("Couldn't allocate memory for the buffer, at Read(ProcessId, Address, Size).");
            }
            IntPtr num2 = gcHandle.AddrOfPinnedObject();

            kernelReadRequest.ProcessId      = this.LastProcessId;
            kernelReadRequest.Size           = (UIntPtr)Size;
            kernelReadRequest.Response       = (UIntPtr)((ulong)num2.ToInt64());
            kernelReadRequest.Address        = (UIntPtr)Address;
            kernelReadRequest.UseBaseAddress = UseBaseAddress;
            bool flag = this.Driver.get_IO().TryIoControl <KernelReadRequest, uint>(2235396U, (M0)kernelReadRequest, (M1)(int)num1);

            if (flag)
            {
                numArray = (byte[])gcHandle.Target;
            }
            gcHandle.Free();
            if (!flag)
            {
                numArray = (byte[])null;
            }
            return(numArray);
        }
示例#3
0
        public long GetUnityPlayerDllBase()
        {
            if (!this.Driver.get_IO().get_IsConnected())
            {
                throw new Exception("Driver is disconnected.");
            }
            bool flag = false;
            KernelReadRequest kernelReadRequest = new KernelReadRequest();
            uint     num1     = (uint)Marshal.SizeOf <KernelReadRequest>();
            GCHandle gcHandle = GCHandle.Alloc((object)new byte[8], GCHandleType.Pinned);
            IntPtr   num2     = gcHandle.AddrOfPinnedObject();

            kernelReadRequest.ProcessId = this.LastProcessId;
            kernelReadRequest.Size      = (UIntPtr)5UL;
            kernelReadRequest.Response  = (UIntPtr)((ulong)num2.ToInt64());
            flag = this.Driver.get_IO().TryIoControl <KernelReadRequest, uint>(2235424U, (M0)kernelReadRequest, (M1)(int)num1);
            return(BitConverter.ToInt64((byte[])gcHandle.Target, 0));
        }
示例#4
0
        public T Read <T>(ulong Address, bool UseBaseAddress = false)
        {
            if (!this.Driver.get_IO().get_IsConnected())
            {
                throw new Exception("Driver is disconnected.");
            }
            if (Address == 0UL || Address >= 140737488289791UL)
            {
                return(default(T));
            }
            int cb = Marshal.SizeOf <T>();

            if (Address + (ulong)cb >= 140737488289791UL)
            {
                return(default(T));
            }
            KernelReadRequest kernelReadRequest = new KernelReadRequest();
            uint   num1 = (uint)Marshal.SizeOf <KernelReadRequest>();
            T      obj  = default(T);
            IntPtr num2 = Marshal.AllocHGlobal(cb);

            if (num2 == IntPtr.Zero)
            {
                throw new InsufficientMemoryException("Couldn't allocate memory for the buffer, at Read<T>(Address, UseBaseAddress).");
            }
            kernelReadRequest.ProcessId      = this.LastProcessId;
            kernelReadRequest.Size           = (UIntPtr)((ulong)cb);
            kernelReadRequest.Response       = (UIntPtr)((ulong)num2.ToInt64());
            kernelReadRequest.Address        = (UIntPtr)Address;
            kernelReadRequest.UseBaseAddress = UseBaseAddress;
            bool flag = this.Driver.get_IO().TryIoControl <KernelReadRequest, uint>(2235396U, (M0)kernelReadRequest, (M1)(int)num1);

            if (flag)
            {
                obj = Marshal.PtrToStructure <T>(num2);
            }
            Marshal.FreeHGlobal(num2);
            if (!flag)
            {
                obj = default(T);
            }
            return(obj);
        }