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

Disassembly:
push ebp
mov ebp, esp
lea esp, [esp - 0x28]
push ebx
push esi
push edi
mov dword [ebp - 0x24], eax
mov dword [ebp - 0x1c], edx
mov dword [ebp - 0x14], ecx
mov dword [ebp - 0xc], 0
xor eax, eax
push fcn.00487e60
push ebp
push 0x4135b0
push dword fs:[eax]
mov dword fs:[eax], esp
mov eax, dword [ebp - 0x14]
test eax, eax
je 0x487eba
mov eax, dword [eax - 4]
add eax, 1
test eax, eax
je 0x487ee1
mov eax, dword [ebp - 0x14]
test eax, eax
je 0x487ecb
mov eax, dword [eax - 4]
add eax, 1
mov ecx, eax
sar eax, 0x1f
and eax, 3
lea edx, [ecx + eax]
and edx, 3
sub edx, eax
mov eax, edx
test eax, eax
je 0x487f04
mov ecx, dword [str.Invalid_Initialization_Vector]
mov edx, 1
mov eax, 0x502d6c
call fcn.00430fb0
mov edx, 0x487ee1
mov ecx, ebp
call fcn.00413470
mov esi, esi
mov eax, dword [ebp - 0x1c]
test eax, eax
je 0x487f11
mov eax, dword [eax - 4]
add eax, 1
mov dword [ebp - 0x18], eax
mov eax, dword [ebp - 0x24]
cmp byte [eax + 0x40], 0
jne 0x487f64
mov eax, dword [ebp - 0x24]
push dword [eax + 0x144]
push 0
push 0x1000
mov edx, 0x4e9ed0
xor ecx, ecx
mov eax, 0x51286c
call fcn.0046b470
push 0
mov eax, dword [ebp - 0x24]
push dword [eax + 0x144]
push 0x1000
push 0x48
mov edx, 0x4eaed0
mov ecx, 0x11
mov eax, 0x51286c
call fcn.0046b440
mov dword [ebp - 0x28], 0
mov esi, 0xffffffff
add esi, 1
mov edx, dword [ebp - 0x28]
lea eax, [edx + 1]
cdq
idiv dword [ebp - 0x18]
mov ecx, dword [ebp - 0x1c]
movzx eax, byte [ecx + edx]
mov ecx, eax
shl ecx, 0x10
mov eax, dword [ebp - 0x28]
cdq
idiv dword [ebp - 0x18]
mov ebx, dword [ebp - 0x1c]
movzx eax, byte [ebx + edx]
shl eax, 0x18
add ecx, eax
mov edx, dword [ebp - 0x28]
lea eax, [edx + 2]
cdq
idiv dword [ebp - 0x18]
mov ebx, dword [ebp - 0x1c]
movzx eax, byte [ebx + edx]
shl eax, 8
add ecx, eax
mov edx, dword [ebp - 0x28]
lea eax, [edx + 3]
cdq
idiv dword [ebp - 0x18]
mov ebx, dword [ebp - 0x1c]
movzx eax, byte [ebx + edx]
lea edx, [ecx + eax]
mov eax, dword [ebp - 0x24]
mov ecx, dword [eax + 0x144]
lea eax, [esi + 0x400]
xor edx, dword [ecx + eax*4]
mov dword [ecx + eax*4], edx
add dword [ebp - 0x28], 4
cmp esi, 0x11
jl 0x487f70
mov eax, dword [ebp - 0x14]
test eax, eax
je 0x487ff1
mov eax, dword [eax - 4]
add eax, 1
mov edx, eax
sar edx, 0x1f
and edx, 3
add eax, edx
sar eax, 2
mov dword [ebp - 0x20], eax
mov dword [ebp - 0x10], eax
lea eax, [ebp - 0x10]
push eax
mov edx, 0x53a668
lea eax, [ebp - 0xc]
mov ecx, 1
call fcn.0040bda0
mov edx, dword [ebp - 0x20]
sub edx, 1
test edx, edx
jl 0x488074
mov esi, 0xffffffff
lea esi, [esi]
add esi, 1
mov eax, esi
shl eax, 2
mov ecx, eax
mov ebx, dword [ebp - 0x14]
movzx eax, byte [ebx + ecx + 1]
mov ebx, eax
shl ebx, 0x10
mov edi, dword [ebp - 0x14]
movzx eax, byte [edi + ecx]
shl eax, 0x18
add ebx, eax
mov eax, dword [ebp - 0x14]
movzx edi, byte [eax + ecx + 2]
shl edi, 8
add ebx, edi
mov edi, dword [ebp - 0x14]
movzx eax, byte [edi + ecx + 3]
add eax, ebx
mov ecx, dword [ebp - 0xc]
mov dword [ecx + esi*4], eax
cmp edx, esi
jg 0x488030
mov dword [ebp - 8], 0
mov dword [ebp - 4], 0
mov dword [ebp - 0x28], 0
mov esi, 0xffffffff
mov esi, esi
add esi, 1
mov ecx, dword [ebp - 0xc]
mov eax, dword [ebp - 0x28]
cdq
idiv dword [ebp - 0x20]
mov edx, dword [ecx + edx*4]
xor dword [ebp - 8], edx
mov ecx, dword [ebp - 0xc]
mov edx, dword [ebp - 0x28]
lea eax, [edx + 1]
cdq
idiv dword [ebp - 0x20]
mov edx, dword [ecx + edx*4]
xor dword [ebp - 4], edx
push 0
lea edx, [ebp - 8]
mov eax, dword [ebp - 0x24]
xor ecx, ecx
mov edi, dword [ebp - 0x24]
mov ebx, dword [edi]
call dword [ebx + 0x6c]
mov eax, dword [ebp - 0x24]
mov ecx, dword [eax + 0x144]
mov eax, dword [ebp - 8]
mov edx, dword [ebp - 0x28]
mov dword [ecx + edx*4 + 0x1000], eax
mov eax, dword [ebp - 0x24]
mov ecx, dword [eax + 0x144]
mov eax, dword [ebp - 0x28]
lea edx, [eax + 0x400]
mov eax, dword [ebp - 4]
mov dword [ecx + edx*4 + 4], eax
add dword [ebp - 0x28], 2
cmp esi, 8
jl 0x488090
mov esi, 0xffffffff
lea esi, [esi]
add esi, 1
mov ecx, dword [ebp - 0xc]
mov eax, dword [ebp - 0x28]
cdq
idiv dword [ebp - 0x20]
mov edx, dword [ecx + edx*4]
xor dword [ebp - 8], edx
mov ecx, dword [ebp - 0xc]
mov edx, dword [ebp - 0x28]
lea eax, [edx + 1]
cdq
idiv dword [ebp - 0x20]
mov edx, dword [ecx + edx*4]
xor dword [ebp - 4], edx
add dword [ebp - 0x28], 2
push 0
lea edx, [ebp - 8]
mov eax, dword [ebp - 0x24]
xor ecx, ecx
mov edi, dword [ebp - 0x24]
mov ebx, dword [edi]
call dword [ebx + 0x6c]
mov eax, dword [ebp - 0x24]
mov ecx, dword [eax + 0x144]
mov edx, esi
shl edx, 1
mov eax, dword [ebp - 8]
mov dword [ecx + edx*4], eax
mov eax, dword [ebp - 0x24]
mov ecx, dword [eax + 0x144]
mov eax, esi
shl eax, 1
mov edx, dword [ebp - 4]
mov dword [ecx + eax*4 + 4], edx
cmp esi, 0x1ff
jl 0x488108
mov eax, dword [ebp - 0x24]
cmp byte [eax + 0x40], 0
jne 0x488188
mov eax, dword [ebp - 0x24]
xor edx, edx
call fcn.00485f10
mov esi, esi
xor eax, eax
pop edx
add esp, 0xc
mov dword fs:[eax], edx
mov eax, ebp
call fcn.00487e60
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret