Esempio n. 1
0
        public static string ExtractStringFromMemory(long address, int maxBufferSize, Process p, IntPtr hProc)
        {
            string str    = "";
            IntPtr intPtr = (hProc == IntPtr.Zero ? MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, p.Id) : hProc);

            byte[] numArray = new byte[maxBufferSize];
            int    num      = 0;

            MemAPI.ReadProcessMemory(intPtr, address, numArray, (int)numArray.Length - 1, ref num);
            if (hProc == IntPtr.Zero)
            {
                MemAPI.CloseHandle(intPtr);
            }
            int num1 = 0;

            while (num1 < (int)numArray.Length)
            {
                int num2 = num1;
                num1 = num2 + 1;
                if (numArray[num2] == 0)
                {
                    break;
                }
                str = string.Concat(str, Encoding.ASCII.GetString(numArray, num1 - 1, 1));
            }
            return(str);
        }
Esempio n. 2
0
        public static bool IsValidItemIDInArray(byte[] array, int index)
        {
            bool flag = true;

            if (MemAPI.IsUpperChar(array[index]))
            {
                int num = index + 1;
                while (num < (int)array.Length && array[num] != 0)
                {
                    if (MemAPI.IsAscii(array[num]))
                    {
                        num++;
                    }
                    else
                    {
                        flag = false;
                        break;
                    }
                }
            }
            else
            {
                flag = false;
            }
            return(flag);
        }
Esempio n. 3
0
        // Token: 0x0600012B RID: 299 RVA: 0x0001D260 File Offset: 0x0001B460
        public long pagedMemorySearchMatch(int[] search, long startAddress, long regionSize)
        {
            long result = -1L;
            int  val    = 20480;
            int  num    = Math.Max(search.Length * 20, val);

            if (this.p == null)
            {
                return(result);
            }
            IntPtr hProcess = MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, this.p.Id);

            byte[] array = new byte[num];
            long   num2  = startAddress + regionSize;

            for (long num3 = startAddress; num3 < num2; num3 += (long)(array.Length - search.Length))
            {
                MemAPI.ReadBytes(num3, array, num, this.p, hProcess);
                int num4;
                if ((num4 = MemAPI.findSequenceMatch(array, 0, search, true, false)) >= 0)
                {
                    result = num3 + (long)num4;
                    break;
                }
            }
            MemAPI.CloseHandle(hProcess);
            return(result);
        }
Esempio n. 4
0
        public long pagedMemorySearchMatch(int[] search, long startAddress, long regionSize)
        {
            long num  = (long)-1;
            int  num1 = 20480;
            int  num2 = Math.Max((int)search.Length * 20, num1);

            if (this.p == null)
            {
                return(num);
            }
            IntPtr intPtr = MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, this.p.Id);

            byte[] numArray = new byte[num2];
            long   num3     = startAddress + regionSize;
            long   length   = startAddress;

            while (length < num3)
            {
                MemAPI.ReadBytes(length, numArray, num2, this.p, intPtr);
                int num4 = -1;
                int num5 = MemAPI.findSequenceMatch(numArray, 0, search, true, false);
                num4 = num5;
                if (num5 < 0)
                {
                    length = length + (long)((int)numArray.Length - (int)search.Length);
                }
                else
                {
                    num = length + (long)num4;
                    break;
                }
            }
            MemAPI.CloseHandle(intPtr);
            return(num);
        }
Esempio n. 5
0
        public long pagedMemorySearch(byte[] search, long startAddress, long regionSize)
        {
            long num1  = -1;
            int  val2  = 20480;
            int  count = Math.Max(search.Length * 20, val2);

            if (this.p == null)
            {
                return(num1);
            }
            IntPtr num2 = MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, this.p.Id);

            byte[] numArray = new byte[count];
            long   num3     = startAddress;
            long   num4     = startAddress + regionSize;
            long   address  = num3;

            while (address < num4)
            {
                MemAPI.ReadBytes(address, numArray, count, this.p, num2);
                int sequence;
                if ((sequence = MemAPI.findSequence(numArray, 0, search, true, false)) >= 0)
                {
                    num1 = address + (long)sequence;
                    break;
                }
                address += (long)(numArray.Length - search.Length);
            }
            MemAPI.CloseHandle(num2);
            return(num1);
        }
Esempio n. 6
0
 public void CloseProcessHandle()
 {
     if (this.hProc != IntPtr.Zero)
     {
         MemAPI.CloseHandle(this.hProc);
         this.hProc = IntPtr.Zero;
     }
 }
Esempio n. 7
0
 public void CloseProcessHandle()
 {
     if (!(this.hProc != IntPtr.Zero))
     {
         return;
     }
     MemAPI.CloseHandle(this.hProc);
     this.hProc = IntPtr.Zero;
 }
Esempio n. 8
0
        public bool FindRegionBySize(long size, out long regionStart, out long regionSize, IntPtr hProc, long startAddress = 0L, bool needReadWrite = true)
        {
            IntPtr intPtr;

            MemAPI.MEMORY_BASIC_INFORMATION mEMORYBASICINFORMATION;
            bool flag = false;

            regionStart = (long)0;
            regionSize  = (long)0;
            if (hProc != IntPtr.Zero)
            {
                intPtr = hProc;
            }
            else
            {
                if (this.p == null)
                {
                    return(false);
                }
                intPtr = MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, this.p.Id);
            }
            long num         = 9223372036854775807L;
            long baseAddress = startAddress;

            do
            {
                MemAPI.VirtualQueryEx(intPtr, (IntPtr)baseAddress, out mEMORYBASICINFORMATION, (uint)Marshal.SizeOf(typeof(MemAPI.MEMORY_BASIC_INFORMATION)));
                if ((long)mEMORYBASICINFORMATION.RegionSize == size)
                {
                    if (!needReadWrite)
                    {
                        regionStart = (long)mEMORYBASICINFORMATION.BaseAddress;
                        regionSize  = (long)mEMORYBASICINFORMATION.RegionSize;
                        flag        = true;
                        break;
                    }
                    else if (mEMORYBASICINFORMATION.Protect == MemAPI.AllocationProtectEnum.PAGE_READWRITE && mEMORYBASICINFORMATION.State == MemAPI.StateEnum.MEM_COMMIT)
                    {
                        regionStart = (long)mEMORYBASICINFORMATION.BaseAddress;
                        regionSize  = (long)mEMORYBASICINFORMATION.RegionSize;
                        flag        = true;
                        break;
                    }
                }
                if (baseAddress == (long)mEMORYBASICINFORMATION.BaseAddress + (long)mEMORYBASICINFORMATION.RegionSize)
                {
                    break;
                }
                baseAddress = (long)mEMORYBASICINFORMATION.BaseAddress + (long)mEMORYBASICINFORMATION.RegionSize;
            }while (baseAddress <= num);
            if (hProc == IntPtr.Zero)
            {
                MemAPI.CloseHandle(intPtr);
            }
            return(flag);
        }
Esempio n. 9
0
        // Token: 0x060000C0 RID: 192 RVA: 0x0000E544 File Offset: 0x0000C744
        private void btnCompareAddress_Click(object sender, EventArgs e)
        {
            long address = MemAPI.HexStringToInt64(this.txtCompareAddress.Text);

            if (this.myApp == null)
            {
                return;
            }
            this.myApp.showCompareAddress(address);
        }
Esempio n. 10
0
        // Token: 0x060000BC RID: 188 RVA: 0x0000E478 File Offset: 0x0000C678
        private void btnFindMemoryRegionByAddress_Click(object sender, EventArgs e)
        {
            long addr = MemAPI.HexStringToInt64(this.txtFindMemoryRegionByAddress.Text);

            if (this.myApp == null)
            {
                return;
            }
            this.myApp.searchMemoryRegionForAddress(addr);
        }
Esempio n. 11
0
        // Token: 0x06000124 RID: 292 RVA: 0x0001CD10 File Offset: 0x0001AF10
        public void SetSingleAt(long address, float newValue)
        {
            if (this.p == null)
            {
                return;
            }
            IntPtr hProcess = MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, this.p.Id);

            MemAPI.WriteSingle(address, newValue, this.p, hProcess);
            MemAPI.CloseHandle(hProcess);
        }
Esempio n. 12
0
        // Token: 0x060000BD RID: 189 RVA: 0x0000E4AC File Offset: 0x0000C6AC
        private void btntxtFindMemoryRegionBySize_Click(object sender, EventArgs e)
        {
            long size         = MemAPI.HexStringToInt64(this.txtFindMemoryRegionBySize.Text);
            long startAddress = MemAPI.HexStringToInt64(this.txtFindMemoryRegionByAddress.Text);

            if (this.myApp == null)
            {
                return;
            }
            this.myApp.searchMemoryRegionForSize(size, startAddress);
        }
Esempio n. 13
0
        public void SetByteAt(long address, byte newValue)
        {
            if (this.p == null)
            {
                return;
            }
            IntPtr num = MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, this.p.Id);

            MemAPI.WriteByte(address, newValue, this.p, num);
            MemAPI.CloseHandle(num);
        }
Esempio n. 14
0
        public void SetUInt32At(long address, uint newValue)
        {
            if (this.p == null)
            {
                return;
            }
            IntPtr intPtr = MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, this.p.Id);

            MemAPI.WriteUInt32(address, newValue, this.p, intPtr);
            MemAPI.CloseHandle(intPtr);
        }
Esempio n. 15
0
        public void SetBytesAt(long address, byte[] buffer, int count)
        {
            if (this.p == null)
            {
                return;
            }
            IntPtr intPtr = MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, this.p.Id);

            MemAPI.WriteBytes(address, buffer, count, this.p, intPtr);
            MemAPI.CloseHandle(intPtr);
        }
Esempio n. 16
0
        public static int ReadBytes(long address, byte[] buffer, int count, Process p, IntPtr hProc)
        {
            IntPtr hProcess            = hProc == IntPtr.Zero ? MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, p.Id) : hProc;
            int    lpNumberOfBytesRead = 0;

            MemAPI.ReadProcessMemory(hProcess, address, buffer, count, ref lpNumberOfBytesRead);
            if (hProc == IntPtr.Zero)
            {
                MemAPI.CloseHandle(hProcess);
            }
            return(lpNumberOfBytesRead);
        }
Esempio n. 17
0
        public static int ReadBytes(long address, byte[] buffer, int count, Process p, IntPtr hProc)
        {
            IntPtr intPtr = (hProc == IntPtr.Zero ? MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, p.Id) : hProc);
            int    num    = 0;

            MemAPI.ReadProcessMemory(intPtr, address, buffer, count, ref num);
            if (hProc == IntPtr.Zero)
            {
                MemAPI.CloseHandle(intPtr);
            }
            return(num);
        }
Esempio n. 18
0
        // Token: 0x0600011B RID: 283 RVA: 0x0001CA90 File Offset: 0x0001AC90
        public int GetBytesAt(long address, byte[] buffer, int count)
        {
            if (this.p == null)
            {
                return(0);
            }
            IntPtr hProcess = MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, this.p.Id);
            int    arg_37_0 = MemAPI.ReadBytes(address, buffer, count, this.p, hProcess);

            MemAPI.CloseHandle(hProcess);
            return(arg_37_0);
        }
Esempio n. 19
0
        // Token: 0x060000F7 RID: 247 RVA: 0x0001C0C8 File Offset: 0x0001A2C8
        public static int WriteBytes(long address, byte[] buffer, int count, Process p, IntPtr hProc)
        {
            IntPtr hProcess = (hProc == IntPtr.Zero) ? MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, p.Id) : hProc;
            int    result   = 0;

            MemAPI.WriteProcessMemory(hProc, address, buffer, (uint)count, out result);
            if (hProc == IntPtr.Zero)
            {
                MemAPI.CloseHandle(hProcess);
            }
            return(result);
        }
Esempio n. 20
0
        public int GetBytesAt(long address, byte[] buffer, int count)
        {
            if (this.p == null)
            {
                return(0);
            }
            IntPtr intPtr = MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, this.p.Id);
            int    num    = MemAPI.ReadBytes(address, buffer, count, this.p, intPtr);

            MemAPI.CloseHandle(intPtr);
            return(num);
        }
Esempio n. 21
0
        public static void WriteByte(long address, byte newValue, Process p, IntPtr hProc)
        {
            IntPtr intPtr = (hProc == IntPtr.Zero ? MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, p.Id) : hProc);

            byte[] numArray = new byte[] { newValue };
            int    num      = 0;

            MemAPI.WriteProcessMemory(hProc, address, numArray, 1, out num);
            if (hProc == IntPtr.Zero)
            {
                MemAPI.CloseHandle(intPtr);
            }
        }
Esempio n. 22
0
        public static string ReadString(long address, int count, Process p, IntPtr hProc)
        {
            IntPtr intPtr = (hProc == IntPtr.Zero ? MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, p.Id) : hProc);

            byte[] numArray = new byte[count + 1];
            int    num      = 0;

            MemAPI.ReadProcessMemory(intPtr, address, numArray, (int)numArray.Length - 1, ref num);
            if (hProc == IntPtr.Zero)
            {
                MemAPI.CloseHandle(intPtr);
            }
            return(Encoding.ASCII.GetString(numArray));
        }
Esempio n. 23
0
        public static byte[] ReadBytes(long address, int count, Process p, IntPtr hProc)
        {
            IntPtr intPtr = (hProc == IntPtr.Zero ? MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, p.Id) : hProc);

            byte[] numArray = new byte[count];
            int    num      = 0;

            MemAPI.ReadProcessMemory(intPtr, address, numArray, (int)numArray.Length, ref num);
            if (hProc == IntPtr.Zero)
            {
                MemAPI.CloseHandle(intPtr);
            }
            return(numArray);
        }
Esempio n. 24
0
        public uint GetUInt32At(long address)
        {
            uint num = 0;

            if (this.p == null)
            {
                return(num);
            }
            IntPtr intPtr = MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, this.p.Id);

            num = MemAPI.ReadUInt32(address, this.p, intPtr);
            MemAPI.CloseHandle(intPtr);
            return(num);
        }
Esempio n. 25
0
        public string GetStringAt(long address)
        {
            string str = "";

            if (this.p == null)
            {
                return(str);
            }
            IntPtr intPtr = MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, this.p.Id);

            str = MemAPI.ExtractStringFromMemory(address, 128, this.p, intPtr);
            MemAPI.CloseHandle(intPtr);
            return(str);
        }
Esempio n. 26
0
        public float GetSingleAt(long address)
        {
            float single = 0f;

            if (this.p == null)
            {
                return(single);
            }
            IntPtr intPtr = MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, this.p.Id);

            single = MemAPI.ReadSingle(address, this.p, intPtr);
            MemAPI.CloseHandle(intPtr);
            return(single);
        }
Esempio n. 27
0
        public byte GetByteAt(long address)
        {
            byte num = 0;

            if (this.p == null)
            {
                return(num);
            }
            IntPtr intPtr = MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, this.p.Id);

            num = MemAPI.ReadByte(address, this.p, intPtr);
            MemAPI.CloseHandle(intPtr);
            return(num);
        }
Esempio n. 28
0
        // Token: 0x0600011D RID: 285 RVA: 0x0001CB1C File Offset: 0x0001AD1C
        public uint GetUInt32At(long address)
        {
            uint result = 0u;

            if (this.p == null)
            {
                return(result);
            }
            IntPtr hProcess = MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, this.p.Id);

            result = MemAPI.ReadUInt32(address, this.p, hProcess);
            MemAPI.CloseHandle(hProcess);
            return(result);
        }
Esempio n. 29
0
        // Token: 0x0600011E RID: 286 RVA: 0x0001CB64 File Offset: 0x0001AD64
        public float GetSingleAt(long address)
        {
            float result = 0f;

            if (this.p == null)
            {
                return(result);
            }
            IntPtr hProcess = MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, this.p.Id);

            result = MemAPI.ReadSingle(address, this.p, hProcess);
            MemAPI.CloseHandle(hProcess);
            return(result);
        }
Esempio n. 30
0
        // Token: 0x060000F4 RID: 244 RVA: 0x0001BFB4 File Offset: 0x0001A1B4
        public static byte ReadByte(long address, Process p, IntPtr hProc)
        {
            IntPtr hProcess = (hProc == IntPtr.Zero) ? MemAPI.OpenProcess(MemAPI.ProcessAccessFlags.All, false, p.Id) : hProc;

            byte[] array = new byte[1];
            int    num   = 0;

            MemAPI.ReadProcessMemory(hProcess, address, array, array.Length, ref num);
            if (hProc == IntPtr.Zero)
            {
                MemAPI.CloseHandle(hProcess);
            }
            return(array[0]);
        }