Перейти к содержанию

CybioZ

Пользователи
  • Постов

    26
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные CybioZ

  1. Здравствуйте , я сделал сканер сигнатур по видео все разобрал, но вот у меня не находит адрес.

    Сигнатура верна, проверял ее много раз через CE.

    //NullAlex: аппрувнул тему, и заключил код в спойлер, т.к. код слишком большой.

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Diagnostics;using System.Runtime.InteropServices;namespace Trainerheroes{    class Hack    {        //ReadProcessMemory        [DllImport("kernel32.dll", SetLastError = true)]        static extern bool ReadProcessMemory(          IntPtr hProcess,          IntPtr lpBaseAddress,          [Out] byte[] lpBuffer,          int dwSize,          out int lpNumberOfBytesRead         );        //OpenProcess // Flag = All = 0x001F0FFF        [DllImport("kernel32.dll")]        public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);        // CloseHandle        [DllImport("kernel32.dll", SetLastError = true)]        [return: MarshalAs(UnmanagedType.Bool)]        static extern bool CloseHandle(IntPtr hObject);        [StructLayout(LayoutKind.Sequential)]        public struct MEMORY_BASIC_INFORMATION        {            public IntPtr BaseAddress;            public IntPtr AllocationBase;            public uint AllocationProtect;            public IntPtr RegionSize;            public uint State;            public uint Protect;            public uint Type;        }        // VirtualQueryEx        [DllImport("kernel32.dll")]        static extern int VirtualQueryEx(IntPtr hProcess, IntPtr lpAddress, out MEMORY_BASIC_INFORMATION lpBuffer, uint dwLength);        //WriteProcessMemory        [DllImport("kernel32.dll", SetLastError = true)]        static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out UIntPtr lpNumberOfBytesWritten);        [DllImport("kernel32.dll", SetLastError = true)]        static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, uint nSize, UIntPtr lpNumberOfBytesWritten);        private int GetProcessID()        {            foreach (Process proc in Process.GetProcessesByName("Heroes3"))                            return proc.Id;                return -1;                            }        public void WriteBytes()        {            var handle = OpenProcess(0x001F0FFF, false, GetProcessID());            byte[] buffer = { 0xE0, 0x2E }; // значение на которое заменяю            var dummy =new UIntPtr();            var address = FindSignature(); // вот тут адрес и не находит            Console.WriteLine(address);            if (address != -1)                WriteProcessMemory(handle, (IntPtr)address, buffer, (uint)buffer.Length, out dummy);                Console.WriteLine("Чит Активирован!");                CloseHandle(handle);                Console.ReadKey();                    }        private int FindSignature()        {            int[] signature = { 224, 46, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 80, 108, 97, 121, 101, 114, -1, 114, -1, -1, -1 };            long MaxAddress = 0x100000;            long address = 0;            MEMORY_BASIC_INFORMATION m;            var handle = OpenProcess(0x001F0FFF, false, GetProcessID());            m.BaseAddress = IntPtr.Zero;            m.RegionSize = IntPtr.Zero;            byte[] buffer;         while(address<=MaxAddress)         {             VirtualQueryEx(System.Diagnostics.Process.GetCurrentProcess().Handle, (IntPtr)address, out m, (uint)Marshal.SizeOf(typeof(MEMORY_BASIC_INFORMATION)));             buffer = new byte[(uint)m.RegionSize];             int dummy = 0;             ReadProcessMemory(handle, m.BaseAddress,buffer,(int)m.RegionSize,out dummy);             if(address == (long)m.BaseAddress + (long)m.RegionSize)                 break;             int count = 0;                     address = (long)m.BaseAddress+(long)m.RegionSize;             if (buffer.Length > signature.Length)             {                 for ( int i =0 ; i<buffer.Length;i++)                 {                     if ( buffer[i]==signature[0])                     {                         for(int b = 0; b < signature.Length; b++)                         {                                                         if (buffer[i + b]==signature[b] || signature[b]==-1)                             {                                 count++;                                 if (count == signature.Length)                                 {                                     CloseHandle(handle);                                  return i + (int)m.BaseAddress;                                 }                                                           }                            else { count = 0; Console.WriteLine("err"); }                         }                     }                 }             }                           }         CloseHandle(handle);                      return -1;        }    }}
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.