Function at 0x58c970
Capabilities:
Encode data using add xor sub operations
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x18
mov eax, dword [ebp + 8]
push ebx
mov ebx, dword [ebp + 0xc]
push esi
movzx ecx, byte [eax + 0xf]
mov edx, ecx
mov dword [ebp - 4], 0
and ecx, 0xf
and edx, 0xfffffff0
add ecx, ecx
push edi
mov edi, dword [ebx + ecx*8]
mov esi, dword [ebx + ecx*8 + 4]
mov ebx, dword [ebx + ecx*8 + 8]
mov dword [ebp - 0xc], ebx
mov ebx, dword [ebp + 0xc]
mov ebx, dword [ebx + ecx*8 + 0xc]
mov ecx, dword [ebp - 0xc]
and ecx, 0xf
mov ecx, dword [ecx*4 + 0x67d248]
mov dword [ebp - 8], ecx
mov ecx, edi
shrd ecx, esi, 4
shl edi, 0x1c
xor dword [ebp - 4], ecx
mov ecx, dword [ebp - 4]
shr esi, 4
xor dword [ebp - 8], esi
mov esi, dword [ebp + 0xc]
xor ecx, dword [edx + esi]
mov dword [ebp - 4], ecx
mov ecx, dword [ebp - 8]
xor ecx, dword [edx + esi + 4]
mov dword [ebp - 8], ecx
mov ecx, dword [ebp - 0xc]
shrd ecx, ebx, 4
shr ebx, 4
or ebx, edi
mov edi, esi
xor ecx, dword [edx + edi + 8]
xor ebx, dword [edx + edi + 0xc]
mov dword [ebp - 0xc], ecx
mov ecx, 0xe
mov dword [ebp - 0x10], ebx
mov dword [ebp - 0x18], ecx
movzx ecx, byte [ecx + eax]
xor ebx, ebx
mov esi, ecx
mov eax, dword [ebp - 8]
and ecx, 0xf
and esi, 0xfffffff0
add ecx, ecx
lea edx, [edi + ecx*8]
mov ecx, dword [ebp - 0xc]
and ecx, 0xf
mov edi, dword [ecx*4 + 0x67d248]
mov ecx, dword [ebp - 4]
shl dword [ebp - 4], 0x1c
shrd ecx, eax, 4
xor ebx, ecx
shr eax, 4
xor ebx, dword [edx]
xor edi, eax
mov ecx, dword [ebp - 0x10]
shrd dword [ebp - 0xc], ecx, 4
xor edi, dword [edx + 4]
shr ecx, 4
or dword [ebp - 4], ecx
mov ecx, dword [ebp - 4]
xor ecx, dword [edx + 0xc]
mov dword [ebp - 0x14], ebx
xor ebx, ebx
or ebx, dword [ebp - 0xc]
xor ebx, dword [edx + 8]
mov edx, ecx
mov ecx, ebx
mov dword [ebp - 8], eax
mov eax, dword [ebp + 0xc]
and ecx, 0xf
mov dword [ebp - 4], 0
shrd ebx, edx, 4
mov ecx, dword [ecx*4 + 0x67d248]
mov dword [ebp - 8], ecx
mov ecx, dword [ebp - 0x14]
shrd ecx, edi, 4
shr edx, 4
xor dword [ebp - 4], ecx
mov ecx, dword [ebp - 4]
xor ecx, dword [esi + eax]
shr edi, 4
xor dword [ebp - 8], edi
xor edi, edi
mov dword [ebp - 4], ecx
or edi, ebx
mov ecx, dword [ebp - 8]
xor ecx, dword [esi + eax + 4]
mov dword [ebp - 8], ecx
mov ecx, dword [ebp - 0x14]
shl ecx, 0x1c
or ecx, edx
mov dword [ebp - 0xc], edi
xor ecx, dword [esi + eax + 0xc]
mov edx, edi
xor edx, dword [esi + eax + 8]
mov eax, dword [ebp + 8]
mov edi, dword [ebp + 0xc]
mov dword [ebp - 0x10], ecx
mov ecx, dword [ebp - 0x18]
sub ecx, 1
mov dword [ebp - 0xc], edx
mov dword [ebp - 0x18], ecx
jns 0x58ca05
mov ebx, dword [ebp - 8]
mov ecx, ebx
shr ecx, 0x18
mov byte [eax], cl
mov ecx, ebx
shr ecx, 0x10
mov byte [eax + 1], cl
mov ecx, ebx
shr ecx, 8
mov byte [eax + 2], cl
mov byte [eax + 3], bl
mov ebx, dword [ebp - 4]
mov ecx, ebx
shr ecx, 0x18
mov byte [eax + 4], cl
mov ecx, ebx
shr ecx, 0x10
mov byte [eax + 5], cl
mov ecx, ebx
shr ecx, 8
mov byte [eax + 6], cl
mov byte [eax + 7], bl
mov ebx, dword [ebp - 0x10]
mov ecx, ebx
shr ecx, 0x18
mov byte [eax + 8], cl
mov ecx, ebx
shr ecx, 0x10
mov byte [eax + 9], cl
mov ecx, ebx
shr ecx, 8
mov byte [eax + 0xa], cl
mov ecx, edx
shr ecx, 0x18
mov byte [eax + 0xc], cl
mov ecx, edx
shr ecx, 0x10
mov byte [eax + 0xd], cl
mov ecx, edx
pop edi
shr ecx, 8
pop esi
mov byte [eax + 0xb], bl
mov byte [eax + 0xe], cl
mov byte [eax + 0xf], dl
pop ebx
mov esp, ebp
pop ebp
ret