дешифрование в ассм - PullRequest
       2

дешифрование в ассм

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

В ASM у меня есть следующий код, который шифрует символ.

Входные данные:

  • EAX = значение ключа шифрования
  • ECX = символ, который должен быть зашифрован

Выходы:

  • EAX = зашифрованное значение исходного символа

Код:

encrypt11: push edx  
           push ecx  
           ror al,1
           ror al,1   
           ror al,1   
           mov edx,eax     
           pop eax     
           sub eax,0x02   
           xor eax,edx   
           rol al,1       
           rol al,1   
           rol al,1   
           pop edx     
           ret 

IЯ застрял в задании, в котором мне нужно «отменить» это, чтобы я мог получить исходную строку, которая была «зашифрована» ... Прошу прощения, ребята, но пока я изменил ROL на ROR и наоборот ..Sub был изменен, чтобы добавить, но я все еще потерян.Кто-нибудь может пролить свет на это?максимально придерживаясь исходного кода, не пропуская ничего?

1 Ответ

3 голосов
/ 09 апреля 2011

Хорошо, попробуйте и задайте вопросы, которые у вас есть, и я соответствующим образом исправлю свой ответ:

; EAX: en/decryption key
; ECX: plain character
encrypt11:
    push edx     ; simply save edx
    push ecx
    ror al,1     ; modify key
    ror al,1
    ror al,1
    mov edx,eax  ; edx = <modified key>
    pop eax      ; eax = <original character>
    sub eax,0x02 ; eax -= 2
    xor eax,edx  ; eax ^= edx
    rol al,1     ; modify encrypted character
    rol al,1
    rol al,1
    pop edx ; simply restore edx
    ret

; EAX: en/decryption key
; ECX: encrypted character
decrypt11:
    push edx     ; simply save edx
    push ecx
    ror al,1     ; modify key
    ror al,1
    ror al,1
    mov edx,eax  ; edx = <modified key>
    pop eax      ; eax = <encrypted character>
    ror al,1     ; modify encrypted character
    ror al,1
    ror al,1
    xor eax,edx  ; eax ^= edx
    add eax,0x02 ; eax += 2
    pop edx
    ret

Возьмем следующие имена key и chr для ввода в шифрование. Суть в том, что в шифровании первое, что нужно сделать, это изменить (три ror) key, что дает key'. Затем мы вычитаем из входного символа 2, что дает chr'. Тогда chr' и key' объединяются с xor, давая chr''. Как только это будет сделано, chr'' будет дополнительно изменен (три rol), что даст выходное значение echr.

Для расшифровки мы вводим echr и key снова. Затем нам нужно получить chr'' из chr (три ror в расшифровке). Затем нам нужно получить key' из key и xor-объединить key' и chr'', получив chr'. Оттуда мы только добавляем 2 к chr', чтобы получить chr в качестве вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...