| ; Don't even think of reading this code |
| ; It was automatically generated by des-586.pl |
| ; Which is a perl program used to generate the x86 assember for |
| ; any of elf, a.out, BSDI,Win32, or Solaris |
| ; eric <eay@cryptsoft.com> |
| ; |
| TITLE des-586.asm |
| .386 |
| .model FLAT |
| _TEXT SEGMENT |
| PUBLIC _des_encrypt |
| EXTRN _des_SPtrans:DWORD |
| _des_encrypt PROC NEAR |
| push esi |
| push edi |
| ; |
| ; Load the 2 words |
| mov esi, DWORD PTR 12[esp] |
| xor ecx, ecx |
| push ebx |
| push ebp |
| mov eax, DWORD PTR [esi] |
| mov ebx, DWORD PTR 28[esp] |
| mov edi, DWORD PTR 4[esi] |
| ; |
| ; IP |
| rol eax, 4 |
| mov esi, eax |
| xor eax, edi |
| and eax, 0f0f0f0f0h |
| xor esi, eax |
| xor edi, eax |
| ; |
| rol edi, 20 |
| mov eax, edi |
| xor edi, esi |
| and edi, 0fff0000fh |
| xor eax, edi |
| xor esi, edi |
| ; |
| rol eax, 14 |
| mov edi, eax |
| xor eax, esi |
| and eax, 033333333h |
| xor edi, eax |
| xor esi, eax |
| ; |
| rol esi, 22 |
| mov eax, esi |
| xor esi, edi |
| and esi, 003fc03fch |
| xor eax, esi |
| xor edi, esi |
| ; |
| rol eax, 9 |
| mov esi, eax |
| xor eax, edi |
| and eax, 0aaaaaaaah |
| xor esi, eax |
| xor edi, eax |
| ; |
| rol edi, 1 |
| mov ebp, DWORD PTR 24[esp] |
| cmp ebx, 0 |
| je $L000start_decrypt |
| ; |
| ; Round 0 |
| mov eax, DWORD PTR [ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 4[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 1 |
| mov eax, DWORD PTR 8[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 12[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 2 |
| mov eax, DWORD PTR 16[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 20[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 3 |
| mov eax, DWORD PTR 24[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 28[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 4 |
| mov eax, DWORD PTR 32[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 36[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 5 |
| mov eax, DWORD PTR 40[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 44[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 6 |
| mov eax, DWORD PTR 48[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 52[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 7 |
| mov eax, DWORD PTR 56[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 60[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 8 |
| mov eax, DWORD PTR 64[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 68[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 9 |
| mov eax, DWORD PTR 72[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 76[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 10 |
| mov eax, DWORD PTR 80[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 84[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 11 |
| mov eax, DWORD PTR 88[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 92[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 12 |
| mov eax, DWORD PTR 96[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 100[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 13 |
| mov eax, DWORD PTR 104[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 108[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 14 |
| mov eax, DWORD PTR 112[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 116[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 15 |
| mov eax, DWORD PTR 120[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 124[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| jmp $L001end |
| $L000start_decrypt: |
| ; |
| ; Round 15 |
| mov eax, DWORD PTR 120[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 124[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 14 |
| mov eax, DWORD PTR 112[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 116[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 13 |
| mov eax, DWORD PTR 104[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 108[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 12 |
| mov eax, DWORD PTR 96[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 100[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 11 |
| mov eax, DWORD PTR 88[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 92[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 10 |
| mov eax, DWORD PTR 80[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 84[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 9 |
| mov eax, DWORD PTR 72[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 76[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 8 |
| mov eax, DWORD PTR 64[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 68[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 7 |
| mov eax, DWORD PTR 56[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 60[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 6 |
| mov eax, DWORD PTR 48[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 52[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 5 |
| mov eax, DWORD PTR 40[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 44[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 4 |
| mov eax, DWORD PTR 32[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 36[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 3 |
| mov eax, DWORD PTR 24[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 28[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 2 |
| mov eax, DWORD PTR 16[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 20[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 1 |
| mov eax, DWORD PTR 8[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 12[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 0 |
| mov eax, DWORD PTR [ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 4[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| $L001end: |
| ; |
| ; FP |
| mov edx, DWORD PTR 20[esp] |
| ror esi, 1 |
| mov eax, edi |
| xor edi, esi |
| and edi, 0aaaaaaaah |
| xor eax, edi |
| xor esi, edi |
| ; |
| rol eax, 23 |
| mov edi, eax |
| xor eax, esi |
| and eax, 003fc03fch |
| xor edi, eax |
| xor esi, eax |
| ; |
| rol edi, 10 |
| mov eax, edi |
| xor edi, esi |
| and edi, 033333333h |
| xor eax, edi |
| xor esi, edi |
| ; |
| rol esi, 18 |
| mov edi, esi |
| xor esi, eax |
| and esi, 0fff0000fh |
| xor edi, esi |
| xor eax, esi |
| ; |
| rol edi, 12 |
| mov esi, edi |
| xor edi, eax |
| and edi, 0f0f0f0f0h |
| xor esi, edi |
| xor eax, edi |
| ; |
| ror eax, 4 |
| mov DWORD PTR [edx],eax |
| mov DWORD PTR 4[edx],esi |
| pop ebp |
| pop ebx |
| pop edi |
| pop esi |
| ret |
| _des_encrypt ENDP |
| _TEXT ENDS |
| _TEXT SEGMENT |
| PUBLIC _des_encrypt2 |
| EXTRN _des_SPtrans:DWORD |
| _des_encrypt2 PROC NEAR |
| push esi |
| push edi |
| ; |
| ; Load the 2 words |
| mov eax, DWORD PTR 12[esp] |
| xor ecx, ecx |
| push ebx |
| push ebp |
| mov esi, DWORD PTR [eax] |
| mov ebx, DWORD PTR 28[esp] |
| rol esi, 3 |
| mov edi, DWORD PTR 4[eax] |
| rol edi, 3 |
| mov ebp, DWORD PTR 24[esp] |
| cmp ebx, 0 |
| je $L002start_decrypt |
| ; |
| ; Round 0 |
| mov eax, DWORD PTR [ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 4[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 1 |
| mov eax, DWORD PTR 8[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 12[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 2 |
| mov eax, DWORD PTR 16[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 20[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 3 |
| mov eax, DWORD PTR 24[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 28[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 4 |
| mov eax, DWORD PTR 32[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 36[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 5 |
| mov eax, DWORD PTR 40[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 44[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 6 |
| mov eax, DWORD PTR 48[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 52[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 7 |
| mov eax, DWORD PTR 56[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 60[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 8 |
| mov eax, DWORD PTR 64[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 68[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 9 |
| mov eax, DWORD PTR 72[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 76[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 10 |
| mov eax, DWORD PTR 80[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 84[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 11 |
| mov eax, DWORD PTR 88[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 92[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 12 |
| mov eax, DWORD PTR 96[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 100[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 13 |
| mov eax, DWORD PTR 104[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 108[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 14 |
| mov eax, DWORD PTR 112[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 116[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 15 |
| mov eax, DWORD PTR 120[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 124[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| jmp $L003end |
| $L002start_decrypt: |
| ; |
| ; Round 15 |
| mov eax, DWORD PTR 120[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 124[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 14 |
| mov eax, DWORD PTR 112[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 116[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 13 |
| mov eax, DWORD PTR 104[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 108[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 12 |
| mov eax, DWORD PTR 96[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 100[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 11 |
| mov eax, DWORD PTR 88[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 92[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 10 |
| mov eax, DWORD PTR 80[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 84[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 9 |
| mov eax, DWORD PTR 72[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 76[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 8 |
| mov eax, DWORD PTR 64[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 68[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 7 |
| mov eax, DWORD PTR 56[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 60[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 6 |
| mov eax, DWORD PTR 48[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 52[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 5 |
| mov eax, DWORD PTR 40[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 44[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 4 |
| mov eax, DWORD PTR 32[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 36[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 3 |
| mov eax, DWORD PTR 24[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 28[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 2 |
| mov eax, DWORD PTR 16[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 20[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| ; |
| ; Round 1 |
| mov eax, DWORD PTR 8[ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 12[ebp] |
| xor eax, esi |
| xor edx, esi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor edi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor edi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor edi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor edi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor edi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor edi, ebx |
| ; |
| ; Round 0 |
| mov eax, DWORD PTR [ebp] |
| xor ebx, ebx |
| mov edx, DWORD PTR 4[ebp] |
| xor eax, edi |
| xor edx, edi |
| and eax, 0fcfcfcfch |
| and edx, 0cfcfcfcfh |
| mov bl, al |
| mov cl, ah |
| ror edx, 4 |
| mov ebp, DWORD PTR _des_SPtrans[ebx] |
| mov bl, dl |
| xor esi, ebp |
| mov ebp, DWORD PTR _des_SPtrans[0200h+ecx] |
| xor esi, ebp |
| mov cl, dh |
| shr eax, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0100h+ebx] |
| xor esi, ebp |
| mov bl, ah |
| shr edx, 16 |
| mov ebp, DWORD PTR _des_SPtrans[0300h+ecx] |
| xor esi, ebp |
| mov ebp, DWORD PTR 24[esp] |
| mov cl, dh |
| and eax, 0ffh |
| and edx, 0ffh |
| mov ebx, DWORD PTR _des_SPtrans[0600h+ebx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0700h+ecx] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0400h+eax] |
| xor esi, ebx |
| mov ebx, DWORD PTR _des_SPtrans[0500h+edx] |
| xor esi, ebx |
| $L003end: |
| ; |
| ; Fixup |
| ror edi, 3 |
| mov eax, DWORD PTR 20[esp] |
| ror esi, 3 |
| mov DWORD PTR [eax],edi |
| mov DWORD PTR 4[eax],esi |
| pop ebp |
| pop ebx |
| pop edi |
| pop esi |
| ret |
| _des_encrypt2 ENDP |
| _TEXT ENDS |
| _TEXT SEGMENT |
| PUBLIC _des_encrypt3 |
| |
| _des_encrypt3 PROC NEAR |
| push ebx |
| mov ebx, DWORD PTR 8[esp] |
| push ebp |
| push esi |
| push edi |
| ; |
| ; Load the data words |
| mov edi, DWORD PTR [ebx] |
| mov esi, DWORD PTR 4[ebx] |
| sub esp, 12 |
| ; |
| ; IP |
| rol edi, 4 |
| mov edx, edi |
| xor edi, esi |
| and edi, 0f0f0f0f0h |
| xor edx, edi |
| xor esi, edi |
| ; |
| rol esi, 20 |
| mov edi, esi |
| xor esi, edx |
| and esi, 0fff0000fh |
| xor edi, esi |
| xor edx, esi |
| ; |
| rol edi, 14 |
| mov esi, edi |
| xor edi, edx |
| and edi, 033333333h |
| xor esi, edi |
| xor edx, edi |
| ; |
| rol edx, 22 |
| mov edi, edx |
| xor edx, esi |
| and edx, 003fc03fch |
| xor edi, edx |
| xor esi, edx |
| ; |
| rol edi, 9 |
| mov edx, edi |
| xor edi, esi |
| and edi, 0aaaaaaaah |
| xor edx, edi |
| xor esi, edi |
| ; |
| ror edx, 3 |
| ror esi, 2 |
| mov DWORD PTR 4[ebx],esi |
| mov eax, DWORD PTR 36[esp] |
| mov DWORD PTR [ebx],edx |
| mov edi, DWORD PTR 40[esp] |
| mov esi, DWORD PTR 44[esp] |
| mov DWORD PTR 8[esp],1 |
| mov DWORD PTR 4[esp],eax |
| mov DWORD PTR [esp],ebx |
| call _des_encrypt2 |
| mov DWORD PTR 8[esp],0 |
| mov DWORD PTR 4[esp],edi |
| mov DWORD PTR [esp],ebx |
| call _des_encrypt2 |
| mov DWORD PTR 8[esp],1 |
| mov DWORD PTR 4[esp],esi |
| mov DWORD PTR [esp],ebx |
| call _des_encrypt2 |
| add esp, 12 |
| mov edi, DWORD PTR [ebx] |
| mov esi, DWORD PTR 4[ebx] |
| ; |
| ; FP |
| rol esi, 2 |
| rol edi, 3 |
| mov eax, edi |
| xor edi, esi |
| and edi, 0aaaaaaaah |
| xor eax, edi |
| xor esi, edi |
| ; |
| rol eax, 23 |
| mov edi, eax |
| xor eax, esi |
| and eax, 003fc03fch |
| xor edi, eax |
| xor esi, eax |
| ; |
| rol edi, 10 |
| mov eax, edi |
| xor edi, esi |
| and edi, 033333333h |
| xor eax, edi |
| xor esi, edi |
| ; |
| rol esi, 18 |
| mov edi, esi |
| xor esi, eax |
| and esi, 0fff0000fh |
| xor edi, esi |
| xor eax, esi |
| ; |
| rol edi, 12 |
| mov esi, edi |
| xor edi, eax |
| and edi, 0f0f0f0f0h |
| xor esi, edi |
| xor eax, edi |
| ; |
| ror eax, 4 |
| mov DWORD PTR [ebx],eax |
| mov DWORD PTR 4[ebx],esi |
| pop edi |
| pop esi |
| pop ebp |
| pop ebx |
| ret |
| _des_encrypt3 ENDP |
| _TEXT ENDS |
| _TEXT SEGMENT |
| PUBLIC _des_decrypt3 |
| |
| _des_decrypt3 PROC NEAR |
| push ebx |
| mov ebx, DWORD PTR 8[esp] |
| push ebp |
| push esi |
| push edi |
| ; |
| ; Load the data words |
| mov edi, DWORD PTR [ebx] |
| mov esi, DWORD PTR 4[ebx] |
| sub esp, 12 |
| ; |
| ; IP |
| rol edi, 4 |
| mov edx, edi |
| xor edi, esi |
| and edi, 0f0f0f0f0h |
| xor edx, edi |
| xor esi, edi |
| ; |
| rol esi, 20 |
| mov edi, esi |
| xor esi, edx |
| and esi, 0fff0000fh |
| xor edi, esi |
| xor edx, esi |
| ; |
| rol edi, 14 |
| mov esi, edi |
| xor edi, edx |
| and edi, 033333333h |
| xor esi, edi |
| xor edx, edi |
| ; |
| rol edx, 22 |
| mov edi, edx |
| xor edx, esi |
| and edx, 003fc03fch |
| xor edi, edx |
| xor esi, edx |
| ; |
| rol edi, 9 |
| mov edx, edi |
| xor edi, esi |
| and edi, 0aaaaaaaah |
| xor edx, edi |
| xor esi, edi |
| ; |
| ror edx, 3 |
| ror esi, 2 |
| mov DWORD PTR 4[ebx],esi |
| mov esi, DWORD PTR 36[esp] |
| mov DWORD PTR [ebx],edx |
| mov edi, DWORD PTR 40[esp] |
| mov eax, DWORD PTR 44[esp] |
| mov DWORD PTR 8[esp],0 |
| mov DWORD PTR 4[esp],eax |
| mov DWORD PTR [esp],ebx |
| call _des_encrypt2 |
| mov DWORD PTR 8[esp],1 |
| mov DWORD PTR 4[esp],edi |
| mov DWORD PTR [esp],ebx |
| call _des_encrypt2 |
| mov DWORD PTR 8[esp],0 |
| mov DWORD PTR 4[esp],esi |
| mov DWORD PTR [esp],ebx |
| call _des_encrypt2 |
| add esp, 12 |
| mov edi, DWORD PTR [ebx] |
| mov esi, DWORD PTR 4[ebx] |
| ; |
| ; FP |
| rol esi, 2 |
| rol edi, 3 |
| mov eax, edi |
| xor edi, esi |
| and edi, 0aaaaaaaah |
| xor eax, edi |
| xor esi, edi |
| ; |
| rol eax, 23 |
| mov edi, eax |
| xor eax, esi |
| and eax, 003fc03fch |
| xor edi, eax |
| xor esi, eax |
| ; |
| rol edi, 10 |
| mov eax, edi |
| xor edi, esi |
| and edi, 033333333h |
| xor eax, edi |
| xor esi, edi |
| ; |
| rol esi, 18 |
| mov edi, esi |
| xor esi, eax |
| and esi, 0fff0000fh |
| xor edi, esi |
| xor eax, esi |
| ; |
| rol edi, 12 |
| mov esi, edi |
| xor edi, eax |
| and edi, 0f0f0f0f0h |
| xor esi, edi |
| xor eax, edi |
| ; |
| ror eax, 4 |
| mov DWORD PTR [ebx],eax |
| mov DWORD PTR 4[ebx],esi |
| pop edi |
| pop esi |
| pop ebp |
| pop ebx |
| ret |
| _des_decrypt3 ENDP |
| _TEXT ENDS |
| _TEXT SEGMENT |
| PUBLIC _des_ncbc_encrypt |
| |
| _des_ncbc_encrypt PROC NEAR |
| ; |
| push ebp |
| push ebx |
| push esi |
| push edi |
| mov ebp, DWORD PTR 28[esp] |
| ; getting iv ptr from parameter 4 |
| mov ebx, DWORD PTR 36[esp] |
| mov esi, DWORD PTR [ebx] |
| mov edi, DWORD PTR 4[ebx] |
| push edi |
| push esi |
| push edi |
| push esi |
| mov ebx, esp |
| mov esi, DWORD PTR 36[esp] |
| mov edi, DWORD PTR 40[esp] |
| ; getting encrypt flag from parameter 5 |
| mov ecx, DWORD PTR 56[esp] |
| ; get and push parameter 5 |
| push ecx |
| ; get and push parameter 3 |
| mov eax, DWORD PTR 52[esp] |
| push eax |
| push ebx |
| cmp ecx, 0 |
| jz $L004decrypt |
| and ebp, 4294967288 |
| mov eax, DWORD PTR 12[esp] |
| mov ebx, DWORD PTR 16[esp] |
| jz $L005encrypt_finish |
| L006encrypt_loop: |
| mov ecx, DWORD PTR [esi] |
| mov edx, DWORD PTR 4[esi] |
| xor eax, ecx |
| xor ebx, edx |
| mov DWORD PTR 12[esp],eax |
| mov DWORD PTR 16[esp],ebx |
| call _des_encrypt |
| mov eax, DWORD PTR 12[esp] |
| mov ebx, DWORD PTR 16[esp] |
| mov DWORD PTR [edi],eax |
| mov DWORD PTR 4[edi],ebx |
| add esi, 8 |
| add edi, 8 |
| sub ebp, 8 |
| jnz L006encrypt_loop |
| $L005encrypt_finish: |
| mov ebp, DWORD PTR 56[esp] |
| and ebp, 7 |
| jz $L007finish |
| xor ecx, ecx |
| xor edx, edx |
| mov ebp, DWORD PTR $L008cbc_enc_jmp_table[ebp*4] |
| jmp ebp |
| L009ej7: |
| mov dh, BYTE PTR 6[esi] |
| shl edx, 8 |
| L010ej6: |
| mov dh, BYTE PTR 5[esi] |
| L011ej5: |
| mov dl, BYTE PTR 4[esi] |
| L012ej4: |
| mov ecx, DWORD PTR [esi] |
| jmp $L013ejend |
| L014ej3: |
| mov ch, BYTE PTR 2[esi] |
| shl ecx, 8 |
| L015ej2: |
| mov ch, BYTE PTR 1[esi] |
| L016ej1: |
| mov cl, BYTE PTR [esi] |
| $L013ejend: |
| xor eax, ecx |
| xor ebx, edx |
| mov DWORD PTR 12[esp],eax |
| mov DWORD PTR 16[esp],ebx |
| call _des_encrypt |
| mov eax, DWORD PTR 12[esp] |
| mov ebx, DWORD PTR 16[esp] |
| mov DWORD PTR [edi],eax |
| mov DWORD PTR 4[edi],ebx |
| jmp $L007finish |
| $L004decrypt: |
| and ebp, 4294967288 |
| mov eax, DWORD PTR 20[esp] |
| mov ebx, DWORD PTR 24[esp] |
| jz $L017decrypt_finish |
| L018decrypt_loop: |
| mov eax, DWORD PTR [esi] |
| mov ebx, DWORD PTR 4[esi] |
| mov DWORD PTR 12[esp],eax |
| mov DWORD PTR 16[esp],ebx |
| call _des_encrypt |
| mov eax, DWORD PTR 12[esp] |
| mov ebx, DWORD PTR 16[esp] |
| mov ecx, DWORD PTR 20[esp] |
| mov edx, DWORD PTR 24[esp] |
| xor ecx, eax |
| xor edx, ebx |
| mov eax, DWORD PTR [esi] |
| mov ebx, DWORD PTR 4[esi] |
| mov DWORD PTR [edi],ecx |
| mov DWORD PTR 4[edi],edx |
| mov DWORD PTR 20[esp],eax |
| mov DWORD PTR 24[esp],ebx |
| add esi, 8 |
| add edi, 8 |
| sub ebp, 8 |
| jnz L018decrypt_loop |
| $L017decrypt_finish: |
| mov ebp, DWORD PTR 56[esp] |
| and ebp, 7 |
| jz $L007finish |
| mov eax, DWORD PTR [esi] |
| mov ebx, DWORD PTR 4[esi] |
| mov DWORD PTR 12[esp],eax |
| mov DWORD PTR 16[esp],ebx |
| call _des_encrypt |
| mov eax, DWORD PTR 12[esp] |
| mov ebx, DWORD PTR 16[esp] |
| mov ecx, DWORD PTR 20[esp] |
| mov edx, DWORD PTR 24[esp] |
| xor ecx, eax |
| xor edx, ebx |
| mov eax, DWORD PTR [esi] |
| mov ebx, DWORD PTR 4[esi] |
| L019dj7: |
| ror edx, 16 |
| mov BYTE PTR 6[edi],dl |
| shr edx, 16 |
| L020dj6: |
| mov BYTE PTR 5[edi],dh |
| L021dj5: |
| mov BYTE PTR 4[edi],dl |
| L022dj4: |
| mov DWORD PTR [edi],ecx |
| jmp $L023djend |
| L024dj3: |
| ror ecx, 16 |
| mov BYTE PTR 2[edi],cl |
| shl ecx, 16 |
| L025dj2: |
| mov BYTE PTR 1[esi],ch |
| L026dj1: |
| mov BYTE PTR [esi], cl |
| $L023djend: |
| jmp $L007finish |
| $L007finish: |
| mov ecx, DWORD PTR 64[esp] |
| add esp, 28 |
| mov DWORD PTR [ecx],eax |
| mov DWORD PTR 4[ecx],ebx |
| pop edi |
| pop esi |
| pop ebx |
| pop ebp |
| ret |
| $L008cbc_enc_jmp_table: |
| DD 0 |
| DD L016ej1 |
| DD L015ej2 |
| DD L014ej3 |
| DD L012ej4 |
| DD L011ej5 |
| DD L010ej6 |
| DD L009ej7 |
| L027cbc_dec_jmp_table: |
| DD 0 |
| DD L026dj1 |
| DD L025dj2 |
| DD L024dj3 |
| DD L022dj4 |
| DD L021dj5 |
| DD L020dj6 |
| DD L019dj7 |
| _des_ncbc_encrypt ENDP |
| _TEXT ENDS |
| _TEXT SEGMENT |
| PUBLIC _des_ede3_cbc_encrypt |
| |
| _des_ede3_cbc_encrypt PROC NEAR |
| ; |
| push ebp |
| push ebx |
| push esi |
| push edi |
| mov ebp, DWORD PTR 28[esp] |
| ; getting iv ptr from parameter 6 |
| mov ebx, DWORD PTR 44[esp] |
| mov esi, DWORD PTR [ebx] |
| mov edi, DWORD PTR 4[ebx] |
| push edi |
| push esi |
| push edi |
| push esi |
| mov ebx, esp |
| mov esi, DWORD PTR 36[esp] |
| mov edi, DWORD PTR 40[esp] |
| ; getting encrypt flag from parameter 7 |
| mov ecx, DWORD PTR 64[esp] |
| ; get and push parameter 5 |
| mov eax, DWORD PTR 56[esp] |
| push eax |
| ; get and push parameter 4 |
| mov eax, DWORD PTR 56[esp] |
| push eax |
| ; get and push parameter 3 |
| mov eax, DWORD PTR 56[esp] |
| push eax |
| push ebx |
| cmp ecx, 0 |
| jz $L028decrypt |
| and ebp, 4294967288 |
| mov eax, DWORD PTR 16[esp] |
| mov ebx, DWORD PTR 20[esp] |
| jz $L029encrypt_finish |
| L030encrypt_loop: |
| mov ecx, DWORD PTR [esi] |
| mov edx, DWORD PTR 4[esi] |
| xor eax, ecx |
| xor ebx, edx |
| mov DWORD PTR 16[esp],eax |
| mov DWORD PTR 20[esp],ebx |
| call _des_encrypt3 |
| mov eax, DWORD PTR 16[esp] |
| mov ebx, DWORD PTR 20[esp] |
| mov DWORD PTR [edi],eax |
| mov DWORD PTR 4[edi],ebx |
| add esi, 8 |
| add edi, 8 |
| sub ebp, 8 |
| jnz L030encrypt_loop |
| $L029encrypt_finish: |
| mov ebp, DWORD PTR 60[esp] |
| and ebp, 7 |
| jz $L031finish |
| xor ecx, ecx |
| xor edx, edx |
| mov ebp, DWORD PTR $L032cbc_enc_jmp_table[ebp*4] |
| jmp ebp |
| L033ej7: |
| mov dh, BYTE PTR 6[esi] |
| shl edx, 8 |
| L034ej6: |
| mov dh, BYTE PTR 5[esi] |
| L035ej5: |
| mov dl, BYTE PTR 4[esi] |
| L036ej4: |
| mov ecx, DWORD PTR [esi] |
| jmp $L037ejend |
| L038ej3: |
| mov ch, BYTE PTR 2[esi] |
| shl ecx, 8 |
| L039ej2: |
| mov ch, BYTE PTR 1[esi] |
| L040ej1: |
| mov cl, BYTE PTR [esi] |
| $L037ejend: |
| xor eax, ecx |
| xor ebx, edx |
| mov DWORD PTR 16[esp],eax |
| mov DWORD PTR 20[esp],ebx |
| call _des_encrypt3 |
| mov eax, DWORD PTR 16[esp] |
| mov ebx, DWORD PTR 20[esp] |
| mov DWORD PTR [edi],eax |
| mov DWORD PTR 4[edi],ebx |
| jmp $L031finish |
| $L028decrypt: |
| and ebp, 4294967288 |
| mov eax, DWORD PTR 24[esp] |
| mov ebx, DWORD PTR 28[esp] |
| jz $L041decrypt_finish |
| L042decrypt_loop: |
| mov eax, DWORD PTR [esi] |
| mov ebx, DWORD PTR 4[esi] |
| mov DWORD PTR 16[esp],eax |
| mov DWORD PTR 20[esp],ebx |
| call _des_decrypt3 |
| mov eax, DWORD PTR 16[esp] |
| mov ebx, DWORD PTR 20[esp] |
| mov ecx, DWORD PTR 24[esp] |
| mov edx, DWORD PTR 28[esp] |
| xor ecx, eax |
| xor edx, ebx |
| mov eax, DWORD PTR [esi] |
| mov ebx, DWORD PTR 4[esi] |
| mov DWORD PTR [edi],ecx |
| mov DWORD PTR 4[edi],edx |
| mov DWORD PTR 24[esp],eax |
| mov DWORD PTR 28[esp],ebx |
| add esi, 8 |
| add edi, 8 |
| sub ebp, 8 |
| jnz L042decrypt_loop |
| $L041decrypt_finish: |
| mov ebp, DWORD PTR 60[esp] |
| and ebp, 7 |
| jz $L031finish |
| mov eax, DWORD PTR [esi] |
| mov ebx, DWORD PTR 4[esi] |
| mov DWORD PTR 16[esp],eax |
| mov DWORD PTR 20[esp],ebx |
| call _des_decrypt3 |
| mov eax, DWORD PTR 16[esp] |
| mov ebx, DWORD PTR 20[esp] |
| mov ecx, DWORD PTR 24[esp] |
| mov edx, DWORD PTR 28[esp] |
| xor ecx, eax |
| xor edx, ebx |
| mov eax, DWORD PTR [esi] |
| mov ebx, DWORD PTR 4[esi] |
| L043dj7: |
| ror edx, 16 |
| mov BYTE PTR 6[edi],dl |
| shr edx, 16 |
| L044dj6: |
| mov BYTE PTR 5[edi],dh |
| L045dj5: |
| mov BYTE PTR 4[edi],dl |
| L046dj4: |
| mov DWORD PTR [edi],ecx |
| jmp $L047djend |
| L048dj3: |
| ror ecx, 16 |
| mov BYTE PTR 2[edi],cl |
| shl ecx, 16 |
| L049dj2: |
| mov BYTE PTR 1[esi],ch |
| L050dj1: |
| mov BYTE PTR [esi], cl |
| $L047djend: |
| jmp $L031finish |
| $L031finish: |
| mov ecx, DWORD PTR 76[esp] |
| add esp, 32 |
| mov DWORD PTR [ecx],eax |
| mov DWORD PTR 4[ecx],ebx |
| pop edi |
| pop esi |
| pop ebx |
| pop ebp |
| ret |
| $L032cbc_enc_jmp_table: |
| DD 0 |
| DD L040ej1 |
| DD L039ej2 |
| DD L038ej3 |
| DD L036ej4 |
| DD L035ej5 |
| DD L034ej6 |
| DD L033ej7 |
| L051cbc_dec_jmp_table: |
| DD 0 |
| DD L050dj1 |
| DD L049dj2 |
| DD L048dj3 |
| DD L046dj4 |
| DD L045dj5 |
| DD L044dj6 |
| DD L043dj7 |
| _des_ede3_cbc_encrypt ENDP |
| _TEXT ENDS |
| END |