Function at 0x401ef0
Capabilities:
Encode data using xor
Encrypt data using des

Disassembly:
sub esp, 0x16c
mov eax, dword [0x41c0f8]
push ebx
push ebp
push esi
mov esi, dword [esp + 0x180]
mov dword [esp + 0x174], eax
push edi
xor eax, eax
nop
or cl, 0xff
mov edx, eax
sar edx, 3
mov dl, byte [edx + esi]
sub cl, al
and cl, 7
sar dl, cl
and dl, 1
mov byte [esp + eax + 0x18], dl
inc eax
cmp eax, 0x40
jl 0x401f10
lea eax, [esp + 0x18]
mov ecx, eax
push eax
push ecx
mov ecx, 0x40
mov edx, 0x4182e8
call fcn.00401c80
mov al, byte [esp + 0x194]
mov ebx, dword [esp + 0x190]
add esp, 8
test al, al
mov ebp, 0x10
jne 0x401fd7
mov ecx, 8
lea esi, [esp + 0x38]
lea edi, [esp + 0x58]
lea edx, [esp + 0x38]
rep movsd dword es:[edi], dword [esi]
push edx
mov esi, ebx
call fcn.00401d80
add esp, 4
xor eax, eax
mov cl, byte [esp + eax + 0x18]
mov dl, byte [esp + eax + 0x38]
xor dl, cl
mov cl, byte [esp + eax + 0x39]
mov byte [esp + eax + 0x38], dl
mov dl, byte [esp + eax + 0x19]
xor cl, dl
mov dl, byte [esp + eax + 0x3a]
mov byte [esp + eax + 0x39], cl
mov cl, byte [esp + eax + 0x1a]
xor dl, cl
mov cl, byte [esp + eax + 0x3b]
mov byte [esp + eax + 0x3a], dl
mov dl, byte [esp + eax + 0x1b]
xor cl, dl
mov byte [esp + eax + 0x3b], cl
add eax, 4
cmp eax, 0x20
jl 0x401f80
mov ecx, 8
lea esi, [esp + 0x58]
lea edi, [esp + 0x18]
add ebx, 0x30
dec ebp
rep movsd dword es:[edi], dword [esi]
jne 0x401f60
jmp 0x402055
add ebx, 0x2d0
lea ecx, [ecx]
mov ecx, 8
lea esi, [esp + 0x38]
lea edi, [esp + 0x58]
lea eax, [esp + 0x38]
rep movsd dword es:[edi], dword [esi]
push eax
mov esi, ebx
call fcn.00401d80
add esp, 4
xor eax, eax
mov cl, byte [esp + eax + 0x18]
mov dl, byte [esp + eax + 0x38]
xor dl, cl
mov cl, byte [esp + eax + 0x39]
mov byte [esp + eax + 0x38], dl
mov dl, byte [esp + eax + 0x19]
xor cl, dl
mov dl, byte [esp + eax + 0x3a]
mov byte [esp + eax + 0x39], cl
mov cl, byte [esp + eax + 0x1a]
xor dl, cl
mov cl, byte [esp + eax + 0x3b]
mov byte [esp + eax + 0x3a], dl
mov dl, byte [esp + eax + 0x1b]
xor cl, dl
mov byte [esp + eax + 0x3b], cl
add eax, 4
cmp eax, 0x20
jl 0x402000
mov ecx, 8
lea esi, [esp + 0x58]
lea edi, [esp + 0x18]
sub ebx, 0x30
dec ebp
rep movsd dword es:[edi], dword [esi]
jne 0x401fe0
mov ecx, 8
lea esi, [esp + 0x18]
lea edi, [esp + 0x78]
rep movsd dword es:[edi], dword [esi]
mov ecx, 8
lea esi, [esp + 0x38]
lea edi, [esp + 0x18]
rep movsd dword es:[edi], dword [esi]
mov ecx, 8
lea esi, [esp + 0x78]
lea edi, [esp + 0x38]
rep movsd dword es:[edi], dword [esi]
xor eax, eax
movsx ecx, byte [eax + 0x418328]
mov dl, byte [esp + ecx + 0x17]
movsx ecx, byte [eax + 0x418329]
mov byte [esp + eax + 0x78], dl
mov dl, byte [esp + ecx + 0x17]
movsx ecx, byte [eax + 0x41832a]
mov byte [esp + eax + 0x79], dl
mov dl, byte [esp + ecx + 0x17]
movsx ecx, byte [eax + 0x41832b]
mov byte [esp + eax + 0x7a], dl
mov dl, byte [esp + ecx + 0x17]
mov byte [esp + eax + 0x7b], dl
add eax, 4
cmp eax, 0x40
jl 0x402084
mov ecx, 0x10
lea esi, [esp + 0x78]
lea edi, [esp + 0x18]
rep movsd dword es:[edi], dword [esi]
mov esi, dword [esp + 0x180]
xor eax, eax
mov ecx, esi
mov dword [ecx], eax
mov dword [ecx + 4], eax
mov dword [esp + 0x14], eax
mov edx, 3
mov ebp, 2
mov edi, 1
mov eax, 0xfffffffe
nop
mov ecx, dword [esp + 0x14]
mov bl, byte [esp + edi + 0x17]
sar ecx, 3
add ecx, esi
mov dword [esp + 0x10], ecx
lea ecx, [eax + 1]
and ecx, 7
shl bl, cl
mov ecx, dword [esp + 0x10]
or byte [ecx], bl
mov bl, byte [esp + edi + 0x18]
mov ecx, edi
sar ecx, 3
add ecx, esi
mov dword [esp + 0x10], ecx
mov ecx, eax
and ecx, 7
shl bl, cl
mov ecx, dword [esp + 0x10]
add edi, 4
or byte [ecx], bl
mov bl, byte [esp + ebp + 0x18]
mov ecx, ebp
sar ecx, 3
add ecx, esi
mov dword [esp + 0x10], ecx
lea ecx, [eax - 1]
and ecx, 7
shl bl, cl
mov ecx, dword [esp + 0x10]
add ebp, 4
or byte [ecx], bl
mov bl, byte [esp + edx + 0x18]
mov ecx, edx
sar ecx, 3
add ecx, esi
mov dword [esp + 0x10], ecx
lea ecx, [eax - 2]
and ecx, 7
shl bl, cl
mov ecx, dword [esp + 0x10]
sub eax, 4
add edx, 4
or byte [ecx], bl
mov ebx, dword [esp + 0x14]
add ebx, 4
cmp eax, 0xffffffbe
mov dword [esp + 0x14], ebx
jg 0x402100
mov ecx, dword [esp + 0x178]
pop edi
pop esi
pop ebp
pop ebx
call fcn.0040f5ac
add esp, 0x16c
ret 0x10