Assembly 如何进行汇编语言加密/解密编程?

Assembly 如何进行汇编语言加密/解密编程?,assembly,x86,Assembly,X86,这是加密字符的加密例程: 有人能解释一下解密程序吗 编辑(参见注释):这是我们可以解密的第一个块: 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 最后一个是不能逆转

这是加密字符的加密例程:

有人能解释一下解密程序吗


编辑(参见注释):

这是我们可以解密的第一个块:

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的组合。

让我们看看: 为了对消息进行解密,我们需要反转加密过程,因此让我们从方法的末尾开始:

转换的最后一部分是
rol al,1
。我们可以将其反转为
ror al,1

其余的加密由两个XOR组成,一个是消息和修改后的密钥,另一个是即时结果和原始密钥。由于xor是自反转的,我们可以通过使用原始密钥和修改后的密钥(使用相同的密钥修改函数)对加密消息进行一次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 

如果没有
ROL
,加密解密也可以用于解密。 假设加密字符在
ecx
中,密钥在
eax
中,只需稍加修改:

  decrypt5: 
      push eax 
      push ecx 
此部件从
eax
中的输入键生成
edx
中的内部键:

      and eax,0x3C 
      ror eax,1 
      ror eax,1 
      inc eax 
      mov edx,eax 
      pop eax 
将输入字符从
ecx
弹出到
eax

      and eax,0x3C 
      ror eax,1 
      ror eax,1 
      inc eax 
      mov edx,eax 
      pop eax 
反转
控制按钮,1

      ror al,1 
撤消异或运算。 XOR是一个对合,也就是说它是它自己的逆。 它也是可交换的,所以顺序不重要:

      xor eax,edx 
将输入键从
eax
弹出到
ecx
和异或:

      pop ecx 
      xor eax,ecx 

      ret 
我希望是正确的,我的x86程序集已经生锈了

请注意,调用此加密有点牵强。
它太弱了,我宁愿称之为混淆。

确定吗?原始值在推送过程中保持不变,随后在POPs中重新引入。。。带和的部分不知怎么地看着我,如果它正在计算加密的“密钥”,请仔细考虑一下。是否eax包含加密密钥,ecx是要编码的字符?我还没来得及验证,但您认为如果解密时给出eax,是否有可能重新计算ecx?ecx很可能是给定的属性,可能是密钥。eax似乎是ch代码。但是,如果ecx是字符代码,那么反转是非常容易的,因为ecx是在最后弹出的。但我不认为是这样的。ecx被作为eax弹出,反之亦然。您能告诉我们更多关于参数的细节吗?EAX和ECX包含哪些值,其中哪些包含要编码的字符?我想我来晚了,但是。。问题是什么?