Function at 0x513f98
Capabilities:
Encode data using xor

Disassembly:
push ebx
push esi
push edi
push ebp
add esp, 0xfffffff0
mov dword [esp + 4], edx
mov dword [esp], eax
mov esi, dword [esp]
mov esi, dword [esi]
mov edi, dword [esp]
mov edi, dword [edi + 4]
mov ebp, dword [esp]
mov ebp, dword [ebp + 8]
mov eax, dword [esp]
mov eax, dword [eax + 0xc]
mov edx, 0x59980c
xor ecx, ecx
mov dword [esp + 8], ecx
movzx ecx, byte [esp + 8]
add ecx, ecx
add ecx, ecx
mov byte [esp + 0xc], cl
movzx ecx, byte [esp + 0xc]
mov ebx, dword [esp + 4]
mov ecx, dword [ebx + ecx*4]
add ecx, dword [edx]
mov ebx, eax
xor ebx, ebp
and ebx, edi
xor ebx, eax
add ecx, ebx
add esi, ecx
mov ecx, esi
shl ecx, 7
shr esi, 0x19
or ecx, esi
add ecx, edi
mov esi, ecx
add edx, 4
movzx ecx, byte [esp + 0xc]
mov ebx, dword [esp + 4]
mov ecx, dword [ebx + ecx*4 + 4]
add ecx, dword [edx]
mov ebx, ebp
xor ebx, edi
and ebx, esi
xor ebx, ebp
add ecx, ebx
add eax, ecx
mov ecx, eax
shl ecx, 0xc
shr eax, 0x14
or ecx, eax
add ecx, esi
mov eax, ecx
add edx, 4
movzx ecx, byte [esp + 0xc]
mov ebx, dword [esp + 4]
mov ecx, dword [ebx + ecx*4 + 8]
add ecx, dword [edx]
mov ebx, edi
xor ebx, esi
and ebx, eax
xor ebx, edi
add ecx, ebx
add ebp, ecx
mov ecx, ebp
shl ecx, 0x11
shr ebp, 0xf
or ecx, ebp
add ecx, eax
mov ebp, ecx
add edx, 4
movzx ecx, byte [esp + 0xc]
mov ebx, dword [esp + 4]
mov ecx, dword [ebx + ecx*4 + 0xc]
add ecx, dword [edx]
mov ebx, esi
xor ebx, eax
and ebx, ebp
xor ebx, esi
add ecx, ebx
add edi, ecx
mov ecx, edi
shl ecx, 0x16
shr edi, 0xa
or ecx, edi
add ecx, ebp
mov edi, ecx
add edx, 4
inc dword [esp + 8]
cmp dword [esp + 8], 4
jne 0x513fc8
mov edx, 0x59984c
xor ecx, ecx
mov dword [esp + 8], ecx
movzx ecx, byte [esp + 8]
add ecx, ecx
add ecx, ecx
mov byte [esp + 0xc], cl
movzx ecx, byte [esp + 0xc]
mov ebx, dword [esp + 4]
mov ecx, dword [ebx + ecx*4 + 4]
add ecx, dword [edx]
mov ebx, ebp
xor ebx, edi
and ebx, eax
xor ebx, ebp
add ecx, ebx
add esi, ecx
mov ecx, esi
shl ecx, 5
shr esi, 0x1b
or ecx, esi
add ecx, edi
mov esi, ecx
add edx, 4
movzx ecx, byte [esp + 0xc]
add ecx, 6
and ecx, 0xf
mov ebx, dword [esp + 4]
mov ecx, dword [ebx + ecx*4]
add ecx, dword [edx]
mov ebx, edi
xor ebx, esi
and ebx, ebp
xor ebx, edi
add ecx, ebx
add eax, ecx
mov ecx, eax
shl ecx, 9
shr eax, 0x17
or ecx, eax
add ecx, esi
mov eax, ecx
add edx, 4
movzx ecx, byte [esp + 0xc]
add ecx, 0xb
and ecx, 0xf
mov ebx, dword [esp + 4]
mov ecx, dword [ebx + ecx*4]
add ecx, dword [edx]
mov ebx, esi
xor ebx, eax
and ebx, edi
xor ebx, esi
add ecx, ebx
add ebp, ecx
mov ecx, ebp
shl ecx, 0xe
shr ebp, 0x12
or ecx, ebp
add ecx, eax
mov ebp, ecx
add edx, 4
movzx ecx, byte [esp + 0xc]
mov ebx, dword [esp + 4]
mov ecx, dword [ebx + ecx*4]
add ecx, dword [edx]
mov ebx, eax
xor ebx, ebp
and ebx, esi
xor ebx, eax
add ecx, ebx
add edi, ecx
mov ecx, edi
shl ecx, 0x14
shr edi, 0xc
or ecx, edi
add ecx, ebp
mov edi, ecx
add edx, 4
inc dword [esp + 8]
cmp dword [esp + 8], 4
jne 0x51409e
mov edx, 0x59988c
xor ecx, ecx
mov dword [esp + 8], ecx
movzx ecx, byte [esp + 8]
add ecx, ecx
add ecx, ecx
mov bl, 0x10
sub bl, cl
mov byte [esp + 0xc], bl
movzx ecx, byte [esp + 0xc]
add ecx, 5
and ecx, 0xf
mov ebx, dword [esp + 4]
mov ecx, dword [ebx + ecx*4]
add ecx, dword [edx]
mov ebx, ebp
xor ebx, edi
xor ebx, eax
add ecx, ebx
add esi, ecx
mov ecx, esi
shl ecx, 4
shr esi, 0x1c
or ecx, esi
add ecx, edi
mov esi, ecx
add edx, 4
movzx ecx, byte [esp + 0xc]
add ecx, 8
and ecx, 0xf
mov ebx, dword [esp + 4]
mov ecx, dword [ebx + ecx*4]
add ecx, dword [edx]
mov ebx, edi
xor ebx, esi
xor ebx, ebp
add ecx, ebx
add eax, ecx
mov ecx, eax
shl ecx, 0xb
shr eax, 0x15
or ecx, eax
add ecx, esi
mov eax, ecx
add edx, 4
movzx ecx, byte [esp + 0xc]
add ecx, 0xb
and ecx, 0xf
mov ebx, dword [esp + 4]
mov ecx, dword [ebx + ecx*4]
add ecx, dword [edx]
mov ebx, esi
xor ebx, eax
xor ebx, edi
add ecx, ebx
add ebp, ecx
mov ecx, ebp
shl ecx, 0x10
shr ebp, 0x10
or ecx, ebp
add ecx, eax
mov ebp, ecx
add edx, 4
movzx ecx, byte [esp + 0xc]
add ecx, 0xe
and ecx, 0xf
mov ebx, dword [esp + 4]
mov ecx, dword [ebx + ecx*4]
add ecx, dword [edx]
mov ebx, eax
xor ebx, ebp
xor ebx, esi
add ecx, ebx
add edi, ecx
mov ecx, edi
shl ecx, 0x17
shr edi, 9
or ecx, edi
add ecx, ebp
mov edi, ecx
add edx, 4
inc dword [esp + 8]
cmp dword [esp + 8], 4
jne 0x51417e
mov edx, 0x5998cc
xor ecx, ecx
mov dword [esp + 8], ecx
movzx ecx, byte [esp + 8]
add ecx, ecx
add ecx, ecx
mov bl, 0x10
sub bl, cl
mov byte [esp + 0xc], bl
movzx ecx, byte [esp + 0xc]
and ecx, 0xf
mov ebx, dword [esp + 4]
mov ecx, dword [ebx + ecx*4]
add ecx, dword [edx]
mov ebx, eax
not ebx
or ebx, edi
xor ebx, ebp
add ecx, ebx
add esi, ecx
mov ecx, esi
shl ecx, 6
shr esi, 0x1a
or ecx, esi
add ecx, edi
mov esi, ecx
add edx, 4
movzx ecx, byte [esp + 0xc]
add ecx, 7
and ecx, 0xf
mov ebx, dword [esp + 4]
mov ecx, dword [ebx + ecx*4]
add ecx, dword [edx]
mov ebx, ebp
not ebx
or ebx, esi
xor ebx, edi
add ecx, ebx
add eax, ecx
mov ecx, eax
shl ecx, 0xa
shr eax, 0x16
or ecx, eax
add ecx, esi
mov eax, ecx
add edx, 4
movzx ecx, byte [esp + 0xc]
add ecx, 0xe
and ecx, 0xf
mov ebx, dword [esp + 4]
mov ecx, dword [ebx + ecx*4]
add ecx, dword [edx]
mov ebx, edi
not ebx
or ebx, eax
xor ebx, esi
add ecx, ebx
add ebp, ecx
mov ecx, ebp
shl ecx, 0xf
shr ebp, 0x11
or ecx, ebp
add ecx, eax
mov ebp, ecx
add edx, 4
movzx ecx, byte [esp + 0xc]
add ecx, 5
and ecx, 0xf
mov ebx, dword [esp + 4]
mov ecx, dword [ebx + ecx*4]
add ecx, dword [edx]
mov ebx, esi
not ebx
or ebx, ebp
xor ebx, eax
add ecx, ebx
add edi, ecx
mov ecx, edi
shl ecx, 0x15
shr edi, 0xb
or ecx, edi
add ecx, ebp
mov edi, ecx
add edx, 4
inc dword [esp + 8]
cmp dword [esp + 8], 4
jne 0x514265
mov edx, dword [esp]
add dword [edx], esi
mov edx, dword [esp]
add dword [edx + 4], edi
mov edx, dword [esp]
add dword [edx + 8], ebp
mov edx, dword [esp]
add dword [edx + 0xc], eax
add esp, 0x10
pop ebp
pop edi
pop esi
pop ebx
ret