📄 tea.asm
字号:
format PE GUI 4.0 DLL
entry DllEntryPoint
include 'win32a.inc'
section '.text' code readable executable
proc DllEntryPoint,hInstance,dwReason,lpReserved
cmp [dwReason],1
jne @f
invoke DisableThreadLibraryCalls,[hInstance]
@@: xor eax,eax
inc eax
ret
endp
proc TEA_EncryptBlock uses edi esi
mov edi,[ebx]
mov esi,[ebx+4]
bswap edi
bswap esi
xor edx,edx
mov ecx,16
@@: add edx,0x9E3779B9
mov eax,esi
shl eax,4
add edi,eax
mov eax,esi
xor eax,[key]
add edi,eax
mov eax,esi
shr eax,5
xor eax,edx
add edi,eax
add edi,[key+4]
mov eax,edi
shl eax,4
add esi,eax
mov eax,edi
xor eax,[key+8]
add esi,eax
mov eax,edi
shr eax,5
xor eax,edx
add esi,eax
add esi,[key+12]
loop @b
bswap edi
bswap esi
mov [ebx],edi
mov [ebx+4],esi
ret
endp
proc XTEA_EncryptBlock uses edi esi ;ebx
mov edi,[xchain]
mov esi,[xchain+4]
bswap edi
bswap esi
xor edx,edx
mov ecx,32
@@: mov eax,edx
and eax,3
add edi,[xkey+eax*4]
mov eax,edx
xor eax,esi
add edi,eax
mov eax,esi
mov ebx,esi
shl eax,4
shr ebx,5
xor eax,ebx
add edi,eax
add edx,0x9E3779B9
mov eax,edx
shr eax,11
and eax,3
add esi,[xkey+eax*4]
mov eax,edx
xor eax,edi
add esi,eax
mov eax,edi
mov ebx,edi
shl eax,4
shr ebx,5
xor eax,ebx
add esi,eax
loop @b
bswap edi
bswap esi
mov [xchain],edi
mov [xchain+4],esi
ret
endp
proc TEA_Init uses ebx edi esi
mov esi,eax
mov edi,key
shr ecx,3
mov ebx,16
cmp ecx,ebx
cmova ecx,ebx
sub ebx,ecx
cld
rep movsb
xor eax,eax
mov ecx,ebx
rep stosb
mov eax,[edi-16]
bswap eax
mov [edi-16],eax
mov eax,[edi-12]
bswap eax
mov [edi-12],eax
mov eax,[edi-8]
bswap eax
mov [edi-8],eax
mov eax,[edi-4]
bswap eax
mov [edi-4],eax
mov ebx,chain
or edx,edx
jnz @f
xor eax,eax
mov [ebx],eax
mov [ebx+4],eax
call TEA_EncryptBlock
jmp .r
@@: mov eax,[edx]
mov [ebx],eax
mov eax,[edx+4]
mov [ebx+4],eax
.r: ret
endp
proc XTEA_Init uses ebx edi esi
mov esi,eax
mov edi,xkey
shr ecx,3
mov ebx,16
cmp ecx,ebx
cmova ecx,ebx
sub ebx,ecx
cld
rep movsb
xor eax,eax
mov ecx,ebx
rep stosb
mov eax,[edi-16]
bswap eax
mov [edi-16],eax
mov eax,[edi-12]
bswap eax
mov [edi-12],eax
mov eax,[edi-8]
bswap eax
mov [edi-8],eax
mov eax,[edi-4]
bswap eax
mov [edi-4],eax
or edx,edx
jnz @f
xor eax,eax
mov [xchain],eax
mov [xchain+4],eax
call XTEA_EncryptBlock
jmp .r
@@: mov eax,[edx]
mov [xchain],eax
mov eax,[edx+4]
mov [xchain+4],eax
.r: ret
endp
proc TEA_OFB_Crypt uses ebx edi esi
mov edi,eax
mov esi,edx
mov ebx,chain
push esi
shr esi,3
jz .2
@@: call TEA_EncryptBlock
mov eax,[ebx]
xor [edi],eax
mov eax,[ebx+4]
xor [edi+4],eax
add edi,8
dec esi
jnz @b
.2: pop esi
and esi,7
jz .r
call TEA_EncryptBlock
xor ecx,ecx
@@: cmp ecx,esi
jnb .r
mov al,[ebx+ecx]
xor [edi+ecx],al
inc ecx
jmp @b
.r: ret
endp
proc XTEA_OFB_Crypt uses ebx edi esi
mov edi,eax
mov esi,edx
push esi
shr esi,3
jz .2
@@: call XTEA_EncryptBlock
mov eax,[xchain]
xor [edi],eax
mov eax,[xchain+4]
xor [edi+4],eax
add edi,8
dec esi
jnz @b
.2: pop esi
and esi,7
jz .r
call XTEA_EncryptBlock
xor ecx,ecx
@@: cmp ecx,esi
jnb .r
mov al,byte[xchain+ecx]
xor [edi+ecx],al
inc ecx
jmp @b
.r: ret
endp
section '.data' data readable writeable
key dd 4 dup (?)
chain dd 2 dup (?)
xkey dd 4 dup (?)
xchain dd 2 dup (?)
data import
library kernel32,'KERNEL32.DLL'
import kernel32,\
DisableThreadLibraryCalls,'DisableThreadLibraryCalls'
end data
data export
export 'TEA.DLL',\
TEA_Init,'Tea16Init',\
TEA_OFB_Crypt,'Tea16Crypt',\
XTEA_Init,'Xtea32Init',\
XTEA_OFB_Crypt,'Xtea32Crypt'
end data
section '.reloc' fixups data discardable
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -