1899 lines
35 KiB
NASM
1899 lines
35 KiB
NASM
|
%ifidn __OUTPUT_FORMAT__,obj
|
||
|
section code use32 class=code align=64
|
||
|
%elifidn __OUTPUT_FORMAT__,win32
|
||
|
$@feat.00 equ 1
|
||
|
section .text code align=64
|
||
|
%else
|
||
|
section .text code
|
||
|
%endif
|
||
|
global _DES_SPtrans
|
||
|
align 16
|
||
|
__x86_DES_encrypt:
|
||
|
push ecx
|
||
|
; Round 0
|
||
|
mov eax,DWORD [ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [4+ecx]
|
||
|
xor eax,esi
|
||
|
xor ecx,ecx
|
||
|
xor edx,esi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor edi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor edi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor edi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor edi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor edi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor edi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor edi,DWORD [0x400+eax*1+ebp]
|
||
|
xor edi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 1
|
||
|
mov eax,DWORD [8+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [12+ecx]
|
||
|
xor eax,edi
|
||
|
xor ecx,ecx
|
||
|
xor edx,edi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor esi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor esi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor esi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor esi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor esi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor esi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor esi,DWORD [0x400+eax*1+ebp]
|
||
|
xor esi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 2
|
||
|
mov eax,DWORD [16+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [20+ecx]
|
||
|
xor eax,esi
|
||
|
xor ecx,ecx
|
||
|
xor edx,esi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor edi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor edi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor edi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor edi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor edi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor edi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor edi,DWORD [0x400+eax*1+ebp]
|
||
|
xor edi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 3
|
||
|
mov eax,DWORD [24+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [28+ecx]
|
||
|
xor eax,edi
|
||
|
xor ecx,ecx
|
||
|
xor edx,edi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor esi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor esi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor esi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor esi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor esi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor esi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor esi,DWORD [0x400+eax*1+ebp]
|
||
|
xor esi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 4
|
||
|
mov eax,DWORD [32+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [36+ecx]
|
||
|
xor eax,esi
|
||
|
xor ecx,ecx
|
||
|
xor edx,esi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor edi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor edi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor edi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor edi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor edi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor edi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor edi,DWORD [0x400+eax*1+ebp]
|
||
|
xor edi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 5
|
||
|
mov eax,DWORD [40+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [44+ecx]
|
||
|
xor eax,edi
|
||
|
xor ecx,ecx
|
||
|
xor edx,edi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor esi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor esi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor esi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor esi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor esi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor esi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor esi,DWORD [0x400+eax*1+ebp]
|
||
|
xor esi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 6
|
||
|
mov eax,DWORD [48+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [52+ecx]
|
||
|
xor eax,esi
|
||
|
xor ecx,ecx
|
||
|
xor edx,esi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor edi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor edi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor edi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor edi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor edi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor edi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor edi,DWORD [0x400+eax*1+ebp]
|
||
|
xor edi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 7
|
||
|
mov eax,DWORD [56+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [60+ecx]
|
||
|
xor eax,edi
|
||
|
xor ecx,ecx
|
||
|
xor edx,edi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor esi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor esi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor esi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor esi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor esi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor esi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor esi,DWORD [0x400+eax*1+ebp]
|
||
|
xor esi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 8
|
||
|
mov eax,DWORD [64+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [68+ecx]
|
||
|
xor eax,esi
|
||
|
xor ecx,ecx
|
||
|
xor edx,esi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor edi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor edi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor edi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor edi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor edi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor edi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor edi,DWORD [0x400+eax*1+ebp]
|
||
|
xor edi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 9
|
||
|
mov eax,DWORD [72+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [76+ecx]
|
||
|
xor eax,edi
|
||
|
xor ecx,ecx
|
||
|
xor edx,edi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor esi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor esi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor esi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor esi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor esi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor esi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor esi,DWORD [0x400+eax*1+ebp]
|
||
|
xor esi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 10
|
||
|
mov eax,DWORD [80+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [84+ecx]
|
||
|
xor eax,esi
|
||
|
xor ecx,ecx
|
||
|
xor edx,esi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor edi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor edi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor edi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor edi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor edi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor edi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor edi,DWORD [0x400+eax*1+ebp]
|
||
|
xor edi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 11
|
||
|
mov eax,DWORD [88+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [92+ecx]
|
||
|
xor eax,edi
|
||
|
xor ecx,ecx
|
||
|
xor edx,edi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor esi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor esi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor esi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor esi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor esi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor esi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor esi,DWORD [0x400+eax*1+ebp]
|
||
|
xor esi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 12
|
||
|
mov eax,DWORD [96+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [100+ecx]
|
||
|
xor eax,esi
|
||
|
xor ecx,ecx
|
||
|
xor edx,esi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor edi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor edi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor edi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor edi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor edi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor edi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor edi,DWORD [0x400+eax*1+ebp]
|
||
|
xor edi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 13
|
||
|
mov eax,DWORD [104+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [108+ecx]
|
||
|
xor eax,edi
|
||
|
xor ecx,ecx
|
||
|
xor edx,edi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor esi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor esi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor esi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor esi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor esi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor esi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor esi,DWORD [0x400+eax*1+ebp]
|
||
|
xor esi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 14
|
||
|
mov eax,DWORD [112+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [116+ecx]
|
||
|
xor eax,esi
|
||
|
xor ecx,ecx
|
||
|
xor edx,esi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor edi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor edi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor edi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor edi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor edi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor edi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor edi,DWORD [0x400+eax*1+ebp]
|
||
|
xor edi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 15
|
||
|
mov eax,DWORD [120+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [124+ecx]
|
||
|
xor eax,edi
|
||
|
xor ecx,ecx
|
||
|
xor edx,edi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor esi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor esi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor esi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor esi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor esi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor esi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor esi,DWORD [0x400+eax*1+ebp]
|
||
|
xor esi,DWORD [0x500+edx*1+ebp]
|
||
|
add esp,4
|
||
|
ret
|
||
|
align 16
|
||
|
__x86_DES_decrypt:
|
||
|
push ecx
|
||
|
; Round 15
|
||
|
mov eax,DWORD [120+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [124+ecx]
|
||
|
xor eax,esi
|
||
|
xor ecx,ecx
|
||
|
xor edx,esi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor edi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor edi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor edi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor edi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor edi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor edi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor edi,DWORD [0x400+eax*1+ebp]
|
||
|
xor edi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 14
|
||
|
mov eax,DWORD [112+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [116+ecx]
|
||
|
xor eax,edi
|
||
|
xor ecx,ecx
|
||
|
xor edx,edi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor esi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor esi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor esi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor esi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor esi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor esi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor esi,DWORD [0x400+eax*1+ebp]
|
||
|
xor esi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 13
|
||
|
mov eax,DWORD [104+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [108+ecx]
|
||
|
xor eax,esi
|
||
|
xor ecx,ecx
|
||
|
xor edx,esi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor edi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor edi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor edi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor edi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor edi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor edi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor edi,DWORD [0x400+eax*1+ebp]
|
||
|
xor edi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 12
|
||
|
mov eax,DWORD [96+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [100+ecx]
|
||
|
xor eax,edi
|
||
|
xor ecx,ecx
|
||
|
xor edx,edi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor esi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor esi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor esi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor esi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor esi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor esi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor esi,DWORD [0x400+eax*1+ebp]
|
||
|
xor esi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 11
|
||
|
mov eax,DWORD [88+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [92+ecx]
|
||
|
xor eax,esi
|
||
|
xor ecx,ecx
|
||
|
xor edx,esi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor edi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor edi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor edi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor edi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor edi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor edi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor edi,DWORD [0x400+eax*1+ebp]
|
||
|
xor edi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 10
|
||
|
mov eax,DWORD [80+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [84+ecx]
|
||
|
xor eax,edi
|
||
|
xor ecx,ecx
|
||
|
xor edx,edi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor esi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor esi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor esi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor esi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor esi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor esi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor esi,DWORD [0x400+eax*1+ebp]
|
||
|
xor esi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 9
|
||
|
mov eax,DWORD [72+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [76+ecx]
|
||
|
xor eax,esi
|
||
|
xor ecx,ecx
|
||
|
xor edx,esi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor edi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor edi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor edi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor edi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor edi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor edi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor edi,DWORD [0x400+eax*1+ebp]
|
||
|
xor edi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 8
|
||
|
mov eax,DWORD [64+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [68+ecx]
|
||
|
xor eax,edi
|
||
|
xor ecx,ecx
|
||
|
xor edx,edi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor esi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor esi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor esi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor esi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor esi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor esi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor esi,DWORD [0x400+eax*1+ebp]
|
||
|
xor esi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 7
|
||
|
mov eax,DWORD [56+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [60+ecx]
|
||
|
xor eax,esi
|
||
|
xor ecx,ecx
|
||
|
xor edx,esi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor edi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor edi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor edi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor edi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor edi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor edi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor edi,DWORD [0x400+eax*1+ebp]
|
||
|
xor edi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 6
|
||
|
mov eax,DWORD [48+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [52+ecx]
|
||
|
xor eax,edi
|
||
|
xor ecx,ecx
|
||
|
xor edx,edi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor esi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor esi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor esi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor esi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor esi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor esi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor esi,DWORD [0x400+eax*1+ebp]
|
||
|
xor esi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 5
|
||
|
mov eax,DWORD [40+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [44+ecx]
|
||
|
xor eax,esi
|
||
|
xor ecx,ecx
|
||
|
xor edx,esi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor edi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor edi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor edi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor edi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor edi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor edi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor edi,DWORD [0x400+eax*1+ebp]
|
||
|
xor edi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 4
|
||
|
mov eax,DWORD [32+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [36+ecx]
|
||
|
xor eax,edi
|
||
|
xor ecx,ecx
|
||
|
xor edx,edi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor esi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor esi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor esi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor esi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor esi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor esi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor esi,DWORD [0x400+eax*1+ebp]
|
||
|
xor esi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 3
|
||
|
mov eax,DWORD [24+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [28+ecx]
|
||
|
xor eax,esi
|
||
|
xor ecx,ecx
|
||
|
xor edx,esi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor edi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor edi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor edi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor edi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor edi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor edi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor edi,DWORD [0x400+eax*1+ebp]
|
||
|
xor edi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 2
|
||
|
mov eax,DWORD [16+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [20+ecx]
|
||
|
xor eax,edi
|
||
|
xor ecx,ecx
|
||
|
xor edx,edi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor esi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor esi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor esi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor esi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor esi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor esi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor esi,DWORD [0x400+eax*1+ebp]
|
||
|
xor esi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 1
|
||
|
mov eax,DWORD [8+ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [12+ecx]
|
||
|
xor eax,esi
|
||
|
xor ecx,ecx
|
||
|
xor edx,esi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor edi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor edi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor edi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor edi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor edi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor edi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor edi,DWORD [0x400+eax*1+ebp]
|
||
|
xor edi,DWORD [0x500+edx*1+ebp]
|
||
|
; Round 0
|
||
|
mov eax,DWORD [ecx]
|
||
|
xor ebx,ebx
|
||
|
mov edx,DWORD [4+ecx]
|
||
|
xor eax,edi
|
||
|
xor ecx,ecx
|
||
|
xor edx,edi
|
||
|
and eax,0xfcfcfcfc
|
||
|
and edx,0xcfcfcfcf
|
||
|
mov bl,al
|
||
|
mov cl,ah
|
||
|
ror edx,4
|
||
|
xor esi,DWORD [ebx*1+ebp]
|
||
|
mov bl,dl
|
||
|
xor esi,DWORD [0x200+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
shr eax,16
|
||
|
xor esi,DWORD [0x100+ebx*1+ebp]
|
||
|
mov bl,ah
|
||
|
shr edx,16
|
||
|
xor esi,DWORD [0x300+ecx*1+ebp]
|
||
|
mov cl,dh
|
||
|
and eax,0xff
|
||
|
and edx,0xff
|
||
|
xor esi,DWORD [0x600+ebx*1+ebp]
|
||
|
xor esi,DWORD [0x700+ecx*1+ebp]
|
||
|
mov ecx,DWORD [esp]
|
||
|
xor esi,DWORD [0x400+eax*1+ebp]
|
||
|
xor esi,DWORD [0x500+edx*1+ebp]
|
||
|
add esp,4
|
||
|
ret
|
||
|
global _DES_encrypt1
|
||
|
align 16
|
||
|
_DES_encrypt1:
|
||
|
L$_DES_encrypt1_begin:
|
||
|
push esi
|
||
|
push edi
|
||
|
;
|
||
|
; Load the 2 words
|
||
|
mov esi,DWORD [12+esp]
|
||
|
xor ecx,ecx
|
||
|
push ebx
|
||
|
push ebp
|
||
|
mov eax,DWORD [esi]
|
||
|
mov ebx,DWORD [28+esp]
|
||
|
mov edi,DWORD [4+esi]
|
||
|
;
|
||
|
; IP
|
||
|
rol eax,4
|
||
|
mov esi,eax
|
||
|
xor eax,edi
|
||
|
and eax,0xf0f0f0f0
|
||
|
xor esi,eax
|
||
|
xor edi,eax
|
||
|
;
|
||
|
rol edi,20
|
||
|
mov eax,edi
|
||
|
xor edi,esi
|
||
|
and edi,0xfff0000f
|
||
|
xor eax,edi
|
||
|
xor esi,edi
|
||
|
;
|
||
|
rol eax,14
|
||
|
mov edi,eax
|
||
|
xor eax,esi
|
||
|
and eax,0x33333333
|
||
|
xor edi,eax
|
||
|
xor esi,eax
|
||
|
;
|
||
|
rol esi,22
|
||
|
mov eax,esi
|
||
|
xor esi,edi
|
||
|
and esi,0x03fc03fc
|
||
|
xor eax,esi
|
||
|
xor edi,esi
|
||
|
;
|
||
|
rol eax,9
|
||
|
mov esi,eax
|
||
|
xor eax,edi
|
||
|
and eax,0xaaaaaaaa
|
||
|
xor esi,eax
|
||
|
xor edi,eax
|
||
|
;
|
||
|
rol edi,1
|
||
|
call L$000pic_point
|
||
|
L$000pic_point:
|
||
|
pop ebp
|
||
|
lea ebp,[(L$des_sptrans-L$000pic_point)+ebp]
|
||
|
mov ecx,DWORD [24+esp]
|
||
|
cmp ebx,0
|
||
|
je NEAR L$001decrypt
|
||
|
call __x86_DES_encrypt
|
||
|
jmp NEAR L$002done
|
||
|
L$001decrypt:
|
||
|
call __x86_DES_decrypt
|
||
|
L$002done:
|
||
|
;
|
||
|
; FP
|
||
|
mov edx,DWORD [20+esp]
|
||
|
ror esi,1
|
||
|
mov eax,edi
|
||
|
xor edi,esi
|
||
|
and edi,0xaaaaaaaa
|
||
|
xor eax,edi
|
||
|
xor esi,edi
|
||
|
;
|
||
|
rol eax,23
|
||
|
mov edi,eax
|
||
|
xor eax,esi
|
||
|
and eax,0x03fc03fc
|
||
|
xor edi,eax
|
||
|
xor esi,eax
|
||
|
;
|
||
|
rol edi,10
|
||
|
mov eax,edi
|
||
|
xor edi,esi
|
||
|
and edi,0x33333333
|
||
|
xor eax,edi
|
||
|
xor esi,edi
|
||
|
;
|
||
|
rol esi,18
|
||
|
mov edi,esi
|
||
|
xor esi,eax
|
||
|
and esi,0xfff0000f
|
||
|
xor edi,esi
|
||
|
xor eax,esi
|
||
|
;
|
||
|
rol edi,12
|
||
|
mov esi,edi
|
||
|
xor edi,eax
|
||
|
and edi,0xf0f0f0f0
|
||
|
xor esi,edi
|
||
|
xor eax,edi
|
||
|
;
|
||
|
ror eax,4
|
||
|
mov DWORD [edx],eax
|
||
|
mov DWORD [4+edx],esi
|
||
|
pop ebp
|
||
|
pop ebx
|
||
|
pop edi
|
||
|
pop esi
|
||
|
ret
|
||
|
global _DES_encrypt2
|
||
|
align 16
|
||
|
_DES_encrypt2:
|
||
|
L$_DES_encrypt2_begin:
|
||
|
push esi
|
||
|
push edi
|
||
|
;
|
||
|
; Load the 2 words
|
||
|
mov eax,DWORD [12+esp]
|
||
|
xor ecx,ecx
|
||
|
push ebx
|
||
|
push ebp
|
||
|
mov esi,DWORD [eax]
|
||
|
mov ebx,DWORD [28+esp]
|
||
|
rol esi,3
|
||
|
mov edi,DWORD [4+eax]
|
||
|
rol edi,3
|
||
|
call L$003pic_point
|
||
|
L$003pic_point:
|
||
|
pop ebp
|
||
|
lea ebp,[(L$des_sptrans-L$003pic_point)+ebp]
|
||
|
mov ecx,DWORD [24+esp]
|
||
|
cmp ebx,0
|
||
|
je NEAR L$004decrypt
|
||
|
call __x86_DES_encrypt
|
||
|
jmp NEAR L$005done
|
||
|
L$004decrypt:
|
||
|
call __x86_DES_decrypt
|
||
|
L$005done:
|
||
|
;
|
||
|
; Fixup
|
||
|
ror edi,3
|
||
|
mov eax,DWORD [20+esp]
|
||
|
ror esi,3
|
||
|
mov DWORD [eax],edi
|
||
|
mov DWORD [4+eax],esi
|
||
|
pop ebp
|
||
|
pop ebx
|
||
|
pop edi
|
||
|
pop esi
|
||
|
ret
|
||
|
global _DES_encrypt3
|
||
|
align 16
|
||
|
_DES_encrypt3:
|
||
|
L$_DES_encrypt3_begin:
|
||
|
push ebx
|
||
|
mov ebx,DWORD [8+esp]
|
||
|
push ebp
|
||
|
push esi
|
||
|
push edi
|
||
|
;
|
||
|
; Load the data words
|
||
|
mov edi,DWORD [ebx]
|
||
|
mov esi,DWORD [4+ebx]
|
||
|
sub esp,12
|
||
|
;
|
||
|
; IP
|
||
|
rol edi,4
|
||
|
mov edx,edi
|
||
|
xor edi,esi
|
||
|
and edi,0xf0f0f0f0
|
||
|
xor edx,edi
|
||
|
xor esi,edi
|
||
|
;
|
||
|
rol esi,20
|
||
|
mov edi,esi
|
||
|
xor esi,edx
|
||
|
and esi,0xfff0000f
|
||
|
xor edi,esi
|
||
|
xor edx,esi
|
||
|
;
|
||
|
rol edi,14
|
||
|
mov esi,edi
|
||
|
xor edi,edx
|
||
|
and edi,0x33333333
|
||
|
xor esi,edi
|
||
|
xor edx,edi
|
||
|
;
|
||
|
rol edx,22
|
||
|
mov edi,edx
|
||
|
xor edx,esi
|
||
|
and edx,0x03fc03fc
|
||
|
xor edi,edx
|
||
|
xor esi,edx
|
||
|
;
|
||
|
rol edi,9
|
||
|
mov edx,edi
|
||
|
xor edi,esi
|
||
|
and edi,0xaaaaaaaa
|
||
|
xor edx,edi
|
||
|
xor esi,edi
|
||
|
;
|
||
|
ror edx,3
|
||
|
ror esi,2
|
||
|
mov DWORD [4+ebx],esi
|
||
|
mov eax,DWORD [36+esp]
|
||
|
mov DWORD [ebx],edx
|
||
|
mov edi,DWORD [40+esp]
|
||
|
mov esi,DWORD [44+esp]
|
||
|
mov DWORD [8+esp],DWORD 1
|
||
|
mov DWORD [4+esp],eax
|
||
|
mov DWORD [esp],ebx
|
||
|
call L$_DES_encrypt2_begin
|
||
|
mov DWORD [8+esp],DWORD 0
|
||
|
mov DWORD [4+esp],edi
|
||
|
mov DWORD [esp],ebx
|
||
|
call L$_DES_encrypt2_begin
|
||
|
mov DWORD [8+esp],DWORD 1
|
||
|
mov DWORD [4+esp],esi
|
||
|
mov DWORD [esp],ebx
|
||
|
call L$_DES_encrypt2_begin
|
||
|
add esp,12
|
||
|
mov edi,DWORD [ebx]
|
||
|
mov esi,DWORD [4+ebx]
|
||
|
;
|
||
|
; FP
|
||
|
rol esi,2
|
||
|
rol edi,3
|
||
|
mov eax,edi
|
||
|
xor edi,esi
|
||
|
and edi,0xaaaaaaaa
|
||
|
xor eax,edi
|
||
|
xor esi,edi
|
||
|
;
|
||
|
rol eax,23
|
||
|
mov edi,eax
|
||
|
xor eax,esi
|
||
|
and eax,0x03fc03fc
|
||
|
xor edi,eax
|
||
|
xor esi,eax
|
||
|
;
|
||
|
rol edi,10
|
||
|
mov eax,edi
|
||
|
xor edi,esi
|
||
|
and edi,0x33333333
|
||
|
xor eax,edi
|
||
|
xor esi,edi
|
||
|
;
|
||
|
rol esi,18
|
||
|
mov edi,esi
|
||
|
xor esi,eax
|
||
|
and esi,0xfff0000f
|
||
|
xor edi,esi
|
||
|
xor eax,esi
|
||
|
;
|
||
|
rol edi,12
|
||
|
mov esi,edi
|
||
|
xor edi,eax
|
||
|
and edi,0xf0f0f0f0
|
||
|
xor esi,edi
|
||
|
xor eax,edi
|
||
|
;
|
||
|
ror eax,4
|
||
|
mov DWORD [ebx],eax
|
||
|
mov DWORD [4+ebx],esi
|
||
|
pop edi
|
||
|
pop esi
|
||
|
pop ebp
|
||
|
pop ebx
|
||
|
ret
|
||
|
global _DES_decrypt3
|
||
|
align 16
|
||
|
_DES_decrypt3:
|
||
|
L$_DES_decrypt3_begin:
|
||
|
push ebx
|
||
|
mov ebx,DWORD [8+esp]
|
||
|
push ebp
|
||
|
push esi
|
||
|
push edi
|
||
|
;
|
||
|
; Load the data words
|
||
|
mov edi,DWORD [ebx]
|
||
|
mov esi,DWORD [4+ebx]
|
||
|
sub esp,12
|
||
|
;
|
||
|
; IP
|
||
|
rol edi,4
|
||
|
mov edx,edi
|
||
|
xor edi,esi
|
||
|
and edi,0xf0f0f0f0
|
||
|
xor edx,edi
|
||
|
xor esi,edi
|
||
|
;
|
||
|
rol esi,20
|
||
|
mov edi,esi
|
||
|
xor esi,edx
|
||
|
and esi,0xfff0000f
|
||
|
xor edi,esi
|
||
|
xor edx,esi
|
||
|
;
|
||
|
rol edi,14
|
||
|
mov esi,edi
|
||
|
xor edi,edx
|
||
|
and edi,0x33333333
|
||
|
xor esi,edi
|
||
|
xor edx,edi
|
||
|
;
|
||
|
rol edx,22
|
||
|
mov edi,edx
|
||
|
xor edx,esi
|
||
|
and edx,0x03fc03fc
|
||
|
xor edi,edx
|
||
|
xor esi,edx
|
||
|
;
|
||
|
rol edi,9
|
||
|
mov edx,edi
|
||
|
xor edi,esi
|
||
|
and edi,0xaaaaaaaa
|
||
|
xor edx,edi
|
||
|
xor esi,edi
|
||
|
;
|
||
|
ror edx,3
|
||
|
ror esi,2
|
||
|
mov DWORD [4+ebx],esi
|
||
|
mov esi,DWORD [36+esp]
|
||
|
mov DWORD [ebx],edx
|
||
|
mov edi,DWORD [40+esp]
|
||
|
mov eax,DWORD [44+esp]
|
||
|
mov DWORD [8+esp],DWORD 0
|
||
|
mov DWORD [4+esp],eax
|
||
|
mov DWORD [esp],ebx
|
||
|
call L$_DES_encrypt2_begin
|
||
|
mov DWORD [8+esp],DWORD 1
|
||
|
mov DWORD [4+esp],edi
|
||
|
mov DWORD [esp],ebx
|
||
|
call L$_DES_encrypt2_begin
|
||
|
mov DWORD [8+esp],DWORD 0
|
||
|
mov DWORD [4+esp],esi
|
||
|
mov DWORD [esp],ebx
|
||
|
call L$_DES_encrypt2_begin
|
||
|
add esp,12
|
||
|
mov edi,DWORD [ebx]
|
||
|
mov esi,DWORD [4+ebx]
|
||
|
;
|
||
|
; FP
|
||
|
rol esi,2
|
||
|
rol edi,3
|
||
|
mov eax,edi
|
||
|
xor edi,esi
|
||
|
and edi,0xaaaaaaaa
|
||
|
xor eax,edi
|
||
|
xor esi,edi
|
||
|
;
|
||
|
rol eax,23
|
||
|
mov edi,eax
|
||
|
xor eax,esi
|
||
|
and eax,0x03fc03fc
|
||
|
xor edi,eax
|
||
|
xor esi,eax
|
||
|
;
|
||
|
rol edi,10
|
||
|
mov eax,edi
|
||
|
xor edi,esi
|
||
|
and edi,0x33333333
|
||
|
xor eax,edi
|
||
|
xor esi,edi
|
||
|
;
|
||
|
rol esi,18
|
||
|
mov edi,esi
|
||
|
xor esi,eax
|
||
|
and esi,0xfff0000f
|
||
|
xor edi,esi
|
||
|
xor eax,esi
|
||
|
;
|
||
|
rol edi,12
|
||
|
mov esi,edi
|
||
|
xor edi,eax
|
||
|
and edi,0xf0f0f0f0
|
||
|
xor esi,edi
|
||
|
xor eax,edi
|
||
|
;
|
||
|
ror eax,4
|
||
|
mov DWORD [ebx],eax
|
||
|
mov DWORD [4+ebx],esi
|
||
|
pop edi
|
||
|
pop esi
|
||
|
pop ebp
|
||
|
pop ebx
|
||
|
ret
|
||
|
global _DES_ncbc_encrypt
|
||
|
align 16
|
||
|
_DES_ncbc_encrypt:
|
||
|
L$_DES_ncbc_encrypt_begin:
|
||
|
;
|
||
|
push ebp
|
||
|
push ebx
|
||
|
push esi
|
||
|
push edi
|
||
|
mov ebp,DWORD [28+esp]
|
||
|
; getting iv ptr from parameter 4
|
||
|
mov ebx,DWORD [36+esp]
|
||
|
mov esi,DWORD [ebx]
|
||
|
mov edi,DWORD [4+ebx]
|
||
|
push edi
|
||
|
push esi
|
||
|
push edi
|
||
|
push esi
|
||
|
mov ebx,esp
|
||
|
mov esi,DWORD [36+esp]
|
||
|
mov edi,DWORD [40+esp]
|
||
|
; getting encrypt flag from parameter 5
|
||
|
mov ecx,DWORD [56+esp]
|
||
|
; get and push parameter 5
|
||
|
push ecx
|
||
|
; get and push parameter 3
|
||
|
mov eax,DWORD [52+esp]
|
||
|
push eax
|
||
|
push ebx
|
||
|
cmp ecx,0
|
||
|
jz NEAR L$006decrypt
|
||
|
and ebp,4294967288
|
||
|
mov eax,DWORD [12+esp]
|
||
|
mov ebx,DWORD [16+esp]
|
||
|
jz NEAR L$007encrypt_finish
|
||
|
L$008encrypt_loop:
|
||
|
mov ecx,DWORD [esi]
|
||
|
mov edx,DWORD [4+esi]
|
||
|
xor eax,ecx
|
||
|
xor ebx,edx
|
||
|
mov DWORD [12+esp],eax
|
||
|
mov DWORD [16+esp],ebx
|
||
|
call L$_DES_encrypt1_begin
|
||
|
mov eax,DWORD [12+esp]
|
||
|
mov ebx,DWORD [16+esp]
|
||
|
mov DWORD [edi],eax
|
||
|
mov DWORD [4+edi],ebx
|
||
|
add esi,8
|
||
|
add edi,8
|
||
|
sub ebp,8
|
||
|
jnz NEAR L$008encrypt_loop
|
||
|
L$007encrypt_finish:
|
||
|
mov ebp,DWORD [56+esp]
|
||
|
and ebp,7
|
||
|
jz NEAR L$009finish
|
||
|
call L$010PIC_point
|
||
|
L$010PIC_point:
|
||
|
pop edx
|
||
|
lea ecx,[(L$011cbc_enc_jmp_table-L$010PIC_point)+edx]
|
||
|
mov ebp,DWORD [ebp*4+ecx]
|
||
|
add ebp,edx
|
||
|
xor ecx,ecx
|
||
|
xor edx,edx
|
||
|
jmp ebp
|
||
|
L$012ej7:
|
||
|
#ifdef __CET__
|
||
|
|
||
|
db 243,15,30,251
|
||
|
#endif
|
||
|
|
||
|
mov dh,BYTE [6+esi]
|
||
|
shl edx,8
|
||
|
L$013ej6:
|
||
|
#ifdef __CET__
|
||
|
|
||
|
db 243,15,30,251
|
||
|
#endif
|
||
|
|
||
|
mov dh,BYTE [5+esi]
|
||
|
L$014ej5:
|
||
|
#ifdef __CET__
|
||
|
|
||
|
db 243,15,30,251
|
||
|
#endif
|
||
|
|
||
|
mov dl,BYTE [4+esi]
|
||
|
L$015ej4:
|
||
|
#ifdef __CET__
|
||
|
|
||
|
db 243,15,30,251
|
||
|
#endif
|
||
|
|
||
|
mov ecx,DWORD [esi]
|
||
|
jmp NEAR L$016ejend
|
||
|
L$017ej3:
|
||
|
#ifdef __CET__
|
||
|
|
||
|
db 243,15,30,251
|
||
|
#endif
|
||
|
|
||
|
mov ch,BYTE [2+esi]
|
||
|
shl ecx,8
|
||
|
L$018ej2:
|
||
|
#ifdef __CET__
|
||
|
|
||
|
db 243,15,30,251
|
||
|
#endif
|
||
|
|
||
|
mov ch,BYTE [1+esi]
|
||
|
L$019ej1:
|
||
|
#ifdef __CET__
|
||
|
|
||
|
db 243,15,30,251
|
||
|
#endif
|
||
|
|
||
|
mov cl,BYTE [esi]
|
||
|
L$016ejend:
|
||
|
xor eax,ecx
|
||
|
xor ebx,edx
|
||
|
mov DWORD [12+esp],eax
|
||
|
mov DWORD [16+esp],ebx
|
||
|
call L$_DES_encrypt1_begin
|
||
|
mov eax,DWORD [12+esp]
|
||
|
mov ebx,DWORD [16+esp]
|
||
|
mov DWORD [edi],eax
|
||
|
mov DWORD [4+edi],ebx
|
||
|
jmp NEAR L$009finish
|
||
|
L$006decrypt:
|
||
|
and ebp,4294967288
|
||
|
mov eax,DWORD [20+esp]
|
||
|
mov ebx,DWORD [24+esp]
|
||
|
jz NEAR L$020decrypt_finish
|
||
|
L$021decrypt_loop:
|
||
|
mov eax,DWORD [esi]
|
||
|
mov ebx,DWORD [4+esi]
|
||
|
mov DWORD [12+esp],eax
|
||
|
mov DWORD [16+esp],ebx
|
||
|
call L$_DES_encrypt1_begin
|
||
|
mov eax,DWORD [12+esp]
|
||
|
mov ebx,DWORD [16+esp]
|
||
|
mov ecx,DWORD [20+esp]
|
||
|
mov edx,DWORD [24+esp]
|
||
|
xor ecx,eax
|
||
|
xor edx,ebx
|
||
|
mov eax,DWORD [esi]
|
||
|
mov ebx,DWORD [4+esi]
|
||
|
mov DWORD [edi],ecx
|
||
|
mov DWORD [4+edi],edx
|
||
|
mov DWORD [20+esp],eax
|
||
|
mov DWORD [24+esp],ebx
|
||
|
add esi,8
|
||
|
add edi,8
|
||
|
sub ebp,8
|
||
|
jnz NEAR L$021decrypt_loop
|
||
|
L$020decrypt_finish:
|
||
|
mov ebp,DWORD [56+esp]
|
||
|
and ebp,7
|
||
|
jz NEAR L$009finish
|
||
|
mov eax,DWORD [esi]
|
||
|
mov ebx,DWORD [4+esi]
|
||
|
mov DWORD [12+esp],eax
|
||
|
mov DWORD [16+esp],ebx
|
||
|
call L$_DES_encrypt1_begin
|
||
|
mov eax,DWORD [12+esp]
|
||
|
mov ebx,DWORD [16+esp]
|
||
|
mov ecx,DWORD [20+esp]
|
||
|
mov edx,DWORD [24+esp]
|
||
|
xor ecx,eax
|
||
|
xor edx,ebx
|
||
|
mov eax,DWORD [esi]
|
||
|
mov ebx,DWORD [4+esi]
|
||
|
L$022dj7:
|
||
|
ror edx,16
|
||
|
mov BYTE [6+edi],dl
|
||
|
shr edx,16
|
||
|
L$023dj6:
|
||
|
mov BYTE [5+edi],dh
|
||
|
L$024dj5:
|
||
|
mov BYTE [4+edi],dl
|
||
|
L$025dj4:
|
||
|
mov DWORD [edi],ecx
|
||
|
jmp NEAR L$026djend
|
||
|
L$027dj3:
|
||
|
ror ecx,16
|
||
|
mov BYTE [2+edi],cl
|
||
|
shl ecx,16
|
||
|
L$028dj2:
|
||
|
mov BYTE [1+esi],ch
|
||
|
L$029dj1:
|
||
|
mov BYTE [esi],cl
|
||
|
L$026djend:
|
||
|
jmp NEAR L$009finish
|
||
|
L$009finish:
|
||
|
mov ecx,DWORD [64+esp]
|
||
|
add esp,28
|
||
|
mov DWORD [ecx],eax
|
||
|
mov DWORD [4+ecx],ebx
|
||
|
pop edi
|
||
|
pop esi
|
||
|
pop ebx
|
||
|
pop ebp
|
||
|
ret
|
||
|
align 64
|
||
|
L$011cbc_enc_jmp_table:
|
||
|
dd 0
|
||
|
dd L$019ej1-L$010PIC_point
|
||
|
dd L$018ej2-L$010PIC_point
|
||
|
dd L$017ej3-L$010PIC_point
|
||
|
dd L$015ej4-L$010PIC_point
|
||
|
dd L$014ej5-L$010PIC_point
|
||
|
dd L$013ej6-L$010PIC_point
|
||
|
dd L$012ej7-L$010PIC_point
|
||
|
align 64
|
||
|
global _DES_ede3_cbc_encrypt
|
||
|
align 16
|
||
|
_DES_ede3_cbc_encrypt:
|
||
|
L$_DES_ede3_cbc_encrypt_begin:
|
||
|
;
|
||
|
push ebp
|
||
|
push ebx
|
||
|
push esi
|
||
|
push edi
|
||
|
mov ebp,DWORD [28+esp]
|
||
|
; getting iv ptr from parameter 6
|
||
|
mov ebx,DWORD [44+esp]
|
||
|
mov esi,DWORD [ebx]
|
||
|
mov edi,DWORD [4+ebx]
|
||
|
push edi
|
||
|
push esi
|
||
|
push edi
|
||
|
push esi
|
||
|
mov ebx,esp
|
||
|
mov esi,DWORD [36+esp]
|
||
|
mov edi,DWORD [40+esp]
|
||
|
; getting encrypt flag from parameter 7
|
||
|
mov ecx,DWORD [64+esp]
|
||
|
; get and push parameter 5
|
||
|
mov eax,DWORD [56+esp]
|
||
|
push eax
|
||
|
; get and push parameter 4
|
||
|
mov eax,DWORD [56+esp]
|
||
|
push eax
|
||
|
; get and push parameter 3
|
||
|
mov eax,DWORD [56+esp]
|
||
|
push eax
|
||
|
push ebx
|
||
|
cmp ecx,0
|
||
|
jz NEAR L$030decrypt
|
||
|
and ebp,4294967288
|
||
|
mov eax,DWORD [16+esp]
|
||
|
mov ebx,DWORD [20+esp]
|
||
|
jz NEAR L$031encrypt_finish
|
||
|
L$032encrypt_loop:
|
||
|
mov ecx,DWORD [esi]
|
||
|
mov edx,DWORD [4+esi]
|
||
|
xor eax,ecx
|
||
|
xor ebx,edx
|
||
|
mov DWORD [16+esp],eax
|
||
|
mov DWORD [20+esp],ebx
|
||
|
call L$_DES_encrypt3_begin
|
||
|
mov eax,DWORD [16+esp]
|
||
|
mov ebx,DWORD [20+esp]
|
||
|
mov DWORD [edi],eax
|
||
|
mov DWORD [4+edi],ebx
|
||
|
add esi,8
|
||
|
add edi,8
|
||
|
sub ebp,8
|
||
|
jnz NEAR L$032encrypt_loop
|
||
|
L$031encrypt_finish:
|
||
|
mov ebp,DWORD [60+esp]
|
||
|
and ebp,7
|
||
|
jz NEAR L$033finish
|
||
|
call L$034PIC_point
|
||
|
L$034PIC_point:
|
||
|
pop edx
|
||
|
lea ecx,[(L$035cbc_enc_jmp_table-L$034PIC_point)+edx]
|
||
|
mov ebp,DWORD [ebp*4+ecx]
|
||
|
add ebp,edx
|
||
|
xor ecx,ecx
|
||
|
xor edx,edx
|
||
|
jmp ebp
|
||
|
L$036ej7:
|
||
|
#ifdef __CET__
|
||
|
|
||
|
db 243,15,30,251
|
||
|
#endif
|
||
|
|
||
|
mov dh,BYTE [6+esi]
|
||
|
shl edx,8
|
||
|
L$037ej6:
|
||
|
#ifdef __CET__
|
||
|
|
||
|
db 243,15,30,251
|
||
|
#endif
|
||
|
|
||
|
mov dh,BYTE [5+esi]
|
||
|
L$038ej5:
|
||
|
#ifdef __CET__
|
||
|
|
||
|
db 243,15,30,251
|
||
|
#endif
|
||
|
|
||
|
mov dl,BYTE [4+esi]
|
||
|
L$039ej4:
|
||
|
#ifdef __CET__
|
||
|
|
||
|
db 243,15,30,251
|
||
|
#endif
|
||
|
|
||
|
mov ecx,DWORD [esi]
|
||
|
jmp NEAR L$040ejend
|
||
|
L$041ej3:
|
||
|
#ifdef __CET__
|
||
|
|
||
|
db 243,15,30,251
|
||
|
#endif
|
||
|
|
||
|
mov ch,BYTE [2+esi]
|
||
|
shl ecx,8
|
||
|
L$042ej2:
|
||
|
#ifdef __CET__
|
||
|
|
||
|
db 243,15,30,251
|
||
|
#endif
|
||
|
|
||
|
mov ch,BYTE [1+esi]
|
||
|
L$043ej1:
|
||
|
#ifdef __CET__
|
||
|
|
||
|
db 243,15,30,251
|
||
|
#endif
|
||
|
|
||
|
mov cl,BYTE [esi]
|
||
|
L$040ejend:
|
||
|
xor eax,ecx
|
||
|
xor ebx,edx
|
||
|
mov DWORD [16+esp],eax
|
||
|
mov DWORD [20+esp],ebx
|
||
|
call L$_DES_encrypt3_begin
|
||
|
mov eax,DWORD [16+esp]
|
||
|
mov ebx,DWORD [20+esp]
|
||
|
mov DWORD [edi],eax
|
||
|
mov DWORD [4+edi],ebx
|
||
|
jmp NEAR L$033finish
|
||
|
L$030decrypt:
|
||
|
and ebp,4294967288
|
||
|
mov eax,DWORD [24+esp]
|
||
|
mov ebx,DWORD [28+esp]
|
||
|
jz NEAR L$044decrypt_finish
|
||
|
L$045decrypt_loop:
|
||
|
mov eax,DWORD [esi]
|
||
|
mov ebx,DWORD [4+esi]
|
||
|
mov DWORD [16+esp],eax
|
||
|
mov DWORD [20+esp],ebx
|
||
|
call L$_DES_decrypt3_begin
|
||
|
mov eax,DWORD [16+esp]
|
||
|
mov ebx,DWORD [20+esp]
|
||
|
mov ecx,DWORD [24+esp]
|
||
|
mov edx,DWORD [28+esp]
|
||
|
xor ecx,eax
|
||
|
xor edx,ebx
|
||
|
mov eax,DWORD [esi]
|
||
|
mov ebx,DWORD [4+esi]
|
||
|
mov DWORD [edi],ecx
|
||
|
mov DWORD [4+edi],edx
|
||
|
mov DWORD [24+esp],eax
|
||
|
mov DWORD [28+esp],ebx
|
||
|
add esi,8
|
||
|
add edi,8
|
||
|
sub ebp,8
|
||
|
jnz NEAR L$045decrypt_loop
|
||
|
L$044decrypt_finish:
|
||
|
mov ebp,DWORD [60+esp]
|
||
|
and ebp,7
|
||
|
jz NEAR L$033finish
|
||
|
mov eax,DWORD [esi]
|
||
|
mov ebx,DWORD [4+esi]
|
||
|
mov DWORD [16+esp],eax
|
||
|
mov DWORD [20+esp],ebx
|
||
|
call L$_DES_decrypt3_begin
|
||
|
mov eax,DWORD [16+esp]
|
||
|
mov ebx,DWORD [20+esp]
|
||
|
mov ecx,DWORD [24+esp]
|
||
|
mov edx,DWORD [28+esp]
|
||
|
xor ecx,eax
|
||
|
xor edx,ebx
|
||
|
mov eax,DWORD [esi]
|
||
|
mov ebx,DWORD [4+esi]
|
||
|
L$046dj7:
|
||
|
ror edx,16
|
||
|
mov BYTE [6+edi],dl
|
||
|
shr edx,16
|
||
|
L$047dj6:
|
||
|
mov BYTE [5+edi],dh
|
||
|
L$048dj5:
|
||
|
mov BYTE [4+edi],dl
|
||
|
L$049dj4:
|
||
|
mov DWORD [edi],ecx
|
||
|
jmp NEAR L$050djend
|
||
|
L$051dj3:
|
||
|
ror ecx,16
|
||
|
mov BYTE [2+edi],cl
|
||
|
shl ecx,16
|
||
|
L$052dj2:
|
||
|
mov BYTE [1+esi],ch
|
||
|
L$053dj1:
|
||
|
mov BYTE [esi],cl
|
||
|
L$050djend:
|
||
|
jmp NEAR L$033finish
|
||
|
L$033finish:
|
||
|
mov ecx,DWORD [76+esp]
|
||
|
add esp,32
|
||
|
mov DWORD [ecx],eax
|
||
|
mov DWORD [4+ecx],ebx
|
||
|
pop edi
|
||
|
pop esi
|
||
|
pop ebx
|
||
|
pop ebp
|
||
|
ret
|
||
|
align 64
|
||
|
L$035cbc_enc_jmp_table:
|
||
|
dd 0
|
||
|
dd L$043ej1-L$034PIC_point
|
||
|
dd L$042ej2-L$034PIC_point
|
||
|
dd L$041ej3-L$034PIC_point
|
||
|
dd L$039ej4-L$034PIC_point
|
||
|
dd L$038ej5-L$034PIC_point
|
||
|
dd L$037ej6-L$034PIC_point
|
||
|
dd L$036ej7-L$034PIC_point
|
||
|
align 64
|
||
|
align 64
|
||
|
_DES_SPtrans:
|
||
|
L$des_sptrans:
|
||
|
dd 34080768,524288,33554434,34080770
|
||
|
dd 33554432,526338,524290,33554434
|
||
|
dd 526338,34080768,34078720,2050
|
||
|
dd 33556482,33554432,0,524290
|
||
|
dd 524288,2,33556480,526336
|
||
|
dd 34080770,34078720,2050,33556480
|
||
|
dd 2,2048,526336,34078722
|
||
|
dd 2048,33556482,34078722,0
|
||
|
dd 0,34080770,33556480,524290
|
||
|
dd 34080768,524288,2050,33556480
|
||
|
dd 34078722,2048,526336,33554434
|
||
|
dd 526338,2,33554434,34078720
|
||
|
dd 34080770,526336,34078720,33556482
|
||
|
dd 33554432,2050,524290,0
|
||
|
dd 524288,33554432,33556482,34080768
|
||
|
dd 2,34078722,2048,526338
|
||
|
dd 1074823184,0,1081344,1074790400
|
||
|
dd 1073741840,32784,1073774592,1081344
|
||
|
dd 32768,1074790416,16,1073774592
|
||
|
dd 1048592,1074823168,1074790400,16
|
||
|
dd 1048576,1073774608,1074790416,32768
|
||
|
dd 1081360,1073741824,0,1048592
|
||
|
dd 1073774608,1081360,1074823168,1073741840
|
||
|
dd 1073741824,1048576,32784,1074823184
|
||
|
dd 1048592,1074823168,1073774592,1081360
|
||
|
dd 1074823184,1048592,1073741840,0
|
||
|
dd 1073741824,32784,1048576,1074790416
|
||
|
dd 32768,1073741824,1081360,1073774608
|
||
|
dd 1074823168,32768,0,1073741840
|
||
|
dd 16,1074823184,1081344,1074790400
|
||
|
dd 1074790416,1048576,32784,1073774592
|
||
|
dd 1073774608,16,1074790400,1081344
|
||
|
dd 67108865,67371264,256,67109121
|
||
|
dd 262145,67108864,67109121,262400
|
||
|
dd 67109120,262144,67371008,1
|
||
|
dd 67371265,257,1,67371009
|
||
|
dd 0,262145,67371264,256
|
||
|
dd 257,67371265,262144,67108865
|
||
|
dd 67371009,67109120,262401,67371008
|
||
|
dd 262400,0,67108864,262401
|
||
|
dd 67371264,256,1,262144
|
||
|
dd 257,262145,67371008,67109121
|
||
|
dd 0,67371264,262400,67371009
|
||
|
dd 262145,67108864,67371265,1
|
||
|
dd 262401,67108865,67108864,67371265
|
||
|
dd 262144,67109120,67109121,262400
|
||
|
dd 67109120,0,67371009,257
|
||
|
dd 67108865,262401,256,67371008
|
||
|
dd 4198408,268439552,8,272633864
|
||
|
dd 0,272629760,268439560,4194312
|
||
|
dd 272633856,268435464,268435456,4104
|
||
|
dd 268435464,4198408,4194304,268435456
|
||
|
dd 272629768,4198400,4096,8
|
||
|
dd 4198400,268439560,272629760,4096
|
||
|
dd 4104,0,4194312,272633856
|
||
|
dd 268439552,272629768,272633864,4194304
|
||
|
dd 272629768,4104,4194304,268435464
|
||
|
dd 4198400,268439552,8,272629760
|
||
|
dd 268439560,0,4096,4194312
|
||
|
dd 0,272629768,272633856,4096
|
||
|
dd 268435456,272633864,4198408,4194304
|
||
|
dd 272633864,8,268439552,4198408
|
||
|
dd 4194312,4198400,272629760,268439560
|
||
|
dd 4104,268435456,268435464,272633856
|
||
|
dd 134217728,65536,1024,134284320
|
||
|
dd 134283296,134218752,66592,134283264
|
||
|
dd 65536,32,134217760,66560
|
||
|
dd 134218784,134283296,134284288,0
|
||
|
dd 66560,134217728,65568,1056
|
||
|
dd 134218752,66592,0,134217760
|
||
|
dd 32,134218784,134284320,65568
|
||
|
dd 134283264,1024,1056,134284288
|
||
|
dd 134284288,134218784,65568,134283264
|
||
|
dd 65536,32,134217760,134218752
|
||
|
dd 134217728,66560,134284320,0
|
||
|
dd 66592,134217728,1024,65568
|
||
|
dd 134218784,1024,0,134284320
|
||
|
dd 134283296,134284288,1056,65536
|
||
|
dd 66560,134283296,134218752,1056
|
||
|
dd 32,66592,134283264,134217760
|
||
|
dd 2147483712,2097216,0,2149588992
|
||
|
dd 2097216,8192,2147491904,2097152
|
||
|
dd 8256,2149589056,2105344,2147483648
|
||
|
dd 2147491840,2147483712,2149580800,2105408
|
||
|
dd 2097152,2147491904,2149580864,0
|
||
|
dd 8192,64,2149588992,2149580864
|
||
|
dd 2149589056,2149580800,2147483648,8256
|
||
|
dd 64,2105344,2105408,2147491840
|
||
|
dd 8256,2147483648,2147491840,2105408
|
||
|
dd 2149588992,2097216,0,2147491840
|
||
|
dd 2147483648,8192,2149580864,2097152
|
||
|
dd 2097216,2149589056,2105344,64
|
||
|
dd 2149589056,2105344,2097152,2147491904
|
||
|
dd 2147483712,2149580800,2105408,0
|
||
|
dd 8192,2147483712,2147491904,2149588992
|
||
|
dd 2149580800,8256,64,2149580864
|
||
|
dd 16384,512,16777728,16777220
|
||
|
dd 16794116,16388,16896,0
|
||
|
dd 16777216,16777732,516,16793600
|
||
|
dd 4,16794112,16793600,516
|
||
|
dd 16777732,16384,16388,16794116
|
||
|
dd 0,16777728,16777220,16896
|
||
|
dd 16793604,16900,16794112,4
|
||
|
dd 16900,16793604,512,16777216
|
||
|
dd 16900,16793600,16793604,516
|
||
|
dd 16384,512,16777216,16793604
|
||
|
dd 16777732,16900,16896,0
|
||
|
dd 512,16777220,4,16777728
|
||
|
dd 0,16777732,16777728,16896
|
||
|
dd 516,16384,16794116,16777216
|
||
|
dd 16794112,4,16388,16794116
|
||
|
dd 16777220,16794112,16793600,16388
|
||
|
dd 545259648,545390592,131200,0
|
||
|
dd 537001984,8388736,545259520,545390720
|
||
|
dd 128,536870912,8519680,131200
|
||
|
dd 8519808,537002112,536871040,545259520
|
||
|
dd 131072,8519808,8388736,537001984
|
||
|
dd 545390720,536871040,0,8519680
|
||
|
dd 536870912,8388608,537002112,545259648
|
||
|
dd 8388608,131072,545390592,128
|
||
|
dd 8388608,131072,536871040,545390720
|
||
|
dd 131200,536870912,0,8519680
|
||
|
dd 545259648,537002112,537001984,8388736
|
||
|
dd 545390592,128,8388736,537001984
|
||
|
dd 545390720,8388608,545259520,536871040
|
||
|
dd 8519680,131200,537002112,545259520
|
||
|
dd 128,545390592,8519808,0
|
||
|
dd 536870912,545259648,131072,8519808
|