📄 d-win32.asm
字号:
mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 3 mov eax, [24+ebp] xor ebx, ebx mov edx, [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, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 2 mov eax, [16+ebp] xor ebx, ebx mov edx, [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, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 1 mov eax, [8+ebp] xor ebx, ebx mov edx, [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, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 0 mov eax, [ebp] xor ebx, ebx mov edx, [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, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx$L003end: ; ; Fixup ror edi, 3 mov eax, [20+esp] ror esi, 3 mov [eax], edi mov [4+eax], esi pop ebp pop ebx pop edi pop esi retglobal _des_encrypt3_des_encrypt3: push ebx mov ebx, [8+esp] push ebp push esi push edi ; ; Load the data words mov edi, [ebx] mov esi, [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 [4+ebx], esi mov eax, [36+esp] mov [ebx], edx mov edi, [40+esp] mov esi, [44+esp] mov [8+esp], DWORD 1 mov [4+esp], eax mov [esp], ebx call _des_encrypt2 mov [8+esp], DWORD 0 mov [4+esp], edi mov [esp], ebx call _des_encrypt2 mov [8+esp], DWORD 1 mov [4+esp], esi mov [esp], ebx call _des_encrypt2 add esp, 12 mov edi, [ebx] mov esi, [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 [ebx], eax mov [4+ebx], esi pop edi pop esi pop ebp pop ebx retglobal _des_decrypt3_des_decrypt3: push ebx mov ebx, [8+esp] push ebp push esi push edi ; ; Load the data words mov edi, [ebx] mov esi, [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 [4+ebx], esi mov esi, [36+esp] mov [ebx], edx mov edi, [40+esp] mov eax, [44+esp] mov [8+esp], DWORD 0 mov [4+esp], eax mov [esp], ebx call _des_encrypt2 mov [8+esp], DWORD 1 mov [4+esp], edi mov [esp], ebx call _des_encrypt2 mov [8+esp], DWORD 0 mov [4+esp], esi mov [esp], ebx call _des_encrypt2 add esp, 12 mov edi, [ebx] mov esi, [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 [ebx], eax mov [4+ebx], esi pop edi pop esi pop ebp pop ebx retglobal _des_ncbc_encrypt_des_ncbc_encrypt: ; push ebp push ebx push esi push edi mov ebp, [28+esp] ; getting iv ptr from parameter 4 mov ebx, [36+esp] mov esi, [ebx] mov edi, [4+ebx] push edi push esi push edi push esi mov ebx, esp mov esi, [36+esp] mov edi, [40+esp] ; getting encrypt flag from parameter 5 mov ecx, [56+esp] ; get and push parameter 5 push ecx ; get and push parameter 3 mov eax, [52+esp] push eax push ebx cmp ecx, 0 jz NEAR $L004decrypt and ebp, 4294967288 mov eax, [12+esp] mov ebx, [16+esp] jz NEAR $L005encrypt_finishL006encrypt_loop: mov ecx, [esi] mov edx, [4+esi] xor eax, ecx xor ebx, edx mov [12+esp], eax mov [16+esp], ebx call _des_encrypt1 mov eax, [12+esp] mov ebx, [16+esp] mov [edi], eax mov [4+edi], ebx add esi, 8 add edi, 8 sub ebp, 8 jnz NEAR L006encrypt_loop$L005encrypt_finish: mov ebp, [56+esp] and ebp, 7 jz NEAR $L007finish xor ecx, ecx xor edx, edx mov ebp, [$L008cbc_enc_jmp_table+ebp*4] jmp ebpL009ej7: mov dh, [6+esi] shl edx, 8L010ej6: mov dh, [5+esi]L011ej5: mov dl, [4+esi]L012ej4: mov ecx, [esi] jmp $L013ejendL014ej3: mov ch, [2+esi] shl ecx, 8L015ej2: mov ch, [1+esi]L016ej1: mov cl, [esi]$L013ejend: xor eax, ecx xor ebx, edx mov [12+esp], eax mov [16+esp], ebx call _des_encrypt1 mov eax, [12+esp] mov ebx, [16+esp] mov [edi], eax mov [4+edi], ebx jmp $L007finish$L004decrypt: and ebp, 4294967288 mov eax, [20+esp] mov ebx, [24+esp] jz NEAR $L017decrypt_finishL018decrypt_loop: mov eax, [esi] mov ebx, [4+esi] mov [12+esp], eax mov [16+esp], ebx call _des_encrypt1 mov eax, [12+esp] mov ebx, [16+esp] mov ecx, [20+esp] mov edx, [24+esp] xor ecx, eax xor edx, ebx mov eax, [esi] mov ebx, [4+esi] mov [edi], ecx mov [4+edi], edx mov [20+esp], eax mov [24+esp], ebx add esi, 8 add edi, 8 sub ebp, 8 jnz NEAR L018decrypt_loop$L017decrypt_finish: mov ebp, [56+esp] and ebp, 7 jz NEAR $L007finish mov eax, [esi] mov ebx, [4+esi] mov [12+esp], eax mov [16+esp], ebx call _des_encrypt1 mov eax, [12+esp] mov ebx, [16+esp] mov ecx, [20+esp] mov edx, [24+esp] xor ecx, eax xor edx, ebx mov eax, [esi] mov ebx, [4+esi]L019dj7: ror edx, 16 mov [6+edi], dl shr edx, 16L020dj6: mov [5+edi], dhL021dj5: mov [4+edi], dlL022dj4: mov [edi], ecx jmp $L023djendL024dj3: ror ecx, 16 mov [2+edi], cl shl ecx, 16L025dj2: mov [1+esi], chL026dj1: mov [esi], cl$L023djend: jmp $L007finish$L007finish: mov ecx, [64+esp] add esp, 28 mov [ecx], eax mov [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 L009ej7L027cbc_dec_jmp_table: DD 0 DD L026dj1 DD L025dj2 DD L024dj3 DD L022dj4 DD L021dj5 DD L020dj6 DD L019dj7global _des_ede3_cbc_encrypt_des_ede3_cbc_encrypt: ; push ebp push ebx push esi push edi mov ebp, [28+esp] ; getting iv ptr from parameter 6 mov ebx, [44+esp] mov esi, [ebx] mov edi, [4+ebx] push edi push esi push edi push esi mov ebx, esp mov esi, [36+esp] mov edi, [40+esp] ; getting encrypt flag from parameter 7 mov ecx, [64+esp] ; get and push parameter 5 mov eax, [56+esp] push eax ; get and push parameter 4 mov eax, [56+esp] push eax ; get and push parameter 3 mov eax, [56+esp] push eax push ebx cmp ecx, 0 jz NEAR $L028decrypt and ebp, 4294967288 mov eax, [16+esp] mov ebx, [20+esp] jz NEAR $L029encrypt_finishL030encrypt_loop: mov ecx, [esi] mov edx, [4+esi] xor eax, ecx xor ebx, edx mov [16+esp], eax mov [20+esp], ebx call _des_encrypt3 mov eax, [16+esp] mov ebx, [20+esp] mov [edi], eax mov [4+edi], ebx add esi, 8 add edi, 8 sub ebp, 8 jnz NEAR L030encrypt_loop$L029encrypt_finish: mov ebp, [60+esp] and ebp, 7 jz NEAR $L031finish xor ecx, ecx xor edx, edx mov ebp, [$L032cbc_enc_jmp_table+ebp*4] jmp ebpL033ej7: mov dh, [6+esi] shl edx, 8L034ej6: mov dh, [5+esi]L035ej5: mov dl, [4+esi]L036ej4: mov ecx, [esi] jmp $L037ejendL038ej3: mov ch, [2+esi] shl ecx, 8L039ej2: mov ch, [1+esi]L040ej1: mov cl, [esi]$L037ejend: xor eax, ecx xor ebx, edx mov [16+esp], eax mov [20+esp], ebx call _des_encrypt3 mov eax, [16+esp] mov ebx, [20+esp] mov [edi], eax mov [4+edi], ebx jmp $L031finish$L028decrypt: and ebp, 4294967288 mov eax, [24+esp] mov ebx, [28+esp] jz NEAR $L041decrypt_finishL042decrypt_loop: mov eax, [esi] mov ebx, [4+esi] mov [16+esp], eax mov [20+esp], ebx call _des_decrypt3 mov eax, [16+esp] mov ebx, [20+esp] mov ecx, [24+esp] mov edx, [28+esp] xor ecx, eax xor edx, ebx mov eax, [esi] mov ebx, [4+esi] mov [edi], ecx mov [4+edi], edx mov [24+esp], eax mov [28+esp], ebx add esi, 8 add edi, 8 sub ebp, 8 jnz NEAR L042decrypt_loop$L041decrypt_finish: mov ebp, [60+esp] and ebp, 7 jz NEAR $L031finish mov eax, [esi] mov ebx, [4+esi] mov [16+esp], eax mov [20+esp], ebx call _des_decrypt3 mov eax, [16+esp] mov ebx, [20+esp] mov ecx, [24+esp] mov edx, [28+esp] xor ecx, eax xor edx, ebx mov eax, [esi] mov ebx, [4+esi]L043dj7: ror edx, 16 mov [6+edi], dl shr edx, 16L044dj6: mov [5+edi], dhL045dj5: mov [4+edi], dlL046dj4: mov [edi], ecx jmp $L047djendL048dj3: ror ecx, 16 mov [2+edi], cl shl ecx, 16L049dj2: mov [1+esi], chL050dj1: mov [esi], cl$L047djend: jmp $L031finish$L031finish: mov ecx, [76+esp] add esp, 32 mov [ecx], eax mov [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 L033ej7L051cbc_dec_jmp_table: DD 0 DD L050dj1 DD L049dj2 DD L048dj3 DD L046dj4 DD L045dj5 DD L044dj6 DD L043dj7
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -