Esempio n. 1
0
        public byte[] PointerRead(IntPtr memoryAddress, uint bytesToRead, int[] offset, out int bytesRead)
        {
            int    iPointerCount = offset.Length - 1;
            IntPtr ptrBytesRead;

            bytesRead = 0;
            byte[] buffer      = new byte[4];        // DWORD to hold an Address
            int    tempAddress = 0;

            if (iPointerCount == 0)
            {
                MemoryAPI.ReadProcessMemory(hProcess, memoryAddress, buffer, 4, out _);
                tempAddress = AddressUtils.ToDec(AddressUtils.MakeAddress(buffer)) + offset[0];                 // Final Address

                buffer = new byte[bytesToRead];
                MemoryAPI.ReadProcessMemory(hProcess, (IntPtr)tempAddress, buffer, bytesToRead, out ptrBytesRead);

                bytesRead = ptrBytesRead.ToInt32();
                return(buffer);
            }

            for (int i = 0; i <= iPointerCount; i++)
            {
                if (i == iPointerCount)
                {
                    MemoryAPI.ReadProcessMemory(hProcess, (IntPtr)tempAddress, buffer, 4, out _);
                    tempAddress = AddressUtils.ToDec(AddressUtils.MakeAddress(buffer)) + offset[i];                     // Final Address

                    buffer = new byte[bytesToRead];
                    MemoryAPI.ReadProcessMemory(hProcess, (IntPtr)tempAddress, buffer, bytesToRead, out ptrBytesRead);

                    bytesRead = ptrBytesRead.ToInt32();
                    return(buffer);
                }
                else if (i == 0)
                {
                    MemoryAPI.ReadProcessMemory(hProcess, memoryAddress, buffer, 4, out _);
                    tempAddress = AddressUtils.ToDec(AddressUtils.MakeAddress(buffer)) + offset[1];
                }
                else
                {
                    MemoryAPI.ReadProcessMemory(hProcess, (IntPtr)tempAddress, buffer, 4, out _);
                    tempAddress = AddressUtils.ToDec(AddressUtils.MakeAddress(buffer)) + offset[i];
                }
            }

            return(buffer);
        }
Esempio n. 2
0
        public string PointerWrite(IntPtr memoryAddress, byte[] bytesToWrite, int[] Offset, out int bytesWritten)
        {
            int    iPointerCount = Offset.Length - 1;
            IntPtr ptrBytesWritten;

            bytesWritten = 0;
            byte[] buffer      = new byte[4];        // DWORD to hold an Address
            int    tempAddress = 0;

            if (iPointerCount == 0)
            {
                MemoryAPI.ReadProcessMemory(hProcess, memoryAddress, buffer, 4, out _);
                tempAddress = AddressUtils.ToDec(AddressUtils.MakeAddress(buffer)) + Offset[0];                 // Final Address
                MemoryAPI.WriteProcessMemory(hProcess, (IntPtr)tempAddress, bytesToWrite, (uint)bytesToWrite.Length, out ptrBytesWritten);

                bytesWritten = ptrBytesWritten.ToInt32();
                return(AddressUtils.ToHex(tempAddress));
            }

            for (int i = 0; i <= iPointerCount; i++)
            {
                if (i == iPointerCount)
                {
                    MemoryAPI.ReadProcessMemory(hProcess, (IntPtr)tempAddress, buffer, 4, out _);
                    tempAddress = AddressUtils.ToDec(AddressUtils.MakeAddress(buffer)) + Offset[i];                     // Final Address
                    MemoryAPI.WriteProcessMemory(hProcess, (IntPtr)tempAddress, bytesToWrite, (uint)bytesToWrite.Length, out ptrBytesWritten);

                    bytesWritten = ptrBytesWritten.ToInt32();
                    return(AddressUtils.ToHex(tempAddress));
                }
                else if (i == 0)
                {
                    MemoryAPI.ReadProcessMemory(hProcess, memoryAddress, buffer, 4, out _);
                    tempAddress = AddressUtils.ToDec(AddressUtils.MakeAddress(buffer)) + Offset[i];
                }
                else
                {
                    MemoryAPI.ReadProcessMemory(hProcess, (IntPtr)tempAddress, buffer, 4, out _);
                    tempAddress = AddressUtils.ToDec(AddressUtils.MakeAddress(buffer)) + Offset[i];
                }
            }

            return(AddressUtils.ToHex(tempAddress));
        }
Esempio n. 3
0
        public void Scan()
        {
            try
            {
                // Always scan these values.
                PlayerID.Scan();
                Username.Scan();

                // Always calculate the spawnset in menu or lobby.
                // Otherwise you can first normally load a spawnset to set the hash, exit and load an empty spawnset in the menu/lobby, then during playing the empty spawnset change it back to the same original spawnset and upload a cheated score.
                if (Time.Value == 0 && Time.ValuePrevious == 0)
                {
                    SpawnsetHash = CalculateCurrentSurvivalHash();
                }

                // Stop scanning if it is a replay.
                IsReplay.Scan();
                if (IsReplay.Value)
                {
                    return;
                }

                IsAlive.Scan();
                Time.Scan();
                Kills.Scan();
                Gems.Scan();
                ShotsFired.Scan();
                ShotsHit.Scan();

                if (IsAlive.Value)
                {
                    // Enemy count might increase on death, so only scan while player is alive.
                    EnemiesAlive.Scan();

                    // TODO: Clean up
                    byte[] bytes = Memory.Read(Process.MainModule.BaseAddress + 0x001F8084, 4, out _);
                    int    ptr   = AddressUtils.ToDec(AddressUtils.MakeAddress(bytes));
                    bytes     = Memory.Read(new IntPtr(ptr), 4, out _);
                    ptr       = AddressUtils.ToDec(AddressUtils.MakeAddress(bytes));
                    bytes     = Memory.Read(new IntPtr(ptr) + 0x218, 4, out _);
                    LevelGems = BitConverter.ToInt32(bytes, 0);

                    bytes  = Memory.Read(new IntPtr(ptr) + 0x224, 4, out _);
                    Homing = BitConverter.ToInt32(bytes, 0);
                    HomingLog.Add(Homing);
                    if (HomingLog.Count > 5)
                    {
                        HomingLog.Remove(HomingLog[0]);
                    }

                    if (LevelUpTimes[0] == 0 && LevelGems >= 10 && LevelGems < 70)
                    {
                        LevelUpTimes[0] = Time.Value;
                    }
                    if (LevelUpTimes[1] == 0 && LevelGems == 70)
                    {
                        LevelUpTimes[1] = Time.Value;
                    }
                    if (LevelUpTimes[2] == 0 && LevelGems == 71)
                    {
                        LevelUpTimes[2] = Time.Value;
                    }
                }
                else
                {
                    // Only scan death type when dead.
                    DeathType.Scan();
                }

                if (string.IsNullOrEmpty(SpawnsetHash))
                {
                    SpawnsetHash = CalculateCurrentSurvivalHash();
                }
            }
            catch (Exception ex)
            {
                Logging.Log.Error("Scan failed", ex);
            }
        }