С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
TTo3uTuB
0 / 0 / 0
Регистрация: 18.03.2015
Сообщений: 12
1

Сканер сигнатур, лишний результат

26.03.2015, 18:05. Просмотров 706. Ответов 2
Метки нет (Все метки)

Здравствуйте уважаемые. Прошу помощи со сканером сигнатур, точнее понять не могу почему он находит лишний адрес байт в котором не совпадает с сигнатурой. Уже и так и так проверял. Находит 5 сигнатур, а должен всего 4 находить, в чит энжине по той же сигнатуре 4 находит как и должно быть. Прикладываю скриншоты.
А вот сама искомая сигнатура:
0x66, 0x0F, 0xD6, 0x41, 0x50, 0x8B, 0x4D, 0xF0, 0x89, 0x0D, -1, -1, -1, -1, 0x8B, 0xE5, 0x5D, 0xC3, 0x8B, 0x7D, 0xE8, 0x8B, 0x75, 0xEC, 0x8B, 0x5D, 0xFC, 0x8B, 0x45, 0x08

Прошу помощи.

Сканер сигнатур, лишний результат


Сканер сигнатур, лишний результат


Сканер сигнатур, лишний результат


А вот сам код сканера.
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
public int[] FindSignature(int[] sign)
{
 
    prHandle = OpenProcess(0x001F0FFF, false, prId);
 
    int[] addr = new int[0];
 
    byte[] findSign = new byte[sign.Length];
 
    long MaxAddress = 0x7fffffff;
    long address = 0;
    MEMORY_BASIC_INFORMATION m;
    m.BaseAdress = IntPtr.Zero;
    m.RegionSize = IntPtr.Zero;
    byte[] buffer;
 
    while (address <= MaxAddress)
    {
        VirtualQueryEx(prHandle, (IntPtr)address, out m, (uint)Marshal.SizeOf(typeof(MEMORY_BASIC_INFORMATION)));
        buffer = new byte[(uint)m.RegionSize];
        int dammy = 0;
        ReadProcessMemory(prHandle, m.BaseAdress, buffer, (int)m.RegionSize, out dammy);
        if (address == (long)m.BaseAdress + (long)m.RegionSize)
            break;
        int count = 0;
        address = (long)m.BaseAdress + (long)m.RegionSize;
                
        if (buffer.Length > sign.Length)
        {
            for (int i = 0; i < buffer.Length; i++)
            {
                if ((buffer[i] == sign[0]) && (buffer.Length >= (sign.Length + i)))
                {
                    for (int q = 0; q < sign.Length; q++)
                    {
                        if (buffer[i + q] == sign[q] || sign[q] == -1)
                        {
 
                            findSign[q] = buffer[i + q];
 
                            count++;
 
                            if (count == sign.Length)
                            {
 
                                Console.WriteLine("Массив число эелементов: "+addr.Length);
                                        
                                foreach (byte ell in findSign)
                                            Console.Write(" "+Convert.ToString(ell, 16));
 
                                Console.WriteLine("");
                                        
                                Array.Resize(ref addr, addr.Length + 1);
                                addr[addr.Length - 1] = i + (int)m.BaseAdress;
                            }
                        }
                        else
                        {
                            count = 0;
                        }
                    }
                }
            }
        }
    }
    CloseHandle(prHandle);
    return addr;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2015, 18:05
Ответы с готовыми решениями:

Поиск сигнатур внутри процесса
Вообщем ребят, теперь возникла другая проблема (Предыдущую решил на C++). Я...

Подключение закрытых dll, поиск сигнатур
Здравствуйте! Помогите найти решение. Есть закрытая dll (видимо с), методы...

Сканер локальной сети, NetServerEnum!
Здравствуйте. нужно мне организовать поиск файлов в локальной сети....

Сканер портов (заблокирован, отфильтрован)
Написал программу для сканирования потоков. Создал TCPClient в try создаю...

результат запроса linq to sql содержит данные обеих таблиц, картографированных на классы. Я хочу результат присвоить в GridControl.DataSource
Здравствуйте! У меня есть две таблицы T1(id_t1(PK),name), T2(id_t2(PK),...

2
TTo3uTuB
0 / 0 / 0
Регистрация: 18.03.2015
Сообщений: 12
26.03.2015, 18:42  [ТС] 2
Сделал проверку ещё одну, считал байты по найденным адресам и вторая сигнатура не совпадает, ума не приложу как она вообще туда попадает.
Сканер сигнатур, лишний результат
0
TTo3uTuB
0 / 0 / 0
Регистрация: 18.03.2015
Сообщений: 12
26.03.2015, 19:51  [ТС] 3
Проблемма решена, сам нашел. break нужен был после первого неудачного сравнения с сигнатурой чтоб выйти из этого цикла.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2015, 19:51

Сканер сигнатур
в продолжении этой темы...

Показать все адреса (сканер сигнатур)
добрый вечер помогите добрые люди - надо найти адресса сигнатур типо этого 85...

Сканер IP - Адресов, Порт - сканер (в локальной сети)
Доброе время суток) Написана программа для сканирования портов (указал...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru