Function at 0x437a00
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x28
mov eax, dword [esp + 0x3c]
mov esi, dword [esp + 0x40]
mov ecx, dword [esp + 0x44]
add ecx, esi
sub ecx, dword [esp + 0x4c]
mov dword [eax + 8], 0
mov dword [eax + 4], 0
mov dword [eax], 0
mov dword [esp + 0x24], ecx
cmp ecx, esi
jbe 0x437d8c
mov ebp, dword [esp + 0x50]
xor eax, eax
xor edi, edi
mov dword [esp + 0xc], 0
jmp 0x437a77
mov esi, dword [esp + 0x18]
mov dword [ebx + eax], esi
add edx, 4
mov eax, dword [esp + 0x3c]
mov dword [eax + 4], edx
mov eax, dword [esp + 0x4c]
add esi, eax
dec esi
mov edi, edx
inc esi
mov eax, ebx
cmp esi, dword [esp + 0x24]
jae 0x437d8c
mov dword [esp], eax
test ebp, ebp
mov dword [esp + 8], edi
je 0x437afb
movzx eax, byte [ebp]
mov byte [esp + 0x18], al
mov byte [esp + 0x14], 0xdb
lea eax, [esp + 0x15]
mov byte [eax + 2], 0
mov word [eax], 0
xor edx, edx
mov ecx, edx
movzx ebx, byte [esp + edx + 0x14]
mov edi, 0xc7983839
sub edi, edx
or edi, ebx
mov eax, 0x39
sub eax, edx
and eax, ebx
not edi
or edi, eax
mov eax, edi
not eax
add edi, 0xe5f91921
or eax, edi
and eax, 1
xor edi, 1
lea eax, [edi + eax*2]
mov byte [esp + edx + 0x14], al
mov eax, edx
xor ecx, 1
add ecx, edx
and edx, 1
and eax, 2
sub ecx, eax
add ecx, edx
mov edx, ecx
cmp ecx, 4
jb 0x437aa0
movzx eax, byte [esp + 0x18]
cmp al, byte [esp + 0x14]
mov edi, dword [esp + 8]
je 0x437b0a
movzx eax, byte [esi]
mov ecx, dword [esp + 0x48]
cmp al, byte [ecx]
jne 0x437cc0
cmp dword [esp + 0x4c], 2
jb 0x437bb0
mov eax, 1
jmp 0x437b34
movzx ecx, byte [esi + eax]
mov edx, dword [esp + 0x48]
cmp cl, byte [edx + eax]
jne 0x437ba5
inc eax
cmp eax, dword [esp + 0x4c]
je 0x437bb0
test ebp, ebp
je 0x437b20
movzx ecx, byte [ebp + eax]
mov byte [esp + 0x1c], 0x45
lea edx, [esp + 0x1d]
mov dword [edx + 3], 0
mov dword [edx], 0
mov edx, 0x3f
mov edi, 0xc0
nop
nop
nop
movzx ebx, byte [esp + edx - 0x23]
mov ebp, ebx
not ebp
or ebp, edx
or ebx, edi
and ebx, ebp
mov ch, 0xc4
sub ch, bl
mov byte [esp + edx - 0x23], ch
inc edx
dec edi
cmp edx, 0x47
jne 0x437b60
cmp cl, byte [esp + 0x1c]
jne 0x437b90
mov ebp, dword [esp + 0x50]
mov edi, dword [esp + 8]
jmp 0x437b2d
movzx ecx, byte [esi + eax]
mov edx, dword [esp + 0x48]
cmp cl, byte [edx + eax]
mov ebp, dword [esp + 0x50]
mov edi, dword [esp + 8]
je 0x437b2d
add esi, eax
dec esi
mov ebx, dword [esp]
jmp 0x437a6a
mov dword [esp + 0x18], esi
mov esi, edi
mov eax, dword [esp]
sub esi, eax
mov edx, edi
mov ebx, eax
cmp edi, dword [esp + 0xc]
jne 0x437d35
mov dword [esp + 4], esi
mov ecx, esi
sar ecx, 2
lea eax, [ecx + 1]
mov edx, ecx
shr edx, 1
add edx, ecx
cmp edx, eax
ja 0x437be1
mov edx, eax
mov dword [esp + 0xc], edx
lea eax, [edx*4]
push eax
call fcn.00408740
add esp, 4
mov esi, eax
mov ebx, dword [esp]
test ebx, ebx
je 0x437d15
cmp esi, ebx
mov edx, dword [esp + 4]
mov dword [esp + 0x10], esi
jbe 0x437cc8
cmp edi, esi
jbe 0x437cc8
test edx, edx
je 0x437d02
mov eax, dword [esp]
mov edx, dword [esp + 4]
add eax, edx
dec eax
mov ecx, dword [esp + 0x10]
add ecx, edx
dec ecx
mov edi, edx
and edi, 7
je 0x437c54
neg edi
xor edx, edx
nop
nop
movzx ebx, byte [eax + edx]
mov byte [ecx + edx], bl
dec edx
cmp edi, edx
jne 0x437c40
add eax, edx
add ecx, edx
add edx, dword [esp + 4]
mov edi, dword [esp]
sub edi, dword [esp + 8]
cmp edi, 0xfffffff8
ja 0x437d02
neg edx
xor edi, edi
nop
nop
nop
nop
nop
nop
nop
nop
movzx ebx, byte [eax + edi]
mov byte [ecx + edi], bl
movzx ebx, byte [eax + edi - 1]
mov byte [ecx + edi - 1], bl
movzx ebx, byte [eax + edi - 2]
mov byte [ecx + edi - 2], bl
movzx ebx, byte [eax + edi - 3]
mov byte [ecx + edi - 3], bl
movzx ebx, byte [eax + edi - 4]
mov byte [ecx + edi - 4], bl
movzx ebx, byte [eax + edi - 5]
mov byte [ecx + edi - 5], bl
movzx ebx, byte [eax + edi - 6]
mov byte [ecx + edi - 6], bl
movzx ebx, byte [eax + edi - 7]
mov byte [ecx + edi - 7], bl
add edi, 0xfffffff8
cmp edx, edi
jne 0x437c70
jmp 0x437d02
mov ebx, dword [esp]
jmp 0x437a6a
mov ecx, edx
shr ecx, 2
mov eax, ebx
mov edi, esi
xchg esi, eax
rep movsd dword es:[edi], dword [esi]
xchg esi, eax
mov eax, edx
and edx, 0xfffffffc
add esi, edx
add edx, ebx
mov ecx, eax
shr ecx, 1
and ecx, 1
mov ebx, edx
mov edi, esi
xchg esi, ebx
rep movsw word es:[edi], word [esi]
xchg esi, ebx
test al, 1
je 0x437d02
mov ecx, dword [esp + 4]
and ecx, 2
movzx edx, byte [edx + ecx]
mov byte [esi + ecx], dl
push dword [esp]
call fcn.00408750
add esp, 4
mov edi, dword [esp + 8]
mov esi, dword [esp + 0x10]
mov eax, dword [esp + 0x3c]
mov dword [eax], esi
mov ebx, esi
mov esi, dword [esp + 4]
lea edx, [ebx + esi]
mov dword [eax + 4], edx
mov ecx, dword [esp + 0xc]
lea ecx, [ebx + ecx*4]
mov dword [esp + 0xc], ecx
mov dword [eax + 8], ecx
mov eax, dword [esp]
xor eax, edi
not dword [esp]
and dword [esp], edi
mov ecx, dword [esp]
add ecx, ecx
mov dword [esp], ecx
sub dword [esp], eax
mov eax, dword [esp]
cmp eax, esi
jae 0x437a50
lea ebp, [ebx + eax]
mov eax, dword [esp]
add eax, ebx
add eax, 4
mov dword [esp + 0x10], ebx
mov ebx, ebp
mov edi, eax
xor ecx, ecx
xchg esi, ebx
rep movsd dword es:[edi], dword [esi]
xchg esi, ebx
mov ebx, dword [esp + 0x10]
mov edi, eax
mov eax, dword [esp]
xor ecx, ecx
xchg esi, ebp
rep movsw word es:[edi], word [esi]
xchg esi, ebp
mov ebp, dword [esp + 0x50]
jmp 0x437a50
mov eax, dword [esp + 0x3c]
add esp, 0x28
pop esi
pop edi
pop ebx
pop ebp
ret