; Don't even think of reading this code ; It was automatically generated by bf-586.pl ; Which is a perl program used to generate the x86 assember for ; any of elf, a.out, BSDI,Win32, or Solaris ; eric ; TITLE bf-586.asm .486 .model FLAT _TEXT SEGMENT PUBLIC _BF_encrypt _BF_encrypt PROC NEAR ; push ebp push ebx mov ebx, DWORD PTR 12[esp] mov ebp, DWORD PTR 16[esp] push esi push edi ; Load the 2 words mov edi, DWORD PTR [ebx] mov esi, DWORD PTR 4[ebx] xor eax, eax mov ebx, DWORD PTR [ebp] xor ecx, ecx xor edi, ebx ; ; Round 0 mov edx, DWORD PTR 4[ebp] mov ebx, edi xor esi, edx shr ebx, 16 mov edx, edi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor esi, ebx ; ; Round 1 mov edx, DWORD PTR 8[ebp] mov ebx, esi xor edi, edx shr ebx, 16 mov edx, esi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor edi, ebx ; ; Round 2 mov edx, DWORD PTR 12[ebp] mov ebx, edi xor esi, edx shr ebx, 16 mov edx, edi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor esi, ebx ; ; Round 3 mov edx, DWORD PTR 16[ebp] mov ebx, esi xor edi, edx shr ebx, 16 mov edx, esi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor edi, ebx ; ; Round 4 mov edx, DWORD PTR 20[ebp] mov ebx, edi xor esi, edx shr ebx, 16 mov edx, edi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor esi, ebx ; ; Round 5 mov edx, DWORD PTR 24[ebp] mov ebx, esi xor edi, edx shr ebx, 16 mov edx, esi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor edi, ebx ; ; Round 6 mov edx, DWORD PTR 28[ebp] mov ebx, edi xor esi, edx shr ebx, 16 mov edx, edi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor esi, ebx ; ; Round 7 mov edx, DWORD PTR 32[ebp] mov ebx, esi xor edi, edx shr ebx, 16 mov edx, esi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor edi, ebx ; ; Round 8 mov edx, DWORD PTR 36[ebp] mov ebx, edi xor esi, edx shr ebx, 16 mov edx, edi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor esi, ebx ; ; Round 9 mov edx, DWORD PTR 40[ebp] mov ebx, esi xor edi, edx shr ebx, 16 mov edx, esi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor edi, ebx ; ; Round 10 mov edx, DWORD PTR 44[ebp] mov ebx, edi xor esi, edx shr ebx, 16 mov edx, edi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor esi, ebx ; ; Round 11 mov edx, DWORD PTR 48[ebp] mov ebx, esi xor edi, edx shr ebx, 16 mov edx, esi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor edi, ebx ; ; Round 12 mov edx, DWORD PTR 52[ebp] mov ebx, edi xor esi, edx shr ebx, 16 mov edx, edi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor esi, ebx ; ; Round 13 mov edx, DWORD PTR 56[ebp] mov ebx, esi xor edi, edx shr ebx, 16 mov edx, esi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor edi, ebx ; ; Round 14 mov edx, DWORD PTR 60[ebp] mov ebx, edi xor esi, edx shr ebx, 16 mov edx, edi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor esi, ebx ; ; Round 15 mov edx, DWORD PTR 64[ebp] mov ebx, esi xor edi, edx shr ebx, 16 mov edx, esi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx ; Load parameter 0 (16) enc=1 mov eax, DWORD PTR 20[esp] xor edi, ebx mov edx, DWORD PTR 68[ebp] xor esi, edx mov DWORD PTR 4[eax],edi mov DWORD PTR [eax],esi pop edi pop esi pop ebx pop ebp ret _BF_encrypt ENDP _TEXT ENDS _TEXT SEGMENT PUBLIC _BF_decrypt _BF_decrypt PROC NEAR ; push ebp push ebx mov ebx, DWORD PTR 12[esp] mov ebp, DWORD PTR 16[esp] push esi push edi ; Load the 2 words mov edi, DWORD PTR [ebx] mov esi, DWORD PTR 4[ebx] xor eax, eax mov ebx, DWORD PTR 68[ebp] xor ecx, ecx xor edi, ebx ; ; Round 16 mov edx, DWORD PTR 64[ebp] mov ebx, edi xor esi, edx shr ebx, 16 mov edx, edi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor esi, ebx ; ; Round 15 mov edx, DWORD PTR 60[ebp] mov ebx, esi xor edi, edx shr ebx, 16 mov edx, esi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor edi, ebx ; ; Round 14 mov edx, DWORD PTR 56[ebp] mov ebx, edi xor esi, edx shr ebx, 16 mov edx, edi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor esi, ebx ; ; Round 13 mov edx, DWORD PTR 52[ebp] mov ebx, esi xor edi, edx shr ebx, 16 mov edx, esi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor edi, ebx ; ; Round 12 mov edx, DWORD PTR 48[ebp] mov ebx, edi xor esi, edx shr ebx, 16 mov edx, edi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor esi, ebx ; ; Round 11 mov edx, DWORD PTR 44[ebp] mov ebx, esi xor edi, edx shr ebx, 16 mov edx, esi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor edi, ebx ; ; Round 10 mov edx, DWORD PTR 40[ebp] mov ebx, edi xor esi, edx shr ebx, 16 mov edx, edi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor esi, ebx ; ; Round 9 mov edx, DWORD PTR 36[ebp] mov ebx, esi xor edi, edx shr ebx, 16 mov edx, esi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor edi, ebx ; ; Round 8 mov edx, DWORD PTR 32[ebp] mov ebx, edi xor esi, edx shr ebx, 16 mov edx, edi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor esi, ebx ; ; Round 7 mov edx, DWORD PTR 28[ebp] mov ebx, esi xor edi, edx shr ebx, 16 mov edx, esi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor edi, ebx ; ; Round 6 mov edx, DWORD PTR 24[ebp] mov ebx, edi xor esi, edx shr ebx, 16 mov edx, edi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor esi, ebx ; ; Round 5 mov edx, DWORD PTR 20[ebp] mov ebx, esi xor edi, edx shr ebx, 16 mov edx, esi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor edi, ebx ; ; Round 4 mov edx, DWORD PTR 16[ebp] mov ebx, edi xor esi, edx shr ebx, 16 mov edx, edi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor esi, ebx ; ; Round 3 mov edx, DWORD PTR 12[ebp] mov ebx, esi xor edi, edx shr ebx, 16 mov edx, esi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor edi, ebx ; ; Round 2 mov edx, DWORD PTR 8[ebp] mov ebx, edi xor esi, edx shr ebx, 16 mov edx, edi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx xor eax, eax xor esi, ebx ; ; Round 1 mov edx, DWORD PTR 4[ebp] mov ebx, esi xor edi, edx shr ebx, 16 mov edx, esi mov al, bh and ebx, 255 mov cl, dh and edx, 255 mov eax, DWORD PTR 72[eax*4+ebp] mov ebx, DWORD PTR 1096[ebx*4+ebp] add ebx, eax mov eax, DWORD PTR 2120[ecx*4+ebp] xor ebx, eax mov edx, DWORD PTR 3144[edx*4+ebp] add ebx, edx ; Load parameter 0 (1) enc=0 mov eax, DWORD PTR 20[esp] xor edi, ebx mov edx, DWORD PTR [ebp] xor esi, edx mov DWORD PTR 4[eax],edi mov DWORD PTR [eax],esi pop edi pop esi pop ebx pop ebp ret _BF_decrypt ENDP _TEXT ENDS _TEXT SEGMENT PUBLIC _BF_cbc_encrypt _BF_cbc_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 3 mov eax, DWORD PTR 48[esp] push eax push ebx cmp ecx, 0 jz $L000decrypt and ebp, 4294967288 mov eax, DWORD PTR 8[esp] mov ebx, DWORD PTR 12[esp] jz $L001encrypt_finish L002encrypt_loop: mov ecx, DWORD PTR [esi] mov edx, DWORD PTR 4[esi] xor eax, ecx xor ebx, edx bswap eax bswap ebx mov DWORD PTR 8[esp],eax mov DWORD PTR 12[esp],ebx call _BF_encrypt mov eax, DWORD PTR 8[esp] mov ebx, DWORD PTR 12[esp] bswap eax bswap ebx mov DWORD PTR [edi],eax mov DWORD PTR 4[edi],ebx add esi, 8 add edi, 8 sub ebp, 8 jnz L002encrypt_loop $L001encrypt_finish: mov ebp, DWORD PTR 52[esp] and ebp, 7 jz $L003finish xor ecx, ecx xor edx, edx mov ebp, DWORD PTR $L004cbc_enc_jmp_table[ebp*4] jmp ebp L005ej7: mov dh, BYTE PTR 6[esi] shl edx, 8 L006ej6: mov dh, BYTE PTR 5[esi] L007ej5: mov dl, BYTE PTR 4[esi] L008ej4: mov ecx, DWORD PTR [esi] jmp $L009ejend L010ej3: mov ch, BYTE PTR 2[esi] shl ecx, 8 L011ej2: mov ch, BYTE PTR 1[esi] L012ej1: mov cl, BYTE PTR [esi] $L009ejend: xor eax, ecx xor ebx, edx bswap eax bswap ebx mov DWORD PTR 8[esp],eax mov DWORD PTR 12[esp],ebx call _BF_encrypt mov eax, DWORD PTR 8[esp] mov ebx, DWORD PTR 12[esp] bswap eax bswap ebx mov DWORD PTR [edi],eax mov DWORD PTR 4[edi],ebx jmp $L003finish $L000decrypt: and ebp, 4294967288 mov eax, DWORD PTR 16[esp] mov ebx, DWORD PTR 20[esp] jz $L013decrypt_finish L014decrypt_loop: mov eax, DWORD PTR [esi] mov ebx, DWORD PTR 4[esi] bswap eax bswap ebx mov DWORD PTR 8[esp],eax mov DWORD PTR 12[esp],ebx call _BF_decrypt mov eax, DWORD PTR 8[esp] mov ebx, DWORD PTR 12[esp] bswap eax bswap ebx mov ecx, DWORD PTR 16[esp] mov edx, DWORD PTR 20[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 16[esp],eax mov DWORD PTR 20[esp],ebx add esi, 8 add edi, 8 sub ebp, 8 jnz L014decrypt_loop $L013decrypt_finish: mov ebp, DWORD PTR 52[esp] and ebp, 7 jz $L003finish mov eax, DWORD PTR [esi] mov ebx, DWORD PTR 4[esi] bswap eax bswap ebx mov DWORD PTR 8[esp],eax mov DWORD PTR 12[esp],ebx call _BF_decrypt mov eax, DWORD PTR 8[esp] mov ebx, DWORD PTR 12[esp] bswap eax bswap ebx mov ecx, DWORD PTR 16[esp] mov edx, DWORD PTR 20[esp] xor ecx, eax xor edx, ebx mov eax, DWORD PTR [esi] mov ebx, DWORD PTR 4[esi] L015dj7: ror edx, 16 mov BYTE PTR 6[edi],dl shr edx, 16 L016dj6: mov BYTE PTR 5[edi],dh L017dj5: mov BYTE PTR 4[edi],dl L018dj4: mov DWORD PTR [edi],ecx jmp $L019djend L020dj3: ror ecx, 16 mov BYTE PTR 2[edi],cl shl ecx, 16 L021dj2: mov BYTE PTR 1[esi],ch L022dj1: mov BYTE PTR [esi], cl $L019djend: jmp $L003finish $L003finish: mov ecx, DWORD PTR 60[esp] add esp, 24 mov DWORD PTR [ecx],eax mov DWORD PTR 4[ecx],ebx pop edi pop esi pop ebx pop ebp ret $L004cbc_enc_jmp_table: DD 0 DD L012ej1 DD L011ej2 DD L010ej3 DD L008ej4 DD L007ej5 DD L006ej6 DD L005ej7 L023cbc_dec_jmp_table: DD 0 DD L022dj1 DD L021dj2 DD L020dj3 DD L018dj4 DD L017dj5 DD L016dj6 DD L015dj7 _BF_cbc_encrypt ENDP _TEXT ENDS END