TITLE cast-586.asm IF @Version LT 800 ECHO MASM version 8.00 or later is strongly recommended. ENDIF .586 .MODEL FLAT OPTION DOTNAME IF @Version LT 800 .text$ SEGMENT PAGE 'CODE' ELSE .text$ SEGMENT ALIGN(64) 'CODE' ENDIF EXTERN _CAST_S_table0:NEAR EXTERN _CAST_S_table1:NEAR EXTERN _CAST_S_table2:NEAR EXTERN _CAST_S_table3:NEAR ALIGN 16 _CAST_encrypt PROC PUBLIC $L_CAST_encrypt_begin:: ; 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] ; Get short key flag mov eax,DWORD PTR 128[ebp] push eax 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 ; test short key flag pop edx or edx,edx jnz $L000cast_enc_done ; 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 xor esi,ecx $L000cast_enc_done: nop mov eax,DWORD PTR 20[esp] mov DWORD PTR 4[eax],edi mov DWORD PTR [eax],esi pop edi pop esi pop ebx pop ebp ret _CAST_encrypt ENDP EXTERN _CAST_S_table0:NEAR EXTERN _CAST_S_table1:NEAR EXTERN _CAST_S_table2:NEAR EXTERN _CAST_S_table3:NEAR ALIGN 16 _CAST_decrypt PROC PUBLIC $L_CAST_decrypt_begin:: ; 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] ; Get short key flag mov eax,DWORD PTR 128[ebp] or eax,eax jnz $L001cast_dec_skip 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 $L001cast_dec_skip: ; 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 xor esi,ecx nop mov eax,DWORD PTR 20[esp] mov DWORD PTR 4[eax],edi mov DWORD PTR [eax],esi pop edi pop esi pop ebx pop ebp ret _CAST_decrypt ENDP ALIGN 16 _CAST_cbc_encrypt PROC PUBLIC $L_CAST_cbc_encrypt_begin:: ; 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 $L002decrypt and ebp,4294967288 mov eax,DWORD PTR 8[esp] mov ebx,DWORD PTR 12[esp] jz $L003encrypt_finish $L004encrypt_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 $L_CAST_encrypt_begin 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 $L004encrypt_loop $L003encrypt_finish: mov ebp,DWORD PTR 52[esp] and ebp,7 jz $L005finish call $L006PIC_point $L006PIC_point: pop edx lea ecx,DWORD PTR ($L007cbc_enc_jmp_table-$L006PIC_point)[edx] mov ebp,DWORD PTR [ebp*4+ecx] add ebp,edx xor ecx,ecx xor edx,edx jmp ebp $L008ej7: mov dh,BYTE PTR 6[esi] shl edx,8 $L009ej6: mov dh,BYTE PTR 5[esi] $L010ej5: mov dl,BYTE PTR 4[esi] $L011ej4: mov ecx,DWORD PTR [esi] jmp $L012ejend $L013ej3: mov ch,BYTE PTR 2[esi] shl ecx,8 $L014ej2: mov ch,BYTE PTR 1[esi] $L015ej1: mov cl,BYTE PTR [esi] $L012ejend: xor eax,ecx xor ebx,edx bswap eax bswap ebx mov DWORD PTR 8[esp],eax mov DWORD PTR 12[esp],ebx call $L_CAST_encrypt_begin 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 $L005finish $L002decrypt: and ebp,4294967288 mov eax,DWORD PTR 16[esp] mov ebx,DWORD PTR 20[esp] jz $L016decrypt_finish $L017decrypt_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 $L_CAST_decrypt_begin 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 $L017decrypt_loop $L016decrypt_finish: mov ebp,DWORD PTR 52[esp] and ebp,7 jz $L005finish 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 $L_CAST_decrypt_begin 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] $L018dj7: ror edx,16 mov BYTE PTR 6[edi],dl shr edx,16 $L019dj6: mov BYTE PTR 5[edi],dh $L020dj5: mov BYTE PTR 4[edi],dl $L021dj4: mov DWORD PTR [edi],ecx jmp $L022djend $L023dj3: ror ecx,16 mov BYTE PTR 2[edi],cl shl ecx,16 $L024dj2: mov BYTE PTR 1[esi],ch $L025dj1: mov BYTE PTR [esi],cl $L022djend: jmp $L005finish $L005finish: 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 ALIGN 64 $L007cbc_enc_jmp_table: DD 0 DD $L015ej1-$L006PIC_point DD $L014ej2-$L006PIC_point DD $L013ej3-$L006PIC_point DD $L011ej4-$L006PIC_point DD $L010ej5-$L006PIC_point DD $L009ej6-$L006PIC_point DD $L008ej7-$L006PIC_point ALIGN 64 _CAST_cbc_encrypt ENDP .text$ ENDS END