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包含哪些值,其中哪些包含要编码的字符?我想我来晚了,但是。。问题是什么?