Function at 0x401790
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
and esp, 0xfffffff0
sub esp, 0x1d0
mov edi, dword [ebp + 8]
mov edx, dword [ebp + 0x10]
mov ebx, dword [ebp + 0xc]
mov ecx, 0x10
mov esi, dword [edi + 0x1f0]
mov eax, edx
sub ecx, esi
sub eax, ecx
mov dword [esp + 0x10], eax
jae 0x4018ba
mov ecx, esi
add ecx, edx
jb 0x40197f
cmp ecx, 0x10
ja 0x401998
mov eax, edx
test edx, edx
je 0x4018af
lea ecx, [edi + 0x1e0]
xor edx, edx
add ecx, esi
cmp eax, 8
jb 0x401890
xor edx, edx
cmp eax, 0x20
jb 0x401850
mov edx, eax
mov eax, edi
lea esi, [esi + edi + 0x1f0]
xor edi, edi
and edx, 0xffffffe0
nop word [eax + eax]
movups xmm0, xmmword [ebx + edi]
movups xmm2, xmmword [esi + edi - 0x10]
movups xmm3, xmmword [esi + edi]
movups xmm1, xmmword [ebx + edi + 0x10]
xorps xmm2, xmm0
xorps xmm3, xmm1
movups xmmword [esi + edi - 0x10], xmm0
movups xmmword [esi + edi], xmm1
movups xmmword [ebx + edi], xmm2
movups xmmword [ebx + edi + 0x10], xmm3
add edi, 0x20
cmp edx, edi
jne 0x401810
mov esi, dword [ebp + 0x10]
mov edi, eax
cmp edx, esi
mov eax, esi
je 0x4018a7
test al, 0x18
je 0x401890
mov esi, edx
mov edx, eax
and edx, 0xfffffff8
nop word [eax + eax]
movsd xmm0, qword [ebx + esi]
movsd xmm1, qword [ecx + esi]
xorps xmm1, xmm0
movsd qword [ecx + esi], xmm0
movlps qword [ebx + esi], xmm1
add esi, 8
cmp edx, esi
jne 0x401860
cmp edx, eax
je 0x4018a7
nop word cs:[eax + eax]
nop dword [eax + eax]
movzx eax, byte [ebx + edx]
mov ah, byte [ecx + edx]
xor ah, al
mov byte [ecx + edx], al
mov byte [ebx + edx], ah
mov eax, dword [ebp + 0x10]
inc edx
cmp eax, edx
jne 0x401890
add eax, dword [edi + 0x1f0]
mov ecx, eax
mov dword [edi + 0x1f0], ecx
jmp 0x40202e
movsd xmm0, qword [edi + 0x1e0]
movsd xmm1, qword [edi + 0x1e8]
cmp esi, 0x11
movsd qword [esp + 8], xmm1
movsd qword [esp], xmm0
jae 0x40198b
cmp esi, 0x10
je 0x4019bd
xor edx, edx
lea eax, [esp + esi]
cmp ecx, 8
mov dword [esp + 0x14], ecx
jb 0x4019a5
xor edx, edx
cmp ecx, 0x20
jb 0x401952
mov edx, ecx
mov ecx, edi
mov edi, esp
lea esi, [esi + edi + 0x10]
and edx, 0xffffffe0
xor edi, edi
nop
movups xmm0, xmmword [ebx + edi]
movups xmm2, xmmword [esi + edi - 0x10]
movups xmm3, xmmword [esi + edi]
movups xmm1, xmmword [ebx + edi + 0x10]
xorps xmm2, xmm0
xorps xmm3, xmm1
movups xmmword [esi + edi - 0x10], xmm0
movups xmmword [esi + edi], xmm1
movups xmmword [ebx + edi], xmm2
movups xmmword [ebx + edi + 0x10], xmm3
add edi, 0x20
cmp edx, edi
jne 0x401910
mov esi, dword [esp + 0x14]
mov edi, ecx
cmp esi, edx
mov ecx, esi
je 0x4019bd
test cl, 0x18
je 0x4019a5
mov esi, edx
mov edx, ecx
and edx, 0xfffffff8
nop dword [eax]
movsd xmm0, qword [ebx + esi]
movsd xmm1, qword [eax + esi]
xorps xmm1, xmm0
movsd qword [eax + esi], xmm0
movlps qword [ebx + esi], xmm1
add esi, 8
cmp edx, esi
jne 0x401960
jmp 0x4019b9
push 0x43039c
push ecx
push esi
call fcn.0042f9e0
push 0x43038c
push 0x10
push esi
call fcn.0042f920
push 0x43039c
push 0x10
push ecx
call fcn.0042f980
movzx ecx, byte [ebx + edx]
mov ch, byte [eax + edx]
xor ch, cl
mov byte [eax + edx], cl
mov byte [ebx + edx], ch
mov ecx, dword [esp + 0x14]
inc edx
cmp ecx, edx
jne 0x4019a5
movsd xmm2, qword [esp]
movsd xmm1, qword [esp + 8]
xorps xmm0, xmm0
add ebx, ecx
lea eax, [esp + 0x4c]
movsd qword [esp + 0x64], xmm0
movsd qword [esp + 0x5c], xmm0
movsd qword [esp + 0x4c], xmm2
movsd qword [esp + 0x54], xmm1
push 2
push eax
push edi
call fcn.004051f0
add esp, 0xc
mov esi, dword [esp + 0x10]
movsd xmm0, qword [esp + 0x4c]
movsd xmm1, qword [esp + 0x54]
cmp esi, 0x7f
movsd qword [esp + 8], xmm1
movsd qword [esp], xmm0
jbe 0x401d85
movsd xmm1, qword [ebx + 8]
movsd xmm0, qword [ebx]
movsd xmm2, qword [ebx + 0x10]
movsd xmm3, qword [ebx + 0x20]
lea edi, [ebx + 0x10]
lea ecx, [esp + 0xcc]
movsd qword [esp + 0x54], xmm1
movsd xmm1, qword [ebx + 0x18]
movsd qword [esp + 0x4c], xmm0
movsd qword [esp + 0x5c], xmm2
movsd xmm2, qword [ebx + 0x30]
movsd qword [esp + 0x64], xmm1
movsd xmm1, qword [ebx + 0x28]
movsd qword [esp + 0x6c], xmm3
movsd xmm3, qword [ebx + 0x40]
movsd qword [esp + 0x74], xmm1
movsd xmm1, qword [ebx + 0x38]
movsd qword [esp + 0x7c], xmm2
movsd xmm2, qword [ebx + 0x50]
movsd qword [esp + 0x84], xmm1
movsd xmm1, qword [ebx + 0x48]
movsd qword [esp + 0x8c], xmm3
movsd xmm3, qword [ebx + 0x60]
movsd qword [esp + 0x94], xmm1
movsd xmm1, qword [ebx + 0x58]
movsd qword [esp + 0x9c], xmm2
movsd xmm2, qword [ebx + 0x70]
movsd qword [esp + 0xa4], xmm1
movsd xmm1, qword [ebx + 0x68]
movsd qword [esp + 0xac], xmm3
movsd qword [esp + 0xb4], xmm1
movsd xmm1, qword [ebx + 0x78]
movsd qword [esp + 0xbc], xmm2
movsd qword [esp + 0xc4], xmm1
push 0x80
lea eax, [esp + 0x50]
push eax
push ecx
call fcn.0042acb0
add esp, 0xc
push 2
lea eax, [esp + 0xd0]
push eax
mov esi, dword [ebp + 8]
push esi
call fcn.004051f0
add esp, 0xc
push 2
lea eax, [esp + 0xf0]
push eax
push esi
call fcn.004051f0
add esp, 0xc
push 2
lea eax, [esp + 0x110]
push eax
push esi
call fcn.004051f0
add esp, 0xc
push 2
lea eax, [esp + 0x130]
push eax
push esi
call fcn.004051f0
add esp, 0xc
mov eax, dword [esp + 0x10]
movups xmm0, xmmword [esp]
movups xmm1, xmmword [ebx]
add eax, 0xfffffff0
xorps xmm1, xmm0
mov ecx, eax
cmp eax, 0xf0
movups xmmword [ebx], xmm1
jb 0x401d8e
mov esi, ecx
nop word cs:[eax + eax]
nop dword [eax]
movsd xmm0, qword [edi + 0x70]
movsd xmm1, qword [edi + 0x78]
lea eax, [esp + 0x5c]
movsd xmm2, qword [edi + 0x88]
movsd xmm3, qword [edi + 0x98]
lea ebx, [edi + 0x80]
mov dword [esp + 0x10], esi
movsd qword [esp + 0x4c], xmm0
movsd xmm0, qword [edi + 0x80]
movsd qword [esp + 0x54], xmm1
movsd qword [eax + 8], xmm2
movsd xmm2, qword [edi + 0xa8]
movsd qword [eax], xmm0
movsd xmm0, qword [edi + 0x90]
movsd qword [eax + 0x18], xmm3
movsd xmm3, qword [edi + 0xb8]
movsd qword [eax + 0x10], xmm0
movsd xmm0, qword [edi + 0xa0]
movsd qword [eax + 0x28], xmm2
movsd xmm2, qword [edi + 0xc8]
movsd qword [eax + 0x20], xmm0
movsd xmm0, qword [edi + 0xb0]
movsd qword [eax + 0x38], xmm3
movsd xmm3, qword [edi + 0xd8]
movsd qword [eax + 0x30], xmm0
movsd xmm0, qword [edi + 0xc0]
movsd qword [eax + 0x48], xmm2
movsd xmm2, qword [edi + 0xe8]
movsd qword [eax + 0x40], xmm0
movsd xmm0, qword [edi + 0xd0]
movsd qword [eax + 0x58], xmm3
movsd qword [eax + 0x50], xmm0
movsd xmm0, qword [edi + 0xe0]
movsd qword [eax + 0x68], xmm2
movsd qword [eax + 0x60], xmm0
push 0x80
lea eax, [esp + 0x50]
push eax
lea esi, [esp + 0x154]
push esi
call fcn.0042acb0
add esp, 0xc
push 2
push esi
mov esi, dword [ebp + 8]
push esi
call fcn.004051f0
add esp, 0xc
push 2
lea eax, [esp + 0x170]
push eax
push esi
call fcn.004051f0
add esp, 0xc
push 2
lea eax, [esp + 0x190]
push eax
push esi
call fcn.004051f0
add esp, 0xc
push 2
lea eax, [esp + 0x1b0]
push eax
push esi
mov esi, dword [esp + 0x1c]
call fcn.004051f0
add esp, 0xc
movups xmm0, xmmword [esp + 0xcc]
movups xmm2, xmmword [edi]
movups xmm1, xmmword [esp + 0xdc]
add esi, 0xffffff80
xorps xmm2, xmm0
movups xmm0, xmmword [edi + 0x10]
movups xmmword [edi], xmm2
xorps xmm0, xmm1
movups xmm1, xmmword [esp + 0xfc]
movups xmmword [edi + 0x10], xmm0
movups xmm0, xmmword [esp + 0xec]
movups xmm2, xmmword [edi + 0x20]
xorps xmm2, xmm0
movups xmm0, xmmword [edi + 0x30]
movups xmmword [edi + 0x20], xmm2
xorps xmm0, xmm1
movups xmm1, xmmword [esp + 0x11c]
movups xmmword [edi + 0x30], xmm0
movups xmm0, xmmword [esp + 0x10c]
movups xmm2, xmmword [edi + 0x40]
xorps xmm2, xmm0
movups xmm0, xmmword [edi + 0x50]
movups xmmword [edi + 0x40], xmm2
xorps xmm0, xmm1
movups xmm1, xmmword [esp + 0x13c]
movups xmmword [edi + 0x50], xmm0
movups xmm0, xmmword [esp + 0x12c]
movups xmm2, xmmword [edi + 0x60]
movups xmm3, xmmword [edi + 0x70]
xorps xmm2, xmm0
xorps xmm3, xmm1
movups xmmword [edi + 0x60], xmm2
movups xmmword [edi + 0x70], xmm3
push 0x80
lea eax, [esp + 0x150]
push eax
lea eax, [esp + 0xd4]
push eax
call fcn.0042acb0
add esp, 0xc
cmp esi, 0xef
mov edi, ebx
ja 0x401b80
jmp 0x401d92
mov dword [esp + 0x18], ebx
jmp 0x401e7f
mov ebx, edi
mov esi, ecx
add esi, 0xffffff90
mov eax, 0xffffff90
nop word [eax + eax]
movzx ecx, byte [esp + eax + 0x13c]
mov ch, byte [esp + eax + 0x14a]
movzx edx, byte [esp + eax + 0x14b]
xor byte [ebx + eax + 0x70], cl
mov cl, byte [esp + eax + 0x13d]
xor byte [ebx + eax + 0x71], cl
mov cl, byte [esp + eax + 0x13e]
xor byte [ebx + eax + 0x72], cl
mov cl, byte [esp + eax + 0x13f]
xor byte [ebx + eax + 0x73], cl
mov cl, byte [esp + eax + 0x140]
xor byte [ebx + eax + 0x74], cl
mov cl, byte [esp + eax + 0x141]
xor byte [ebx + eax + 0x75], cl
mov cl, byte [esp + eax + 0x142]
xor byte [ebx + eax + 0x76], cl
mov cl, byte [esp + eax + 0x143]
xor byte [ebx + eax + 0x77], cl
mov cl, byte [esp + eax + 0x144]
xor byte [ebx + eax + 0x78], cl
mov cl, byte [esp + eax + 0x145]
xor byte [ebx + eax + 0x79], cl
mov cl, byte [esp + eax + 0x146]
xor byte [ebx + eax + 0x7a], cl
mov cl, byte [esp + eax + 0x147]
xor byte [ebx + eax + 0x7b], cl
mov cl, byte [esp + eax + 0x148]
xor byte [ebx + eax + 0x7c], cl
mov cl, byte [esp + eax + 0x149]
xor byte [ebx + eax + 0x7d], cl
xor byte [ebx + eax + 0x7e], ch
xor byte [ebx + eax + 0x7f], dl
add eax, 0x10
jne 0x401da0
movsd xmm0, qword [esp + 0x13c]
movsd xmm1, qword [esp + 0x144]
add ebx, 0x70
mov dword [esp + 0x18], ebx
movsd qword [esp + 8], xmm1
movsd qword [esp], xmm0
mov ebx, dword [ebp + 8]
mov eax, esi
and esi, 0xf
lea edi, [esp + 0x4c]
and eax, 0xfffffff0
mov dword [esp + 0x10], esi
test eax, eax
mov dword [esp + 0x1c], eax
je 0x401fe6
mov eax, dword [esp + 0x1c]
mov esi, dword [esp + 0x18]
neg eax
nop dword [eax + eax]
movsd xmm0, qword [esi]
mov dword [esp + 0x14], eax
movzx eax, byte [esp]
movsd xmm1, qword [esi + 8]
movaps xmmword [esp + 0x20], xmm0
xor al, byte [esp + 0x20]
movzx edx, byte [esp + 1]
movups xmm0, xmmword [esi]
movzx ecx, byte [esp + 2]
mov byte [esi], al
xor dl, byte [esp + 0x21]
mov byte [esi + 1], dl
movzx edx, byte [esp + 3]
xor cl, byte [esp + 0x22]
mov byte [esi + 2], cl
movzx ecx, byte [esp + 4]
xor dl, byte [esp + 0x23]
mov byte [esi + 3], dl
movzx edx, byte [esp + 5]
xor cl, byte [esp + 0x24]
mov byte [esi + 4], cl
movzx ecx, byte [esp + 6]
xor dl, byte [esp + 0x25]
mov byte [esi + 5], dl
movzx edx, byte [esp + 7]
xor cl, byte [esp + 0x26]
mov byte [esi + 6], cl
movzx ecx, byte [esp + 8]
xor dl, byte [esp + 0x27]
mov byte [esi + 7], dl
movaps xmmword [esp + 0x30], xmm1
xor cl, byte [esp + 0x30]
movzx edx, byte [esp + 9]
mov byte [esi + 8], cl
movzx ecx, byte [esp + 0xa]
xor dl, byte [esp + 0x31]
mov byte [esi + 9], dl
movzx edx, byte [esp + 0xb]
xor cl, byte [esp + 0x32]
mov byte [esi + 0xa], cl
movzx ecx, byte [esp + 0xc]
xor dl, byte [esp + 0x33]
mov byte [esi + 0xb], dl
movzx edx, byte [esp + 0xd]
xor cl, byte [esp + 0x34]
mov byte [esi + 0xc], cl
movzx ecx, byte [esp + 0xe]
xor dl, byte [esp + 0x35]
mov byte [esi + 0xd], dl
movzx edx, byte [esp + 0xf]
xor cl, byte [esp + 0x36]
mov byte [esi + 0xe], cl
lea ecx, [esp + 0x5c]
xor dl, byte [esp + 0x37]
movups xmmword [esp], xmm0
xorps xmm0, xmm0
movsd xmm2, qword [esp]
movsd xmm1, qword [esp + 8]
movsd qword [ecx + 8], xmm0
movsd qword [ecx], xmm0
mov byte [esi + 0xf], dl
movsd qword [esp + 0x54], xmm1
movsd qword [esp + 0x4c], xmm2
push 2
push edi
push ebx
call fcn.004051f0
mov eax, dword [esp + 0x20]
add esp, 0xc
movsd xmm0, qword [esp + 0x4c]
movsd xmm1, qword [esp + 0x54]
add esi, 0x10
add eax, 0x10
movsd qword [esp + 8], xmm1
movsd qword [esp], xmm0
jne 0x401eb0
mov edi, dword [esp + 0x10]
lea eax, [ebx + 0x1e0]
mov esi, ebx
mov ebx, dword [esp + 0x18]
test edi, edi
je 0x402014
add ebx, dword [esp + 0x1c]
xor ecx, ecx
movzx edx, byte [ebx + ecx]
mov dh, byte [esp + ecx]
xor dh, dl
mov byte [esp + ecx], dl
mov byte [ebx + ecx], dh
inc ecx
cmp edi, ecx
jne 0x402000
movsd xmm0, qword [esp]
movsd xmm1, qword [esp + 8]
mov dword [esi + 0x1f0], edi
movsd qword [eax + 8], xmm1
movsd qword [eax], xmm0
lea esp, [ebp - 0xc]
pop esi
pop edi
pop ebx
pop ebp
ret