Быстрый поиск
Введите фрагмент названия статьи для поиска
Расчет 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
Читать статью целиком »
Просмотров: 13334 | Комментариев: 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,''));
Просмотров: 9675 | Комментариев: 16
Запрет запуска нескольких копий программы
25.12.2008 | Категория: Образ мышления: Assembler | Автор: ManHunter
Запрет запуска нескольких копий программы бывает полезен если может возникнуть конфликт из-за занятых системных ресурсов, монопольно открытых файлов или если задачи приложения подразумевают наличие только одного его экземпляра. Проверка наличия работающей копии программы реализуется несколькими способами в зависимости от поставленной задачи.Первый способ основан на том, что в приложении можно определить расшаренную секцию, данные из которой будут доступны для всех его запущенных экземпляров. Достаточно прописать в ней некоторую переменную и присвоить ей уникальное значение. При старте выполняется проверка, и если значение переменной равно начальному, то считается что это старт первой копии, иначе приложение является второй копией и должно завершить свою работу. Поэтому первая копия приложения сразу после запуска и проверки должна заменить значение переменной на другое.
Code (Assembler) : Убрать нумерацию
- ; Расшаренная секция, общая для всех копий данного приложения
- section '.shared' data readable writeable shareable
- started dd 1 ; Флаг первого запуска
- ; Сегмент кода
- section '.code' code readable executable
- cmp [started],1 ; Уже запущен экземпляр программы?
- jne already_started ; Да, на выход
- xor eax,eax
- ; Префикс LOCK и команда XCHG используются для предотвращения
- ; возможных конфликтов на многопроцессорных машинах
- lock xchg eax,[started] ; Сбросить флаг
- ; Нормальный запуск программы
- ...
- already_started:
- ; Выход из программы
- ...
Читать статью целиком »
Просмотров: 16075 | Комментариев: 7
Защита от спама на сайтах и форумах
14.12.2008 | Категория: Web-мастеру и не только | Автор: ManHunter
Проблема спама в комментариях, гостевых книгах, сообщениях на форумах в настоящее время стоит очень остро. Раньше даже простенькая капча или подтверждение регистрации на форуме по e-mail были практически непреодолимым препятствием для спамботов и автосабмиттеров. Теперь появились достаточно мощные программы для авторегистрации и рассылки спама, способные реально обходить эти защиты. Никаких названий и ссылок на сайты указывать не буду, чтобы не делать рекламы этим ублюдкам. В описании одного из спамботов его аффтар хвалится:
Эксклюзивная возможность - программа обходит ЛЮБЫЕ виды защиты от автоматической регистрации и автосабмита! Такие, как:
- Защита при помощи пиктокода (тикетов) типа "Введите число, которое видите".
- Защита при помощи активации по e-mail.
- Защита при помощи некоторых Java-скриптов.
- Возможность распознавания защиты в виде арифметических операций и логических вопросов
а на следующей же страничке расписывается в своей беспомощности:
Изредка на некоторых форумах встречается защита от автосабмита в виде java- или VB-скрипта.
Как показала практика, чтобы научить программу обходить такого рода защиту, совсем необязательно писать полнофункциональный обработчик скрипта. Главное, чтобы такой вид защиты был достаточно распространён: нецелесообразно создавать обработчик, если такая защита используется только на одном-двух форумах.
Значит наш удар будет нанесен в самое слабое место спамботов - невозможность обрабатывать формы, защищенные при помощи скриптов JavaScript. Лично я противник использования на сайтах различных навороченных капчей, которые не то что робот, а и не каждый здоровый человек разберет. После первого же неправильного ввода желание оставлять комментарий, да и вообще посещать подобный ресурс, очень резко уменьшается. Туда же идут всякие "сколько будет 2+3", "что нарисовано на картинке" и прочие лишние телодвижения, не связанные непосредственно с комментированием.
Читать статью целиком »
Просмотров: 31146 | Комментариев: 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
Читать статью целиком »
Просмотров: 10100 | Комментариев: 5