Function at 0x43c790
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x20
mov ebx, dword [esp + 0x3c]
mov ebp, dword [esp + 0x38]
mov esi, dword [esp + 0x34]
mov eax, dword [esi + 0x140]
mov ecx, eax
and ecx, 0xf
je 0x43c91b
mov edi, 0x10
sub edi, ecx
cmp edi, ebx
cmovae edi, ebx
mov dword [esp + 0xc], ecx
lea edx, [esi + ecx]
add edx, 0x168
xor ecx, ecx
cmp edi, 3
jbe 0x43c80e
mov eax, dword [ebp]
xor dword [edx], eax
mov ecx, 4
cmp edi, 8
jb 0x43c80e
mov eax, dword [ebp + 4]
xor dword [edx + 4], eax
mov ecx, 8
cmp edi, 0xc
jb 0x43c80e
mov eax, dword [ebp + 8]
xor dword [edx + 8], eax
mov ecx, 0xc
cmp edi, 0x10
jb 0x43c80e
mov eax, dword [ebp + 0xc]
xor dword [edx + 0xc], eax
mov ecx, 0x10
mov dword [esp + 0x1c], edx
mov eax, edi
sub eax, ecx
jbe 0x43c9aa
cmp eax, 8
mov dword [esp + 0x14], edi
jb 0x43c928
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0xc]
add eax, ecx
mov dword [esp], eax
lea eax, [esi + eax + 0x168]
lea edx, [ebp + ecx]
mov dword [esp + 4], edx
lea edx, [edi + ebp]
mov dword [esp + 0x18], eax
cmp eax, edx
mov eax, dword [esp + 4]
jae 0x43c86a
mov edx, dword [esp + 0xc]
add edx, edi
add edx, esi
add edx, 0x168
cmp eax, edx
jb 0x43c928
xor edx, edx
mov eax, dword [esp + 0x10]
cmp eax, 0x20
jb 0x43c8e0
mov edx, eax
and edx, 0xffffffe0
mov eax, dword [esp]
add eax, esi
add eax, 0x178
mov dword [esp + 8], eax
lea edi, [ecx + ebp]
add edi, 0x10
mov dword [esp], edi
xor edi, edi
mov esi, dword [esp + 8]
mov eax, dword [esp]
nop word [eax + eax]
movups xmm0, xmmword [esi + edi - 0x10]
movups xmm1, xmmword [esi + edi]
movups xmm2, xmmword [eax + edi - 0x10]
xorps xmm2, xmm0
movups xmm0, xmmword [eax + edi]
xorps xmm0, xmm1
movups xmmword [esi + edi - 0x10], xmm2
movups xmmword [esi + edi], xmm0
add edi, 0x20
cmp edx, edi
jne 0x43c8a0
mov eax, dword [esp + 0x10]
cmp eax, edx
mov edi, dword [esp + 0x14]
mov esi, dword [esp + 0x34]
je 0x43c9aa
test al, 0x18
je 0x43c926
and eax, 0xfffffff8
mov dword [esp], eax
add ecx, eax
mov eax, dword [esp + 0x18]
mov edi, dword [esp + 4]
movsd xmm0, qword [eax + edx]
movsd xmm1, qword [edi + edx]
xorps xmm1, xmm0
movlps qword [eax + edx], xmm1
add edx, 8
cmp dword [esp], edx
jne 0x43c8f0
mov eax, dword [esp]
cmp dword [esp + 0x10], eax
mov edi, dword [esp + 0x14]
jne 0x43c928
jmp 0x43c9aa
mov ecx, dword [esi + 0x144]
jmp 0x43c9db
add ecx, edx
mov edx, edi
sub edx, ecx
mov eax, edi
mov edi, ecx
not edi
add edi, eax
mov dword [esp + 4], edi
and edx, 3
je 0x43c95c
mov edi, dword [esp + 0x1c]
nop word cs:[eax + eax]
movzx eax, byte [ebp + ecx]
xor byte [edi + ecx], al
inc ecx
dec edx
jne 0x43c950
cmp dword [esp + 4], 3
mov edi, dword [esp + 0x14]
jb 0x43c9aa
mov eax, dword [esp + 0xc]
add eax, esi
add eax, 0x16b
nop word cs:[eax + eax]
movzx edx, byte [ebp + ecx]
xor byte [eax + ecx - 3], dl
movzx edx, byte [ebp + ecx + 1]
xor byte [eax + ecx - 2], dl
movzx edx, byte [ebp + ecx + 2]
xor byte [eax + ecx - 1], dl
movzx edx, byte [ebp + ecx + 3]
xor byte [eax + ecx], dl
add ecx, 4
cmp edi, ecx
jne 0x43c980
mov eax, dword [esp + 0xc]
add eax, edi
cmp eax, 0x10
jne 0x43c9c6
lea edx, [esi + 0x168]
mov ecx, esi
push edx
call fcn.0043c650
add esp, 4
mov ecx, dword [esi + 0x144]
mov eax, dword [esi + 0x140]
add eax, edi
adc ecx, 0
sub ebx, edi
add ebp, edi
add eax, ebx
adc ecx, 0
mov dword [esi + 0x140], eax
mov dword [esi + 0x144], ecx
cmp ebx, 0x10
jb 0x43ca3c
lea edi, [esi + 0x168]
nop word [eax + eax]
mov eax, dword [ebp]
xor dword [esi + 0x168], eax
mov eax, dword [ebp + 4]
xor dword [esi + 0x16c], eax
mov eax, dword [ebp + 8]
xor dword [esi + 0x170], eax
mov eax, dword [ebp + 0xc]
xor dword [esi + 0x174], eax
mov ecx, esi
mov edx, edi
push edi
call fcn.0043c650
add esp, 4
add ebx, 0xfffffff0
add ebp, 0x10
cmp ebx, 0xf
ja 0x43ca00
test ebx, ebx
je 0x43cba7
xor eax, eax
cmp ebx, 4
jb 0x43ca67
xor ecx, ecx
nop dword [eax]
mov eax, dword [ebp + ecx]
xor dword [esi + ecx + 0x168], eax
lea eax, [ecx + 4]
add ecx, 8
cmp ecx, ebx
mov ecx, eax
jbe 0x43ca50
mov ecx, ebx
sub ecx, eax
jbe 0x43cba7
cmp ecx, 8
jb 0x43cb40
mov dword [esp + 8], ecx
lea edx, [eax + esi]
add edx, 0x168
lea edi, [eax + ebp]
lea ecx, [ebx + ebp]
cmp edx, ecx
jae 0x43caa2
lea ecx, [ebx + esi]
add ecx, 0x168
cmp edi, ecx
jb 0x43cb40
xor ecx, ecx
cmp dword [esp + 8], 0x10
mov dword [esp], edi
jae 0x43caf9
mov edi, dword [esp + 8]
mov dword [esp + 4], edi
mov edi, dword [esp]
and dword [esp + 4], 0xfffffff8
add eax, dword [esp + 4]
nop word cs:[eax + eax]
movsd xmm0, qword [edx + ecx]
movsd xmm1, qword [edi + ecx]
xorps xmm1, xmm0
movlps qword [edx + ecx], xmm1
add ecx, 8
cmp dword [esp + 4], ecx
jne 0x43cad0
mov ecx, dword [esp + 4]
cmp dword [esp + 8], ecx
jne 0x43cb40
jmp 0x43cba7
mov ecx, dword [esp + 8]
and ecx, 0xfffffff0
xor edi, edi
mov dword [esp + 0xc], edx
nop word cs:[eax + eax]
movups xmm0, xmmword [edx + edi]
mov edx, dword [esp]
movups xmm1, xmmword [edx + edi]
mov edx, dword [esp + 0xc]
xorps xmm1, xmm0
movups xmmword [edx + edi], xmm1
add edi, 0x10
cmp ecx, edi
jne 0x43cb10
cmp dword [esp + 8], ecx
je 0x43cba7
test byte [esp + 8], 8
jne 0x43caae
add eax, ecx
mov edx, ebx
sub edx, eax
mov edi, eax
not edi
add edi, ebx
and edx, 3
je 0x43cb60
nop
movzx ecx, byte [ebp + eax]
xor byte [esi + eax + 0x168], cl
inc eax
dec edx
jne 0x43cb50
cmp edi, 3
jb 0x43cba7
nop word cs:[eax + eax]
movzx ecx, byte [ebp + eax]
xor byte [esi + eax + 0x168], cl
movzx ecx, byte [ebp + eax + 1]
xor byte [esi + eax + 0x169], cl
movzx ecx, byte [ebp + eax + 2]
xor byte [esi + eax + 0x16a], cl
movzx ecx, byte [ebp + eax + 3]
xor byte [esi + eax + 0x16b], cl
add eax, 4
cmp ebx, eax
jne 0x43cb70
xor eax, eax
add esp, 0x20
pop esi
pop edi
pop ebx
pop ebp
ret