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

Disassembly:
push ebp
push edi
push esi
push ebx
sub esp, 0x18
mov ebp, dword [esp + 0x30]
test ebp, ebp
je 0x478fc0
mov ecx, dword [esp + 0x2c]
cmp dword [esp + 0x34], 0x16
not ecx
jbe 0x478db1
test ebp, 3
je 0x479012
mov eax, dword [esp + 0x34]
jmp 0x478adc
test ebp, 3
je 0x478fd0
add ebp, 1
mov edx, ecx
xor cl, byte [ebp - 1]
shr edx, 8
movzx ecx, cl
xor edx, dword [ecx*4 + 0x49e2e0]
mov ecx, edx
sub eax, 1
jne 0x478ad0
mov dword [esp + 0xc], 0xffffffff
mov esi, ebp
mov dword [esp + 0x34], eax
mov eax, 0xffffffff
mov dword [esp], 0
xor edx, edx
xor ebx, ebx
xor edi, edi
mov dword [esp + 0x10], esi
mov dword [esp + 4], ecx
mov ecx, ebx
mov dword [esp + 0x14], eax
mov eax, edx
lea esi, [esi]
nop
xor eax, dword [ebp + 0x10]
mov esi, dword [esp + 4]
add ebp, 0x14
xor esi, dword [ebp - 0x14]
xor edi, dword [ebp - 0xc]
mov dword [esp + 8], eax
mov eax, esi
mov edx, edi
mov ebx, dword [esp]
xor ebx, dword [ebp - 0x10]
movzx edi, al
mov eax, esi
xor ecx, dword [ebp - 8]
shr eax, 0x18
mov edi, dword [edi*4 + 0x49d2e0]
xor edi, dword [eax*4 + 0x49dee0]
mov eax, esi
shr esi, 0x10
movzx eax, ah
xor edi, dword [eax*4 + 0x49d6e0]
mov eax, esi
movzx esi, al
xor edi, dword [esi*4 + 0x49dae0]
movzx esi, bl
mov dword [esp + 4], edi
mov edi, ebx
mov esi, dword [esi*4 + 0x49d2e0]
shr edi, 0x18
xor esi, dword [edi*4 + 0x49dee0]
movzx edi, bh
shr ebx, 0x10
movzx ebx, bl
xor esi, dword [edi*4 + 0x49d6e0]
xor esi, dword [ebx*4 + 0x49dae0]
mov ebx, edx
shr ebx, 0x18
mov dword [esp], esi
movzx esi, dl
mov edi, dword [esi*4 + 0x49d2e0]
xor edi, dword [ebx*4 + 0x49dee0]
movzx ebx, dh
shr edx, 0x10
xor edi, dword [ebx*4 + 0x49d6e0]
movzx edx, dl
mov ebx, ecx
mov esi, dword [esp + 8]
shr ebx, 0x18
xor edi, dword [edx*4 + 0x49dae0]
movzx edx, cl
mov edx, dword [edx*4 + 0x49d2e0]
xor edx, dword [ebx*4 + 0x49dee0]
mov eax, esi
movzx ebx, ch
shr ecx, 0x10
xor edx, dword [ebx*4 + 0x49d6e0]
movzx ecx, cl
xor edx, dword [ecx*4 + 0x49dae0]
mov ecx, edx
movzx edx, al
mov eax, esi
shr eax, 0x18
mov edx, dword [edx*4 + 0x49d2e0]
xor edx, dword [eax*4 + 0x49dee0]
mov eax, esi
movzx ebx, ah
shr eax, 0x10
movzx eax, al
xor edx, dword [ebx*4 + 0x49d6e0]
xor edx, dword [eax*4 + 0x49dae0]
sub dword [esp + 0xc], 1
mov eax, edx
jne 0x478b30
mov eax, dword [esp + 0x14]
mov esi, dword [esp + 0x10]
mov ebx, ecx
mov ecx, dword [esp + 4]
lea eax, [eax + eax*4]
lea ebp, [esi + eax*4]
xor ecx, dword [ebp]
movzx eax, cl
shr ecx, 8
xor ecx, dword [eax*4 + 0x49e2e0]
mov eax, ecx
movzx ecx, cl
shr eax, 8
xor eax, dword [ecx*4 + 0x49e2e0]
mov ecx, eax
movzx eax, al
shr ecx, 8
xor ecx, dword [eax*4 + 0x49e2e0]
mov eax, ecx
mov ecx, dword [esp]
xor ecx, dword [ebp + 4]
mov esi, eax
movzx eax, al
shr esi, 8
xor ecx, esi
xor ecx, dword [eax*4 + 0x49e2e0]
mov eax, ecx
movzx ecx, cl
shr eax, 8
xor eax, dword [ecx*4 + 0x49e2e0]
mov ecx, eax
movzx eax, al
shr ecx, 8
xor ecx, dword [eax*4 + 0x49e2e0]
mov eax, ecx
shr ecx, 8
movzx eax, al
xor ecx, dword [eax*4 + 0x49e2e0]
mov eax, dword [ebp + 8]
mov esi, ecx
movzx ecx, cl
xor eax, edi
shr esi, 8
xor eax, esi
xor eax, dword [ecx*4 + 0x49e2e0]
movzx ecx, al
shr eax, 8
xor eax, dword [ecx*4 + 0x49e2e0]
mov ecx, eax
movzx eax, al
shr ecx, 8
xor ecx, dword [eax*4 + 0x49e2e0]
mov eax, ecx
shr ecx, 8
movzx eax, al
xor ecx, dword [eax*4 + 0x49e2e0]
mov eax, dword [ebp + 0xc]
xor eax, ebx
mov ebx, ecx
movzx ecx, cl
shr ebx, 8
xor eax, ebx
xor eax, dword [ecx*4 + 0x49e2e0]
movzx ecx, al
shr eax, 8
xor eax, dword [ecx*4 + 0x49e2e0]
add ebp, 0x14
mov ecx, eax
movzx eax, al
shr ecx, 8
xor ecx, dword [eax*4 + 0x49e2e0]
mov eax, ecx
shr ecx, 8
movzx eax, al
xor ecx, dword [eax*4 + 0x49e2e0]
mov eax, dword [ebp - 4]
xor eax, edx
mov edx, ecx
movzx ecx, cl
shr edx, 8
xor eax, edx
xor eax, dword [ecx*4 + 0x49e2e0]
movzx edx, al
shr eax, 8
xor eax, dword [edx*4 + 0x49e2e0]
mov edx, eax
movzx eax, al
shr edx, 8
xor edx, dword [eax*4 + 0x49e2e0]
mov eax, edx
shr edx, 8
movzx eax, al
xor edx, dword [eax*4 + 0x49e2e0]
mov ecx, edx
movzx edx, dl
shr ecx, 8
xor ecx, dword [edx*4 + 0x49e2e0]
cmp dword [esp + 0x34], 7
jbe 0x478ef8
mov edx, ecx
xor cl, byte [ebp]
mov eax, dword [esp + 0x34]
movzx ecx, cl
shr edx, 8
xor edx, dword [ecx*4 + 0x49e2e0]
lea ebx, [eax - 8]
mov eax, edx
xor dl, byte [ebp + 1]
movzx edx, dl
shr eax, 8
xor eax, dword [edx*4 + 0x49e2e0]
mov edx, eax
xor al, byte [ebp + 2]
movzx eax, al
shr edx, 8
xor edx, dword [eax*4 + 0x49e2e0]
mov eax, edx
xor dl, byte [ebp + 3]
movzx edx, dl
shr eax, 8
xor eax, dword [edx*4 + 0x49e2e0]
mov edx, eax
xor al, byte [ebp + 4]
movzx eax, al
shr edx, 8
xor edx, dword [eax*4 + 0x49e2e0]
mov eax, edx
xor dl, byte [ebp + 5]
movzx edx, dl
shr eax, 8
xor eax, dword [edx*4 + 0x49e2e0]
mov edx, eax
xor al, byte [ebp + 6]
movzx eax, al
shr edx, 8
xor edx, dword [eax*4 + 0x49e2e0]
mov ecx, edx
xor dl, byte [ebp + 7]
movzx edx, dl
shr ecx, 8
xor ecx, dword [edx*4 + 0x49e2e0]
cmp ebx, 7
jbe 0x478eec
mov edx, ecx
xor cl, byte [ebp + 8]
movzx ecx, cl
shr edx, 8
xor edx, dword [ecx*4 + 0x49e2e0]
mov eax, edx
xor dl, byte [ebp + 9]
movzx edx, dl
shr eax, 8
xor eax, dword [edx*4 + 0x49e2e0]
mov edx, eax
xor al, byte [ebp + 0xa]
movzx eax, al
shr edx, 8
xor edx, dword [eax*4 + 0x49e2e0]
mov eax, edx
xor dl, byte [ebp + 0xb]
movzx edx, dl
shr eax, 8
xor eax, dword [edx*4 + 0x49e2e0]
mov edx, eax
xor al, byte [ebp + 0xc]
movzx eax, al
shr edx, 8
xor edx, dword [eax*4 + 0x49e2e0]
mov eax, edx
xor dl, byte [ebp + 0xd]
movzx edx, dl
shr eax, 8
xor eax, dword [edx*4 + 0x49e2e0]
mov edx, eax
xor al, byte [ebp + 0xe]
movzx eax, al
shr edx, 8
xor edx, dword [eax*4 + 0x49e2e0]
mov ecx, edx
xor dl, byte [ebp + 0xf]
movzx edx, dl
shr ecx, 8
xor ecx, dword [edx*4 + 0x49e2e0]
and dword [esp + 0x34], 7
shr ebx, 3
lea ebp, [ebp + ebx*8 + 8]
mov eax, dword [esp + 0x34]
test eax, eax
je 0x478fb2
mov eax, ecx
xor cl, byte [ebp]
movzx ecx, cl
shr eax, 8
xor eax, dword [ecx*4 + 0x49e2e0]
cmp dword [esp + 0x34], 1
mov ecx, eax
je 0x478fb2
xor cl, byte [ebp + 1]
shr eax, 8
movzx ecx, cl
xor eax, dword [ecx*4 + 0x49e2e0]
cmp dword [esp + 0x34], 2
mov ecx, eax
je 0x478fb2
xor cl, byte [ebp + 2]
shr eax, 8
movzx ecx, cl
xor eax, dword [ecx*4 + 0x49e2e0]
cmp dword [esp + 0x34], 3
mov ecx, eax
je 0x478fb2
xor cl, byte [ebp + 3]
shr eax, 8
movzx ecx, cl
xor eax, dword [ecx*4 + 0x49e2e0]
cmp dword [esp + 0x34], 4
mov ecx, eax
je 0x478fb2
xor cl, byte [ebp + 4]
shr eax, 8
movzx ecx, cl
xor eax, dword [ecx*4 + 0x49e2e0]
cmp dword [esp + 0x34], 5
mov ecx, eax
je 0x478fb2
xor cl, byte [ebp + 5]
shr eax, 8
movzx ecx, cl
xor eax, dword [ecx*4 + 0x49e2e0]
cmp dword [esp + 0x34], 6
mov ecx, eax
je 0x478fb2
xor cl, byte [ebp + 6]
shr eax, 8
movzx ecx, cl
xor eax, dword [ecx*4 + 0x49e2e0]
mov ecx, eax
add esp, 0x18
mov eax, ecx
pop ebx
not eax
pop esi
pop edi
pop ebp
ret
add esp, 0x18
xor eax, eax
pop ebx
pop esi
pop edi
pop ebp
ret
mov dword [esp + 0x34], eax
mov eax, 0xcccccccd
mul dword [esp + 0x34]
shr edx, 4
lea eax, [edx - 1]
mov dword [esp + 0xc], eax
lea eax, [edx + edx*4]
shl eax, 2
sub dword [esp + 0x34], eax
mov eax, dword [esp + 0xc]
test eax, eax
je 0x479000
mov esi, ebp
jmp 0x478b0b
mov dword [esp], 0
xor edx, edx
xor ebx, ebx
xor edi, edi
jmp 0x478c68
mov eax, 0xcccccccd
mul dword [esp + 0x34]
mov eax, edx
shr eax, 4
lea esi, [eax - 1]
lea eax, [eax + eax*4]
shl eax, 2
mov dword [esp + 0xc], esi
sub dword [esp + 0x34], eax
jmp 0x478ff1