Blog. Just Blog

Быстрый поиск

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

Расчет CRC64 на Ассемблере

30.07.2014 | Категория: Образ мышления: Assembler | Автор: ManHunter
Алгоритм подсчета CRC64, как и остальных контрольных сумм, предназначен для проверки целостности данных при их передаче или хранении. Также контрольные суммы могут использоваться для быстрого сравнения двух наборов данных на неэквивалентность: с большой вероятностью различные наборы данных будут иметь неравные контрольные суммы. Длина в 64 бита позволяет сократить число возможных коллизий, а использование предварительно посчитанной таблицы делает скорость вычисления достаточно большой.

В этой статье я покажу два варианта алгоритма подсчета CRC64. Они отличаются используемыми полиномами и, соответственно, полученными на их основе таблицами. Сами алгоритмы отличаются ненамного. Первый вариант - прямой или нормальный, принятый как стандарт ISO 3309. Он используется в различных программах, например, в базе данных PostgreSQL. Здесь за основу берется полином 0x42F0E1EBA9EA3693.
  1. ;-----------------------------------------------------------------------
  2. ; Функция вычисления CRC64 - Прямой табличный алгоритм (PostgreSQL)
  3. ;-----------------------------------------------------------------------
  4. ; Параметры:
  5. ;   lData  - указатель на участок памяти для расчета CRC64
  6. ;   dLen   - размер участка в байтах
  7. ; На выходе:
  8. ;   EAX:EDX = CRC64 участка памяти
  9. ;-----------------------------------------------------------------------
  10. proc calc_CRC64 lData:dword, dLen:dword
  11.         ; Сохранить регистры
  12.         push    edi esi ebx ecx
  13.  
  14.         ; Указатель на данные для подсчета CRC64
  15.         mov     esi,[lData]
  16.         ; Размер участка данных
  17.         mov     ecx,[dLen]
  18.  
  19.         xor     eax,eax
  20.  
  21.         ; Начальное значение CRC64 = -1
  22.         mov     ebx,0FFFFFFFFh
  23.         mov     edx,ebx
  24. @@:
  25.         ; Следующий символ данных
  26.         lodsb
  27.  
  28.         ; Вычислить смещение QWORD в таблице
  29.         mov     edi,edx
  30.         shr     edi,24
  31.         xor     eax,edi
  32.  
  33.         ; Вычислить значение CRC64
  34.         shld    edx,ebx,8
  35.         shl     ebx,8
  36.         xor     ebx,dword [crc64table+eax*8]
  37.         xor     edx,dword [crc64table+eax*8+4]
  38.  
  39.         loop    @b
  40.  
  41.         xchg    eax,ebx
  42.  
  43.         ; Финализация CRC64
  44.         not     eax
  45.         not     edx
  46.  
  47.         ; Восстановить регистры
  48.         pop     ecx ebx esi edi
  49.  
  50.         ret
  51. endp
Эта функция подразумевает, что подсчет контрольной суммы выполняется сразу для всей строки данных, без промежуточных накопительных подсчетов. Если требуется выполнять подсчет для нескольких блоков, например, периодически поступающие потоковые данные или очень большие объемы информации, то алгоритм придется немного модифицировать. Для этого начальное значение CRC64 при втором и последующем расчете инициализируется промежуточным значением с предыдущего подсчета, а финализация выполняется только после вычисления CRC64 последнего блока данных.

Читать статью целиком »
Просмотров: 5796 | Комментариев: 4

Как Windows определяет, что файл был загружен из Интернета

12.04.2014 | Категория: Software | Автор: ManHunter
Часто при попытке запустить файлы, скачанные из интернета, появляется примерно такое окно:


Как Windows определяет, что файл был загружен из Интернета

Такую "черную метку" файлу обычно ставит браузер Internet Explorer. При этом файл можно переименовать, скопировать или даже переместить на другой диск, предупреждение все равно будет оставаться. Снять блокировку с файла можно примерно так. Но каким образом система определяет, что файл скачан из интернета? Эта информация записывается в так называемые альтернативные потоки NTFS. Суть технологии альтернативных потоков заключается в том, что у файла на дисковой системе NTFS одновременно может быть несколько потоков, содержащих данные. Проводник Windows и большинство файловых менеджеров могут работать только с главным потоком, который представляет собой основное содержимое файла.

Читать статью целиком »
Просмотров: 19678 | Комментариев: 15

Защита кнопок формы от автокликеров

10.02.2014 | Категория: Образ мышления: Assembler | Автор: ManHunter
В одной из прошлых статей я писал об управлении другим приложением из своей программы, в частности о возможности эмулировать нажатия на кнопки. Ненадолго переберусь на другую сторону баррикады и расскажу о нехитром способе, которым можно отличить реальные нажатия на кнопки от эмулированных. Заключается он в том, что при обработке клика проверяются экранные координаты, где это событие произошло. Если они находятся в пределах границ кнопки, то все нормально, иначе клик считается эмулированным. Координаты события можно получить при помощи функции GetMessagePos.
  1. button_clicked:
  2.         ; Получить экранные координаты кнопки
  3.         invoke  GetDlgItem,[hwnddlg],ID_BUTTON
  4.         invoke  GetWindowRect,eax,pt
  5.  
  6.         ; Получить координаты произошедшего события
  7.         invoke  GetMessagePos
  8.  
  9.         ; Выделить координату Y
  10.         mov     ebx,eax
  11.         shr     ebx,16
  12.         mov     [y],ebx
  13.  
  14.         ; Выделить координату X
  15.         mov     ebx,eax
  16.         and     ebx,0FFFFh
  17.         mov     [x],ebx
  18.  
  19.         ; Проверка, чтобы событие произошло в пределах кнопки
  20.         mov     eax,[y]
  21.         cmp     eax,[pt.top]
  22.         jb      clicked_by_robot
  23.         cmp     eax,[pt.bottom]
  24.         ja      clicked_by_robot
  25.  
  26.         mov     eax,[x]
  27.         cmp     eax,[pt.left]
  28.         jb      clicked_by_robot
  29.         cmp     eax,[pt.right]
  30.         ja      clicked_by_robot
  31.  
  32. clicked_by_human:
  33.         ; Кнопка нажата человеком
  34.         ...
  35.  
  36. clicked_by_robot:
  37.         ; Кнопка нажата автоматически
  38.         ...
Недостаток такого способа в том, что при работе с кнопками и полями формы с клавиатуры, координаты события все равно будут передаваться на основании положения курсора мыши. Эту проблему можно решить через субклассированный обработчик, в котором придется подавлять нажатия с клавиатуры. Ну и не забывайте о том, что никто не мешает так же программно передвинуть курсор на кнопку и "кликнуть" на ней, так что это защита только от самых простейших автокликеров. А адептам Темной стороны Силы будет полезно знать о такой возможности защиты, хотя на практике я ничего подобного не встречал.

Читать статью целиком »
Просмотров: 4552 | Комментариев: 14

Видеоняня Motorola MBP36

23.01.2014 | Категория: Обзоры техники | Автор: ManHunter

Видеоняня Motorola MBP36

С появлением в семье молодого пополнения, возникла необходимость присматривать за ребенком во время домашних дел. Не всегда есть возможность постоянно находиться рядом с ребенком, но при этом всегда надо быть в курсе, что с ним происходит в данный момент. Было рассмотрено несколько вариантов видеонаблюдения от установки IP-камер до электронных нянь. Одни решения не устроили заоблачной ценой, другие недостаточной мобильностью, третьи сложностью реализации, в результате выбор остановился на видеоняне Motorola MBP36.

Читать статью целиком »
Просмотров: 5904 | Комментариев: 12

Ghostzilla. Незаметный серфинг по интернету

18.07.2013 | Категория: Software | Автор: ManHunter

Ghostzilla. Незаметный серфинг по интернету

Ghostzilla - бесплатный веб-браузер с открытым исходным кодом на базе движка Gecko, используемом в программах компании Mozilla. Особенностью браузера является то, что окно программы располагается в пространстве окна другого приложения, что позволяет скрыть наличие окна браузера от других лиц. Со стороны кажется, что пользователь работает с программой, но внутри ее окна на самом деле спрятался браузер. Если у вас за спиной постоянно мелькают любопытные люди, или же вы не хотите лишний раз палиться на работе за просмотром посторонних сайтов, то это решение для вас.

Читать статью целиком »
Просмотров: 6303 | Комментариев: 5

Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2019
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.14 сек. / MySQL: 3 (0.033 сек.) / Память: 5 Mb
Наверх