Function at 0x46147d
Capabilities:
Encode data using xor
Generate random numbers using a mersenne twister

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x112
push esi
mov esi, dword [ebp + 8]
push edi
mov edi, ecx
cmp byte [esi], 0
jne 0x4614ae
cmp byte [esi + 1], 0
jne 0x4614ae
cmp byte [esi + 2], 0
jne 0x4614ae
cmp byte [esi + 3], 0
jne 0x4614ae
cmp byte [esi + 4], 0
je 0x8b8a166a
cmp dword [edi + 0x20], 0
push ebx
je 0xca15ec
push dword [edi + 0x20]
call dword [0x48f680]
test eax, eax
je 0x132e15ec
lea eax, [ebp - 0x100]
push eax
call dword [0x5448f5f8]
call 0x80a388de
add byte ds:[ecx + 0x80], bh
mov al, byte [ebp - 0xf0]
je 0x4614f6
xor al, cl
xor byte [ebp - 0x60], cl
mov byte [ebp - 0xf0], al
cmp byte [esi + 1], 0
je 0x461507
xor al, cl
xor byte [ebp - 0x5f], cl
mov byte [ebp - 0xf0], al
cmp byte [esi + 2], 0
je 0x461513
xor byte [ebp - 0xef], cl
cmp byte [esi + 3], 0
je 0x46151f
xor byte [ebp - 0xee], cl
cmp byte [esi + 4], 0
je 0x46152b
xor byte [ebp - 0xa5], cl
lea eax, [ebp - 0x100]
push eax
call dword [0x5448f5f4]
cmp byte [esi], 0
mov ebx, dword [0x5448f690]
jne 0x461549
cmp byte [esi + 1], 0
je 0x461562
movzx eax, byte [edi + 0x26]
shl eax, 0x10
or eax, 0xc0000001
push eax
push 0x10
push 0x840101
push dword [edi + 0x20]
call ebx
cmp byte [esi + 2], 0
je 0x461581
movzx eax, byte [edi + 0x24]
shl eax, 0x10
or eax, 0xc0000001
push eax
push 0x11
push 0x840101
push dword [edi + 0x20]
call ebx
mov al, byte [esi + 3]
test al, al
je 0x4615c7
cmp byte [esi + 2], 0
jne 0x4615aa
cmp byte [edi + 0x1c], 0
jne 0x4615aa
movzx eax, byte [edi + 0x25]
shl eax, 0x10
or eax, 0xe0000001
push eax
push 0x12
push 0x105
jmp 0x4615c2
test al, al
je 0x4615c7
movzx eax, byte [edi + 0x25]
shl eax, 0x10
or eax, 0xc0000001
push eax
push 0x12
push 0x840101
push dword [edi + 0x20]
call ebx
cmp byte [esi + 4], 0x54
je 0x468a62
movzx eax, byte [edi + 0x29]
shl eax, 0x10
or eax, 0xc0000001
push eax
push 0x5b
push 0x840101
push dword [edi + 0x20]
call ebx
jmp 0x461662
mov ecx, edi
call fcn.00460205
pop ebx
pop edi
pop esi
mov esp, ebp
pop ebp
ret 4
inc ecx
dec esp
add byte [ebp + 5], dh
call 0xb655a2e0
mov eax, dword [0x4c7ef0]
mov ecx, dword [eax]
add eax, 4
mov dword [0x4c7ef0], eax
mov eax, ecx
shr eax, 0xb
xor ecx, eax
mov eax, ecx
and eax, 0xff3a58ad
shl eax, 7
xor ecx, eax
mov eax, ecx
and eax, 0xffffdf8c
shl eax, 0xf
xor ecx, eax
mov eax, ecx
shr eax, 0x12
xor eax, ecx
shr eax, 1
inc dword [esi]
push es
mov word [ecx + 0x51], dx
dec dword [0x4c4190]
jne 0x468ab6
call 0xb655a346
mov eax, dword [0x4c7ef0]
mov ecx, dword [eax]
add eax, 4
mov dword [0x4c7ef0], eax
mov eax, ecx
shr eax, 0xb
xor ecx, eax
mov eax, ecx
and eax, 0xff3a58ad
shl eax, 7
xor ecx, eax
mov eax, ecx
and eax, 0xffffdf8c
shl eax, 0xf
xor ecx, eax
mov eax, ecx
shr eax, 0x12
xor eax, ecx
mov dword [ebp - 4], eax
fild dword [ebp - 4]
call dword [0x5448f17c]
lea eax, [ebp - 8]
push eax
clc
fld qword [ebp - 0x18]
fmul qword [0x458d54a0]
jne 0x468b11
cmp bh, 0x76
xor esi, esi
mov dword [0x4c7530], ecx
add byte [esi - 0x47], al
xor byte [ebp + 0x4c], dh
add ah, ch
inc esi
mov ecx, 0x4c7530
in al, dx
salc
mov eax, dword [ecx]
shr eax, 0x1e
xor eax, dword [ecx]
imul eax, eax, 0x6c078965
add eax, edx
inc edx
mov dword [ecx + 4], eax
add ecx, 4
cmp ecx, 0x4c7eec
jl 0x468b1a
mov dword [0x4c4190], esi
mov dword [0x4c7518], esi
pop esi
ret