⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rc2.asm

📁 ASM 多种hash模块,汇编源码 MD2,4,5 SHA 等多种加密算法 还有其他赠送内容
💻 ASM
字号:
; data = 8 (64-bit)
; keylen = 1..128
; 

.686
.model flat,stdcall
option casemap:none

RC2Init proto :DWORD,:DWORD
RC2Encrypt proto :DWORD,:DWORD
RC2Decrypt proto :DWORD,:DWORD

.data
align 4
sBox label byte
db 217,120,249,196, 25,221,181,237, 40,233,253,121, 74,160,216,157
db 198,126, 55,131, 43,118, 83,142, 98, 76,100,136, 68,139,251,162
db  23,154, 89,245,135,179, 79, 19, 97, 69,109,141,  9,129,125, 50
db 189,143, 64,235,134,183,123, 11,240,149, 33, 34, 92,107, 78,130
db  84,214,101,147,206, 96,178, 28,115, 86,192, 20,167,140,241,220
db  18,117,202, 31, 59,190,228,209, 66, 61,212, 48,163, 60,182, 38
db 111,191, 14,218, 70,105,  7, 87, 39,242, 29,155,188,148, 67,  3
db 248, 17,199,246,144,239, 62,231,  6,195,213, 47,200,102, 30,215
db   8,232,234,222,128, 82,238,247,132,170,114,172, 53, 77,106, 42
db 150, 26,210,113, 90, 21, 73,116, 75,159,208, 94,  4, 24,164,236
db 194,224, 65,110, 15, 81,203,204, 36,145,175, 80,161,244,112, 57
db 153,124, 58,133, 35,184,180,122,252,  2, 54, 91, 37, 85,151, 49
db  45, 93,250,152,227,138,146,174,  5,223, 41, 16,103,108,186,201
db 211,  0,230,207,225,158,168, 44, 99, 22,  1, 63, 88,226,137,169
db  13, 56, 52, 27,171, 51,255,176,187, 72, 12, 95,185,177,205, 46
db 197,243,219, 71,229,165,156,119, 10,166, 32,104,254,127,193,173

.data?
align 4
rc2_key db 128 dup(?)
	
.code

align 4
RC2Init proc uses esi edi ebx pKey,dwKeyLen
LOCAL KeyB[128]:byte
	lea edi,KeyB
	xor eax,eax
	mov ecx,128/4
	rep stosd

	mov esi,pKey
	lea edi,KeyB
	mov ecx,dwKeyLen
	rep movsb
	
	mov ecx,dwKeyLen
	.while ecx<128
		mov edx,ecx
		sub edx,dwKeyLen
		movzx eax,KeyB[edx]
		lea edx,[ecx-1]
		movzx edx,KeyB[edx]
		add edx,eax
		and edx,0ffh
		mov al,[sBox+edx]
		mov KeyB[ecx],al
		inc ecx
	.endw
	movzx edx,KeyB[0]
	mov al,[sBox+edx]
	mov KeyB[0],al
	lea esi,KeyB
	lea edi,rc2_key
	mov ecx,128/4
	rep movsd
	ret
RC2Init endp

RC2RE macro r0,r1,r2,r3,ki,rot
	mov ebx,R[r2*4]
	mov ecx,R[r3*4]
	mov eax,R[r1*4]
	and ebx,ecx
	movzx edx,word ptr [rc2_key+esi*8+ki*2]
	xor ecx,0FFFFh
	add edx,ebx
	and eax,ecx
	add edx,R[r0*4]
	add edx,eax
	and edx,0FFFFh; cut overflow
	rol dx,rot
	mov R[r0*4],edx
endm

align 4
RC2Encrypt proc uses esi edi ebx pBlockIn:DWORD,pBlockOut:DWORD
	rc2_locals equ 4*4
	R equ dword ptr [esp]
	sub esp,rc2_locals
	mov esi,pBlockIn
	movzx eax,word ptr[esi+0*2]
	movzx ebx,word ptr[esi+1*2]
	movzx ecx,word ptr[esi+2*2]
	movzx edx,word ptr[esi+3*2]
	mov R[0*4],eax
	mov R[1*4],ebx
	mov R[2*4],ecx
	mov R[3*4],edx
	xor esi,esi
@@RC2Enc:
	RC2RE 0,1,2,3, 0, 1
	RC2RE 1,2,3,0, 1, 2
	RC2RE 2,3,0,1, 2, 3
	RC2RE 3,0,1,2, 3, 5
	inc esi
	cmp esi,16
	je @@Break
	cmp esi,5
	je @F
	cmp esi,11
	jne @@RC2Enc
@@:	mov eax,R[3*4]
	and eax,63
	movzx ebx,word ptr rc2_key[eax*2]
	add ebx,R[0*4]
	mov R[0*4],ebx
	and ebx,63
	movzx ecx,word ptr rc2_key[ebx*2]
	add ecx,R[1*4]
	mov R[1*4],ecx
	and ecx,63
	movzx edx,word ptr rc2_key[ecx*2]
	add edx,R[2*4]
	mov R[2*4],edx
	and edx,63
	movzx eax,word ptr rc2_key[edx*2]
	add R[3*4],eax
	jmp @@RC2Enc
@@Break:
	mov edi,pBlockOut
	mov eax,R[0*4]
	mov ebx,R[1*4]
	mov ecx,R[2*4]
	mov edx,R[3*4]
	mov [edi+0*2],ax
	mov [edi+1*2],bx
	mov [edi+2*2],cx
	mov [edi+3*2],dx
	add esp,rc2_locals
	ret
RC2Encrypt endp


RC2RD macro r0,r1,r2,r3,ki,rot
           ; 3, 0, 1, 2, 3  5
	mov edx,R[r0*4]
	mov ecx,R[r3*4]
	ror dx,rot
	mov eax,R[r2*4]
	mov ebx,R[r1*4]
	and eax,ecx
	xor ecx,0FFFFh
	and ebx,ecx
	sub dx,ax
	sub dx,bx
	sub dx,word ptr [rc2_key+esi*8+ki*2]
	mov R[r0*4],edx
endm
	
align 4
RC2Decrypt proc uses esi edi ebx pBlockIn:DWORD,pBlockOut:DWORD
	rc2_locals equ 4*4
	R equ dword ptr [esp]
	sub esp,rc2_locals
	mov esi,pBlockIn
	
	movzx eax,word ptr[esi+0*2]
	movzx ebx,word ptr[esi+1*2]
	movzx ecx,word ptr[esi+2*2]
	movzx edx,word ptr[esi+3*2]
	mov R[0*4],eax
	mov R[1*4],ebx
	mov R[2*4],ecx
	mov R[3*4],edx
	
	mov esi,15
@@RC2Enc:
	RC2RD 3,0,1,2, 3, 5
	RC2RD 2,3,0,1, 2, 3
	RC2RD 1,2,3,0, 1, 2
	RC2RD 0,1,2,3, 0, 1
	dec esi
	js @@Break
	cmp esi,4
	je @F
	cmp esi,10
	jne @@RC2Enc
@@:	mov eax,R[2*4]
	mov ecx,R[3*4]
	and eax,63
	movzx eax,word ptr rc2_key[eax*2]
	sub ecx,eax
	and ecx,0FFFFh
	mov R[3*4],ecx
	mov eax,R[1*4]
	mov ecx,R[2*4]
	and eax,63
	movzx eax,word ptr rc2_key[eax*2]
	sub ecx,eax
	and ecx,0FFFFh
	mov R[2*4],ecx
	mov eax,R[0*4]
	mov ecx,R[1*4]
	and eax,63
	movzx eax,word ptr rc2_key[eax*2]
	sub ecx,eax
	and ecx,0FFFFh
	mov R[1*4],ecx
	mov eax,R[3*4]
	mov ecx,R[0*4]
	and eax,63
	movzx eax,word ptr rc2_key[eax*2]
	sub ecx,eax
	and ecx,0FFFFh
	mov R[0*4],ecx
	jmp @@RC2Enc
@@Break:
	mov edi,pBlockOut
	mov eax,R[0*4]
	mov ebx,R[1*4]
	mov ecx,R[2*4]
	mov edx,R[3*4]
	mov [edi+0*2],ax
	mov [edi+1*2],bx
	mov [edi+2*2],cx
	mov [edi+3*2],dx
	add esp,rc2_locals
	ret
RC2Decrypt endp
	
end
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -