Function at 0x46e020
Capabilities:
Encode data using xor

Disassembly:
push ebp
push edi
push esi
push ebx
sub esp, 0x48
mov dword [esp + 0x30], ecx
mov ecx, dword [esp + 0x64]
mov dword [esp + 0x28], eax
mov eax, dword [esp + 0x60]
mov dword [esp + 0x2c], edx
test ecx, ecx
movzx edx, byte [eax]
je 0x46e1b0
movzx ebp, byte [eax + 1]
movzx eax, byte [eax + 2]
shl ebp, 8
shl eax, 0x10
or ebp, eax
mov eax, dword [esp + 0x60]
or ebp, edx
movzx eax, byte [eax + 3]
shl eax, 0x18
or ebp, eax
mov eax, dword [esp + 0x60]
movzx edx, byte [eax + 4]
movzx ecx, byte [eax + 5]
movzx eax, byte [eax + 6]
shl ecx, 8
shl eax, 0x10
or ecx, eax
mov eax, dword [esp + 0x60]
or ecx, edx
movzx eax, byte [eax + 7]
shl eax, 0x18
or ecx, eax
mov eax, dword [esp + 0x30]
sub eax, 8
js 0x46e18a
mov edi, dword [esp + 0x2c]
shr eax, 3
mov edx, ebp
mov esi, dword [esp + 0x28]
mov dword [esp + 0x24], eax
lea eax, [edi + eax*8 + 8]
mov ebx, edi
mov dword [esp + 0x14], eax
lea eax, [esp + 0x40]
mov dword [esp + 4], eax
lea esi, [esi]
movzx ebp, byte [esi + 1]
add esi, 8
add ebx, 8
movzx eax, byte [esi - 6]
movzx edi, byte [esi - 8]
shl ebp, 8
shl eax, 0x10
or ebp, eax
movzx eax, byte [esi - 5]
or ebp, edi
movzx edi, byte [esi - 2]
shl eax, 0x18
or ebp, eax
movzx eax, byte [esi - 4]
shl edi, 0x10
xor ebp, edx
mov edx, dword [esp + 0x5c]
mov dword [esp + 0x40], ebp
mov dword [esp], eax
movzx eax, byte [esi - 3]
shl eax, 8
or eax, edi
movzx edi, byte [esi - 1]
or eax, dword [esp]
shl edi, 0x18
or eax, edi
xor eax, ecx
mov dword [esp + 0x44], eax
mov eax, dword [esp + 4]
call fcn.0046ddf0
mov edx, dword [esp + 0x40]
mov ecx, dword [esp + 0x44]
mov eax, edx
shr eax, 8
mov byte [ebx - 7], al
mov eax, edx
shr eax, 0x10
mov byte [ebx - 6], al
mov eax, edx
shr eax, 0x18
mov byte [ebx - 5], al
mov eax, ecx
shr eax, 8
mov byte [ebx - 3], al
mov eax, ecx
shr eax, 0x10
mov byte [ebx - 2], al
mov eax, ecx
shr eax, 0x18
mov byte [ebx - 8], dl
mov byte [ebx - 4], cl
mov byte [ebx - 1], al
cmp ebx, dword [esp + 0x14]
jne 0x46e0c0
mov ebx, dword [esp + 0x24]
mov ebp, edx
lea eax, [ebx*8 + 8]
add dword [esp + 0x28], eax
add dword [esp + 0x2c], eax
mov eax, ebx
mov ebx, dword [esp + 0x30]
neg eax
lea eax, [ebx + eax*8 - 0x10]
cmp eax, 0xfffffff8
je 0x46e420
lea edx, [eax + 8]
mov eax, dword [esp + 0x28]
add eax, edx
cmp edx, 7
ja case.0x46e1a5.8
jmp dword [edx*4 + 0x53f300]
movzx eax, byte [eax + 1]
mov edi, dword [esp + 0x30]
mov dword [esp], eax
mov eax, dword [esp + 0x60]
shl dword [esp], 8
movzx eax, byte [eax + 2]
shl eax, 0x10
or dword [esp], eax
mov eax, dword [esp + 0x60]
or dword [esp], edx
movzx eax, byte [eax + 3]
shl eax, 0x18
or dword [esp], eax
mov eax, dword [esp + 0x60]
movzx edx, byte [eax + 4]
movzx ecx, byte [eax + 5]
movzx eax, byte [eax + 6]
shl ecx, 8
shl eax, 0x10
or ecx, eax
mov eax, dword [esp + 0x60]
or ecx, edx
movzx eax, byte [eax + 7]
shl eax, 0x18
or ecx, eax
sub edi, 8
js 0x46e574
mov eax, dword [esp + 0x28]
shr edi, 3
mov dword [esp + 0x34], edi
mov esi, eax
lea eax, [eax + edi*8 + 8]
mov edi, dword [esp + 0x2c]
mov dword [esp + 0x24], eax
lea eax, [esp + 0x40]
mov dword [esp + 4], eax
jmp 0x46e236
mov ecx, ebx
mov dword [esp], ebp
movzx ebp, byte [esi + 1]
add edi, 8
add esi, 8
movzx eax, byte [esi - 6]
movzx edx, byte [esi - 8]
movzx ebx, byte [esi - 3]
shl ebp, 8
shl eax, 0x10
or ebp, eax
movzx eax, byte [esi - 5]
or ebp, edx
movzx edx, byte [esi - 4]
shl ebx, 8
mov dword [esp + 0x14], ecx
shl eax, 0x18
or ebp, eax
movzx eax, byte [esi - 2]
mov dword [esp + 0x40], ebp
shl eax, 0x10
or ebx, eax
movzx eax, byte [esi - 1]
or ebx, edx
mov edx, dword [esp + 0x5c]
shl eax, 0x18
or ebx, eax
mov eax, dword [esp + 4]
mov dword [esp + 0x44], ebx
call fcn.0046df00
mov edx, dword [esp]
xor edx, dword [esp + 0x40]
mov ecx, dword [esp + 0x14]
xor ecx, dword [esp + 0x44]
mov eax, edx
shr eax, 8
mov byte [edi - 7], al
mov eax, edx
shr eax, 0x10
mov byte [edi - 6], al
mov eax, edx
shr eax, 0x18
mov byte [edi - 5], al
mov eax, ecx
shr eax, 8
mov byte [edi - 3], al
mov eax, ecx
shr eax, 0x10
mov byte [edi - 4], cl
shr ecx, 0x18
mov byte [edi - 8], dl
mov byte [edi - 2], al
cmp esi, dword [esp + 0x24]
mov byte [edi - 1], cl
jne 0x46e231
mov edi, dword [esp + 0x34]
lea eax, [edi*8 + 8]
neg edi
add dword [esp + 0x28], eax
add dword [esp + 0x2c], eax
mov eax, dword [esp + 0x30]
lea edi, [eax + edi*8 - 0x10]
cmp edi, 0xfffffff8
je 0x46e3dd
mov esi, dword [esp + 0x28]
add edi, 8
movzx ecx, byte [esi + 1]
movzx eax, byte [esi + 2]
movzx edx, byte [esi]
shl ecx, 8
shl eax, 0x10
or ecx, eax
movzx eax, byte [esi + 3]
or ecx, edx
movzx edx, byte [esi + 4]
shl eax, 0x18
or ecx, eax
mov eax, esi
mov dword [esp + 0x40], ecx
movzx eax, byte [eax + 6]
mov dword [esp], ecx
mov ecx, esi
movzx esi, byte [esi + 5]
shl eax, 0x10
shl esi, 8
or esi, eax
movzx eax, byte [ecx + 7]
or esi, edx
mov edx, dword [esp + 0x5c]
shl eax, 0x18
or esi, eax
lea eax, [esp + 0x40]
mov dword [esp + 0x44], esi
call fcn.0046df00
mov edx, dword [esp + 0x40]
mov eax, dword [esp + 0x2c]
xor ebx, dword [esp + 0x44]
mov ecx, dword [esp]
xor edx, ebp
add eax, edi
cmp edi, 7
mov dword [esp + 4], ebx
ja case.0x46e386.8
jmp dword [edi*4 + 0x53f320]
mov edi, dword [esp + 4]
sub eax, 1
shr edi, 0x10
mov ebx, edi
mov byte [eax], bl
mov edi, dword [esp + 4]
lea ebp, [eax - 1]
shr edi, 8
mov ebx, edi
mov byte [eax - 1], bl
movzx ebx, byte [esp + 4]
lea eax, [ebp - 1]
mov byte [ebp - 1], bl
mov ebx, edx
shr ebx, 0x18
lea edi, [eax - 1]
mov byte [eax - 1], bl
mov ebx, edx
shr ebx, 0x10
lea eax, [edi - 1]
mov byte [edi - 1], bl
mov ebx, edx
shr ebx, 8
lea edi, [eax - 1]
mov byte [eax - 1], bl
mov byte [edi - 1], dl
mov ebx, esi
mov ebp, ecx
mov ecx, dword [esp + 0x60]
mov eax, ebp
mov byte [ecx], al
mov eax, ebp
shr eax, 8
mov byte [ecx + 1], al
mov eax, ebp
shr eax, 0x10
mov byte [ecx + 2], al
mov eax, ebp
shr eax, 0x18
mov byte [ecx + 3], al
mov eax, ebx
shr eax, 8
mov byte [ecx + 5], al
mov eax, ebx
mov byte [ecx + 4], bl
shr eax, 0x10
shr ebx, 0x18
mov byte [ecx + 6], al
mov byte [ecx + 7], bl
add esp, 0x48
pop ebx
pop esi
pop edi
pop ebp
ret
mov eax, ebp
mov esi, ebp
shr eax, 8
mov edi, ecx
mov dword [esp], eax
mov eax, ebp
shr eax, 0x10
mov dword [esp + 4], eax
mov eax, ecx
shr eax, 8
mov ebx, eax
mov eax, ecx
shr ebp, 0x18
shr eax, 0x10
mov dword [esp + 0x14], ebp
mov edx, eax
shr ecx, 0x18
lea esi, [esi]
mov ebp, dword [esp + 0x60]
mov eax, esi
mov byte [ebp], al
movzx eax, byte [esp]
mov byte [ebp + 5], bl
mov byte [ebp + 6], dl
mov byte [ebp + 7], cl
mov byte [ebp + 1], al
movzx eax, byte [esp + 4]
mov byte [ebp + 2], al
movzx eax, byte [esp + 0x14]
mov byte [ebp + 3], al
mov eax, edi
mov byte [ebp + 4], al
add esp, 0x48
pop ebx
pop esi
pop edi
pop ebp
ret
movzx esi, byte [eax - 1]
sub eax, 1
shl esi, 0x10
movzx edx, byte [eax - 1]
lea ebx, [eax - 1]
shl edx, 8
or edx, esi
lea eax, [ebx - 1]
movzx ebx, byte [ebx - 1]
or ebx, edx
movzx esi, byte [eax - 1]
lea edx, [eax - 1]
shl esi, 0x18
lea eax, [edx - 1]
movzx edx, byte [edx - 1]
shl edx, 0x10
or edx, esi
lea esi, [eax - 1]
movzx eax, byte [eax - 1]
shl eax, 8
or eax, edx
movzx edx, byte [esi - 1]
or edx, eax
xor edx, ebp
xor ecx, ebx
mov dword [esp + 0x40], edx
mov edx, dword [esp + 0x5c]
lea eax, [esp + 0x40]
mov dword [esp + 0x44], ecx
call fcn.0046ddf0
mov eax, dword [esp + 0x40]
mov ebp, dword [esp + 0x2c]
mov edx, eax
mov esi, eax
shr edx, 8
mov byte [ebp], al
mov byte [esp], dl
mov byte [ebp + 1], dl
mov edx, eax
shr eax, 0x18
mov byte [esp + 0x14], al
shr edx, 0x10
mov byte [ebp + 3], al
mov eax, dword [esp + 0x44]
mov byte [esp + 4], dl
mov byte [ebp + 2], dl
mov ecx, eax
mov edx, eax
shr edx, 8
mov edi, eax
shr ecx, 0x10
mov ebx, edx
mov byte [ebp + 4], al
shr eax, 0x18
mov byte [ebp + 5], dl
mov edx, ecx
mov byte [ebp + 6], cl
mov ecx, eax
mov byte [ebp + 7], al
jmp 0x46e450
xor esi, esi
jmp 0x46e490
mov ebx, eax
xor edx, edx
jmp 0x46e49c
xor ebx, ebx
jmp 0x46e4a5
mov edx, eax
xor ebx, ebx
xor esi, esi
jmp 0x46e4af
xor ebx, ebx
xor edx, edx
jmp 0x46e4bb
mov esi, eax
xor ebx, ebx
xor eax, eax
jmp 0x46e4c7
mov ebx, ecx
mov ebp, dword [esp]
jmp 0x46e2fd
mov edi, eax
jmp 0x46e3d6
mov ebp, eax
jmp 0x46e3aa
mov edi, eax
nop
jmp 0x46e3c0
xor ebx, ebx
xor edx, edx
jmp 0x46e4cd
mov ebx, esi
mov ebp, ecx
jmp 0x46e3dd