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

📄 mars.inc

📁 IA-32汇编原代码,mars算法.相比于c/c++写的原代码,效率更高
💻 INC
📖 第 1 页 / 共 2 页
字号:

.code

mars_setkey	proc	ptrInkey:DWORD, ptrInkey_length:DWORD

		pushad
		mov	ebp,ptrInkey_length
		shl	ebp,3			; ptrInkey_length*8
		shr	ebp,5
		mov	[vk+46*4],ebp		; key_len/32
		lea	ebp,[ebp-1]		; m
		xor	ebx,ebx			; j
		xor	ecx,ecx			; i
		mov	esi,[esp+28h]		; ptrInkey
@_r3:
		mov	eax,[vk+ecx*4]
		xor	eax,[vk+ecx*4+20]
		rol	eax,3
		xor	eax,[esi+ebx*4]
		xor	eax,ecx
		mov	[vk+ecx*4+28],eax
		cmp	ebx,ebp
		jnz	@_r1
		xor	ebx,ebx
		jmp	@_r2
@_r1:
		inc	ebx
@_r2:
		inc	ecx
		cmp	ecx,39
		jl	@_r3	
		xor	ebx,ebx			; j
@_r5:
		mov	ecx,1			; i
@_r4:
		mov	eax,[vk+ecx*4+28]
		mov	edx,[vk+ecx*4+24]
		and	edx,511
		mov	edx,[marssbox+edx*4]
		add	eax,edx
		rol	eax,9
		mov	[vk+ecx*4+28],eax
		inc	ecx
		cmp	ecx,40
		jl	@_r4
		mov	eax,[vk+7*4]
		mov	edx,[vk+46*4]
		and	edx,511
		mov	edx,[marssbox+edx*4]
		add 	eax,edx
		rol	eax,9
		mov	[vk+7*4],eax
		inc	ebx
		cmp	ebx,7
		jl	@_r5
		xor	ebx,ebx			; j
		xor	ecx,ecx			; i
@_r8:
		mov	eax,[vk+ecx*4+28]
		mov	[l_key+ebx*4],eax
		cmp	ebx,33
		jl	@_r6
		sub	ebx,33
		jmp	@_r7
@_r6:
		add	ebx,7
@_r7:
		inc	ecx
		cmp	ecx,40
		jl	@_r8
		
		mov	edi,5			; i
@_r10:
		mov	esi,[l_key+edi*4]
		or	esi,3
		invoke	gen_mask,esi
		test	eax,eax
		jz	@_r9
		mov	edx,eax			; m
		mov	ebx,[l_key+edi*4]
		and	ebx,3
		mov	eax,[marssbox+265*4+ebx*4]
		mov	ecx,[l_key+edi*4+12]
		and	ecx,31
		rol	eax,cl
		and	eax,edx
		xor	esi,eax
@_r9:
		mov	[l_key+edi*4],esi
		add	edi,2
		cmp	edi,37*2
		jl	@_r10	
		popad
		ret
		
mars_setkey	endp

gen_mask	proc	x:DWORD

		mov	ebx,esi
		shr	ebx,1
		not	eax
		mov	edx,eax			; ~x
		xor	eax,ebx
		and	eax,7FFFFFFFh		; m
		mov	ebx,eax
		mov	ecx,ebx
		shr	eax,1
		shr	ebx,2
		and	eax,ebx
		and	ecx,eax
		mov	eax,ecx
		mov	ebx,eax
		shr	eax,3
		shr	ebx,6
		and	eax,ebx
		and	eax,ecx			; m
		jnz	@_r1
		xor	eax,eax
		ret
@_r1:
		shl	eax,1
		mov	ebx,eax
		shl	eax,1
		or	ebx,eax
		mov	ecx,ebx
		shl	ebx,2
		or	ecx,ebx
		mov	eax,ecx
		shl	ecx,4
		or	eax,ecx
		mov	ebx,eax
		shl	eax,1
		and	eax,edx
		and	eax,80000000h
		or	eax,ebx
		and	eax,0fffffffch
		ret

gen_mask	endp

mars_encrypt	proc	ptrIndata:DWORD, ptrOutdata:DWORD

		pushad
		mov	esi,[esp+28h]		; ptrIndata
		mov	eax,[esi]
		mov	ebx,[esi+4]
		mov	ecx,[esi+8]
		mov	edx,[esi+12]
		add	eax,[l_key]
		add	ebx,[l_key+4]
		add	ecx,[l_key+8]
		add	edx,[l_key+12]	
		f_mix	eax,ebx,ecx,edx
		add	eax,edx
		f_mix	ebx,ecx,edx,eax
		add	ebx,ecx
		f_mix	ecx,edx,eax,ebx
		f_mix	edx,eax,ebx,ecx
		f_mix	eax,ebx,ecx,edx
		add	eax,edx
		f_mix	ebx,ecx,edx,eax
		add	ebx,ecx
		f_mix	ecx,edx,eax,ebx
		f_mix	edx,eax,ebx,ecx	
		f_ktr	eax,ebx,ecx,edx,4
		f_ktr 	ebx,ecx,edx,eax,6
		f_ktr 	ecx,edx,eax,ebx, 8
		f_ktr 	edx,eax,ebx,ecx,10   
		f_ktr 	eax,ebx,ecx,edx,12    
		f_ktr 	ebx,ecx,edx,eax,14    
		f_ktr 	ecx,edx,eax,ebx,16   
		f_ktr 	edx,eax,ebx,ecx,18    
		f_ktr 	eax,edx,ecx,ebx,20
		f_ktr 	ebx,eax,edx,ecx,22 
		f_ktr 	ecx,ebx,eax,edx,24   
		f_ktr 	edx,ecx,ebx,eax,26 
		f_ktr 	eax,edx,ecx,ebx,28    
		f_ktr 	ebx,eax,edx,ecx,30
		f_ktr 	ecx,ebx,eax,edx,32    
		f_ktr 	edx,ecx,ebx,eax,34   
		b_mix	eax,ebx,ecx,edx
		b_mix	ebx,ecx,edx,eax
		sub	ecx,ebx
		b_mix	ecx,edx,eax,ebx
		sub	edx,eax
		b_mix	edx,eax,ebx,ecx
		b_mix	eax,ebx,ecx,edx
		b_mix	ebx,ecx,edx,eax
		sub	ecx,ebx
		b_mix	ecx,edx,eax,ebx
		sub	edx,eax
		b_mix	edx,eax,ebx,ecx
		mov	edi,[esp+2ch]		; ptrOutdata
		sub	eax,[l_key+36*4]
		sub	ebx,[l_key+37*4]
		sub	ecx,[l_key+38*4]
		sub	edx,[l_key+39*4]
		mov	[edi],eax
		mov	[edi+4],ebx
		mov	[edi+8],ecx
		mov	[edi+12],edx
		popad
		ret
		
mars_encrypt	endp

mars_decrypt	proc	ptrIndata:DWORD, ptrOutdata:DWORD

		pushad
		mov	esi,[esp+28h]		; ptrIndata
		mov	eax,[esi+12]
		mov	ebx,[esi+8]
		mov	ecx,[esi+4]
		mov	edx,[esi]
		add	eax,[l_key+39*4]
		add	ebx,[l_key+38*4]
		add	ecx,[l_key+37*4]
		add	edx,[l_key+36*4]
		f_mix	eax,ebx,ecx,edx
		add	eax,edx
		f_mix	ebx,ecx,edx,eax
		add	ebx,ecx
		f_mix	ecx,edx,eax,ebx
		f_mix	edx,eax,ebx,ecx
		f_mix	eax,ebx,ecx,edx
		add	eax,edx
		f_mix	ebx,ecx,edx,eax
		add	ebx,ecx
		f_mix	ecx,edx,eax,ebx
		f_mix	edx,eax,ebx,ecx
		r_ktr	eax,ebx,ecx,edx,34
		r_ktr	ebx,ecx,edx,eax,32
		r_ktr	ecx,edx,eax,ebx,30
		r_ktr	edx,eax,ebx,ecx,28
		r_ktr	eax,ebx,ecx,edx,26
		r_ktr	ebx,ecx,edx,eax,24
		r_ktr	ecx,edx,eax,ebx,22
		r_ktr	edx,eax,ebx,ecx,20
		r_ktr	eax,edx,ecx,ebx,18
		r_ktr	ebx,eax,edx,ecx,16
		r_ktr	ecx,ebx,eax,edx,14
		r_ktr	edx,ecx,ebx,eax,12
		r_ktr	eax,edx,ecx,ebx,10
		r_ktr	ebx,eax,edx,ecx, 8
		r_ktr	ecx,ebx,eax,edx, 6
		r_ktr	edx,ecx,ebx,eax, 4
		b_mix	eax,ebx,ecx,edx
		b_mix	ebx,ecx,edx,eax
		sub	ecx,ebx
		b_mix	ecx,edx,eax,ebx
		sub	edx,eax
		b_mix	edx,eax,ebx,ecx
		b_mix	eax,ebx,ecx,edx
		b_mix	ebx,ecx,edx,eax
		sub	ecx,ebx
		b_mix	ecx,edx,eax,ebx
		sub	edx,eax
		b_mix	edx,eax,ebx,ecx
		mov	edi,[esp+2ch]		; ptrOutdata
		sub	eax,[l_key+3*4]
		sub	ebx,[l_key+2*4]
		sub	ecx,[l_key+1*4]
		sub	edx,[l_key]
		mov	[edi],edx
		mov	[edi+4],ecx
		mov	[edi+8],ebx
		mov	[edi+12],eax	
		popad
		ret
		
mars_decrypt	endp

⌨️ 快捷键说明

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