Function at 0x43c460
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x28
mov eax, dword [esp + 0x3c]
mov ebx, dword [esp + 0x40]
mov ecx, dword [esp + 0x44]
add ecx, ebx
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, ebx
jbe 0x43c7cc
mov edi, dword [esp + 0x50]
xor edx, edx
xor esi, esi
mov dword [esp + 4], 0
jmp 0x43c4bf
mov eax, dword [esp + 0x3c]
inc ebx
cmp ebx, dword [esp + 0x24]
jae 0x43c7cc
test edi, edi
mov dword [esp], edx
mov dword [esp + 8], ebx
je 0x43c524
movzx ecx, byte [edi]
mov byte [esp + 0xc], 0x3d
lea eax, [esp + 0xd]
mov dword [eax + 3], 0
mov dword [eax], 0
mov edx, 0x55be732b
nop
nop
nop
nop
nop
nop
nop
nop
movzx ebx, byte [esp + edx - 0x55be731f]
xor ebx, edx
mov eax, ebx
and eax, 1
or ebx, 1
add ebx, eax
add bl, 0x28
mov byte [esp + edx - 0x55be731f], bl
inc edx
cmp edx, 0x55be7333
jne 0x43c4f0
cmp cl, byte [esp + 0xc]
mov edx, dword [esp]
mov ebx, dword [esp + 8]
je 0x43c52f
movzx eax, byte [ebx]
mov ecx, dword [esp + 0x48]
cmp al, byte [ecx]
jne 0x43c4b0
cmp dword [esp + 0x4c], 2
jb 0x43c600
mov edx, 1
jmp 0x43c56c
movzx eax, byte [ebx + edx]
mov ecx, dword [esp + 0x48]
cmp al, byte [ecx + edx]
jne 0x43c5e9
inc edx
cmp edx, dword [esp + 0x4c]
je 0x43c600
test edi, edi
je 0x43c550
movzx ebx, byte [edi + edx]
mov byte [esp + 0xc], 0xef
lea eax, [esp + 0xd]
mov word [eax + 4], 0
mov dword [eax], 0
xor edi, edi
mov ebp, 0x87
mov ecx, ebp
and ecx, 0x82
mov eax, edi
and eax, 5
or eax, ecx
xor al, byte [esp + edi + 0xc]
xor al, 0xfa
add al, 0xa8
mov byte [esp + edi + 0xc], al
inc edi
dec ebp
cmp edi, 7
jne 0x43c590
cmp bl, byte [esp + 0xc]
jne 0x43c5d0
mov edi, dword [esp + 0x50]
mov ebx, dword [esp + 8]
jmp 0x43c561
mov ebx, dword [esp + 8]
movzx eax, byte [ebx + edx]
mov ecx, dword [esp + 0x48]
cmp al, byte [ecx + edx]
mov edi, dword [esp + 0x50]
je 0x43c561
add ebx, edx
dec ebx
mov eax, dword [esp + 0x3c]
mov edx, dword [esp]
jmp 0x43c4b4
mov ebx, esi
mov edx, dword [esp]
sub ebx, edx
cmp esi, dword [esp + 4]
mov eax, dword [esp + 0x3c]
je 0x43c618
mov ebp, edx
jmp 0x43c7b0
mov ecx, esi
xor ecx, edx
not edx
and edx, esi
add edx, edx
mov dword [esp + 0x18], edx
mov eax, edx
mov dword [esp + 0x14], ecx
sub eax, ecx
mov dword [esp + 4], eax
sar eax, 2
mov esi, eax
shr esi, 1
add esi, eax
mov eax, ebx
sar eax, 2
inc eax
cmp esi, eax
ja 0x43c647
mov esi, eax
mov eax, esi
and eax, 0xfffffffb
mov ecx, esi
and ecx, 4
mov edx, esi
or edx, 4
imul edx, ecx
xor ecx, 4
imul ecx, eax
add edx, ecx
push edx
call fcn.00409860
add esp, 4
mov ebp, eax
mov edx, dword [esp]
test edx, edx
je 0x43c794
mov dword [esp + 0x1c], esi
mov dword [esp + 0x20], ebx
cmp ebp, edx
mov ebx, dword [esp + 4]
jbe 0x43c6c8
lea eax, [edx + ebx]
cmp eax, ebp
jbe 0x43c6c8
test ebx, ebx
je 0x43c781
mov eax, dword [esp]
add eax, ebx
dec eax
lea ecx, [ebx + ebp]
dec ecx
mov edi, ebx
and edi, 7
je 0x43c710
neg edi
xor edx, edx
mov esi, dword [esp + 0x14]
nop
movzx ebx, byte [eax + edx]
mov byte [ecx + edx], bl
dec edx
cmp edi, edx
jne 0x43c6b0
add eax, edx
add ecx, edx
mov ebx, dword [esp + 4]
add ebx, edx
jmp 0x43c714
mov ecx, ebx
shr ecx, 2
mov eax, edx
mov edi, ebp
xchg esi, eax
rep movsd dword es:[edi], dword [esi]
xchg esi, eax
mov ecx, edx
mov edx, ebx
and edx, 0xfffffffc
lea eax, [edx + ebp]
add edx, ecx
mov ecx, ebx
shr ecx, 1
and ecx, 1
mov ebx, edx
mov edi, eax
xchg esi, ebx
rep movsw word es:[edi], word [esi]
xchg esi, ebx
mov ebx, dword [esp + 4]
mov edi, dword [esp + 0x50]
test bl, 1
je 0x43c781
and ebx, 2
movzx ecx, byte [edx + ebx]
mov byte [eax + ebx], cl
jmp 0x43c781
mov esi, dword [esp + 0x14]
sub esi, dword [esp + 0x18]
cmp esi, 0xfffffff8
mov edi, dword [esp + 0x50]
ja 0x43c781
neg ebx
xor edx, edx
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
mov esi, ebx
movzx ebx, byte [eax + edx]
mov byte [ecx + edx], bl
movzx ebx, byte [eax + edx - 1]
mov byte [ecx + edx - 1], bl
movzx ebx, byte [eax + edx - 2]
mov byte [ecx + edx - 2], bl
movzx ebx, byte [eax + edx - 3]
mov byte [ecx + edx - 3], bl
movzx ebx, byte [eax + edx - 4]
mov byte [ecx + edx - 4], bl
movzx ebx, byte [eax + edx - 5]
mov byte [ecx + edx - 5], bl
movzx ebx, byte [eax + edx - 6]
mov byte [ecx + edx - 6], bl
movzx ebx, byte [eax + edx - 7]
mov byte [ecx + edx - 7], bl
mov ebx, esi
add edx, 0xfffffff8
cmp esi, edx
jne 0x43c730
push dword [esp]
call fcn.00409870
add esp, 4
mov ebx, dword [esp + 0x20]
mov esi, dword [esp + 0x1c]
mov eax, dword [esp + 0x3c]
mov dword [eax], ebp
lea ecx, [esi*4]
add ecx, ebp
mov esi, ebp
add esi, ebx
mov dword [esp + 4], ecx
mov dword [eax + 8], ecx
mov edx, ebp
mov ecx, dword [esp + 8]
mov dword [ebp + ebx], ecx
mov ebx, ecx
add esi, 4
mov dword [eax + 4], esi
mov ecx, dword [esp + 0x4c]
add ebx, ecx
dec ebx
jmp 0x43c4b4
add esp, 0x28
pop esi
pop edi
pop ebx
pop ebp
ret