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

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x4b2ea1
mov eax, dword fs:[0]
push eax
sub esp, 0x10
push ebx
push esi
push edi
mov eax, dword [0x4ef52c]
xor eax, ebp
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov dword [ebp - 0x18], edx
mov dword [ebp - 0x10], ecx
mov eax, dword [edx]
cmp eax, dword [edx + 4]
je 0x4027e8
mov dword [edx + 4], eax
mov ebx, dword [ecx + 4]
mov edx, dword [ecx]
sub ebx, edx
sar ebx, 2
test ebx, ebx
je 0x402b44
xor esi, esi
test ebx, ebx
je 0x402810
mov edi, ebx
mov eax, dword [edx]
lea edx, [edx + 4]
inc esi
add esi, dword [eax - 0xc]
sub edi, 1
jne 0x402802
xor ecx, ecx
lea eax, [esi + 1]
mov edx, 2
mul edx
seto cl
neg ecx
or ecx, eax
push ecx
call fcn.0046d49a
add esp, 4
mov ecx, eax
xor esi, esi
mov dword [ebp - 0x14], ecx
xor edi, edi
test ebx, ebx
je 0x40288f
nop dword [eax]
mov eax, dword [ebp - 0x10]
lea ecx, [ecx + esi*2]
mov eax, dword [eax]
mov eax, dword [eax + edi*4]
mov edx, dword [eax - 0xc]
mov dword [ebp - 0x1c], edx
add edx, edx
je 0x40287a
test ecx, ecx
jne 0x40286b
call fcn.0048ee6d
mov dword [eax], 0x16
call fcn.0048ed6f
jmp 0x40287a
test eax, eax
je 0x402859
push edx
push eax
push ecx
call fcn.0048b4f0
add esp, 0xc
add esi, dword [ebp - 0x1c]
mov eax, 0xa
mov ecx, dword [ebp - 0x14]
inc edi
mov word [ecx + esi*2], ax
inc esi
cmp edi, ebx
jb 0x402840
mov ebx, dword [ebp - 0x14]
xor eax, eax
mov word [ebx + esi*2], ax
test ebx, ebx
je 0x402b44
mov edi, ebx
lea ecx, [edi + 2]
mov ax, word [edi]
add edi, 2
test ax, ax
jne 0x4028a5
sub edi, ecx
sar edi, 1
lea eax, [edi*4]
mov dword [ebp - 0x1c], eax
add eax, 5
push eax
call fcn.0046d49a
mov ecx, dword fs:[0x2c]
add esp, 4
mov dword [ebp - 0x10], eax
mov esi, dword [ecx]
mov ecx, dword [0x4f6a14]
cmp ecx, dword [esi + 8]
jle 0x402907
push 0x4f6a14
call fcn.004885d3
add esp, 4
cmp dword [0x4f6a14], 0xffffffff
jne 0x402907
push 0x4f6a14
call fcn.00488589
add esp, 4
mov eax, dword [0x4f6a18]
cmp eax, dword [esi + 8]
jle 0x40298d
push 0x4f6a18
call fcn.004885d3
add esp, 4
cmp dword [0x4f6a18], 0xffffffff
jne 0x40298d
mov dword [ebp - 4], 0
call fcn.00489a2f
mov dword [0x4f7da4], 0xffffffff
mov edx, 1
mov dword [0x4f6a24], eax
nop word [eax + eax]
mov ecx, eax
shr ecx, 0x1e
xor ecx, eax
imul eax, ecx, 0x6c078965
add eax, edx
mov dword [edx*4 + 0x4f6a24], eax
inc edx
cmp edx, 0x270
jb 0x402950
push 0x4f6a18
mov dword [0x4f6a20], 0x270
mov dword [ebp - 4], 0xffffffff
call fcn.00488589
add esp, 4
mov eax, dword [0x4f7da8]
cmp eax, dword [esi + 8]
jle 0x4029d1
push 0x4f7da8
call fcn.004885d3
add esp, 4
cmp dword [0x4f7da8], 0xffffffff
jne 0x4029d1
push 0x4f7da8
mov dword [0x4f7dac], 0x20
mov dword [0x4f7db0], 0x7e
call fcn.00488589
add esp, 4
push 0x4f6a20
mov ecx, 0x4f7dac
call fcn.00402cc0
mov esi, dword [ebp - 0x10]
mov ecx, 0x4f7dac
push 0x4f6a20
mov byte [esi], al
call fcn.00402cc0
push 0x4f6a20
mov ecx, 0x4f7dac
mov byte [esi + 1], al
call fcn.00402cc0
push 0x4f6a20
mov ecx, 0x4f7dac
mov byte [esi + 2], al
call fcn.00402cc0
mov byte [esi + 3], al
xor edx, edx
xor esi, esi
test edi, edi
je 0x402b1e
nop word [eax + eax]
movzx eax, word [ebx + edx*2]
test ax, ax
je 0x402b1e
mov ecx, eax
test ecx, 0xffffff80
jne 0x402a5b
lea eax, [edi*4]
cmp esi, eax
ja 0x402b1e
jmp 0x402b0d
test ecx, 0xfffff800
jne 0x402a87
lea eax, [edi*4]
dec eax
cmp esi, eax
ja 0x402b1e
mov ebx, dword [ebp - 0x10]
mov eax, ecx
shr eax, 6
or al, 0xc0
mov byte [esi + ebx + 4], al
inc esi
jmp 0x402b04
lea eax, [ecx - 0xd800]
cmp eax, 0x7ff
lea eax, [edi*4]
ja 0x402adf
add eax, 0xfffffffd
cmp esi, eax
ja 0x402b1e
movzx eax, word [ebx + edx*2 + 2]
inc edx
mov ebx, dword [ebp - 0x10]
add eax, 0xfca02400
shl ecx, 0xa
add ecx, eax
mov eax, ecx
shr eax, 0x12
or al, 0xf0
mov byte [esi + ebx + 4], al
mov eax, ecx
shr eax, 0xc
and al, 0x3f
or al, 0x80
mov byte [esi + ebx + 5], al
mov eax, ecx
shr eax, 6
and al, 0x3f
or al, 0x80
mov byte [esi + ebx + 6], al
add esi, 3
jmp 0x402b04
add eax, 0xfffffffe
cmp esi, eax
ja 0x402b1e
mov ebx, dword [ebp - 0x10]
mov eax, ecx
shr eax, 0xc
or al, 0xe0
mov byte [esi + ebx + 4], al
mov eax, ecx
shr eax, 6
and al, 0x3f
or al, 0x80
mov byte [esi + ebx + 5], al
add esi, 2
mov ebx, dword [ebp - 0x14]
and cl, 0x3f
or cl, 0x80
mov eax, dword [ebp - 0x10]
inc edx
mov byte [esi + eax + 4], cl
inc esi
cmp edx, edi
jb 0x402a30
mov eax, dword [ebp - 0x1c]
mov edi, dword [ebp - 0x10]
inc eax
cmp esi, eax
jae 0x402b2e
mov byte [esi + edi + 4], 0
push ebx
call fcn.0046d495
add esp, 4
test esi, esi
jne 0x402b58
push edi
call fcn.0046d495
add esp, 4
xor al, al
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
add esi, 4
cmp esi, 0x7e000000
jbe 0x402b67
xor edi, edi
jmp 0x402b7f
mov eax, 0x80808081
imul esi
add edx, esi
sar edx, 7
mov edi, edx
shr edi, 0x1f
add edi, 0x10
add edi, edx
add edi, esi
push edi
call fcn.0046d49a
push edi
mov ebx, eax
push esi
mov esi, dword [ebp - 0x10]
mov edx, ebx
mov ecx, esi
call fcn.0042ea50
push esi
mov edi, eax
call fcn.0046d495
mov ecx, 1
add esp, 0x10
cmp edi, ecx
jbe 0x402bbc
nop dword [eax]
mov al, byte [ecx + ebx - 1]
xor byte [ecx + ebx], al
inc ecx
cmp ecx, edi
jb 0x402bb0
mov esi, dword [ebp - 0x18]
mov eax, dword [esi + 4]
mov ecx, eax
mov edx, dword [esi]
sub ecx, edx
mov dword [ebp - 0x14], eax
cmp edi, ecx
jae 0x402bd4
lea eax, [edx + edi]
jmp 0x402c07
jbe 0x402c0a
mov eax, dword [esi + 8]
sub eax, edx
cmp edi, eax
jbe 0x402bed
push ecx
push edi
mov ecx, esi
lfence
call fcn.00403060
jmp 0x402c0a
mov esi, edi
sub esi, ecx
push esi
push 0
push dword [ebp - 0x14]
call fcn.0048ba70
mov eax, dword [ebp - 0x14]
add esp, 0xc
add eax, esi
mov esi, dword [ebp - 0x18]
mov dword [esi + 4], eax
mov eax, dword [esi]
test edi, edi
je 0x402c50
test eax, eax
jne 0x402c41
call fcn.0048ee6d
mov dword [eax], 0x16
call fcn.0048ed6f
push ebx
call fcn.0046d495
add esp, 4
mov al, 1
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
test ebx, ebx
je 0x402c14
push edi
push ebx
push eax
call fcn.0048b4f0
add esp, 0xc
push ebx
call fcn.0046d495
add esp, 4
mov al, 1
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret