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

Видеоурок Kenga - поиск сигнатуры сигнатуру


Рекомендуемые сообщения

Код рабочий но почему то не находит сигнатуру. Находит из 73 только 30 байт

хотя в читэнжине вижу все

34006fb6ef62ea644043d2b291549243.jpg

может неверный адрес вхождения?

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 TradingAssisetent{    class MemoryRead    {        const int PROCESS_WM_READ = 0x0010; // флаг на чтение        //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;        }                       // Глобальные переменные        public int pID; // PID процесса        int startAddress = 0; // Начало файла        int sizeToAllocate = 0; // Размер файла        byte[] buffer; // Объявление ссылки на массив                public int GetProcessID(string nameProc) //Поиск Id процесса        {            foreach (Process proc in Process.GetProcessesByName(nameProc))            {                pID = proc.Id; // запомним ID процесса                return proc.Id;            }            return -1;        }        public int FindModulesAddress(string nameProc) // Поиск по модулям        {            if (pID !=0) // если ID процесса найден            {                foreach (var p in Process.GetProcesses())                {                     if (p.Id == pID ) // Ищем процеес с нашим ID                    {                        foreach (ProcessModule m in p.Modules)                         {                            if (m.ModuleName == nameProc + ".exe")                             {                                startAddress = (int)m.BaseAddress; // Берем базовый адрес                                sizeToAllocate = m.ModuleMemorySize; // Размер модуля                                return 1;                                                            }                        }                    }                }                            }            return -1;        }        public int FindSignature() // Поиск по сигнатуре        {                                int[] signature = {0x3C, 0x3F, 0x78, 0x6D, 0x6C, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x3D, 0x22, 0x31, 0x2E,                               0x30, 0x22, 0x20, 0x65, 0x6E, 0x63, 0x6F, 0x64, 0x69, 0x6E, 0x67, 0x3D, 0x22, 0x75, 0x74, 0x66, 0x2D,                              0x38, 0x22, 0x3F, 0x3E, 0x0A, 0x3C, 0x64, 0x61, 0x74, 0x61, 0x3E, 0x3C, 0x69, 0x6E, 0x76, 0x65, 0x6E,                               0x74, 0x6F, 0x72, 0x79, 0x3E, 0x3C, 0x69, 0x74, 0x65, 0x6D, 0x3E, 0x3C, 0x63, 0x6F, 0x6D, 0x6D, 0x6F,                               0x64, 0x69, 0x74, 0x79, 0x3E};                var handle = OpenProcess(PROCESS_WM_READ, false, pID); // ID процесса                if (handle != IntPtr.Zero) // Если хендл не 0, тогда                {                    buffer = new byte[sizeToAllocate]; // Объявляем буфер размером во весь модуль                    int bytesread; // переменная заглушка                    ReadProcessMemory(handle, (IntPtr)startAddress, buffer, sizeToAllocate, out bytesread); //Читаем, с начала адресса, в буфер, весь файл, и заглушка                    CloseHandle(handle); // закрыли хендл                                    var counter = 0; // обьявляем переменную счетчик                     if (signature.Length <= buffer.Length)                    {                        for (var i = 0; i < buffer.Length; i++)                        {                            if (buffer[i] == signature[0] | signature [0] == -1 )                            {                                for ( var j =0;  j < signature.Length; j++)                                {                                    var text = buffer[i + j];                                    if (buffer[i+j]== signature[j] | signature[j] == -1)                                    {                                        counter++;                                        if (counter >=29)                                        { \\максимум было 30 каунтов                                        }                                                                                if (counter == signature.Length)                                        {                                            var result = i + startAddress;                                            return result;                                        }                                    }                                    else                                    {                                        counter = 0;                                    }                                }                            }                        }                    }                }                return -1;             }
Ссылка на комментарий
Поделиться на другие сайты

попробуйте этим поискать вашу сигнатуру, там два варианта, потом скажите, в каком варианте находит

сигантура пишется как на рисунке.

post-8512-0-65037000-1430321280_thumb.pn

MEMORY_Scaner.7z

VirusTotal

  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

попробуйте этим поискать вашу сигнатуру, там два варианта, потом скажите, в каком варианте находит

сигантура пишется как на рисунке.

Плюсанул)

Программу потестил быстро с поиском по сигнатуре - отлично находит.

P.S. #1

Писал на C#?

P.S. #2

Добавил в твое сообщение результат сканирования с VirusTotal - вдруг кому интересно будет.

Ссылка на комментарий
Поделиться на другие сайты

Плюсанул)

Программу потестил быстро с поиском по сигнатуре - отлично находит.

P.S. #1

Писал на C#?

P.S. #2

Добавил в твое сообщение результат сканирования с VirusTotal - вдруг кому интересно будет.

Да, на C# писал. ценю +ы

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

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

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