Function at 0x437b10
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x24
mov ebp, dword [esp + 0x38]
mov esi, dword [esp + 0x3c]
mov eax, dword [esp + 0x40]
add eax, esi
sub eax, dword [esp + 0x48]
mov dword [ebp + 8], 0
mov dword [ebp + 4], 0
mov dword [ebp], 0
mov dword [esp + 0x20], eax
cmp eax, esi
jbe 0x437e59
mov edi, dword [esp + 0x4c]
xor ecx, ecx
mov dword [esp], 0
mov dword [esp + 8], 0
jmp 0x437ba0
mov ecx, dword [esp + 4]
mov ebx, ecx
mov eax, dword [esp]
sub ebx, eax
cmp ecx, dword [esp + 8]
je 0x437cc9
mov dword [eax + ebx], esi
add ecx, 4
mov dword [ebp + 4], ecx
mov eax, dword [esp + 0x48]
add esi, eax
dec esi
inc esi
cmp esi, dword [esp + 0x20]
jae 0x437e59
mov dword [esp + 4], ecx
test edi, edi
je 0x437c19
movzx ecx, byte [edi]
mov byte [esp + 0xc], 0xcd
lea eax, [esp + 0xd]
mov byte [eax + 2], 0
mov word [eax], 0
mov edx, 0x7a088c1d
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movzx ebx, byte [esp + edx - 0x7a088c11]
xor ebx, edx
mov eax, ebx
and eax, 0x6c
mov ebp, ebx
and ebp, 2
mov edi, ebp
xor edi, 2
imul edi, eax
or eax, 2
imul eax, ebp
xor ebx, 0x6e
add ebx, edi
add ebx, eax
inc bl
mov byte [esp + edx - 0x7a088c11], bl
inc edx
cmp edx, 0x7a088c21
jne 0x437bd0
cmp cl, byte [esp + 0xc]
mov ebp, dword [esp + 0x38]
mov edi, dword [esp + 0x4c]
je 0x437c28
movzx eax, byte [esi]
mov ecx, dword [esp + 0x44]
cmp al, byte [ecx]
jne 0x437cc0
cmp dword [esp + 0x48], 2
jb 0x437b70
mov ecx, 1
jmp 0x437c5c
movzx eax, byte [esi + ecx]
mov edx, dword [esp + 0x44]
cmp al, byte [edx + ecx]
jne 0x437dbf
inc ecx
cmp ecx, dword [esp + 0x48]
je 0x437b70
test edi, edi
je 0x437c40
movzx edx, byte [edi + ecx]
mov byte [esp + 0x18], 0x4b
lea eax, [esp + 0x19]
mov dword [eax + 3], 0
mov dword [eax], 0
mov ebx, 0x57eb2662
nop
movzx eax, byte [esp + ebx - 0x57eb264a]
xor eax, ebx
mov edi, eax
not edi
and edi, 0xeb
and eax, 0x14
sub eax, edi
inc al
mov byte [esp + ebx - 0x57eb264a], al
inc ebx
cmp ebx, 0x57eb266a
jne 0x437c80
cmp dl, byte [esp + 0x18]
mov edi, dword [esp + 0x4c]
jne 0x437c40
jmp 0x437c51
mov ecx, dword [esp + 4]
jmp 0x437b95
mov ecx, ebx
sar ecx, 2
lea eax, [ecx + 1]
mov edx, ecx
shr edx, 1
add edx, ecx
cmp edx, eax
ja 0x437cdd
mov edx, eax
mov dword [esp + 8], edx
lea eax, [edx*4]
push eax
call fcn.00408940
add esp, 4
mov ebp, eax
mov edx, dword [esp]
test edx, edx
je 0x437e2f
cmp ebp, edx
mov eax, dword [esp + 4]
mov dword [esp + 0x10], ebx
mov dword [esp + 0x14], ebp
jbe 0x437dd6
cmp eax, ebp
jbe 0x437dd6
test ebx, ebx
je 0x437e18
mov eax, dword [esp]
mov edx, dword [esp + 0x10]
add eax, edx
dec eax
mov ecx, dword [esp + 0x14]
add ecx, edx
dec ecx
mov edi, edx
and edi, 7
je 0x437d54
neg edi
xor edx, edx
nop
nop
movzx ebx, byte [eax + edx]
mov byte [ecx + edx], bl
dec edx
cmp edi, edx
jne 0x437d40
add eax, edx
add ecx, edx
add edx, dword [esp + 0x10]
mov edi, dword [esp]
sub edi, dword [esp + 4]
cmp edi, 0xfffffff8
ja 0x437e18
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 0x437d70
jmp 0x437e18
mov eax, ecx
xor eax, 1
and ecx, 0xfffffffe
add ecx, ecx
sub ecx, eax
add esi, ecx
mov ecx, dword [esp + 4]
jmp 0x437b95
mov ecx, ebx
shr ecx, 2
mov eax, edx
mov dword [esp], edx
mov edi, ebp
xchg esi, eax
rep movsd dword es:[edi], dword [esi]
xchg esi, eax
mov edx, ebx
and edx, 0xfffffffc
add ebp, edx
add edx, dword [esp]
mov eax, ebx
not eax
or eax, 3
add eax, ebx
inc eax
mov ecx, eax
shr ecx, 1
mov ebx, edx
mov edi, ebp
xchg esi, ebx
rep movsw word es:[edi], word [esi]
xchg esi, ebx
test al, 1
je 0x437e18
and eax, 0xfffffffe
movzx ecx, byte [edx + eax]
mov byte [ebp + eax], cl
push dword [esp]
call fcn.00408950
add esp, 4
mov edi, dword [esp + 0x4c]
mov ebx, dword [esp + 0x10]
mov ebp, dword [esp + 0x14]
mov edx, dword [esp + 0x38]
mov dword [edx], ebp
mov eax, dword [esp + 8]
lea eax, [eax*4]
add eax, ebp
mov ecx, ebp
add ecx, ebx
mov dword [esp + 8], eax
mov dword [edx + 8], eax
mov eax, ebp
mov dword [esp], ebp
mov ebp, edx
jmp 0x437b85
mov eax, ebp
add esp, 0x24
pop esi
pop edi
pop ebx
pop ebp
ret