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

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
mov ecx, dword [ebp + 0xc]
test ecx, ecx
je 0x404790
mov ebx, dword [ebp + 8]
mov edx, dword [ebp + 0x10]
not ebx
test edx, edx
je 0x40457f
mov eax, ecx
and eax, 3
je 0x40457f
movzx eax, byte [ecx]
movzx esi, bl
shr ebx, 8
inc ecx
xor esi, eax
xor ebx, dword [esi*4 + 0x40b104]
cmp edx, 1
lea edx, [edx - 1]
jne 0x40455d
cmp edx, 0x20
jb 0x40477e
xor ebx, dword [ecx]
mov eax, 0xff
add edx, 0xffffffe0
mov edi, ebx
mov esi, ebx
shr edi, 8
and esi, eax
and edi, eax
mov eax, 0x3fc
mov edi, dword [edi*4 + 0x40b904]
xor edi, dword [esi*4 + 0x40bd04]
mov esi, ebx
shr ebx, 0x18
shr esi, 0xe
and esi, eax
mov eax, 0xff
xor edi, dword [esi + 0x40b504]
xor edi, dword [ebx*4 + 0x40b104]
xor edi, dword [ecx + 4]
mov ebx, edi
mov esi, edi
shr ebx, 8
and esi, eax
and ebx, eax
mov eax, 0x3fc
mov ebx, dword [ebx*4 + 0x40b904]
xor ebx, dword [esi*4 + 0x40bd04]
mov esi, edi
shr edi, 0x18
shr esi, 0xe
and esi, eax
mov eax, 0xff
xor ebx, dword [esi + 0x40b504]
xor ebx, dword [edi*4 + 0x40b104]
xor ebx, dword [ecx + 8]
mov edi, ebx
mov esi, ebx
shr edi, 8
and esi, eax
and edi, eax
mov eax, 0x3fc
mov edi, dword [edi*4 + 0x40b904]
xor edi, dword [esi*4 + 0x40bd04]
mov esi, ebx
shr ebx, 0x18
shr esi, 0xe
and esi, eax
mov eax, 0xff
xor edi, dword [esi + 0x40b504]
xor edi, dword [ebx*4 + 0x40b104]
xor edi, dword [ecx + 0xc]
mov ebx, edi
mov esi, edi
shr ebx, 8
and esi, eax
and ebx, eax
mov eax, 0x3fc
mov ebx, dword [ebx*4 + 0x40b904]
xor ebx, dword [esi*4 + 0x40bd04]
mov esi, edi
shr edi, 0x18
shr esi, 0xe
and esi, eax
mov eax, 0xff
xor ebx, dword [esi + 0x40b504]
xor ebx, dword [edi*4 + 0x40b104]
xor ebx, dword [ecx + 0x10]
mov edi, ebx
mov esi, ebx
shr edi, 8
and esi, eax
and edi, eax
mov eax, 0x3fc
mov edi, dword [edi*4 + 0x40b904]
xor edi, dword [esi*4 + 0x40bd04]
mov esi, ebx
shr ebx, 0x18
shr esi, 0xe
and esi, eax
mov eax, 0xff
xor edi, dword [esi + 0x40b504]
xor edi, dword [ebx*4 + 0x40b104]
xor edi, dword [ecx + 0x14]
mov ebx, edi
mov esi, edi
shr ebx, 8
and esi, eax
and ebx, eax
mov eax, 0x3fc
mov ebx, dword [ebx*4 + 0x40b904]
xor ebx, dword [esi*4 + 0x40bd04]
mov esi, edi
shr edi, 0x18
shr esi, 0xe
and esi, eax
mov eax, 0xff
xor ebx, dword [esi + 0x40b504]
xor ebx, dword [edi*4 + 0x40b104]
xor ebx, dword [ecx + 0x18]
mov edi, ebx
mov esi, ebx
shr edi, 8
and esi, eax
and edi, eax
mov eax, 0x3fc
mov edi, dword [edi*4 + 0x40b904]
xor edi, dword [esi*4 + 0x40bd04]
mov esi, ebx
shr ebx, 0x18
shr esi, 0xe
and esi, eax
mov eax, 0xff
xor edi, dword [esi + 0x40b504]
xor edi, dword [ebx*4 + 0x40b104]
xor edi, dword [ecx + 0x1c]
add ecx, 0x20
mov ebx, edi
mov esi, edi
shr ebx, 8
and esi, eax
and ebx, eax
mov eax, 0x3fc
mov ebx, dword [ebx*4 + 0x40b904]
xor ebx, dword [esi*4 + 0x40bd04]
mov esi, edi
shr edi, 0x18
shr esi, 0xe
and esi, eax
xor ebx, dword [esi + 0x40b504]
xor ebx, dword [edi*4 + 0x40b104]
cmp edx, 0x1f
ja 0x404588
cmp edx, 4
jae 0x404794
mov eax, ebx
test edx, edx
jne 0x4047de
not eax
pop esi
pop edi
pop ebx
pop ebp
ret
xor eax, eax
jmp 0x40478b
mov esi, 0xff
xor ebx, dword [ecx]
add edx, 0xfffffffc
add ecx, 4
mov eax, ebx
mov edi, ebx
shr eax, 8
and edi, esi
and eax, esi
mov eax, dword [eax*4 + 0x40b904]
xor eax, dword [edi*4 + 0x40bd04]
mov edi, ebx
shr ebx, 0x18
shr edi, 0xe
and edi, 0x3fc
xor eax, dword [edi + 0x40b504]
xor eax, dword [ebx*4 + 0x40b104]
cmp edx, 3
mov ebx, eax
jbe 0x404785
jmp 0x404799
movzx esi, byte [ecx]
movzx edi, al
shr eax, 8
inc ecx
xor edi, esi
xor eax, dword [edi*4 + 0x40b104]
dec edx
je 0x404789
jmp 0x4047de