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

Исследование защиты программы MD5 Tool
29.03.2014 | Категория: Темная сторона Силы | Автор: ManHunter

Скриншот программы MD5 Tool
Программа MD5 Tool предназначена для подсчета и проверки контрольной суммы MD5 файлов. Есть множество бесплатных и гораздо более мощных аналогов, поэтому мне очень странно, что за эту софтину аффтар пытается подрезать с пользователей по червонцу баксов. "И его посчитаем".
Читать статью целиком »
Просмотров: 5921 | Комментариев: 5

Расчет хеша MD4 на Ассемблере
17.04.2012 | Категория: Образ мышления: Assembler | Автор: ManHunter
MD4 (Message Digest 4) - хеш-функция, разработанная профессором Рональдом Ривестом в 1990 году. Для произвольных входных данных функция MD4 генерирует 128-разрядный хеш. Функция MD4 является предшественником MD5 и до настоящего времени применяется в некоторых сетевых технологиях Windows. В реализации обоих алгоритмов очень много общего, поэтому точно так же в сегменте данных надо подготовить следующие массивы и переменные:Code (Assembler) : Убрать нумерацию
- ; Сегмент данных
- section '.data' data readable writeable
- ...
- ; Шаблоны функции wsprintf для перевода хеша в строковый вид,
- ; при необходимости можно оставить только какой-нибудь один
- szMD4Format1 db '%.8X%.8X%.8X%.8X',0 ; Для получения заглавных букв
- szMD4Format2 db '%.8x%.8x%.8x%.8x',0 ; Для маленьких букв в строке хеша
- stMD4Result:
- stdtA dd ? ; Переменные для получения и хранения
- stdtB dd ? ; результата хеширования
- stdtC dd ?
- stdtD dd ?
- stMD4Hash rb 33 ; Буфер для строки хеша в формате ASCIIZ
Читать статью целиком »
Просмотров: 4419 | Комментариев: 2

Расчет CRC8 на Ассемблере
25.09.2011 | Категория: Образ мышления: Assembler | Автор: ManHunter
Контрольная сумма CRC8 применяется в основном для коротких сетевых пакетов и в микроконтроллерах. Из-за большой вероятности появления коллизий, использовать ее можно или для контроля целостности небольших объемах данных (оптимально - до 15 байт информации), или в случаях, когда возможность появления искажений исходных данных крайне мала. Алгоритм расчета CRC8 реализуется очень просто, работает очень быстро, из-за чего до сих пор находит свое применение. Первый вариант - прямой расчет.Code (Assembler) : Убрать нумерацию
- ;-----------------------------------------------------------------------
- ; Функция вычисления хеша CRC8
- ; by ManHunter / PCL
- ; http://www.manhunter.ru
- ;-----------------------------------------------------------------------
- ; Параметры:
- ; lpData - указатель на строку
- ; dSize - длина строки
- ; На выходе:
- ; AL = полученный хеш
- ;-----------------------------------------------------------------------
- proc CRC8 lpData:DWORD, dSize:DWORD
- push ebx ecx edx esi edi
- CRC8_POLYNOM = 31h
- ; Инициализация
- mov al,0FFh
- ; Длина строки
- cmp [dSize],0
- je .loc_ret
- ; Указатель на начало строки
- xor ecx,ecx
- @@:
- ; Получить символ из строки
- mov ebx,[lpData]
- xor al,byte [ebx+ecx]
- xor esi,esi
- .loc_cycle:
- test al,80h
- jz .loc_1
- shl al,1
- xor al,CRC8_POLYNOM
- jmp .loc_next
- .loc_1:
- shl al,1
- .loc_next:
- inc esi
- cmp esi,8
- jb .loc_cycle
- ; Следующий символ
- inc ecx
- cmp ecx,[dSize]
- jb @b
- .loc_ret:
- and eax,0FFh
- pop edi esi edx ecx ebx
- ret
- endp
Читать статью целиком »
Просмотров: 12057 | Комментариев: 3

Расчет хеша Adler-32 на Ассемблере
12.07.2011 | Категория: Образ мышления: Assembler | Автор: ManHunter
Adler-32 - хеш-функция, разработанная Марком Адлером, хорошо известным по его работам в области компрессии данных. Этот хеш используется в библиотеке zlib, соавтором которой и является Марк Адлер. По скорости работы Adler-32 превосходит CRC32, однако уступает ей по качеству обнаружения ошибок контрольной суммы, особенно на коротких строках. Есть несколько вариантов реализации алгоритма на разных языках и с разной степенью эффективности, мой вариант на Ассемблере такой:Code (Assembler) : Убрать нумерацию
- ;-----------------------------------------------------------------------
- ; Функция вычисления хеша Adler-32
- ; by ManHunter / PCL
- ; http://www.manhunter.ru
- ;-----------------------------------------------------------------------
- ; Параметры:
- ; lpData - указатель на строку
- ; dSize - длина строки
- ; На выходе:
- ; EAX = полученный хеш
- ;-----------------------------------------------------------------------
- proc Adler32 lpData:DWORD, dSize:DWORD
- push ebx ecx edx esi edi
- ; Инициализация
- mov edi,1 ; s1 = 1
- xor esi,esi ; s2 = 0
- ; Длина строки
- cmp [dSize],0
- je .loc_ret
- mov ebx,65521 ; base
- xor ecx,ecx
- @@:
- ; Получить символ из строки
- mov eax,[lpData]
- movzx eax,byte [eax+ecx]
- add eax,edi ; s1 = (s1 + buf[i]) % 65521
- xor edx,edx
- div ebx
- mov edi,edx
- add edx,esi ; s2 = (s2 + s1) % 65521
- mov eax,edx
- xor edx,edx
- div ebx
- mov esi,edx
- ; Следующий символ
- inc ecx
- cmp ecx,[dSize]
- jb @b
- .loc_ret:
- mov eax,esi ; adler32 = (s2 << 16) + s1
- rol eax,16
- add eax,edi
- pop edi esi edx ecx ebx
- ret
- endp
Code (Assembler) : Убрать нумерацию
- ; Сегмент данных
- section '.data' data readable writeable
- ...
- somedata db 'Yeah! I like Flat Assembler!',0 ; Исходные данные для хеширования
- ; Сегмент кода
- section '.code' code readable executable
- ...
- ; Расчет длины строки. Для бинарных данных lstrlen лучше не использовать
- invoke lstrlen,somedata
- ; Расчет Adler-32
- stdcall Adler32,somedata,eax
- ; EAX = 82E0095Dh
Читать статью целиком »
Просмотров: 5190 | Комментариев: 0

Расчет хеша SHA1 на Ассемблере
08.06.2011 | Категория: Образ мышления: Assembler | Автор: ManHunter
Алгоритм криптографического хеширования SHA1 (Secure Hash Algorithm 1) используется во многих криптографических приложениях и протоколах. В его основе лежат методы, очень похожие на MD5. В Интернете есть много реализаций этого алгоритма на разных языках программирования, но я не нашел ни одного нормального решения на Ассемблере. Пришлось разбираться самому и в результате у меня получилась достаточно быстрая функция расчета SHA1 участка памяти произвольной длины. Для работы в сегменте данных потребуются некоторые дополнительные переменные и массивы, они вынесены в глобальную область видимости, чтобы не загромождать код.Code (Assembler) : Убрать нумерацию
- section '.data' data readable writeable
- SHA1_h0 dd ? ; Переменные, в которых будет создан хеш SHA1
- SHA1_h1 dd ?
- SHA1_h2 dd ?
- SHA1_h3 dd ?
- SHA1_h4 dd ?
- SHA1_a dd ? ; Вспомогательные переменные для промежуточных
- SHA1_b dd ? ; вычислений
- SHA1_c dd ?
- SHA1_d dd ?
- SHA1_e dd ?
- SHA1_W rd 80 ; Массивы для промежуточных данных
- SHA1_Buff rb 64
Читать статью целиком »
Просмотров: 6771 | Комментариев: 13
