Function at 0x40648e
Capabilities:
Encode data using xor
Hash data with crc32

Disassembly:
push ebp
mov ebp, esp
push edi
push esi
push ebx
sub esp, 0x1c
mov edx, dword [ebp + 0xc]
test edx, edx
jne 0x4064a8
mov eax, 0
jmp 0x406759
mov dword [ebp - 0x10], 1
mov eax, dword [ebp + 8]
not eax
cmp dword [ebp + 0x10], 0
je 0x406764
test dl, 3
je 0x4064ed
mov edi, 0x40a5e0
mov ecx, dword [ebp + 0x10]
mov bl, byte [edx]
xor ebx, eax
mov esi, ebx
and esi, 0xff
shr eax, 8
xor eax, dword [edi + esi*4]
inc edx
dec ecx
je 0x406761
test dl, 3
jne 0x4064cb
mov dword [ebp + 0x10], ecx
mov dword [ebp - 0x28], edx
cmp dword [ebp + 0x10], 0x1f
jbe 0x4066b9
mov edx, dword [ebp + 0x10]
mov dword [ebp - 0x20], edx
mov ecx, dword [ebp - 0x28]
mov edx, 0x40a5e0
xor eax, dword [ecx]
movzx esi, ah
mov ebx, eax
shr ebx, 0x10
and ebx, 0xff
movzx edi, al
shr eax, 0x18
mov edi, dword [edx + edi*4 + 0xc00]
xor edi, dword [edx + eax*4]
mov eax, edi
xor eax, dword [ecx + 4]
xor eax, dword [edx + esi*4 + 0x800]
xor eax, dword [edx + ebx*4 + 0x400]
movzx esi, ah
mov ebx, eax
shr ebx, 0x10
and ebx, 0xff
movzx edi, al
shr eax, 0x18
mov edi, dword [edx + edi*4 + 0xc00]
xor edi, dword [edx + eax*4]
mov eax, edi
xor eax, dword [ecx + 8]
xor eax, dword [edx + esi*4 + 0x800]
xor eax, dword [edx + ebx*4 + 0x400]
movzx esi, ah
mov ebx, eax
shr ebx, 0x10
and ebx, 0xff
movzx edi, al
shr eax, 0x18
mov edi, dword [edx + edi*4 + 0xc00]
xor edi, dword [edx + eax*4]
mov eax, edi
xor eax, dword [ecx + 0xc]
xor eax, dword [edx + esi*4 + 0x800]
xor eax, dword [edx + ebx*4 + 0x400]
movzx esi, ah
mov ebx, eax
shr ebx, 0x10
and ebx, 0xff
movzx edi, al
shr eax, 0x18
mov edi, dword [edx + edi*4 + 0xc00]
xor edi, dword [edx + eax*4]
mov eax, edi
xor eax, dword [ecx + 0x10]
xor eax, dword [edx + esi*4 + 0x800]
xor eax, dword [edx + ebx*4 + 0x400]
movzx esi, ah
mov ebx, eax
shr ebx, 0x10
and ebx, 0xff
movzx edi, al
shr eax, 0x18
mov edi, dword [edx + edi*4 + 0xc00]
xor edi, dword [edx + eax*4]
mov eax, edi
xor eax, dword [ecx + 0x14]
xor eax, dword [edx + esi*4 + 0x800]
xor eax, dword [edx + ebx*4 + 0x400]
movzx esi, ah
mov ebx, eax
shr ebx, 0x10
and ebx, 0xff
movzx edi, al
shr eax, 0x18
mov edi, dword [edx + edi*4 + 0xc00]
xor edi, dword [edx + eax*4]
mov eax, edi
xor eax, dword [ecx + 0x18]
xor eax, dword [edx + esi*4 + 0x800]
xor eax, dword [edx + ebx*4 + 0x400]
movzx edi, ah
mov esi, eax
shr esi, 0x10
and esi, 0xff
movzx ebx, al
shr eax, 0x18
mov ebx, dword [edx + ebx*4 + 0xc00]
xor ebx, dword [edx + eax*4]
xor ebx, dword [ecx + 0x1c]
xor ebx, dword [edx + edi*4 + 0x800]
xor ebx, dword [edx + esi*4 + 0x400]
add ecx, 0x20
mov esi, ebx
shr esi, 0x10
and esi, 0xff
mov eax, ebx
shr eax, 0x18
movzx edi, bl
mov eax, dword [edx + eax*4]
xor eax, dword [edx + edi*4 + 0xc00]
movzx ebx, bh
xor eax, dword [edx + ebx*4 + 0x800]
xor eax, dword [edx + esi*4 + 0x400]
sub dword [ebp - 0x20], 0x20
cmp dword [ebp - 0x20], 0x1f
ja 0x406508
mov edx, dword [ebp + 0x10]
sub edx, 0x20
mov ecx, edx
and ecx, 0xffffffe0
mov ebx, dword [ebp - 0x28]
lea ebx, [ebx + ecx + 0x20]
mov dword [ebp - 0x28], ebx
and edx, 0x1f
mov dword [ebp + 0x10], edx
cmp dword [ebp + 0x10], 3
jbe 0x40672e
mov edx, dword [ebp + 0x10]
sub edx, 4
mov dword [ebp - 0x24], edx
shr edx, 2
inc edx
mov dword [ebp - 0x20], edx
mov ecx, 0
mov edx, 0x40a5e0
mov edi, eax
mov eax, edi
mov ebx, dword [ebp - 0x28]
xor eax, dword [ebx + ecx*4]
mov ebx, eax
shr ebx, 0x10
and ebx, 0xff
mov edi, eax
shr edi, 0x18
movzx esi, al
mov edi, dword [edx + edi*4]
xor edi, dword [edx + esi*4 + 0xc00]
movzx eax, ah
xor edi, dword [edx + eax*4 + 0x800]
xor edi, dword [edx + ebx*4 + 0x400]
inc ecx
cmp ecx, dword [ebp - 0x20]
jne 0x4066db
mov eax, edi
mov ecx, dword [ebp - 0x28]
mov edx, dword [ebp - 0x20]
lea ecx, [ecx + edx*4]
mov dword [ebp - 0x28], ecx
mov ebx, dword [ebp - 0x24]
and ebx, 3
mov dword [ebp + 0x10], ebx
cmp dword [ebp + 0x10], 0
je 0x406757
mov edx, 0
mov ebx, 0x40a5e0
mov esi, dword [ebp - 0x28]
mov edi, dword [ebp + 0x10]
mov cl, byte [esi + edx]
xor ecx, eax
movzx ecx, cl
shr eax, 8
xor eax, dword [ebx + ecx*4]
inc edx
cmp edi, edx
jne 0x406744
not eax
add esp, 0x1c
pop ebx
pop esi
pop edi
leave
ret
mov dword [ebp + 0x10], ecx
mov dword [ebp - 0x28], edx
jmp 0x4066b9