Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 08.03.2016
Сообщений: 11

Как быстро искать сигнатуру?

05.04.2016, 18:24. Показов 1240. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как сделать такое


Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
public class SigScan
        {
            [DllImport("kernel32.dll", SetLastError = true)]
            private static extern bool ReadProcessMemory(IntPtr hProcess,
            IntPtr lpBaseAddress, [Out()] byte[] lpBuffer, int dwSize, out int lpNumberOfBytesRead);
            private byte[] m_vDumpedRegion;
            private Process m_vProcess;
            private IntPtr m_vAddress;
            private Int32 m_vSize;
            public SigScan()
            {
                this.m_vProcess = null;
                this.m_vAddress = IntPtr.Zero;
                this.m_vSize = 0;
                this.m_vDumpedRegion = null;
            }
            public SigScan(Process proc, IntPtr addr, int size)
            {
                this.m_vProcess = proc;
                this.m_vAddress = addr;
                this.m_vSize = size;
            }
            private bool DumpMemory()
            {
                try
                {
                    if (this.m_vProcess == null) return false;
                    if (this.m_vProcess.HasExited == true) return false;
                    if (this.m_vAddress == IntPtr.Zero) return false;
                    if (this.m_vSize == 0) return false;
                    this.m_vDumpedRegion = new byte[this.m_vSize];
                    bool bReturn = false;
                    int nBytesRead = 0;
                    bReturn = ReadProcessMemory(this.m_vProcess.Handle, this.m_vAddress, this.m_vDumpedRegion, this.m_vSize, out nBytesRead);
                    if (bReturn == false || nBytesRead != this.m_vSize) return false;
                    return true;
                }
                catch (Exception)
                {
                    return false;
                }
            }
            private bool MaskCheck(int nOffset, byte[] btPattern, string strMask)
            {
                for (int x = 0; x < btPattern.Length; x++)
                {
                    if (strMask[x] == '?')
                        continue;
                    if ((strMask[x] == 'x') && (btPattern[x] != this.m_vDumpedRegion[nOffset + x]))
                        return false;
                }
                return true;
            }
            
            public IntPtr FindPattern(byte[] btPattern, string strMask, int nOffset)
            {
                try
                {
                    if (this.m_vDumpedRegion == null || this.m_vDumpedRegion.Length == 0)
                    {
                        if (!this.DumpMemory()) return IntPtr.Zero;
                    }
                    if (strMask.Length != btPattern.Length) return IntPtr.Zero;
 
                    for (int x = 0; x < this.m_vDumpedRegion.Length; x++)
                    {
                        if (this.MaskCheck(x, btPattern, strMask))
                        {
                            return new IntPtr((int)this.m_vAddress + (x + nOffset));
                        }
                    }
                    return IntPtr.Zero;
                }
                catch (Exception)
                {
                    return IntPtr.Zero;
                }
            }
            public void ResetRegion()
            {
                this.m_vDumpedRegion = null;
            }
            public Process Process
            {
                get { return this.m_vProcess; }
                set { this.m_vProcess = value; }
            }
            public IntPtr Address
            {
                get { return this.m_vAddress; }
                set { this.m_vAddress = value; }
            }
            public Int32 Size
            {
                get { return this.m_vSize; }
                set { this.m_vSize = value; }
            }
        }
        /*
        public int FindSignature()
        {
            var moduleName = "Game";
            var startAddress = 0;
            var sizeToAllocate = 0;
            var pattern = new int[] { 91, 64, 76, 73, 69, 78, 84, 93, 32, 91, 73, 78, 70, 79, 93, 32, 91, 67, 72, 65, 84, 93 };
 
            if (pID != 0)
            {
                foreach (var p in Process.GetProcesses())
                {
                    if (p.Id == pID)
                    {
                        foreach (ProcessModule m in p.Modules)
                        {
                            if (m.ModuleName == moduleName)
                            {
 
                                //startAddress = (int)p.MainModule.BaseAddress;
                                startAddress = (int)m.BaseAddress;
                                //sizeToAllocate = p.MainModule.ModuleMemorySize;
                                sizeToAllocate = m.ModuleMemorySize;
                                break;
                            }
                        }
 
                    }
                }
                var Handle = OpenProcess(0x001F0FFF, false, pID);
                if (Handle != IntPtr.Zero)
                {
                    byte[] buffer = new byte[sizeToAllocate];
                    IntPtr bytesread;
                    ReadProcessMemory(Handle, (IntPtr)startAddress, buffer, sizeToAllocate, out bytesread);
                    CloseHandle(Handle);
                    var counter = 0;
                    if (pattern.Length <= buffer.Length)
                    {
                        for (var i = 0; i < buffer.Length; i++)
                        {
                            if (buffer[i] == pattern[0] | pattern[0] == -1)
                            {
                                for (var j = 0; j < pattern.Length; j++)
                                {
                                    if (buffer[i + j] == pattern[j] | pattern[j] == -1)
                                    {
                                        counter++;
                                        if (counter == pattern.Length)
                                        {
                                            var result = i + startAddress;
                                            return (int)result;
                                        }
                                    }
                                    else
                                    {
                                        counter = 0;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return (int)0;
        }
        */
        private void button1_Click(object sender, EventArgs e)
        {
            Process someProc = Process.GetProcessesByName("Game")[0];
           // SigScan _sigScan = new SigScan(someProc, new IntPtr(0x1ac10000), 0x81000);
            SigScan _sigScan = new SigScan(someProc, new IntPtr((int)0x0000000), 0xFFFFFFF);
            byte[] nTest_Byte = new byte[46] { 0x30, 0x32, 0x5F, 0x73, 0x68, 0x6F, 0x70, 0x5F, 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x91, 0x75, 0x15, 0x58, 0x92, 0x75, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x8C, 0x75, 0x15, 0x64, 0x8C, 0x75, 0x15, 0x4C, 0x8C, 0x75, 0x15, 0x00 };
            IntPtr nTest_Mask = _sigScan.FindPattern(nTest_Byte, "xxxxxxxxxxxx?????xxxxxxxx????????xxxxxxxxxxxx?", 0);
 
           // _sigScan.FindPattern(new byte[16] { 0x61, 0x72, 0x30, 0x32, 0x5F, 0x73, 0x68, 0x6F, 0x70, 0x5F, 0x6E, 0x61, 0x6D, 0x65, 0x00, 0x00 }, "xxxxxxxxxxxxxx??", 0);
 
            label1.Text = string.Format(" 0x{0:X6};", nTest_Mask.ToInt32());
        }

на Delphi
?

Добавлено через 2 минуты
блин название не то вставилось
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.04.2016, 18:24
Ответы с готовыми решениями:

Как быстро искать подстроку в большом бинарном файле
Доброго всем времени суток! Есть бинарный файл в DOS-кодировке, в котором данные записаны так: такие последовательности...

Как найти битовую сигнатуру в BitArray?
Друзья, добрый день! Есть последовательность &quot;битов&quot; в BitArray (берется из файла &gt;100M) И есть набор сигнатур, они могут быть...

Подскажите где искать и что искать
Необходимо реализовать простенький на мой взгляд скрипт. Он должен выполнять следующее: Зашел пользователь на сайт, скрипт проверил по...

2
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
05.04.2016, 18:33
Цитата Сообщение от CODER_228 Посмотреть сообщение
название не то вставилось
Какое надо?
0
05.04.2016, 21:14

Не по теме:

как быстро искать сигнатуру
Так же как медленно, но только быстрее)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.04.2016, 21:14
Помогаю со студенческими работами здесь

Получить сигнатуру файла
В общем такое дело надо писать антивирус но для начала надо разобраться как получить сигнатуру условно вирусного файла. Может у кого то...

Возможно ли восстановить сигнатуру МК?
Возможно ли как нибудь восстановить сигнатуру МК? И, кто пользовался AVRFuseDoctor'ом, возможно ли через UART выставить чип (если битая...

Определить сигнатуру файла
Помогите с задачей. Нужно определить сигнатуру файла и вывести ее на экран. Как это сделать ? Вводится путь к файлу, сигнатуру которого...

Узнать сигнатуру файла
Привет. Увлекся немного работой с файлами и в ходе изучения столкнулся с понятием сигнатура файла. Инфы, которая бы внятно объяснила как...

avrdude читает сигнатуру FFFFFF
Имеется две attiny85. C обоими есть косяк: когда шью avrdude-ом, он ругается, что читает сигнатуру 0xffffff. Установил, что связь с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru