Function at 0x417c51
Capabilities:
Encode data using xor

Disassembly:
push ebx
push ebp
mov ebp, dword [esp + 0xc]
push esi
push edi
push ebp
call fcn.00424030
mov ebx, dword [esp + 0x1c]
add esp, 4
test ebx, ebx
je 0x417fa3
mov al, byte [ebp + 1]
and al, 0xf
cmp al, 0xf
jne case.0x417fdc.4
mov eax, dword [esp + 0x1c]
add eax, 0xffffffff
cmp eax, 3
ja case.default.0x417c4a
jmp dword [eax*4 + 0x41802c]
jmp 0x417c5b
push ebp
lea esi, [ebp + 8]
mov ecx, 0x40
mov edi, ebp
push ebx
rep movsb byte es:[edi], byte [esi]
call fcn.00416b50
add esp, 8
xor eax, eax
movzx ecx, byte [eax + ebp + 0x10]
movzx edx, byte [eax + ebp + 0x11]
xor byte [eax + ebp], cl
xor byte [eax + ebp + 1], dl
movzx ecx, byte [eax + ebp + 0x12]
movzx edx, byte [eax + ebp + 0x13]
xor byte [eax + ebp + 2], cl
xor byte [eax + ebp + 3], dl
add eax, 4
cmp eax, 0x10
jb 0x417c73
lea esi, [ebp + 0x10]
push esi
push ebx
call fcn.00416b50
mov eax, esi
add esp, 8
mov esi, 4
movzx ecx, byte [eax + 0x10]
movzx edx, byte [eax + 0x11]
xor byte [eax], cl
xor byte [eax + 1], dl
movzx ecx, byte [eax + 0x12]
movzx edx, byte [eax + 0x13]
xor byte [eax + 2], cl
xor byte [eax + 3], dl
add eax, 4
sub esi, 1
jne 0x417cb2
lea esi, [ebp + 0x20]
push esi
push ebx
call fcn.00416b50
mov eax, esi
add esp, 8
mov esi, 4
lea esp, [esp]
movzx ecx, byte [eax + 0x10]
movzx edx, byte [eax + 0x11]
xor byte [eax], cl
xor byte [eax + 1], dl
movzx ecx, byte [eax + 0x12]
movzx edx, byte [eax + 0x13]
xor byte [eax + 2], cl
xor byte [eax + 3], dl
add eax, 4
sub esi, 1
jne 0x417cf0
lea eax, [ebp + 0x30]
push eax
push ebx
call fcn.00416b50
add esp, 8
jmp 0x417d2a
mov al, byte [ebp + 6]
cmp al, byte [ebp + 0x3e]
jne case.0x417fdc.4
mov cl, byte [ebp + 7]
cmp cl, byte [ebp + 0x3f]
jne case.0x417fdc.4
mov dl, byte [esp + 0x20]
cmp dl, byte [ebp + 0x3c]
jne case.0x417fdc.4
and al, 3
cmp al, 3
je 0x417fa3
pop edi
pop esi
pop ebp
mov ax, 0x1d02
pop ebx
ret
jmp 0x417d60
push ebp
lea esi, [ebp + 8]
mov ecx, 0x30
mov edi, ebp
push ebx
rep movsb byte es:[edi], byte [esi]
call fcn.00416b50
add esp, 8
xor eax, eax
jmp 0x417d80
movzx ecx, byte [eax + ebp + 0x10]
movzx edx, byte [eax + ebp + 0x11]
xor byte [eax + ebp], cl
xor byte [eax + ebp + 1], dl
movzx ecx, byte [eax + ebp + 0x12]
movzx edx, byte [eax + ebp + 0x13]
xor byte [eax + ebp + 2], cl
xor byte [eax + ebp + 3], dl
add eax, 4
cmp eax, 0x10
jb 0x417d80
lea esi, [ebp + 0x10]
push esi
push ebx
call fcn.00416b50
mov eax, esi
add esp, 8
mov esi, 4
nop
movzx ecx, byte [eax + 0x10]
movzx edx, byte [eax + 0x11]
xor byte [eax], cl
xor byte [eax + 1], dl
movzx ecx, byte [eax + 0x12]
movzx edx, byte [eax + 0x13]
xor byte [eax + 2], cl
xor byte [eax + 3], dl
add eax, 4
sub esi, 1
jne 0x417dc0
lea eax, [ebp + 0x20]
push eax
push ebx
call fcn.00416b50
add esp, 8
jmp 0x417dfa
mov al, byte [ebp + 6]
cmp al, byte [ebp + 0x2e]
jne case.0x417fdc.4
mov cl, byte [ebp + 7]
cmp cl, byte [ebp + 0x2f]
jne case.0x417fdc.4
mov dl, byte [esp + 0x20]
cmp dl, byte [ebp + 0x2c]
jne case.0x417fdc.4
and al, 3
cmp al, 2
je 0x417fa3
pop edi
pop esi
pop ebp
mov ax, 0x1d02
pop ebx
ret
jmp 0x417e3c
push ebp
lea esi, [ebp + 8]
mov ecx, 0x20
mov edi, ebp
push ebx
rep movsb byte es:[edi], byte [esi]
call fcn.00416b50
add esp, 8
xor eax, eax
jmp 0x417e60
movzx ecx, byte [eax + ebp + 0x10]
movzx edx, byte [eax + ebp + 0x11]
xor byte [eax + ebp], cl
xor byte [eax + ebp + 1], dl
movzx ecx, byte [eax + ebp + 0x12]
movzx edx, byte [eax + ebp + 0x13]
xor byte [eax + ebp + 2], cl
xor byte [eax + ebp + 3], dl
add eax, 4
cmp eax, 0x10
jb 0x417e60
lea eax, [ebp + 0x10]
push eax
push ebx
call fcn.00416b50
add esp, 8
jmp 0x417ea2
mov al, byte [ebp + 6]
cmp al, byte [ebp + 0x1e]
jne case.0x417fdc.4
mov cl, byte [ebp + 7]
cmp cl, byte [ebp + 0x1f]
jne case.0x417fdc.4
mov dl, byte [esp + 0x20]
cmp dl, byte [ebp + 0x1c]
jne case.0x417fdc.4
and al, 3
cmp al, 1
je 0x417fa3
pop edi
pop esi
pop ebp
mov ax, 0x1d02
pop ebx
ret
jmp 0x417ee4
movzx eax, byte [ebp + 8]
movzx ecx, byte [ebp + 9]
movzx edx, byte [ebp + 0xa]
mov byte [ebp], al
movzx eax, byte [ebp + 0xb]
mov byte [ebp + 1], cl
movzx ecx, byte [ebp + 0xc]
mov byte [ebp + 2], dl
movzx edx, byte [ebp + 0xd]
mov byte [ebp + 3], al
movzx eax, byte [ebp + 0xe]
mov byte [ebp + 4], cl
movzx ecx, byte [ebp + 0xf]
mov byte [ebp + 5], dl
movzx edx, byte [ebp + 0x10]
mov byte [ebp + 6], al
movzx eax, byte [ebp + 0x11]
mov byte [ebp + 7], cl
movzx ecx, byte [ebp + 0x12]
mov byte [ebp + 8], dl
movzx edx, byte [ebp + 0x13]
mov byte [ebp + 9], al
movzx eax, byte [ebp + 0x14]
mov byte [ebp + 0xa], cl
movzx ecx, byte [ebp + 0x15]
mov byte [ebp + 0xb], dl
movzx edx, byte [ebp + 0x16]
mov byte [ebp + 0xc], al
movzx eax, byte [ebp + 0x17]
mov byte [ebp + 0xd], cl
push ebp
mov byte [ebp + 0xe], dl
push ebx
mov byte [ebp + 0xf], al
call fcn.00416b50
add esp, 8
jmp 0x417f68
mov al, byte [ebp + 6]
cmp al, byte [ebp + 0xe]
jne case.0x417fdc.4
mov cl, byte [ebp + 7]
cmp cl, byte [ebp + 0xf]
jne case.0x417fdc.4
mov dl, byte [esp + 0x20]
cmp dl, byte [ebp + 0xc]
jne case.0x417fdc.4
test al, 3
je 0x417fa3
pop edi
pop esi
pop ebp
mov ax, 0x1d02
pop ebx
ret
pop edi
pop esi
pop ebp
mov ax, 0x1d10
pop ebx
ret
movzx esi, byte [ebp + 1]
movzx ecx, byte [ebp + 4]
movzx eax, byte [ebp + 5]
movzx edx, byte [ebp + 3]
add ecx, esi
add eax, ecx
movzx ecx, byte [ebp + 2]
add eax, edx
movzx edx, byte [ebp]
add ecx, eax
xor ecx, edx
test cl, cl
je 0x417fd2
pop edi
pop esi
pop ebp
mov ax, 0x1d0d
pop ebx
ret
mov eax, esi
and eax, 0xf
cmp eax, 7
ja case.default.0x417fdc
jmp dword [eax*4 + 0x41803c]
pop edi
pop esi
pop ebp
xor ax, ax
pop ebx
ret
pop edi
pop esi
pop ebp
mov ax, 0x1d41
pop ebx
ret
pop edi
pop esi
pop ebp
mov ax, 0x1d04
pop ebx
ret
pop edi
pop esi
pop ebp
mov ax, 0x1d0a
pop ebx
ret
pop edi
pop esi
pop ebp
mov ax, 0x1d15
pop ebx
ret
pop edi
pop esi
pop ebp
mov ax, 0x1d42
pop ebx
ret
pop edi
pop esi
pop ebp
mov ax, 0x1d3f
pop ebx
ret
pop edi
pop esi
pop ebp
mov ax, 0x1dff
pop ebx
ret