BSCAS
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [18.97.9.174] |
|
|
правила раздела Алгоритмы

| Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
BSCAS
|
Сообщ.
#1
,
|
|
|
|
Все эту тему можно закрывать :
.Так можно разговаривать до бесконечности и толку никакого не будет.Официально шифр носит название BSCAS .Вот небольшие тесты:![]() ![]() <br> На вход: 0x62 0x62 0x62 0x62 0x62 0x62 0x62 0x62 ("bbbbbbbb")<br> На выходе: 0xF5 0x66 0xF8 0x61 0x60 0x62 0xE1 0x0C<br> Это специально для тех кто говорил о частоте повтарения символов и прочую муть. А теперь посмотрим что у нас получится если мы изменим один байтик в ключе : ![]() ![]() ![]() <br> На вход: 0x62 0x62 0x62 0x62 0x62 0x62 0x62 0x62 ("bbbbbbbb")<br> На выходе: 0x30 0x66 0xF9 0x62 0x70 0x64 0xF5 0x32<br> Разница я полагаю чуствуется.Но это так все мелочи.Что касается шифрования не блока данных а например одного байта. Что ж, тоже не проблема.Дописываем нули ![]() ![]() ![]() <br> На вход: 0x41 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ("A")<br> На выходе : 0xE5 0x4B 0x59 0x05 0x97 0x0B 0x06 0x22 <br> Классно правда!? .Так что, парни, счет становится 1:0 в мою пользу.Этот алгоритм вам не взять.И не надо сходу тут делать какие-то высказывания по поводу взлома до конца не вникнув в сам алгоритм.Большинство алгоритмов построены на математике и ломаются с ее же помощью у меня тут ее как таковой нет . И последнее.Была немного улутшена программная реализация.В частности функция Set_Old_Bits и были повыкинуты ненужные push -и и pop -и ;D.Оканчательный вариант: ![]() ![]() <br> Copyrights (C) Written by Zveruga,Belarus Minsk 2003<br> All rights reserved<br> ;Статус регистров:<br> ;ecx - число входящих блоков к шифрации дешифрации<br> ;edi - указатель на ключ<br> ;edx - индекс строк<br> ;ebx - индекс столбцов<br> ;esi - указатель на входной блок данных<br> ;eax - используется от болды ;D <br> ;Bit_0 db 0 <br> ;Bit_1 db 0 <br> ;Bit_2 db 0 <br> ;Bit_3 db 0 <br> ;Bit_4 db 0 <br> ;Bit_5 db 0 <br> ;Bit_6 db 0 <br> ;Bit_7 db 0 <br> <br> ;New_Bit_0 db 0 <br> ;New_Bit_1 db 0 <br> ;New_Bit_2 db 0 <br> ;New_Bit_3 db 0 <br> ;New_Bit_4 db 0 <br> ;New_Bit_5 db 0 <br> ;New_Bit_6 db 0 <br> ;New_Bit_7 db 0 <br><br> Right_Offset proc<br> ror byte ptr [esi + edx],01h ;ротация вправо<br> call Set_Old_Bits ;Установка все битов<br> call Vertical_Roter_Up ;Вертикальная ротация вверх<br> call Set_New_Bits ;устанавливаем новые биты<br> ret<br> Right_Offset endp<br> <br> <br> <br> Left_Offset proc<br> rol byte ptr [esi + edx],01h ;ротация влево<br> call Set_Old_Bits ;установка всех битов<br> call Vertical_Roter_Down ;вертикальное смещение вниз<br> call Set_New_Bits ;Устанавливываем новые биты<br> ret<br> Left_Offset endp<br> <br> Set_Old_Bits proc<br> push eax<br> xor eax,eax<br> <br> mov al,byte ptr [esi]<br> mov Bit_0,0<br> bt ax,bx<br> adc Bit_0,0<br> <br> mov al,byte ptr [esi + 01h]<br> mov Bit_1,0<br> bt ax,bx<br> adc Bit_1,0<br> <br> mov al,byte ptr [esi + 02h]<br> mov Bit_2,0<br> bt ax,bx<br> adc Bit_2,0<br> <br> mov al,byte ptr [esi + 03h]<br> mov Bit_3,0<br> bt ax,bx<br> adc Bit_3,0<br> <br> mov al,byte ptr [esi + 04h]<br> mov Bit_4,0<br> bt ax,bx<br> adc Bit_4,0<br> <br> mov al,byte ptr [esi + 05h]<br> mov Bit_5,0<br> bt ax,bx<br> adc Bit_5,0<br> <br> mov al,byte ptr [esi + 06h]<br> mov Bit_6,0<br> bt ax,bx<br> adc Bit_6,0<br> <br> mov al,byte ptr [esi + 07h]<br> mov Bit_7,0<br> bt ax,bx<br> adc Bit_7,0<br> <br> pop eax<br> ret<br> Set_Old_Bits endp<br> <br> <br> Set_New_Bits proc<br> push eax<br> xor eax,eax <br> mov al,byte ptr [esi] ;Загрузка первого байта из блока<br> <br> cmp New_Bit_0 , 1 ;Проверка бита <br> je Set_Bit_0 ;Да установить<br> btr ax,bx ;Сбросить<br> jmp Byte_1 ;Выход<br> Set_Bit_0: <br> bts ax,bx ;Установка <br> <br> Byte_1:<br> mov byte ptr [esi],al<br> mov al,byte ptr [esi + 01h]<br> cmp New_Bit_1 , 1<br> je Set_Bit_1<br> btr ax,bx<br> jmp Byte_2<br> Set_Bit_1:<br> bts ax,bx <br> <br> Byte_2:<br> mov byte ptr [esi + 01h],al<br> mov al,byte ptr [esi + 02h]<br> cmp New_Bit_2 , 1<br> je Set_Bit_2<br> btr ax,bx<br> jmp Byte_3<br> Set_Bit_2:<br> bts ax,bx <br> <br> Byte_3:<br> mov byte ptr [esi+ 02h],al<br> mov al,byte ptr [esi + 03h]<br> cmp New_Bit_3 , 1<br> je Set_Bit_3<br> btr ax,bx<br> jmp Byte_4<br> Set_Bit_3:<br> bts ax,bx <br> <br> Byte_4:<br> mov byte ptr [esi + 03h],al<br> mov al,byte ptr [esi + 04h]<br> cmp New_Bit_4 , 1<br> je Set_Bit_4<br> btr ax,bx<br> jmp Byte_5<br> Set_Bit_4:<br> bts ax,bx <br> <br> Byte_5:<br> mov byte ptr [esi + 04h],al<br> mov al,byte ptr [esi + 05h]<br> cmp New_Bit_5 , 1<br> je Set_Bit_5<br> btr ax,bx<br> jmp Byte_6<br> Set_Bit_5:<br> bts ax,bx <br> <br> Byte_6:<br> mov byte ptr [esi + 05h],al<br> mov al,byte ptr [esi + 06h]<br> cmp New_Bit_6 , 1<br> je Set_Bit_6<br> btr ax,bx<br> jmp Byte_7<br> Set_Bit_6:<br> bts ax,bx <br><br><br> Byte_7:<br> mov byte ptr [esi + 06h],al<br> mov al,byte ptr [esi + 07h]<br> cmp New_Bit_7 , 1<br> je Set_Bit_7<br> btr ax,bx<br> jmp Exit<br> Set_Bit_7:<br> bts ax,bx <br> <br> Exit:<br> mov byte ptr [esi+07h],al<br> pop eax<br> ret<br> Set_New_Bits endp<br> <br> Xor_Blocks proc<br> mov al,byte ptr [esi] ;операция xor с байтом блока ключа, блок на блок :)<br> xor al,byte ptr [edi]<br> xchg al,[esi]<br> mov al,byte ptr [esi + 01h]<br> xor al,byte ptr [edi + 01h] <br> xchg al,[esi + 01h]<br> mov al,byte ptr [esi + 02h]<br> xor al,byte ptr [edi + 02h] <br> xchg al,[esi + 02h]<br> mov al,byte ptr [esi + 03h]<br> xor al,byte ptr [edi + 03h] <br> xchg al,[esi + 03h]<br> mov al,byte ptr [esi + 04h]<br> xor al,byte ptr [edi + 04h] <br> xchg al,[esi + 04h]<br> mov al,byte ptr [esi + 05h]<br> xor al,byte ptr [edi + 05h] <br> xchg al,[esi + 05h]<br> mov al,byte ptr [esi + 06h]<br> xor al,byte ptr [edi + 06h]<br> xchg al,[esi + 06h]<br> mov al,byte ptr [esi + 07h]<br> xor al,byte ptr [edi + 07h] <br> xchg al,[esi + 07h]<br> ret<br> Xor_Blocks endp <br> <br> Deshifr_Down_Offset proc<br> call Set_Old_Bits<br> call Vertical_Roter_Down<br> call Set_New_Bits<br> rol byte ptr [esi + edx],01h<br> ret<br> Deshifr_Down_Offset endp<br> <br> Deshifr_Up_Offset proc<br> call Set_Old_Bits<br> call Vertical_Roter_Up<br> call Set_New_Bits<br> ror byte ptr [esi + edx],01h<br> ret<br> Deshifr_Up_Offset endp<br> <br> Vertical_Roter_Down proc<br> push eax<br> xor eax,eax<br> mov al,Bit_0<br> mov New_Bit_1,al<br> mov al,Bit_1<br> mov New_Bit_2,al<br> mov al,Bit_2<br> mov New_Bit_3,al<br> mov al,Bit_3<br> mov New_Bit_4,al<br> mov al,Bit_4<br> mov New_Bit_5,al<br> mov al,Bit_5<br> mov New_Bit_6,al<br> mov al,Bit_6<br> mov New_Bit_7,al<br> mov al,Bit_7<br> mov New_Bit_0,al<br> pop eax<br> ret<br> Vertical_Roter_Down endp<br> <br> Vertical_Roter_Up proc<br> push eax<br> xor eax,eax<br> mov al,Bit_7<br> mov New_Bit_6,al<br> mov al,Bit_6<br> mov New_Bit_5,al<br> mov al,Bit_5<br> mov New_Bit_4,al<br> mov al,Bit_4<br> mov New_Bit_3,al<br> mov al,Bit_3<br> mov New_Bit_2,al<br> mov al,Bit_2<br> mov New_Bit_1,al<br> mov al,Bit_1 <br> mov New_Bit_0,al<br> mov al,Bit_0<br> mov New_Bit_7,al <br> pop eax<br> ret<br> Vertical_Roter_Up endp<br> <br> BSCAS_Shifr proc<br> pusha<br> Shifr_Octo_Byte:<br> push edi ;Сохранить указател на ключ <br> push ecx ;сахраним число входных блоков <br> <br> xor ebx,ebx ;Обнуляем регистры на всякие пожарные<br> xor eax,eax<br> xor edx,edx<br> <br> mov cl,08h ;8 блоков подключей <br> Key_Block:<br> push ecx ;сохранить число блоков <br> mov cl,08h ;число подключей<br> @Loop_Per_Key: ;цикл по прохаждению подключей<br> push ecx ;сохранить число подключей<br> mov al,byte ptr [edi + edx] ;подключ в al<br> mov cl,08h ;пробег по байту<br> @Loop_Per_Byte_Of_Key:<br> bt ax,bx<br> jc _LeftOffset ;Бит установлен ? <br> call Right_Offset ;Нет не установлен<br> jmp Next_Bit_Of_Key<br> _LeftOffset:<br> call Left_Offset<br> Next_Bit_Of_Key:<br> inc bx ;следущий бит ключа <br> loop @Loop_Per_Byte_Of_Key<br><br> xor ebx,ebx ;обнулим индекс столбцов<br> inc edx ;увеличим индекс строк<br> pop ecx ;восстановим стчечик подключей<br> loop @Loop_Per_Key<br> <br> call Xor_Blocks ;операция xor над блоками<br> <br> pop ecx ;восстановим счетчик блоков<br> xor edx,edx ;обнулим индекс строк<br> xor ebx,ebx<br> add edi,08h ;переместим указатель на следущий блок ключей<br> loop Key_Block<br> <br> pop ecx ;восстановим число входных блоков<br> pop edi ;восстановим указатель на ключ <br> add esi,08h ;перейдем к следующему блоку <br> loop Shifr_Octo_Byte<br> popa <br> ret<br> BSCAS_Shifr endp<br> <br> BSCAS_Deshifr proc<br> pusha<br> xor eax,eax ;очищаем eax,edx,ebx ( мусор нам не нужен :) )<br> xor ebx,ebx<br> xor edx,edx<br> add edi,56 ;перемещаем указатель на последний блок ключа <br> Deshifr_Octo_Byte:<br> push ecx ;сохраняем число входных блоков <br> push edi ;сохраняем указатель на ключ<br> <br> mov cl,08h ;число блоков подключей<br> Deshifr_Loop_Key_Block: <br> push ecx ;сохраняем число блоков подключей<br> ;Начальная стадия - операции xor шифрованного блока с блоком подключей<br> call Xor_Blocks<br> mov cl,08h ;количество подключей в блоке<br> mov dl,07h ;начинаем снизу блока подключей <br> Deshifr_Loop_Per_Key:<br> push ecx ;сохраняем количество подключей<br> mov al,byte ptr [edi + edx] ;подключ <br> mov cl,08h ;пробег по байту <br> mov bl,07h<br> Deshifr_Loop_Per_Byte_Of_Key:<br> bt ax,bx ;Бит установлен ? <br> jc _Deshifr_Up_Offset ;Да установлен<br> call Deshifr_Down_Offset ;Нет не установлен <br> jmp _Deshifr_Inc<br> _Deshifr_Up_Offset:<br> call Deshifr_Up_Offset <br> _Deshifr_Inc:<br> dec bx ;уменьшаем указатель сталбцов<br> loop Deshifr_Loop_Per_Byte_Of_Key<br><br> xor ebx,ebx ;устанавливаем индекс сталбцов в ноль <br> dec edx ;уменьшаем индекс строк <br> pop ecx ;восстанавливаем количество подключей<br> loop Deshifr_Loop_Per_Key<br> <br> sub edi,08h ;переход к следующему блоку ключей <br> xor edx,edx ;устанавливаем индекс строки в ноль<br> pop ecx ;Восстанавливаем количество блоков ключей<br> loop Deshifr_Loop_Key_Block <br> <br> pop edi ;восстанавливаем указатель на ключ<br> pop ecx ;восстанавливаем количество блоков к дешифрации<br> loop Deshifr_Octo_Byte<br> popa <br> ret<br> BSCAS_Deshifr endp<br> ;Автор разрешает использовать данный исходник<br> ;только при условии указания авторства<br> |
|
Сообщ.
#2
,
|
|
|
|
ладно с зашифровкой блока разобрался как его теперь расшифровать ?
в процедуре ![]() ![]() <br> BSCAS_Deshifr proc <br> pusha <br> xor eax,eax ;очищаем eax,edx,ebx ( мусор нам не нужен :) ) <br> xor ebx,ebx <br> xor edx,edx <br> add edi,56 ;перемещаем указатель на последний блок <br> если в edi offset на ключ и ключ я определил как key db 'fuck' к чему приведет add edi,56 ?? так что счет становится 99:0 в нашу пользу и Зверюга удаляется переписавать программу так что бы она работала нормально... или приводит куски коду где показывается шифровка дешифровка |
|
Сообщ.
#3
,
|
|
|
|
делаю
![]() ![]() <br>key db 0<br>block db 8 dup ('a')<br><br>.code<br>start: <br> mov ecx,1<br> mov edi,offset key<br> mov esi,offset block <br> call BSCAS_Shifr<br> как мне его потом дешифровать ? |
|
Сообщ.
#4
,
|
|
|
|
Цитата IX0DeS, 28.03.03, 13:13:18 ладно с зашифровкой блока разобрался как его теперь расшифровать ? в процедуре ![]() ![]() <br> BSCAS_Deshifr proc <br> pusha <br> xor eax,eax ;очищаем eax,edx,ebx ( мусор нам не нужен :) ) <br> xor ebx,ebx <br> xor edx,edx <br> add edi,56 ;перемещаем указатель на последний блок <br> если в edi offset на ключ и ключ я определил как key db 'fuck' к чему приведет add edi,56 ?? так что счет становится 99:0 в нашу пользу и Зверюга удаляется переписавать программу так что бы она работала нормально... или приводит куски коду где показывается шифровка дешифровка Ключ key db 'fuck' конечно хорош не спорю :) .Только он должен быть не 4 байта а 64.Поэтому если хочеш использовать такой ключ предварительно нужно увеличить его размерность до 64 байт Неееее 1 : 0 в мою :P байта |
|
Сообщ.
#5
,
|
|
|
|
Цитата IX0DeS, 28.03.03, 13:29:58 делаю ![]() ![]() <br>key db 0<br>block db 8 dup ('a')<br><br>.code<br>start: <br> mov ecx,1<br> mov edi,offset key<br> mov esi,offset block <br> call BSCAS_Shifr<br> как мне его потом дешифровать ? ![]() ![]() <br> mov esi ,offset Shifr_Text<br> mov edi,offset Key<br> ;в ecx помещай число блоков <br> call BSCAS_Deshifr<br> ;Все<br> |
|
Сообщ.
#6
,
|
|
|
|
нормально... ключ в 64 байта.... круто... чего скажешь... лосизм... слушай я тут тоже алгоритм придумал а что если в качестве пароля использовать одну из глав из романа 'Преступелене и Наказание' а чего... алгорит простой xor... ну что ломать будешь ?
|
|
Сообщ.
#7
,
|
|
|
|
продолжаем...
![]() ![]() <br> mov al,byte ptr [esi] <br> mov Bit_0,0 <br> bt ax,bx <br> adc Bit_0,0 <br> <br> mov al,byte ptr [esi + 01h] <br> mov Bit_1,0 <br> bt ax,bx <br> adc Bit_1,0 <br> <br> mov al,byte ptr [esi + 02h] <br> mov Bit_2,0 <br> bt ax,bx <br> adc Bit_2,0 <br> <br> mov al,byte ptr [esi + 03h] <br> mov Bit_3,0 <br> bt ax,bx <br> adc Bit_3,0 <br> <br> mov al,byte ptr [esi + 04h] <br> mov Bit_4,0 <br> bt ax,bx <br> adc Bit_4,0 <br> <br> mov al,byte ptr [esi + 05h] <br> mov Bit_5,0 <br> bt ax,bx <br> adc Bit_5,0 <br> <br> mov al,byte ptr [esi + 06h] <br> mov Bit_6,0 <br> bt ax,bx <br> adc Bit_6,0 <br> <br> mov al,byte ptr [esi + 07h] <br> mov Bit_7,0 <br> bt ax,bx <br> adc Bit_7,0 <br><br> ты умеешь пользоваться конструкцией loop ?? по моему это в цикле можно написать.... так что давай переписывай нормально прогу свою гыгы ;D |
|
Сообщ.
#8
,
|
|
|
|
Цитата IX0DeS, 28.03.03, 13:40:24 нормально... ключ в 64 байта.... круто... чего скажешь... лосизм... слушай я тут тоже алгоритм придумал а что если в качестве пароля использовать одну из глав из романа 'Преступелене и Наказание' а чего... алгорит простой xor... ну что ломать будешь ? А чем тебе такой ключ не нравится??Ради бога используй хоть 3 хоть 4 байта твае дело. |
|
Сообщ.
#9
,
|
|
|
|
Цитата IX0DeS, 28.03.03, 13:46:37 продолжаем... ![]() ![]() <br> mov al,byte ptr [esi] <br> mov Bit_0,0 <br> bt ax,bx <br> adc Bit_0,0 <br> <br> ...... <br> mov al,byte ptr [esi + 07h] <br> mov Bit_7,0 <br> bt ax,bx <br> adc Bit_7,0 <br><br> ты умеешь пользоваться конструкцией loop ?? по моему это в цикле можно написать.... так что давай переписывай нормально прогу свою гыгы ;D Дааааа.... как говорится : no comments |
|
Сообщ.
#10
,
|
|
|
|
> И не надо сходу тут делать какие-то высказывания по поводу взлома до конца не вникнув в сам алгоритм.
Какие высказывания, какой алгоритм... или эта новая фишка описывать принцип работы алгоритма на asm`е. Я конечно понимаю, что ты, как автор этого дивного алгоритма, вжился в него и тебе все очевидно... Просто, если ты хочешь обсуждения алгоритма, а не реализации неизвестно чего на asm`е, будь добр его представить в нормальном подробном однозначно интерпретируемом виде и желательно с пошаговым примером основных моментов. Тебе всеравно придется делать эту работу, если он является таковым, каким ты его представляешь или ты уже сомневаешся |
|
Сообщ.
#11
,
|
|
|
|
и это опять я...
задаем себе вопрос? ээ.. назовите одно из основных свойств _хорошего_ алгоритма отвечаем... кто не согласится тут со мной ? любой ключ должен обеспечить одинаковую степень защиты на вход подаем ключ состоящий из 64байт 0xFFh текст для шифрования _fuckoff на выходе получаем... x7Fh,fuckof,x19h те. из восьми букв изменились только две... гыгы ну что крутой алгоритм... все отдыхают, Зверюга уходит опустив голову доделовать алгоритм, счет 99:0 в нашу... ;D после этого мне дальше уже лень было что-то там считать... да кстати я его чуток переписал еге - с Loop'ами сделал так мне кажется он выглядит меньше (такого стиля программироваия я еще давно не видел... детский сад чесс слово) |
|
Сообщ.
#12
,
|
|
|
|
Цитата SVK , 28.03.03, 14:34:48 > И не надо сходу тут делать какие-то высказывания по поводу взлома до конца не вникнув в сам алгоритм. Какие высказывания, какой алгоритм... или эта новая фишка описывать принцип работы алгоритма на asm`е. Я конечно понимаю, что ты, как автор этого дивного алгоритма, вжился в него и тебе все очевидно... Просто, если ты хочешь обсуждения алгоритма, а не реализации неизвестно чего на asm`е, будь добр его представить в нормальном подробном однозначно интерпретируемом виде и желательно с пошаговым примером основных моментов. Тебе всеравно придется делать эту работу, если он является таковым, каким ты его представляешь или ты уже сомневаешся ![]() SVK я да этого все пытался упорно всем все обьяснить, но почему-то почти никто меня не хотел слушать. |
|
Сообщ.
#13
,
|
|
|
|
Цитата IX0DeS, 28.03.03, 14:37:12 любой ключ должен обеспечить одинаковую степень защиты Этот вопрос обсуждался еще в предыдущей теме... |
|
Сообщ.
#14
,
|
|
|
|
да еще забыл твой алгоритм чтото криво кработает...
делаю шифровку трех блоков.... ![]() ![]() <br>key db 64 dup (0ffh)<br>block db '12345678'<br> db '12345678'<br> db '12345678'<br>.code<br>start: <br> mov ecx,3<br> mov edi,offset key<br> mov esi,offset block <br> pusha<br> call BSCAS_Shifr<br> popa<br> call BSCAS_Deshifr<br>key db 64 dup (0ffh)<br>block db '12345678'<br> db '12345678'<br> db '12345678'<br>.code<br>start: <br> mov ecx,3<br> mov edi,offset key<br> mov esi,offset block <br> pusha<br> call BSCAS_Shifr<br> popa<br> call BSCAS_Deshifr<br> после шифровки block xC5,'234567',x60,xC5,'234567',x60,xC5,'234567',x60 каждый блок из 8 байт по моему очень похож на своего соседа ![]() после дешифровки block x83,'234567',x0B,xC5,'234567',x60,xC5,'234567',x60 реализация собственного алгоритма оказалась кривой.... мдя.. может тебе рано придумывать оченб стойкие алгоритмы.. гыгы ;D |
|
Сообщ.
#15
,
|
|
|
|
Цитата SVK , 28.03.03, 14:50:59 Этот вопрос обсуждался еще в предыдущей теме... ну дык не обеспечивает же... меняет только первый и последний символ в блоке... ну что тут сказать по поводу алгоритма этого... в Корзину это все там и будем разговаривать ;D |