
Быстрый поиск
Введите фрагмент названия статьи для поиска
Расчет MurmurHash на Ассемблере
29.01.2017 | Категория: Образ мышления: Assembler | Автор: ManHunter
MurmurHash - семейство простых и быстрых хеш-функций. Необычное название произошло от двух базовых операций - умножение (MUltiply) и циклический битовый сдвиг (Rotate), которые используются в основном цикле хеширования. К достоинствам алгоритма Murmur можно отнести простоту реализации, хорошее распределение, мощный лавинный эффект, высокую скорость работы и сравнительно высокую устойчивость к коллизиям. Первая версия, разработанная Остином Апплеби (Austin Appleby), самая простая в реализации:Code (Assembler) : Убрать нумерацию
- ;-----------------------------------------------------------------------
- ; Функция вычисления хеша Murmur
- ; Автор: ManHunter / PCL
- ; http://www.manhunter.ru
- ;-----------------------------------------------------------------------
- ; Параметры:
- ; lpData - указатель на строку
- ; dSize - длина строки
- ; dSeed - соль
- ; На выходе:
- ; EAX = полученный хеш
- ;-----------------------------------------------------------------------
- proc Murmur lpData:DWORD, dSize:DWORD, dSeed:DWORD
- push ebx ecx edx esi edi
- MAGIC = 0xC6A4A793
- mov ebx,[dSize]
- imul ecx,ebx,MAGIC
- mov edx,[dSeed]
- xor ecx,edx
- mov esi,[lpData]
- .loc_loop:
- cmp ebx,4
- jb .loop_done
- mov eax,dword [esi]
- add ecx,eax
- imul ecx,MAGIC
- mov eax,ecx
- shr eax,16
- xor ecx,eax
- add esi,4
- sub ebx,4
- jmp .loc_loop
- .loop_done:
- cmp ebx,3
- je .loc_tail_3
- cmp ebx,2
- je .loc_tail_2
- cmp ebx,1
- je .loc_tail_1
- jmp .loc_finish
- .loc_tail_3:
- movzx eax,byte[esi+2]
- shl eax,16
- add ecx,eax
- .loc_tail_2:
- movzx eax,byte[esi+1]
- shl eax,8
- add ecx,eax
- .loc_tail_1:
- movzx eax,byte[esi]
- add ecx,eax
- imul ecx,MAGIC
- mov eax,ecx
- shr eax,16
- xor ecx,eax
- .loc_finish:
- imul ecx,MAGIC
- mov eax,ecx
- shr eax,10
- xor ecx,eax
- imul ecx,MAGIC
- mov eax,ecx
- shr eax,17
- xor eax,ecx
- pop edi esi edx ecx ebx
- ret
- endp
Читать статью целиком »
Просмотров: 3476 | Комментариев: 12
Программы для поиска криптоалгоритмов в исполняемых файлах
04.11.2015 | Категория: Темная сторона Силы | Автор: ManHunter

Программы для поиска криптоалгоритмов в исполняемых файлах
При анализе различных защит часто приходится определять, какой алгоритм был использован для шифрования данных или преобразований регистрационного имени в правильный серийный номер. Часто авторы не изобретают велосипедов, а используют готовые алгоритмы шифрования или хеширования. Вы должны понимать, что алгоритмы шифрования и алгоритмы хеширования - это разные вещи, но для удобства в статье я буду называть их просто "криптоалгоритмами". Если алгоритмы стандартные, то их можно идентифицировать, например, по характерным константам-полиномам, таблицам преобразований или по последовательности выполняемых операций (хорошие статьи по этой теме на английском можно почитать тут). Для поиска криптоалгоритмов в исполняемых файлах созданы специальные программы, небольшой обзор которых я подготовил в этой статье.
Читать статью целиком »
Просмотров: 14894 | Комментариев: 12
Исследование защиты программы MD5 CrackFAST
06.08.2015 | Категория: Темная сторона Силы | Автор: ManHunter

Скриншот программы MD5 CrackFAST
Программа MD5 CrackFAST предназначена для взлома хэшей MD5. Взлом выполняется прямым перебором, без использования таблиц, поэтому для больших строк о положительном результате можно сразу забыть. Но и без этого в незарегистрированной версии программы есть принудительное ограничение - восстанавливаются строки не более 3 символов длиной.
Читать статью целиком »
Просмотров: 6232 | Комментариев: 7
Расчет CRC24 на Ассемблере
05.01.2015 | Категория: Образ мышления: Assembler | Автор: ManHunter
CRC24 - еще одна разновидность контрольной суммы. Как можно увидеть из названия, ее размер составляет 24 бита, или 3 байта. Я пока не нашел практического применения этому хешу, так же как и программ, использующих его. Но раз есть алгоритм, то почему бы его не реализовать на Ассемблере? Начнем с наиболее компактной реализации без использования таблицы.Code (Assembler) : Убрать нумерацию
- ;-----------------------------------------------------------------------
- ; Функция вычисления хеша CRC24
- ; by ManHunter / PCL
- ; http://www.manhunter.ru
- ;-----------------------------------------------------------------------
- ; Параметры:
- ; lpData - указатель на строку
- ; dSize - длина строки
- ; На выходе:
- ; EAX = полученный хеш
- ;-----------------------------------------------------------------------
- proc CRC24 lpData:DWORD, dSize:DWORD
- push ebx ecx edx esi
- CRC24_POLYNOM = 1864CFBh
- ; Инициализация
- mov eax,0B704CEh
- ; Длина строки
- cmp [dSize],0
- je .loc_ret
- ; Указатель на начало строки
- xor ecx,ecx
- @@:
- ; Получить символ из строки
- mov ebx,[lpData]
- movzx edx,byte [ebx+ecx]
- shl edx,16
- xor eax,edx
- xor esi,esi
- .loc_cycle:
- shl eax,1
- test eax,1000000h
- jz .loc_next
- xor eax,CRC24_POLYNOM
- jmp .loc_next
- .loc_next:
- inc esi
- cmp esi,8
- jb .loc_cycle
- ; Следующий символ
- inc ecx
- cmp ecx,[dSize]
- jb @b
- .loc_ret:
- and eax,0FFFFFFh
- pop esi edx ecx ebx
- ret
- endp
Читать статью целиком »
Просмотров: 6176 | Комментариев: 6
Проверка корректности номера банковской карты
04.09.2014 | Категория: Web-мастеру и не только | Автор: ManHunter

Проверка корректности номера банковской карты
Для проверки корректности номера банковской карты используется алгоритм, разработанный еще в 1954 году Хансом Питером Луном, сотрудником фирмы IBM. Этот алгоритм очень прост в реализации на различных языках программирования, и, хоть он не дает 100% гарантии от преднамеренного искажения данных, может легко выявить случайные ошибки при вводе.
Читать статью целиком »
Просмотров: 15797 | Комментариев: 0


