- ; Don't even think of reading this code\r
- ; It was automatically generated by bf586.pl\r
- ; Which is a perl program used to generate the x86 assember for\r
- ; any of elf, a.out, Win32, or Solaris\r
- ; It can be found in SSLeay 0.7.0+\r
- ; eric <eay@cryptsoft.com>\r
- ; \r
- TITLE bfx86xxxx.asm\r
- .386\r
-.model FLAT\r
-_TEXT SEGMENT\r
-PUBLIC _BF_encrypt\r
-_BF_encrypt PROC NEAR\r
- push ebp\r
- push ebx\r
- push esi\r
- push edi\r
- ; \r
- ; Load the 2 words\r
- mov eax, DWORD PTR 20[esp]\r
- mov ecx, DWORD PTR [eax]\r
- mov edx, DWORD PTR 4[eax]\r
- ; \r
- ; P pointer, s and enc flag\r
- mov edi, DWORD PTR 24[esp]\r
- xor eax, eax\r
- xor ebx, ebx\r
- mov ebp, DWORD PTR 28[esp]\r
- cmp ebp, 0\r
- je $L000start_decrypt\r
- xor ecx, DWORD PTR [edi]\r
- ; \r
- ; Round 0\r
- ror ecx, 16\r
- mov esi, DWORD PTR 4[edi]\r
- mov al, ch\r
- mov bl, cl\r
- ror ecx, 16\r
- xor edx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, ch\r
- mov bl, cl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor edx, esi\r
- ; \r
- ; Round 1\r
- ror edx, 16\r
- mov esi, DWORD PTR 8[edi]\r
- mov al, dh\r
- mov bl, dl\r
- ror edx, 16\r
- xor ecx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, dh\r
- mov bl, dl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor ecx, esi\r
- ; \r
- ; Round 2\r
- ror ecx, 16\r
- mov esi, DWORD PTR 12[edi]\r
- mov al, ch\r
- mov bl, cl\r
- ror ecx, 16\r
- xor edx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, ch\r
- mov bl, cl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor edx, esi\r
- ; \r
- ; Round 3\r
- ror edx, 16\r
- mov esi, DWORD PTR 16[edi]\r
- mov al, dh\r
- mov bl, dl\r
- ror edx, 16\r
- xor ecx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, dh\r
- mov bl, dl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor ecx, esi\r
- ; \r
- ; Round 4\r
- ror ecx, 16\r
- mov esi, DWORD PTR 20[edi]\r
- mov al, ch\r
- mov bl, cl\r
- ror ecx, 16\r
- xor edx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, ch\r
- mov bl, cl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor edx, esi\r
- ; \r
- ; Round 5\r
- ror edx, 16\r
- mov esi, DWORD PTR 24[edi]\r
- mov al, dh\r
- mov bl, dl\r
- ror edx, 16\r
- xor ecx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, dh\r
- mov bl, dl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor ecx, esi\r
- ; \r
- ; Round 6\r
- ror ecx, 16\r
- mov esi, DWORD PTR 28[edi]\r
- mov al, ch\r
- mov bl, cl\r
- ror ecx, 16\r
- xor edx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, ch\r
- mov bl, cl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor edx, esi\r
- ; \r
- ; Round 7\r
- ror edx, 16\r
- mov esi, DWORD PTR 32[edi]\r
- mov al, dh\r
- mov bl, dl\r
- ror edx, 16\r
- xor ecx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, dh\r
- mov bl, dl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor ecx, esi\r
- ; \r
- ; Round 8\r
- ror ecx, 16\r
- mov esi, DWORD PTR 36[edi]\r
- mov al, ch\r
- mov bl, cl\r
- ror ecx, 16\r
- xor edx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, ch\r
- mov bl, cl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor edx, esi\r
- ; \r
- ; Round 9\r
- ror edx, 16\r
- mov esi, DWORD PTR 40[edi]\r
- mov al, dh\r
- mov bl, dl\r
- ror edx, 16\r
- xor ecx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, dh\r
- mov bl, dl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor ecx, esi\r
- ; \r
- ; Round 10\r
- ror ecx, 16\r
- mov esi, DWORD PTR 44[edi]\r
- mov al, ch\r
- mov bl, cl\r
- ror ecx, 16\r
- xor edx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, ch\r
- mov bl, cl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor edx, esi\r
- ; \r
- ; Round 11\r
- ror edx, 16\r
- mov esi, DWORD PTR 48[edi]\r
- mov al, dh\r
- mov bl, dl\r
- ror edx, 16\r
- xor ecx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, dh\r
- mov bl, dl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor ecx, esi\r
- ; \r
- ; Round 12\r
- ror ecx, 16\r
- mov esi, DWORD PTR 52[edi]\r
- mov al, ch\r
- mov bl, cl\r
- ror ecx, 16\r
- xor edx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, ch\r
- mov bl, cl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor edx, esi\r
- ; \r
- ; Round 13\r
- ror edx, 16\r
- mov esi, DWORD PTR 56[edi]\r
- mov al, dh\r
- mov bl, dl\r
- ror edx, 16\r
- xor ecx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, dh\r
- mov bl, dl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor ecx, esi\r
- ; \r
- ; Round 14\r
- ror ecx, 16\r
- mov esi, DWORD PTR 60[edi]\r
- mov al, ch\r
- mov bl, cl\r
- ror ecx, 16\r
- xor edx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, ch\r
- mov bl, cl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor edx, esi\r
- ; \r
- ; Round 15\r
- ror edx, 16\r
- mov esi, DWORD PTR 64[edi]\r
- mov al, dh\r
- mov bl, dl\r
- ror edx, 16\r
- xor ecx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, dh\r
- mov bl, dl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor ecx, esi\r
- xor edx, DWORD PTR 68[edi]\r
- mov eax, DWORD PTR 20[esp]\r
- mov DWORD PTR [eax],edx\r
- mov DWORD PTR 4[eax],ecx\r
- pop edi\r
- pop esi\r
- pop ebx\r
- pop ebp\r
- ret\r
-$L000start_decrypt:\r
- xor ecx, DWORD PTR 68[edi]\r
- ; \r
- ; Round 16\r
- ror ecx, 16\r
- mov esi, DWORD PTR 64[edi]\r
- mov al, ch\r
- mov bl, cl\r
- ror ecx, 16\r
- xor edx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, ch\r
- mov bl, cl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor edx, esi\r
- ; \r
- ; Round 15\r
- ror edx, 16\r
- mov esi, DWORD PTR 60[edi]\r
- mov al, dh\r
- mov bl, dl\r
- ror edx, 16\r
- xor ecx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, dh\r
- mov bl, dl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor ecx, esi\r
- ; \r
- ; Round 14\r
- ror ecx, 16\r
- mov esi, DWORD PTR 56[edi]\r
- mov al, ch\r
- mov bl, cl\r
- ror ecx, 16\r
- xor edx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, ch\r
- mov bl, cl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor edx, esi\r
- ; \r
- ; Round 13\r
- ror edx, 16\r
- mov esi, DWORD PTR 52[edi]\r
- mov al, dh\r
- mov bl, dl\r
- ror edx, 16\r
- xor ecx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, dh\r
- mov bl, dl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor ecx, esi\r
- ; \r
- ; Round 12\r
- ror ecx, 16\r
- mov esi, DWORD PTR 48[edi]\r
- mov al, ch\r
- mov bl, cl\r
- ror ecx, 16\r
- xor edx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, ch\r
- mov bl, cl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor edx, esi\r
- ; \r
- ; Round 11\r
- ror edx, 16\r
- mov esi, DWORD PTR 44[edi]\r
- mov al, dh\r
- mov bl, dl\r
- ror edx, 16\r
- xor ecx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, dh\r
- mov bl, dl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor ecx, esi\r
- ; \r
- ; Round 10\r
- ror ecx, 16\r
- mov esi, DWORD PTR 40[edi]\r
- mov al, ch\r
- mov bl, cl\r
- ror ecx, 16\r
- xor edx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, ch\r
- mov bl, cl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor edx, esi\r
- ; \r
- ; Round 9\r
- ror edx, 16\r
- mov esi, DWORD PTR 36[edi]\r
- mov al, dh\r
- mov bl, dl\r
- ror edx, 16\r
- xor ecx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, dh\r
- mov bl, dl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor ecx, esi\r
- ; \r
- ; Round 8\r
- ror ecx, 16\r
- mov esi, DWORD PTR 32[edi]\r
- mov al, ch\r
- mov bl, cl\r
- ror ecx, 16\r
- xor edx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, ch\r
- mov bl, cl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor edx, esi\r
- ; \r
- ; Round 7\r
- ror edx, 16\r
- mov esi, DWORD PTR 28[edi]\r
- mov al, dh\r
- mov bl, dl\r
- ror edx, 16\r
- xor ecx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, dh\r
- mov bl, dl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor ecx, esi\r
- ; \r
- ; Round 6\r
- ror ecx, 16\r
- mov esi, DWORD PTR 24[edi]\r
- mov al, ch\r
- mov bl, cl\r
- ror ecx, 16\r
- xor edx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, ch\r
- mov bl, cl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor edx, esi\r
- ; \r
- ; Round 5\r
- ror edx, 16\r
- mov esi, DWORD PTR 20[edi]\r
- mov al, dh\r
- mov bl, dl\r
- ror edx, 16\r
- xor ecx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, dh\r
- mov bl, dl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor ecx, esi\r
- ; \r
- ; Round 4\r
- ror ecx, 16\r
- mov esi, DWORD PTR 16[edi]\r
- mov al, ch\r
- mov bl, cl\r
- ror ecx, 16\r
- xor edx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, ch\r
- mov bl, cl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor edx, esi\r
- ; \r
- ; Round 3\r
- ror edx, 16\r
- mov esi, DWORD PTR 12[edi]\r
- mov al, dh\r
- mov bl, dl\r
- ror edx, 16\r
- xor ecx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, dh\r
- mov bl, dl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor ecx, esi\r
- ; \r
- ; Round 2\r
- ror ecx, 16\r
- mov esi, DWORD PTR 8[edi]\r
- mov al, ch\r
- mov bl, cl\r
- ror ecx, 16\r
- xor edx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, ch\r
- mov bl, cl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor edx, esi\r
- ; \r
- ; Round 1\r
- ror edx, 16\r
- mov esi, DWORD PTR 4[edi]\r
- mov al, dh\r
- mov bl, dl\r
- ror edx, 16\r
- xor ecx, esi\r
- mov esi, DWORD PTR 72[eax*4+edi]\r
- mov ebp, DWORD PTR 1096[ebx*4+edi]\r
- mov al, dh\r
- mov bl, dl\r
- add esi, ebp\r
- mov eax, DWORD PTR 2120[eax*4+edi]\r
- xor esi, eax\r
- mov ebp, DWORD PTR 3144[ebx*4+edi]\r
- add esi, ebp\r
- xor eax, eax\r
- xor ecx, esi\r
- xor edx, DWORD PTR [edi]\r
- mov eax, DWORD PTR 20[esp]\r
- mov DWORD PTR [eax],edx\r
- mov DWORD PTR 4[eax],ecx\r
- pop edi\r
- pop esi\r
- pop ebx\r
- pop ebp\r
- ret\r
-_BF_encrypt ENDP\r
-_TEXT ENDS\r
-END\r
+ ; 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 <eay@cryptsoft.com>
+ ;
+ 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