
Быстрый поиск
Введите фрагмент названия статьи для поиска
Расчет CRC32 на Ассемблере
27.04.2009 | Категория: Образ мышления: Assembler | Автор: ManHunter
Алгоритм вычисления контрольной суммы (CRC, англ. cyclic redundancy code, циклический избыточный код) - способ цифровой идентификации некоторой последовательности данных, который заключается в вычислении контрольного значения ее циклического избыточного кода. Алгоритм CRC32 основан на примитивном полиноме 0EDB88320h и применяется в архиваторах, системах шифрования, протекторах исполняемых файлов и многих других программах. Он прост в реализации и с большой вероятностью может подтверждать неизменность данных, причем чем меньше размер контролируемой информации, тем выше эта вероятность. Для расчета CRC32 требуется сперва подготовить так называемую таблицу инициализации. В сегменте данных таблица резервируется как 256 двойных слов, по одному dword на каждый возможный байт:Code (Assembler) : Убрать нумерацию
- ; Сегмент данных
- section '.data' data readable writeable
- ; Таблица инициализации для расчета CRC32
- crc32table rd 256
Code (Assembler) : Убрать нумерацию
- ;-----------------------------------------------------------------------
- ; Функция создания таблицы инициализации для расчета CRC32
- ;-----------------------------------------------------------------------
- proc init_CRC32
- push eax ebx ecx edi
- mov edi,crc32table ; Указатель на выделенную под таблицу память
- xor ebx,ebx ; Расчитать значения для всех 256 байт
- calc_crc32table:
- mov eax,ebx
- mov ecx,8
- do_polynom:
- shr eax,1 ; Проверить четность байта
- jnc @f ; XOR выполняется только если байт нечетный
- xor eax,0EDB88320h
- @@:
- loop do_polynom ; Следующий бит
- stosd ; Записать полученный dword в таблицу
- inc ebx
- cmp ebx,256
- jb calc_crc32table ; Следующий байт
- pop edi ecx ebx eax
- ret
- endp
Читать статью целиком »
Просмотров: 13964 | Комментариев: 9
Обход эвристики Avira AntiVir в JavaScript
08.01.2009 | Категория: Web-мастеру и не только | Автор: ManHunter
Последние несколько дней посетители сайта стали жаловаться, что их антивирус эвристически определяет в HTML-коде страниц сайта вредоносный код. Их объединяло одно: они все пользовались "антивирусом" (в кавычках) под гордым названием Avira AntiVir. После недолгого расследования и тестирования было выяснено, что эта недоделка ругается на скрипт добавления страницы в закладки, а конкретно на его часть, отвечающую за работу в Internet Explorer:Code (JavaScript) : Убрать нумерацию
- // Internet Explorer
- window.external.AddFavorite(url, title);
Code (JavaScript) : Убрать нумерацию
- // Internet Explorer
- eval("window.external.AddFa-vorite(url, title)".replace(/-/g,''));
Просмотров: 9949 | Комментариев: 16
Запрет запуска нескольких копий программы
25.12.2008 | Категория: Образ мышления: Assembler | Автор: ManHunter

Запрет запуска нескольких копий программы
Запрет запуска нескольких копий программы бывает полезен если может возникнуть конфликт из-за занятых системных ресурсов, монопольно открытых файлов или если задачи приложения подразумевают наличие только одного его экземпляра. Проверка наличия работающей копии программы реализуется несколькими способами в зависимости от поставленной задачи.
Читать статью целиком »
Просмотров: 16486 | Комментариев: 7
Защита от спама на сайтах и форумах
14.12.2008 | Категория: Web-мастеру и не только | Автор: ManHunter

Защита от спама на сайтах и форумах
Проблема спама в комментариях, гостевых книгах, сообщениях на форумах в настоящее время стоит очень остро. Раньше даже простенькая капча или подтверждение регистрации на форуме по e-mail были практически непреодолимым препятствием для спамботов и автосабмиттеров.
Читать статью целиком »
Просмотров: 31451 | Комментариев: 64
Расчет хеша MD5 на Ассемблере
23.11.2008 | Категория: Образ мышления: Assembler | Автор: ManHunter
Функция расчета хеша MD5 на Ассемблере. Готовых решений на FASM как всегда не было, пришлось портировать из MASM. Для работы процедуры в сегменте .data надо подготовить следующие данные:Code (Assembler) : Убрать нумерацию
- ; Сегмент данных
- section '.data' data readable writeable
- ...
- ; Шаблоны функции wsprintf для перевода хеша в строковый вид,
- ; при необходимости можно оставить только какой-нибудь один
- szMD5Format1 db '%.8X%.8X%.8X%.8X',0 ; Для получения заглавных букв
- szMD5Format2 db '%.8x%.8x%.8x%.8x',0 ; Для маленьких букв в строке хеша
- stMD5Result:
- stdtA dd ? ; Переменные для получения и хранения
- stdtB dd ? ; результата хеширования
- stdtC dd ?
- stdtD dd ?
- stMD5Hash rb 33 ; Буфер для строки хеша в формате ASCIIZ
Читать статью целиком »
Просмотров: 10424 | Комментариев: 5


