; Don't even think of reading this code ; It was automatically generated by cast-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 cast-586.asm .486 .model FLAT _TEXT SEGMENT PUBLIC _CAST_encrypt EXTERN _CAST_S_table0:DWORD EXTERN _CAST_S_table1:DWORD EXTERN _CAST_S_table2:DWORD EXTERN _CAST_S_table3:DWORD _CAST_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 ; round 0 mov edx, DWORD PTR [ebp] mov ecx, DWORD PTR 4[ebp] add edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] xor ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] sub ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] add ecx, ebx xor edi, ecx ; round 1 mov edx, DWORD PTR 8[ebp] mov ecx, DWORD PTR 12[ebp] xor edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] sub ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] add ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] xor ecx, ebx xor esi, ecx ; round 2 mov edx, DWORD PTR 16[ebp] mov ecx, DWORD PTR 20[ebp] sub edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] add ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] xor ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] sub ecx, ebx xor edi, ecx ; round 3 mov edx, DWORD PTR 24[ebp] mov ecx, DWORD PTR 28[ebp] add edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] xor ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] sub ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] add ecx, ebx xor esi, ecx ; round 4 mov edx, DWORD PTR 32[ebp] mov ecx, DWORD PTR 36[ebp] xor edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] sub ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] add ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] xor ecx, ebx xor edi, ecx ; round 5 mov edx, DWORD PTR 40[ebp] mov ecx, DWORD PTR 44[ebp] sub edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] add ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] xor ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] sub ecx, ebx xor esi, ecx ; round 6 mov edx, DWORD PTR 48[ebp] mov ecx, DWORD PTR 52[ebp] add edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] xor ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] sub ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] add ecx, ebx xor edi, ecx ; round 7 mov edx, DWORD PTR 56[ebp] mov ecx, DWORD PTR 60[ebp] xor edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] sub ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] add ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] xor ecx, ebx xor esi, ecx ; round 8 mov edx, DWORD PTR 64[ebp] mov ecx, DWORD PTR 68[ebp] sub edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] add ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] xor ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] sub ecx, ebx xor edi, ecx ; round 9 mov edx, DWORD PTR 72[ebp] mov ecx, DWORD PTR 76[ebp] add edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] xor ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] sub ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] add ecx, ebx xor esi, ecx ; round 10 mov edx, DWORD PTR 80[ebp] mov ecx, DWORD PTR 84[ebp] xor edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] sub ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] add ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] xor ecx, ebx xor edi, ecx ; round 11 mov edx, DWORD PTR 88[ebp] mov ecx, DWORD PTR 92[ebp] sub edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] add ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] xor ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] sub ecx, ebx xor esi, ecx ; round 12 mov edx, DWORD PTR 96[ebp] mov ecx, DWORD PTR 100[ebp] add edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] xor ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] sub ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] add ecx, ebx xor edi, ecx ; round 13 mov edx, DWORD PTR 104[ebp] mov ecx, DWORD PTR 108[ebp] xor edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] sub ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] add ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] xor ecx, ebx xor esi, ecx ; round 14 mov edx, DWORD PTR 112[ebp] mov ecx, DWORD PTR 116[ebp] sub edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] add ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] xor ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] sub ecx, ebx xor edi, ecx ; round 15 mov edx, DWORD PTR 120[ebp] mov ecx, DWORD PTR 124[ebp] add edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] xor ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] sub ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] add ecx, ebx mov eax, DWORD PTR 20[esp] xor esi, ecx nop mov DWORD PTR 4[eax],edi mov DWORD PTR [eax],esi pop edi pop esi pop ebx pop ebp ret _CAST_encrypt ENDP _TEXT ENDS _TEXT SEGMENT PUBLIC _CAST_decrypt EXTERN _CAST_S_table0:DWORD EXTERN _CAST_S_table1:DWORD EXTERN _CAST_S_table2:DWORD EXTERN _CAST_S_table3:DWORD _CAST_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 ; round 15 mov edx, DWORD PTR 120[ebp] mov ecx, DWORD PTR 124[ebp] add edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] xor ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] sub ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] add ecx, ebx xor edi, ecx ; round 14 mov edx, DWORD PTR 112[ebp] mov ecx, DWORD PTR 116[ebp] sub edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] add ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] xor ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] sub ecx, ebx xor esi, ecx ; round 13 mov edx, DWORD PTR 104[ebp] mov ecx, DWORD PTR 108[ebp] xor edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] sub ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] add ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] xor ecx, ebx xor edi, ecx ; round 12 mov edx, DWORD PTR 96[ebp] mov ecx, DWORD PTR 100[ebp] add edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] xor ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] sub ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] add ecx, ebx xor esi, ecx ; round 11 mov edx, DWORD PTR 88[ebp] mov ecx, DWORD PTR 92[ebp] sub edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] add ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] xor ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] sub ecx, ebx xor edi, ecx ; round 10 mov edx, DWORD PTR 80[ebp] mov ecx, DWORD PTR 84[ebp] xor edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] sub ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] add ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] xor ecx, ebx xor esi, ecx ; round 9 mov edx, DWORD PTR 72[ebp] mov ecx, DWORD PTR 76[ebp] add edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] xor ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] sub ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] add ecx, ebx xor edi, ecx ; round 8 mov edx, DWORD PTR 64[ebp] mov ecx, DWORD PTR 68[ebp] sub edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] add ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] xor ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] sub ecx, ebx xor esi, ecx ; round 7 mov edx, DWORD PTR 56[ebp] mov ecx, DWORD PTR 60[ebp] xor edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] sub ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] add ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] xor ecx, ebx xor edi, ecx ; round 6 mov edx, DWORD PTR 48[ebp] mov ecx, DWORD PTR 52[ebp] add edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] xor ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] sub ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] add ecx, ebx xor esi, ecx ; round 5 mov edx, DWORD PTR 40[ebp] mov ecx, DWORD PTR 44[ebp] sub edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] add ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] xor ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] sub ecx, ebx xor edi, ecx ; round 4 mov edx, DWORD PTR 32[ebp] mov ecx, DWORD PTR 36[ebp] xor edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] sub ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] add ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] xor ecx, ebx xor esi, ecx ; round 3 mov edx, DWORD PTR 24[ebp] mov ecx, DWORD PTR 28[ebp] add edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] xor ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] sub ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] add ecx, ebx xor edi, ecx ; round 2 mov edx, DWORD PTR 16[ebp] mov ecx, DWORD PTR 20[ebp] sub edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] add ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] xor ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] sub ecx, ebx xor esi, ecx ; round 1 mov edx, DWORD PTR 8[ebp] mov ecx, DWORD PTR 12[ebp] xor edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] sub ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] add ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] xor ecx, ebx xor edi, ecx ; round 0 mov edx, DWORD PTR [ebp] mov ecx, DWORD PTR 4[ebp] add edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4] mov ebx, DWORD PTR _CAST_S_table1[ebx*4] xor ecx, ebx mov ebx, DWORD PTR _CAST_S_table2[eax*4] sub ecx, ebx mov ebx, DWORD PTR _CAST_S_table3[edx*4] add ecx, ebx mov eax, DWORD PTR 20[esp] xor esi, ecx nop mov DWORD PTR 4[eax],edi mov DWORD PTR [eax],esi pop edi pop esi pop ebx pop ebp ret _CAST_decrypt ENDP _TEXT ENDS _TEXT SEGMENT PUBLIC _CAST_cbc_encrypt _CAST_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 _CAST_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: xor edx, edx 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] xor ecx, ecx 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 _CAST_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 _CAST_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 _CAST_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 _CAST_cbc_encrypt ENDP _TEXT ENDS END