Как мне сделать на ассемблере шифрование / дешифрование программирования? - PullRequest
0 голосов
/ 30 марта 2011

Это процедура шифрования для шифрования символа:

Может ли кто-нибудь пролить свет на процедуру расшифровки?

Редактировать (см. Комментарии):

Ответы [ 3 ]

1 голос
/ 30 марта 2011

Это первый блок, который мы можем расшифровать:

xor eax,edx 
xor eax,ecx 
rol al,1 

Это потому, что значения извлекаются из стека. Это обратимо как:

ror al,1
xor eax, ecx (eax = the one we had in the end)
xor eax, edx

Тогда edx = eax (mov edx, eax). А теперь:

dec eax
rol eax, 1
rol eax, 1

и последнее И не может быть отменено, потому что:

? AND 0 = 0
? AND 1 = 1  => ? = 1
? AND 1 = 0  => ? = 0

? не может быть идентифицировано, если нет ? И 0 = 0 комбинация.

0 голосов
/ 03 апреля 2011

Без ROL шифрование расшифровывалось бы и для расшифровки. Предполагая, что зашифрованный символ находится в ecx, а ключ в eax, требуется лишь небольшая модификация:

  decrypt5: 
      push eax 
      push ecx 

Эта часть генерирует внутренний ключ в edx из клавиши ввода в eax:

      and eax,0x3C 
      ror eax,1 
      ror eax,1 
      inc eax 
      mov edx,eax 

Вставьте входной символ из ecx в eax:

      pop eax 

Обратный ROL AL,1:

      ror al,1 

Отменить XOR-инг. XOR - это инволюция, то есть обратная сторона. Это также коммутативно, поэтому порядок не имеет значения:

      xor eax,edx 

Вставьте клавишу ввода из eax в ecx и XOR:

      pop ecx 
      xor eax,ecx 

      ret 

Надеюсь, это правильно, моя сборка x86 довольно ржавая.

Обратите внимание, что это немного сложно назвать это шифрование. Это так слабо, что я бы скорее назвал это обфускацией.

0 голосов
/ 03 апреля 2011

Давайте посмотрим: чтобы расшифровать сообщение, мы хотим отменить процедуру шифрования, поэтому давайте начнем с конца метода:

последняя часть преобразования - rol al, 1.Это мы можем изменить как ror al, 1.

. Остальная часть шифрования состоит из двух xors, одного сообщения и с измененным ключом и одного с немедленным результатом и исходным ключом.Поскольку xor является самоинвертирующим, мы можем отменить это, хранив зашифрованное сообщение один раз с оригинальным ключом и один раз с измененным ключом (используя ту же функцию модификации ключа).

decrypt: ror cl,1 //reverse rol al, 1
         xor ecx, eax //reverse xor message, original key
         and eax,0x3C //calculate modified key
         ror eax,1 
         ror eax,1 
         inc eax      //end calculate modified key
         xor eax, ecx //reverse xor message modified key
         ret 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...