Function at 0x406ca0
Capabilities:
Encode data using xor
Encrypt data using blowfish

Disassembly:
push ecx
mov al, byte [esp + 0xc]
push esi
push edi
mov edi, dword [esp + 0x10]
mov esi, ecx
test al, al
je 0x406f33
cmp al, 0x38
ja 0x406f33
test esi, esi
je 0x406f33
mov ecx, 0x427390
push ebx
mov eax, edi
sub ecx, edi
mov edx, 0x12
push ebp
mov ebx, dword [ecx + eax]
mov dword [eax], ebx
add eax, 4
sub edx, 1
jne 0x406cd5
mov eax, 0x4273d8
lea ecx, [edi + 0x48]
lea ebp, [edx + 4]
lea ecx, [ecx]
mov edx, 0x100
mov ebx, dword [eax]
mov dword [ecx], ebx
add eax, 4
add ecx, 4
sub edx, 1
jne 0x406cf5
sub ebp, 1
jne 0x406cf0
movzx ecx, byte [esp + 0x1c]
add edi, 8
mov dword [esp + 0x1c], 3
lea esp, [esp]
xor edx, edx
lea eax, [ebp + 1]
div ecx
movzx eax, byte [esi + ebp]
shl eax, 8
movzx ebx, byte [edx + esi]
or ebx, eax
xor edx, edx
lea eax, [ebp + 2]
div ecx
lea eax, [ebp + 3]
shl ebx, 8
movzx edx, byte [edx + esi]
or ebx, edx
xor edx, edx
div ecx
shl ebx, 8
movzx eax, byte [edx + esi]
or ebx, eax
xor edx, edx
lea eax, [ebp + 4]
div ecx
xor dword [edi - 8], ebx
mov ebx, edx
xor edx, edx
lea eax, [ebx + 1]
div ecx
lea eax, [ebx + 2]
movzx ebp, byte [edx + esi]
movzx edx, byte [ebx + esi]
shl edx, 8
or ebp, edx
xor edx, edx
div ecx
shl ebp, 8
movzx eax, byte [edx + esi]
or ebp, eax
xor edx, edx
lea eax, [ebx + 3]
div ecx
shl ebp, 8
lea eax, [ebx + 4]
movzx edx, byte [edx + esi]
or ebp, edx
xor edx, edx
div ecx
xor dword [edi - 4], ebp
mov ebx, edx
xor edx, edx
lea eax, [ebx + 1]
div ecx
movzx eax, byte [ebx + esi]
shl eax, 8
movzx ebp, byte [edx + esi]
or ebp, eax
xor edx, edx
lea eax, [ebx + 2]
div ecx
shl ebp, 8
lea eax, [ebx + 3]
movzx edx, byte [edx + esi]
or ebp, edx
xor edx, edx
div ecx
shl ebp, 8
movzx eax, byte [edx + esi]
or ebp, eax
xor edx, edx
lea eax, [ebx + 4]
div ecx
xor dword [edi], ebp
mov ebx, edx
xor edx, edx
lea eax, [ebx + 1]
div ecx
lea eax, [ebx + 2]
movzx ebp, byte [edx + esi]
movzx edx, byte [ebx + esi]
shl edx, 8
or ebp, edx
shl ebp, 8
xor edx, edx
div ecx
add edi, 0x18
movzx eax, byte [edx + esi]
or ebp, eax
xor edx, edx
lea eax, [ebx + 3]
div ecx
shl ebp, 8
lea eax, [ebx + 4]
movzx edx, byte [edx + esi]
or ebp, edx
xor edx, edx
div ecx
xor dword [edi - 0x14], ebp
mov ebx, edx
xor edx, edx
lea eax, [ebx + 1]
div ecx
movzx eax, byte [ebx + esi]
shl eax, 8
movzx ebp, byte [edx + esi]
or ebp, eax
xor edx, edx
lea eax, [ebx + 2]
div ecx
shl ebp, 8
lea eax, [ebx + 3]
movzx edx, byte [edx + esi]
or ebp, edx
xor edx, edx
div ecx
shl ebp, 8
movzx eax, byte [edx + esi]
or ebp, eax
xor edx, edx
lea eax, [ebx + 4]
div ecx
xor dword [edi - 0x10], ebp
mov ebx, edx
xor edx, edx
lea eax, [ebx + 1]
div ecx
lea eax, [ebx + 2]
movzx ebp, byte [edx + esi]
movzx edx, byte [ebx + esi]
shl edx, 8
or ebp, edx
xor edx, edx
div ecx
shl ebp, 8
movzx eax, byte [edx + esi]
or ebp, eax
xor edx, edx
lea eax, [ebx + 3]
div ecx
shl ebp, 8
lea eax, [ebx + 4]
movzx edx, byte [edx + esi]
or ebp, edx
xor edx, edx
div ecx
xor dword [edi - 0xc], ebp
sub dword [esp + 0x1c], 1
mov ebp, edx
jne 0x406d20
mov eax, dword [esp + 0x18]
xor ebx, ebx
mov dword [esp + 0x1c], ebx
mov dword [esp + 0x10], ebx
jmp 0x406ec0
lea esi, [esp + 0x10]
lea edi, [esp + 0x1c]
call fcn.00406450
mov ecx, dword [esp + 0x1c]
mov edx, dword [esp + 0x10]
mov dword [eax + ebx*4], ecx
mov dword [eax + ebx*4 + 4], edx
add ebx, 2
cmp ebx, 0x12
jb 0x406ec0
lea ebx, [eax + 0x4c]
mov dword [esp + 0x18], 4
nop
mov ebp, 0x80
jmp 0x406f00
lea esi, [esp + 0x10]
lea edi, [esp + 0x1c]
call fcn.00406450
mov ecx, dword [esp + 0x1c]
mov edx, dword [esp + 0x10]
mov dword [ebx - 4], ecx
mov dword [ebx], edx
add ebx, 8
sub ebp, 1
jne 0x406f00
sub dword [esp + 0x18], 1
jne 0x406ef0
pop ebp
pop ebx
pop edi
mov al, 1
pop esi
pop ecx
ret 8
pop edi
xor al, al
pop esi
pop ecx
ret 8