 |
Поиск сигнатур. - Вопросы и ответы, обсуждения - Ваши вопросы по C# только в данном разделе |
29.11.2012, 21:56
|
#1
|
|
|
|
Разведчик
|
 Регистрация: 23.11.2012
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Поиск сигнатур.
Здравствуйте! Написал код для поиска цепочки байт, то есть почти написал) Этот код считывает весь найденый регион памяти в процессе.
Но он не умеет искать в этом регионе памяти заданную сигнатуру. Скажите пожалуйста как сделать такую штукенцию?)
Вот собсно код:
Код:
public void memsrc()
{
Process hackProc = Process.GetProcessesByName("WindowsFormsApplication1.vshost")[0];
MEMORY_BASIC_INFORMATION mbi = new MEMORY_BASIC_INFORMATION();
SYSTEM_INFO si = new SYSTEM_INFO();
GetSystemInfo(ref si);
byte[] pattern = new byte[] { 0x2A, 0x00, 0x00, 0x0F, 0xB6, 0x87, 0x81, 0x02, 0x00, 0x00, 0x3D };
var startMem = 0;
var counter = 0;
startMem = (int)mbi.BaseAddress;
IntPtr nRead = IntPtr.Zero;
VirtualQueryEx(hackProc.Handle, (IntPtr)startMem, ref mbi, Marshal.SizeOf(typeof(MEMORY_BASIC_INFORMATION)));
byte[] buffer = new byte[(uint)mbi.RegionSize];
ReadProcessMemory(hackProc.Handle, (IntPtr)startMem, buffer, (uint)mbi.RegionSize, ref nRead);
}
|
|
|
29.11.2012, 23:38
|
#2
|
|
|
|
Старший сержант
|
 Регистрация: 29.07.2011
 Сообщений: 197
 Популярность: 8989
 Сказал(а) спасибо: 45
Поблагодарили 175 раз(а) в 139 сообщениях
|
Re: Поиск сигнатур.
Ну насколько я понимаю вот этот метод: ReadProcessMemory() выдаст тебе всю область, так в чем трабла найти там нужные значения?
|
|
|
30.11.2012, 00:28
|
#3
|
|
|
|
Разведчик
|
 Регистрация: 23.11.2012
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Поиск сигнатур.
На С++ понимаю как, но C# совсем другой и на нем такое не вкурю как сделать.
Надо что-то типа того:
Код:
if (pattern.Length < (int)mbi.RegionSize)
{
for (var i = 0; i < (int)mbi.RegionSize; i++)
{
if (buffer[i] == pattern[0])
{
for (var j = 0; j < pattern.Length; j++)
{
if (buffer[i + j] == pattern[j])
{
counter++;
if (counter == pattern.Length)
{
int result = i + startMem;
return;
}
else
{
counter = 0;
}
}
}
}
}
}
Последний раз редактировалось Workoutt; 30.11.2012 в 00:31.
|
|
|
30.11.2012, 00:45
|
#4
|
|
|
|
Старший сержант
|
 Регистрация: 29.07.2011
 Сообщений: 197
 Популярность: 8989
 Сказал(а) спасибо: 45
Поблагодарили 175 раз(а) в 139 сообщениях
|
Re: Поиск сигнатур.
|
|
|
30.11.2012, 03:36
|
#5
|
|
|
|
Сержант
|
 Регистрация: 01.10.2011
 Сообщений: 128
 Популярность: 5723
 Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
|
Re: Поиск сигнатур.
Самый простой алгоритм который пришел в голову
Код:
public static int indexOf(byte[] self, byte[] pattern, int start)
{
for (int i = start; i < self.Length - pattern.Length + 1; i++)
{
if(self[i] == pattern[0])
if (IsMatch(self, i, pattern))
return i;
}
return -1;
}
public static int indexOf(byte[] self, byte[] pattern)
{
return indexOf(self, pattern, 0);
}
private static bool IsMatch(byte[] array, int position, byte[] pattern)
{
for (int i = 0; i < pattern.Length; i++)
if (array[position + i] != pattern[i])
return false;
return true;
}
________________
Talk is cheap. Show me the code
— Linus Torvalds
Последний раз редактировалось Yukikaze; 30.11.2012 в 03:42.
|
|
|
Пользователь сказал cпасибо:
|
|
30.11.2012, 14:50
|
#6
|
|
|
|
Разведчик
|
 Регистрация: 23.11.2012
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Поиск сигнатур.
Хм, а как это все соединить и вызывать по нажатию кнопки?
|
|
|
06.12.2012, 20:21
|
#7
|
|
|
|
Разведчик
|
 Регистрация: 23.11.2012
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Поиск сигнатур.
Але) Есть кто живой?)
|
|
|
06.12.2012, 20:52
|
#8
|
|
|
|
Сержант
|
 Регистрация: 01.10.2011
 Сообщений: 128
 Популярность: 5723
 Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
|
Re: Поиск сигнатур.
иди учи основы
________________
Talk is cheap. Show me the code
— Linus Torvalds
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 21:08.
|
 |