?? mars.inc
字號:
.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 + -