Function at 0x43b400
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x24
mov eax, dword [esp + 0x38]
mov esi, dword [esp + 0x3c]
mov ecx, dword [esp + 0x40]
add ecx, esi
sub ecx, dword [esp + 0x48]
mov dword [eax + 8], 0
mov dword [eax + 4], 0
mov dword [eax], 0
mov dword [esp + 0x1c], ecx
cmp ecx, esi
jbe 0x43b77d
mov ebp, dword [esp + 0x4c]
xor edx, edx
mov dword [esp + 4], 0
mov dword [esp + 0x10], 0
jmp 0x43b495
mov edx, dword [esp + 0xc]
mov edi, edx
mov ecx, dword [esp + 4]
sub edi, ecx
cmp edx, dword [esp + 0x10]
mov eax, dword [esp + 0x38]
je 0x43b5e9
mov dword [ecx + edi], esi
add edx, 4
mov dword [eax + 4], edx
mov ecx, dword [esp + 0x48]
add esi, ecx
dec esi
inc esi
cmp esi, dword [esp + 0x1c]
jae 0x43b77d
test ebp, ebp
je 0x43b4f1
mov edi, edx
movzx ecx, byte [ebp]
mov byte [esp + 0x14], 0xd7
lea eax, [esp + 0x15]
mov word [eax + 4], 0
mov dword [eax], 0
mov eax, 0x454ac0a4
nop
nop
nop
nop
nop
nop
nop
movzx edx, byte [esp + eax - 0x454ac090]
xor edx, eax
add edx, 0xa58a3ccb
mov ebx, edx
and ebx, 1
or edx, 1
add edx, ebx
mov byte [esp + eax - 0x454ac090], dl
inc eax
cmp eax, 0x454ac0ab
jne 0x43b4c0
cmp cl, byte [esp + 0x14]
mov edx, edi
je 0x43b500
movzx eax, byte [esi]
mov ecx, dword [esp + 0x44]
cmp al, byte [ecx]
jne 0x43b5e0
mov dword [esp + 0xc], edx
cmp dword [esp + 0x48], 2
jb 0x43b460
mov ecx, 1
mov dword [esp + 0x20], esi
jmp 0x43b53c
movzx eax, byte [esi + ecx]
mov edx, dword [esp + 0x44]
cmp al, byte [edx + ecx]
jne 0x43b6df
inc ecx
cmp ecx, dword [esp + 0x48]
je 0x43b460
test ebp, ebp
je 0x43b520
mov esi, ebp
movzx edx, byte [ebp + ecx]
mov byte [esp + 0x14], 0xb
lea eax, [esp + 0x15]
mov dword [eax + 3], 0
mov dword [eax], 0
xor ebx, ebx
nop
movzx edi, byte [esp + ebx + 0x14]
lea eax, [ebx + 0x247c7f2]
mov ebp, 0x35b8380d
sub ebp, ebx
and ebp, 0x35a01005
and eax, 0x202838a
or eax, ebp
xor eax, edi
xor eax, 0xc21aab8a
mov edi, 0xcc991844
sub edi, eax
mov ebp, edi
and ebp, 1
add eax, 0x1b
and eax, 0x17
and edi, 0xe8
or edi, eax
xor edi, 0x16
lea eax, [edi + ebp*2]
mov byte [esp + ebx + 0x14], al
mov eax, ebx
and eax, 2
mov edi, ebx
xor edi, 0x9dfb9952
lea eax, [edi + eax*2]
or eax, 1
or ebx, 0x620466ae
add ebx, eax
cmp ebx, 8
jb 0x43b560
cmp dl, byte [esp + 0x14]
mov ebp, esi
mov esi, dword [esp + 0x20]
jne 0x43b520
jmp 0x43b531
mov eax, dword [esp + 0x38]
jmp 0x43b48a
mov ecx, edi
sar ecx, 2
lea eax, [ecx + 1]
mov ebx, ecx
shr ebx, 1
add ebx, ecx
cmp ebx, eax
ja 0x43b5fd
mov ebx, eax
lea eax, [ebx*4]
push eax
call fcn.004095d0
add esp, 4
mov ecx, eax
mov eax, dword [esp + 4]
test eax, eax
mov dword [esp], ecx
je 0x43b756
mov dword [esp + 0x10], ebx
cmp ecx, eax
mov eax, dword [esp + 0xc]
mov dword [esp + 8], edi
jbe 0x43b6ef
cmp eax, ecx
jbe 0x43b6ef
test edi, edi
je 0x43b73f
mov eax, dword [esp + 4]
mov edx, dword [esp + 8]
add eax, edx
dec eax
mov ecx, dword [esp]
add ecx, edx
dec ecx
mov edi, edx
and edi, 7
je 0x43b674
neg edi
xor edx, edx
nop
nop
movzx ebx, byte [eax + edx]
mov byte [ecx + edx], bl
dec edx
cmp edi, edx
jne 0x43b660
add eax, edx
add ecx, edx
add edx, dword [esp + 8]
mov edi, dword [esp + 4]
sub edi, dword [esp + 0xc]
cmp edi, 0xfffffff8
ja 0x43b73f
neg edx
xor edi, edi
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 0x43b690
jmp 0x43b73f
add esi, ecx
dec esi
mov eax, dword [esp + 0x38]
mov edx, dword [esp + 0xc]
jmp 0x43b48a
mov eax, edi
mov edi, ecx
mov ecx, eax
shr ecx, 2
mov ebx, dword [esp + 4]
mov eax, ebx
xchg esi, eax
rep movsd dword es:[edi], dword [esi]
xchg esi, eax
mov ecx, dword [esp + 8]
mov edx, ecx
and edx, 0xfffffffc
mov eax, dword [esp]
add eax, edx
add edx, ebx
shr ecx, 1
and ecx, 1
mov ebx, edx
mov dword [esp + 0xc], eax
mov edi, eax
xchg esi, ebx
rep movsw word es:[edi], word [esi]
xchg esi, ebx
test byte [esp + 8], 1
je 0x43b73f
mov ecx, dword [esp + 8]
and ecx, 2
movzx edx, byte [edx + ecx]
mov eax, dword [esp + 0xc]
mov byte [eax + ecx], dl
push dword [esp + 4]
call fcn.004095e0
add esp, 4
mov edi, dword [esp + 8]
mov ebx, dword [esp + 0x10]
mov ecx, dword [esp]
mov eax, dword [esp + 0x38]
mov dword [eax], ecx
mov ecx, dword [esp]
lea ecx, [ecx + ebx*4]
mov edx, dword [esp]
add edx, edi
mov dword [esp + 0x10], ecx
mov dword [eax + 8], ecx
mov ecx, dword [esp]
mov dword [esp + 4], ecx
mov ecx, dword [esp]
jmp 0x43b47a
add esp, 0x24
pop esi
pop edi
pop ebx
pop ebp
ret