Function at 0x591050
Capabilities:
Encode data using xor

Disassembly:
push esi
mov esi, dword [esp + 8]
push edi
mov edi, ecx
cmp edi, 8
jb 0x5913f0
push ebp
mov ebp, edi
shr ebp, 3
jmp 0x591070
mov cl, byte [esi + 2]
movzx edx, word [eax]
and dx, 0x83ff
and cl, 0xf8
movzx cx, cl
shl cx, 7
or cx, dx
mov word [eax], cx
mov dl, byte [esi + 1]
and dl, 0xf8
movzx dx, dl
add dx, dx
add dx, dx
and ecx, 0xfc1f
or dx, cx
mov word [eax], dx
mov cl, byte [esi]
shr cl, 3
movzx cx, cl
and edx, 0xffe0
or cx, dx
mov word [eax], cx
xor edx, edx
mov dh, byte [esi + 3]
add esi, 4
add eax, 2
add esi, 4
add eax, 2
xor edx, ecx
and edx, 0x7fff
xor ecx, ecx
mov ch, byte [esi - 5]
xor edx, ecx
mov word [eax - 4], dx
movzx edx, byte [esi - 2]
and dl, 0xf8
movzx cx, dl
movzx edx, word [eax - 2]
and dx, 0x83ff
shl cx, 7
or cx, dx
mov word [eax - 2], cx
mov dl, byte [esi - 3]
and dl, 0xf8
movzx dx, dl
add dx, dx
add dx, dx
and ecx, 0xfc1f
or dx, cx
mov word [eax - 2], dx
mov cl, byte [esi - 4]
shr cl, 3
movzx cx, cl
and edx, 0xffe0
or cx, dx
mov word [eax - 2], cx
xor edx, edx
mov dh, byte [esi - 1]
xor edx, ecx
xor ecx, ecx
mov ch, byte [esi - 1]
and edx, 0x7fff
xor edx, ecx
mov word [eax - 2], dx
movzx edx, byte [esi + 2]
and dl, 0xf8
movzx cx, dl
movzx edx, word [eax]
and dx, 0x83ff
shl cx, 7
or cx, dx
mov word [eax], cx
mov dl, byte [esi + 1]
and dl, 0xf8
movzx dx, dl
add dx, dx
and ecx, 0xfc1f
add dx, dx
or dx, cx
mov word [eax], dx
mov cl, byte [esi]
and edx, 0xffe0
shr cl, 3
movzx cx, cl
or cx, dx
mov word [eax], cx
xor edx, edx
mov dh, byte [esi + 3]
add esi, 4
add eax, 2
add esi, 4
add eax, 2
add esi, 4
add eax, 2
xor edx, ecx
and edx, 0x7fff
xor ecx, ecx
mov ch, byte [esi - 9]
xor edx, ecx
mov word [eax - 6], dx
movzx edx, byte [esi - 6]
and dl, 0xf8
movzx cx, dl
movzx edx, word [eax - 4]
and dx, 0x83ff
shl cx, 7
or cx, dx
mov word [eax - 4], cx
mov dl, byte [esi - 7]
and dl, 0xf8
movzx dx, dl
add dx, dx
add dx, dx
and ecx, 0xfc1f
or dx, cx
mov word [eax - 4], dx
mov cl, byte [esi - 8]
shr cl, 3
movzx cx, cl
and edx, 0xffe0
or cx, dx
mov word [eax - 4], cx
xor edx, edx
mov dh, byte [esi - 5]
xor edx, ecx
xor ecx, ecx
mov ch, byte [esi - 5]
and edx, 0x7fff
xor edx, ecx
mov word [eax - 4], dx
movzx edx, byte [esi - 2]
and dl, 0xf8
movzx cx, dl
movzx edx, word [eax - 2]
and dx, 0x83ff
shl cx, 7
or cx, dx
mov word [eax - 2], cx
mov dl, byte [esi - 3]
and dl, 0xf8
movzx dx, dl
add dx, dx
add dx, dx
and ecx, 0xfc1f
or dx, cx
mov word [eax - 2], dx
mov cl, byte [esi - 4]
shr cl, 3
movzx cx, cl
and edx, 0xffe0
or cx, dx
xor edx, edx
mov word [eax - 2], cx
mov dh, byte [esi - 1]
xor edx, ecx
xor ecx, ecx
mov ch, byte [esi - 1]
and edx, 0x7fff
xor edx, ecx
mov word [eax - 2], dx
movzx edx, byte [esi + 2]
and dl, 0xf8
movzx cx, dl
movzx edx, word [eax]
and dx, 0x83ff
shl cx, 7
or cx, dx
mov word [eax], cx
mov dl, byte [esi + 1]
and dl, 0xf8
movzx dx, dl
add dx, dx
add dx, dx
and ecx, 0xfc1f
or dx, cx
mov word [eax], dx
mov cl, byte [esi]
shr cl, 3
movzx cx, cl
and edx, 0xffe0
or cx, dx
mov word [eax], cx
xor edx, edx
mov dh, byte [esi + 3]
add esi, 4
add eax, 2
add esi, 4
add eax, 2
xor edx, ecx
and edx, 0x7fff
xor ecx, ecx
mov ch, byte [esi - 5]
xor edx, ecx
mov word [eax - 4], dx
movzx edx, byte [esi - 2]
and dl, 0xf8
movzx cx, dl
movzx edx, word [eax - 2]
and dx, 0x83ff
shl cx, 7
or cx, dx
mov word [eax - 2], cx
mov dl, byte [esi - 3]
and dl, 0xf8
movzx dx, dl
add dx, dx
add dx, dx
and ecx, 0xfc1f
or dx, cx
mov word [eax - 2], dx
mov cl, byte [esi - 4]
shr cl, 3
movzx cx, cl
and edx, 0xffe0
or cx, dx
mov word [eax - 2], cx
xor edx, edx
mov dh, byte [esi - 1]
xor edx, ecx
xor ecx, ecx
mov ch, byte [esi - 1]
and edx, 0x7fff
xor edx, ecx
mov word [eax - 2], dx
movzx edx, byte [esi + 2]
and dl, 0xf8
movzx cx, dl
movzx edx, word [eax]
and dx, 0x83ff
shl cx, 7
or cx, dx
mov word [eax], cx
mov dl, byte [esi + 1]
and dl, 0xf8
movzx dx, dl
add dx, dx
and ecx, 0xfc1f
add dx, dx
or dx, cx
mov word [eax], dx
mov cl, byte [esi]
shr cl, 3
movzx cx, cl
and edx, 0xffe0
or cx, dx
xor edx, edx
mov word [eax], cx
mov dh, byte [esi + 3]
add eax, 2
add esi, 4
sub edi, 8
xor edx, ecx
xor ecx, ecx
mov ch, byte [esi - 1]
and edx, 0x7fff
xor edx, ecx
sub ebp, 1
mov word [eax - 2], dx
jne 0x591070
pop ebp
test edi, edi
jbe 0x591465
movzx edx, byte [esi + 2]
and dl, 0xf8
movzx cx, dl
mov dx, word [eax]
and dx, 0x83ff
shl cx, 7
or cx, dx
mov word [eax], cx
mov dl, byte [esi + 1]
and dl, 0xf8
movzx dx, dl
add dx, dx
and ecx, 0xfc1f
add dx, dx
or dx, cx
mov word [eax], dx
mov cl, byte [esi]
shr cl, 3
movzx cx, cl
and edx, 0xffe0
or cx, dx
xor edx, edx
mov word [eax], cx
mov dh, byte [esi + 3]
add eax, 2
add esi, 4
xor edx, ecx
xor ecx, ecx
mov ch, byte [esi - 1]
and edx, 0x7fff
xor edx, ecx
sub edi, 1
mov word [eax - 2], dx
jne 0x5913f4
pop edi
pop esi
ret 4