Function at 0x46f760
Capabilities:
Encode data using xor

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x38
mov edx, dword [esp + 0x58]
mov eax, dword [esp + 0x4c]
mov edi, dword [esp + 0x54]
mov ecx, dword [esp + 0x50]
cmp edx, 0xc
mov dword [eax + 0x16c], 0
mov dword [eax + 0x168], 0
mov dword [eax + 4], 0
mov dword [eax], 0
mov dword [eax + 0xc], 0
mov dword [eax + 8], 0
mov dword [eax + 0x34], 0
mov dword [eax + 0x30], 0
mov dword [eax + 0x3c], 0
mov dword [eax + 0x38], 0
mov dword [eax + 0x44], 0
mov dword [eax + 0x40], 0
mov dword [eax + 0x4c], 0
mov dword [esp + 8], eax
mov dword [eax + 0x48], 0
jne 0x46f807
mov eax, dword [edi + 8]
mov edx, dword [esp + 0x4c]
mov ebx, 2
mov dword [edx + 8], eax
movsd xmm0, qword [edi]
movsd qword [edx], xmm0
mov byte [edx + 0xf], 1
jmp 0x46fcb8
xor esi, esi
cmp edx, 0x10
jb 0x46face
lea eax, [edx - 0x10]
xor ecx, ecx
mov dword [esp], 0
mov dword [esp + 0x20], 0
mov dword [esp + 0x24], 0
mov dword [esp + 0xc], 0
mov dword [esp + 0x10], 0
mov dword [esp + 0x18], 0
mov dword [esp + 0x1c], 0
mov esi, eax
mov dword [esp + 0x30], eax
mov ah, cl
mov al, cl
and esi, 0xfffffff0
mov dword [esp + 4], eax
xor eax, eax
mov dword [esp + 0x28], esi
lea esi, [edi + esi + 0x10]
mov bh, al
mov ch, al
mov dword [esp + 0x2c], esi
mov esi, edx
xor edx, edx
mov cl, al
mov bl, al
mov eax, 0
mov dword [esp + 0x14], ecx
mov ch, al
mov eax, 0
mov cl, al
nop dword [eax + eax]
mov dword [esp + 0x34], esi
xor cl, byte [edi]
mov esi, dword [esp + 0x4c]
mov eax, dword [esp + 0x1c]
mov byte [esi], cl
xor ch, byte [edi + 1]
mov byte [esi + 1], ch
xor al, byte [edi + 2]
mov byte [esi + 2], al
mov eax, dword [esp + 0x18]
xor al, byte [edi + 3]
mov byte [esi + 3], al
mov eax, dword [esp + 0x14]
xor al, byte [edi + 4]
mov byte [esi + 4], al
xor ah, byte [edi + 5]
mov byte [esi + 5], ah
mov eax, dword [esp + 0x10]
xor al, byte [edi + 6]
mov byte [esi + 6], al
mov eax, dword [esp + 0xc]
mov dword [esp + 0xc], edi
xor al, byte [edi + 7]
mov byte [esi + 7], al
mov eax, dword [esp + 0x24]
xor bl, byte [edi + 8]
mov byte [esi + 8], bl
xor bh, byte [edi + 9]
mov byte [esi + 9], bh
xor al, byte [edi + 0xa]
mov byte [esi + 0xa], al
mov eax, dword [esp + 0x20]
xor al, byte [edi + 0xb]
mov byte [esi + 0xb], al
mov eax, dword [esp + 4]
xor al, byte [edi + 0xc]
mov byte [esi + 0xc], al
xor ah, byte [edi + 0xd]
mov byte [esi + 0xd], ah
mov eax, dword [esp]
mov dword [esp], 0xf
xor al, byte [edi + 0xe]
mov byte [esi + 0xe], al
xor dl, byte [edi + 0xf]
movzx ebp, dl
mov byte [esi + 0xf], dl
mov eax, ebp
and eax, 0xf
shl eax, 4
mov edx, dword [esi + eax + 0x6c]
mov ebx, dword [esi + eax + 0x60]
mov ecx, dword [esi + eax + 0x64]
mov dword [esp + 4], edx
mov edx, dword [esi + eax + 0x68]
jmp 0x46f9a0
mov edx, dword [esp]
mov ebp, dword [esp + 0x4c]
mov esi, ecx
shr ecx, 4
dec dword [esp]
shld esi, eax, 0x1c
shld eax, ebx, 0x1c
shld ebx, edi, 0x1c
and edi, 0xf
movzx edx, byte [ebp + edx - 1]
mov dword [esp + 0x10], edx
and edx, 0xf
shl edx, 4
xor ecx, dword [ebp + edx + 0x64]
xor eax, dword [ebp + edx + 0x6c]
xor esi, dword [ebp + edx + 0x60]
xor ebx, dword [ebp + edx + 0x68]
mov ebp, dword [esp + 0x10]
xor ecx, dword [edi*4 + 0x58128c]
mov edx, ebx
mov dword [esp + 4], eax
mov ebx, esi
mov edi, dword [esp + 0x4c]
mov esi, dword [esp + 4]
mov eax, ecx
and ebp, 0xfffffff0
shr ecx, 4
shld eax, ebx, 0x1c
xor ecx, dword [edi + ebp + 0x64]
shld ebx, esi, 0x1c
shld esi, edx, 0x1c
and edx, 0xf
xor eax, dword [edi + ebp + 0x60]
xor esi, dword [edi + ebp + 0x68]
xor ebx, dword [edi + ebp + 0x6c]
xor ecx, dword [edx*4 + 0x58128c]
cmp dword [esp], 0
mov edi, esi
jne 0x46f950
mov ebp, dword [esp + 0x4c]
bswap eax
bswap ecx
bswap ebx
mov esi, dword [esp + 0x34]
mov dword [esp + 0x14], eax
mov edx, ebp
mov dword [ebp + 4], eax
mov dword [ebp], ecx
mov ebp, edi
mov edi, dword [esp + 0xc]
add esi, 0xfffffff0
bswap ebp
mov dword [edx + 8], ebx
mov dword [edx + 0xc], ebp
mov edx, eax
mov dword [esp + 4], ebp
shr edx, 0x10
mov dword [esp + 0x10], edx
mov edx, ecx
add edi, 0x10
shr edx, 0x10
mov dword [esp + 0x1c], edx
mov edx, eax
mov eax, ebx
shr edx, 0x18
shr eax, 0x18
mov dword [esp + 0xc], edx
mov edx, ecx
mov dword [esp + 0x20], eax
shr edx, 0x18
mov dword [esp + 0x18], edx
mov edx, ebp
shr edx, 0x10
mov dword [esp], edx
mov edx, ebx
shr edx, 0x10
mov dword [esp + 0x24], edx
mov edx, ebp
shr edx, 0x18
cmp esi, 0xf
ja 0x46f890
mov edi, dword [esp + 0x30]
mov esi, ebx
mov edx, dword [esp + 0x58]
mov eax, dword [esp + 4]
mov ebx, dword [esp + 0x2c]
sub edi, dword [esp + 0x28]
test edi, edi
je 0x46fad8
xor eax, eax
cmp edi, 0x1f
jbe 0x46fae3
lea ecx, [ebx + edi]
cmp ecx, dword [esp + 0x4c]
jbe 0x46fa95
mov ecx, dword [esp + 0x4c]
lea ecx, [ecx + edi]
cmp ebx, ecx
jb 0x46fae3
mov eax, edi
xor ecx, ecx
and eax, 0xffffffe0
nop dword [eax]
mov edx, dword [esp + 0x4c]
movups xmm0, xmmword [ebx + ecx]
movups xmm1, xmmword [ebx + ecx + 0x10]
movups xmm2, xmmword [edx + ecx]
movups xmm3, xmmword [edx + ecx + 0x10]
xorps xmm2, xmm0
xorps xmm3, xmm1
movups xmmword [edx + ecx], xmm2
movups xmmword [edx + ecx + 0x10], xmm3
add ecx, 0x20
cmp eax, ecx
jne 0x46faa0
jmp 0x46fadf
mov ebx, edi
xor eax, eax
mov edi, edx
test edi, edi
jne 0x46fa7a
mov ebx, eax
jmp 0x46fbc5
cmp edi, eax
je 0x46faf0
mov cl, byte [ebx + eax]
mov edx, dword [esp + 0x4c]
xor byte [edx + eax], cl
inc eax
jmp 0x46fadf
mov eax, dword [esp + 0x4c]
mov dword [esp], 0xf
movzx ecx, byte [eax + 0xf]
mov edi, eax
mov edx, ecx
and edx, 0xf
shl edx, 4
mov esi, dword [eax + edx + 0x60]
mov eax, dword [eax + edx + 0x64]
mov ebx, dword [edi + edx + 0x6c]
mov edx, dword [edi + edx + 0x68]
jmp 0x46fb6e
mov ecx, dword [esp]
mov edi, dword [esp + 0x4c]
dec dword [esp]
movzx edx, byte [edi + ecx - 1]
mov ecx, eax
shr eax, 4
shld ecx, ebp, 0x1c
shld ebp, esi, 0x1c
shld esi, ebx, 0x1c
and ebx, 0xf
mov dword [esp + 4], edx
and edx, 0xf
shl edx, 4
xor eax, dword [edi + edx + 0x64]
xor ecx, dword [edi + edx + 0x60]
xor esi, dword [edi + edx + 0x68]
xor ebp, dword [edi + edx + 0x6c]
xor eax, dword [ebx*4 + 0x58128c]
mov edx, esi
mov esi, ecx
mov ecx, dword [esp + 4]
mov ebx, ebp
mov edi, dword [esp + 0x4c]
mov ebp, eax
and ecx, 0xfffffff0
shr eax, 4
shld ebp, esi, 0x1c
shld esi, ebx, 0x1c
shld ebx, edx, 0x1c
and edx, 0xf
xor eax, dword [edi + ecx + 0x64]
xor ebp, dword [edi + ecx + 0x60]
xor esi, dword [edi + ecx + 0x6c]
xor ebx, dword [edi + ecx + 0x68]
xor eax, dword [edx*4 + 0x58128c]
cmp dword [esp], 0
jne 0x46fb20
mov ecx, dword [esp + 0x4c]
mov edx, dword [esp + 0x58]
bswap eax
bswap ebp
bswap esi
bswap ebx
mov dword [ecx + 4], ebp
mov dword [ecx], eax
mov dword [ecx + 0xc], ebx
mov dword [ecx + 8], esi
mov eax, edx
shl edx, 3
mov dword [esp], 0xf
shr eax, 0x1d
bswap edx
bswap eax
xor edx, ebx
xor eax, esi
mov esi, dword [esp + 8]
mov dword [esi + 0xc], edx
shr edx, 0x18
mov dword [esi + 8], eax
mov dword [esp + 8], esi
mov dword [esp + 4], edx
and edx, 0xf
shl edx, 4
mov eax, dword [esi + edx + 0x60]
mov ecx, dword [esi + edx + 0x64]
mov ebx, dword [esi + edx + 0x6c]
mov ebp, dword [esi + edx + 0x68]
jmp 0x46fc5e
mov esi, dword [esp]
mov edx, dword [esp + 8]
mov ebp, ecx
shr ecx, 4
dec dword [esp]
shld ebp, edi, 0x1c
shld edi, eax, 0x1c
shld eax, ebx, 0x1c
and ebx, 0xf
movzx esi, byte [edx + esi - 1]
mov dword [esp + 4], esi
and esi, 0xf
shl esi, 4
xor ecx, dword [edx + esi + 0x64]
xor eax, dword [edx + esi + 0x68]
xor ebp, dword [edx + esi + 0x60]
xor edi, dword [edx + esi + 0x6c]
mov esi, edx
xor ecx, dword [ebx*4 + 0x58128c]
mov edx, eax
mov eax, ebp
mov ebx, edi
mov ebp, edx
mov edx, dword [esp + 4]
mov edi, ecx
shr ecx, 4
shld edi, eax, 0x1c
shld eax, ebx, 0x1c
shld ebx, ebp, 0x1c
and ebp, 0xf
and edx, 0xfffffff0
xor ecx, dword [esi + edx + 0x64]
xor edi, dword [esi + edx + 0x60]
xor eax, dword [esi + edx + 0x6c]
xor ebx, dword [esi + edx + 0x68]
xor ecx, dword [ebp*4 + 0x58128c]
cmp dword [esp], 0
jne 0x46fc10
mov edx, dword [esp + 8]
bswap ecx
bswap edi
bswap eax
mov dword [edx], ecx
mov ecx, ebx
mov dword [edx + 4], edi
inc ebx
mov dword [edx + 8], eax
bswap ecx
mov dword [edx + 0xc], ecx
mov ecx, dword [esp + 0x50]
mov esi, dword [esp + 8]
lea eax, [esi + 0x20]
push ecx
push eax
push esi
call dword [esi + 0x170]
add esp, 0xc
bswap ebx
mov dword [esi + 0xc], ebx
add esp, 0x38
pop esi
pop edi
pop ebx
pop ebp
ret