Всем привет. Возможно кто-нибудь уже видел этот сканер сигнатур, реализованный на си шарпе. using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Forms;using System.Diagnostics;using System.Runtime.InteropServices;namespace HackMemory //Название вашего проекта!!!{public class AOBScan{//ReadProcessMemory[DllImport("kernel32.dll")]protected static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] buffer, uint size, int lpNumberOfBytesRead);//VirtualQueryEx[DllImport("kernel32.dll")]protected static extern int VirtualQueryEx(IntPtr hProcess, IntPtr lpAddress, out MEMORY_BASIC_INFORMATION lpBuffer, int dwLength);[StructLayout(LayoutKind.Sequential)]protected struct MEMORY_BASIC_INFORMATION{public IntPtr BaseAddress;public IntPtr AllocationBase;public uint AllocationProtect;public uint RegionSize;public uint State;public uint Protect;public uint Type;}protected List MemoryRegion { get; set; } protected void MemInfo(IntPtr pHandle){IntPtr Addy = new IntPtr();while (true){MEMORY_BASIC_INFORMATION MemInfo = new MEMORY_BASIC_INFORMATION();int MemDump = VirtualQueryEx(pHandle, Addy, out MemInfo, Marshal.SizeOf(MemInfo));if (MemDump == 0) break;if ((MemInfo.State & 0x1000) != 0 && (MemInfo.Protect & 0x100) == 0)MemoryRegion.Add(MemInfo);Addy = new IntPtr(MemInfo.BaseAddress.ToInt32() + (int)MemInfo.RegionSize);}} protected IntPtr Scan(byte[] sIn, byte[] sFor){int[] sBytes = new int[256]; int Pool = 0;int End = sFor.Length - 1;for (int i = 0; i < 256; i++)sBytes[i] = sFor.Length;for (int i = 0; i < End; i++)sBytes[sFor[i]] = End - i;while (Pool <= sIn.Length - sFor.Length){for (int i = End; sIn[Pool + i] == sFor[i]; i--)if (i == 0) return new IntPtr(Pool);Pool += sBytes[sIn[Pool + End]];}return IntPtr.Zero;} public IntPtr AobScan(byte[] Pattern, IntPtr handle){MemoryRegion = new List();MemInfo(handle);//сюда записываем handle процессаfor (int i = 0; i < MemoryRegion.Count; i++){byte[] buff = new byte[MemoryRegion[i].RegionSize];ReadProcessMemory(handle, MemoryRegion[i].BaseAddress, buff, MemoryRegion[i].RegionSize, 0);IntPtr Result = Scan(buff, Pattern);if (Result != IntPtr.Zero)return new IntPtr(MemoryRegion[i].BaseAddress.ToInt32() + Result.ToInt32());}return IntPtr.Zero;}}}protected IntPtr Scan(byte[] sIn, byte[] sFor){int[] sBytes = new int[256]; int Pool = 0;int End = sFor.Length - 1;for (int i = 0; i < 256; i++)sBytes[i] = sFor.Length;for (int i = 0; i < End; i++)sBytes[sFor[i]] = End - i;while (Pool <= sIn.Length - sFor.Length){for (int i = End; sIn[Pool + i] == sFor[i]; i--)if (i == 0) return new IntPtr(Pool);Pool += sBytes[sIn[Pool + End]];}return IntPtr.Zero;}AOBScan aobscan = new AOBScan(); [color=#008000]//ссылка на класс[/color]int Address; [color=#008000]//найденный адрес[/color]int pID = 666; [color=#008000]//индификатор процесса[/color] IntPtr handle = OpenProcess(0x001F0FFF, false, pID);Address = (int)aobscan.AobScan(new byte[] { 0x00, 0x8B, 0x4A, 0x24, 0x85, 0xC0, 0x0F, 0x84 }, handle);