Function at 0x10028f67
Capabilities:
Encode data using xor
Generate random numbers using a mersenne twister
Resolve function by parsing pe exports

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
push 0xffffffffffffffff
push 0x10060d20
mov eax, dword fs:[0]
push eax
mov dword fs:[0], esp
sub esp, 0xb0
cmp byte [ebp + 0x10], 0
push ebx
push esi
push edi
mov dword [esp + 0xa4], edx
mov ebx, ecx
je 0x10028fa7
push 0
call dword [sym.imp.GDI32.dll_GetObjectType]
jmp 0x10029746
xor esi, esi
lea ecx, [esp + 0x84]
mov dword [esp + 0x10], esi
mov dword [esp + 0xc], 0xfffffff6
mov dword [esp + 0x10], 0x27d373ee
push 2
call fcn.10002fdf
mov dword [esp + 0xc4], esi
mov dword [esp + 0x30], esi
jmp 0x10028fe8
mov eax, dword [esp + 0x30]
mov dword [esp + eax*4 + 0x40], 0x7df2f4a8
inc dword [esp + 0x30]
cmp dword [esp + 0x30], 2
jl 0x10028fd8
push ecx
push ecx
lea eax, [esp + 0x38]
push eax
lea ecx, [esp + 0x90]
call fcn.1002a03b
add esp, 0xc
cmp dword [esp + 0x44], esi
jne 0x1002900f
mov eax, esi
jmp 0x10029012
xor eax, eax
inc eax
mov dword [esp + 0x10], eax
xor edx, edx
mov eax, dword [esp + 0x10]
mov dword [esp + 0xc], eax
mov eax, dword [esp + 0x44]
cmp eax, 0x6f3a
mov eax, dword [esp + 0x44]
setg dl
xor ecx, ecx
cmp edx, eax
push 0xfffffffffffffffd
setge cl
mov dword [esp + 0x14], ecx
mov ecx, 0xffff
mov eax, dword [esp + 0x44]
sub ecx, eax
mov eax, dword [esp + 0x14]
add eax, ecx
pop esi
cmp eax, esi
mov eax, dword [esp + 0x44]
sbb ecx, ecx
xor edx, edx
inc ecx
cmp ecx, eax
mov ecx, dword [esp + 0xc]
mov eax, dword [esp + 0x44]
setle dl
imul ecx, edx
xor edx, edx
cmp eax, ecx
mov eax, dword [esp + 0x84]
lea ecx, [esp + 0x84]
setle dl
or edi, 0xffffffff
mov dword [esp + 0xc4], edi
mov dword [eax + 4], edx
call fcn.1000301b
mov eax, dword [0x10081cb8]
test al, 1
jne 0x100290db
or eax, 1
mov dword [0x10081cb4], edi
mov ecx, 0x1571
mov dword [0x10081cb8], eax
xor edx, edx
mov dword [0x10080934], ecx
inc edx
mov eax, ecx
shr eax, 0x1e
xor eax, ecx
imul ecx, eax, 0x6c078965
mov eax, 0x270
add ecx, edx
mov dword [edx*4 + 0x10080934], ecx
inc edx
cmp edx, eax
jl 0x100290b6
mov dword [0x10080930], eax
mov dword [esp + 0x14], 0x57fd5464
mov eax, 0xfcf09cc2
mov dword [esp + 0x10], edi
mov dword [esp + 0x10], 0x50ba1bf2
mov dword [esp + 0xa8], eax
mov dword [esp + 0xac], eax
mov dword [esp + 0xb0], eax
mov dword [esp + 0xb4], eax
mov dword [esp + 0x10], 6
mov dword [esp + 0x10], esi
mov dword [esp + 0x10], 1
mov dword [esp + 0x54], 0xfffe
mov dword [esp + 0x14], 0
jmp 0x10029156
cmp dword [esp + 0x14], 0
jne 0x1002915d
lea eax, [esp + 0x2f]
mov byte [esp + 0x2f], 0
push eax
mov ecx, 0x2386
call fcn.1002791c
dec dword [esp + 0x18]
pop ecx
cmp dword [esp + 0x14], 0xffffffef
jle 0x10029136
push 0x3b9
push 0x68d
lea eax, [esp + 0x5c]
mov dl, 1
push eax
push 0x4855
push 0x4ac7
push 0
xor cl, cl
call fcn.10027597
add esp, 0x18
lea ecx, [esp + 0x68]
xor esi, esi
mov dword [esp + 0x14], esi
mov dword [esp + 0x18], 0x278fa8f9
push 2
call fcn.10002fdf
push 0x20e
push 0x766e
push 0x521
lea eax, [esp + 0x9c]
xor ecx, ecx
push eax
inc ecx
lea eax, [esp + 0x78]
mov dword [esp + 0xd4], ecx
mov dl, cl
push eax
mov dword [esp + 0x24], edi
mov dword [esp + 0x20], ecx
mov dword [esp + 0x6c], 0x4db5
push esi
call fcn.10027597
mov eax, dword [esp + 0x2c]
xor ecx, ecx
mov eax, dword [esp + 0x2c]
add esp, 0x18
mov eax, dword [esp + 0x14]
cmp eax, 0xf545
setg cl
xor edx, edx
mov dword [esp + 0x18], ecx
mov eax, dword [esp + 0x18]
mov eax, dword [esp + 0x14]
mov ecx, dword [esp + 0x14]
add ecx, dword [esp + 0x14]
mov eax, dword [esp + 0x18]
cmp ecx, eax
mov eax, dword [esp + 0x68]
setg dl
xor ecx, ecx
cmp edx, edi
setne cl
mov dword [eax], ecx
mov dword [esp + 0x10], 3
mov eax, dword [esp + 0x10]
sub eax, 4
je 0x100292b9
mov dword [esp + 0x10], 0xf4a0
lea ecx, [esp + 0x98]
mov dword [esp + 0x10], 0x6c7f05f4
mov dword [esp + 0x10], 0xfffffff8
mov dword [esp + 0x10], 0x11fb8eb5
mov dword [esp + 0x10], 1
push 4
mov dword [esp + 0x14], 0x26c4f32b
call fcn.10002fdf
push esi
lea eax, [esp + 0x98]
mov byte [esp + 0xc8], 2
push 0x54f8
push eax
lea ecx, [esp + 0xa4]
call fcn.10027691
pop ecx
lea eax, [esp + 0x60]
push eax
call fcn.10028b6f
add esp, 0xc
mov byte [esp + 0xc4], 1
lea ecx, [esp + 0x98]
call fcn.1000301b
jmp 0x1002931b
mov dword [esp + 0x18], 0
jmp 0x100292e4
push 0x1605
lea eax, [esp + 0x1c]
mov ecx, 0x3a1a
push eax
push 0
lea edx, [esp + 0x74]
call fcn.10027a4f
add esp, 0xc
inc dword [esp + 0x18]
cmp dword [esp + 0x18], 2
jl 0x100292c3
mov dword [esp + 0x18], 0
jmp 0x10029314
lea eax, [esp + 0x27]
mov byte [esp + 0x27], 0
push 0xc17
push eax
mov ecx, 0x311b
call fcn.1002a0ac
inc dword [esp + 0x20]
pop ecx
pop ecx
cmp dword [esp + 0x18], 1
jle 0x100292f5
mov dword [esp + 0xc], 0
jmp 0x10029366
mov dword [esp + 0x60], 0x8f43
mov byte [esp + 0x26], 0
cmp byte [esp + 0x26], 0
je 0x1002934b
push 0
mov edx, 0x6660
mov ecx, 0xaef
call fcn.1002975b
pop ecx
lea eax, [esp + 0x68]
push eax
push ecx
push ecx
lea edx, [esp + 0x6c]
lea ecx, [esp + 0x24]
call fcn.10028cf0
add esp, 0xc
inc dword [esp + 0xc]
cmp dword [esp + 0xc], 1
jle 0x10029325
lea ecx, [esp + 0x68]
mov dword [esp + 0xc4], edi
call fcn.1000301b
cmp byte [0x1007e15c], 0
push 5
pop edi
jne 0x1002957c
xor esi, esi
mov dword [esp + 0xc], esi
jmp 0x100293a5
mov eax, dword [esp + 0xc]
mov dword [esp + eax*4 + 0x48], 9
inc dword [esp + 0xc]
cmp dword [esp + 0xc], 3
jl 0x10029395
mov dword [esp + 0x48], esi
jmp 0x100294a0
lea eax, [esp + 0x1c]
mov dword [esp + 0x1c], 0x3eb905d0
push eax
sub esp, 0xc
mov dword [esp + 0x24], esi
call fcn.10028d6f
add esp, 0x10
mov dword [esp + 0x1c], esi
jmp 0x10029491
mov dword [esp + 0xc], 0x9dade661
xor edx, edx
mov dword [esp + 0x10], 0xfffffff6
mov dword [esp + 0x10], 0xedda5659
mov dword [esp + 0x14], 0x1c71
mov ecx, dword [esp + 0x48]
mov eax, dword [esp + 0x1c]
cmp eax, ecx
mov eax, dword [esp + 0xc]
setge dl
xor ecx, ecx
sub edx, eax
mov eax, dword [esp + 0x1c]
add edx, eax
mov eax, dword [esp + 0x14]
cmp eax, 0x756
mov eax, edi
setge cl
imul ecx, edx
mov dword [esp + 0xc], ecx
cmp dword [esp + 0xc], 0xc07c2076
sbb ecx, ecx
inc ecx
sub eax, ecx
mov dword [esp + 0x10], eax
imul eax, dword [esp + 0x4c], 5
mov dword [esp + 0x10], eax
cmp dword [esp + 0x10], 3
jbe 0x10029451
mov eax, dword [esp + 0x14]
mov dword [esp + 0xc], 0x213072c0
mov eax, dword [esp + 0x50]
mov edx, dword [esp + 0xc]
sub edx, eax
cmp dword [esp + 0x14], 6
sbb eax, eax
xor ecx, ecx
neg eax
cmp edx, eax
setl cl
xor edx, edx
cmp ecx, 0x2e71
setg dl
xor eax, eax
cmp edx, 0xe213
setg al
mov dword [esp + 0x10], eax
inc dword [esp + 0x1c]
cmp dword [esp + 0x1c], 0x2e
jle 0x100293da
inc dword [esp + 0x48]
cmp dword [esp + 0x48], 0xc
jl 0x100293b5
push 0x6f7
push 0x10080930
push 0x5d7b
push 0x2d10
push 0x72c5
push 1
xor dl, dl
mov cl, 1
call fcn.10027597
mov dword [esp + 0x4c], 0xffffffff
add esp, 0x18
mov dword [esp + 0x20], 0x90a23371
mov eax, dword [esp + 0x34]
cmp eax, dword [esp + 0x34]
jne 0x1002952f
lea eax, [esp + 0x5c]
mov dword [esp + 0x5c], 1
push eax
push 0x1b95
push esi
lea eax, [esp + 0x80]
mov dword [esp + 0x80], 0xa8628405
push eax
lea eax, [esp + 0x44]
mov edx, 0xdd9
push 0x2ffb
push eax
lea ecx, [esp + 0x38]
call fcn.10027a7f
add esp, 0x18
jmp 0x1002956f
mov dword [esp + 0xc], 0xc3b03c3f
mov eax, dword [esp + 0xc]
mov eax, dword [esp + 0x20]
mov eax, dword [esp + 0x20]
mov eax, dword [esp + 0x34]
mov eax, dword [esp + 0xc]
mov eax, dword [esp + 0xc]
mov eax, dword [esp + 0x20]
mov eax, dword [esp + 0xc]
mov eax, dword [esp + 0x34]
mov eax, dword [esp + 0x20]
mov eax, dword [esp + 0x20]
mov eax, dword [esp + 0x20]
mov dword [esp + 0x20], 0x4a126529
push 1
mov edx, 0x1007e15c
call fcn.10027573
pop ecx
mov dword [esp + 0x10], 0x140b
cmp dword [esp + 0x10], 0x5d8
jge 0x10029636
xor eax, eax
mov dword [esp + 0x64], eax
mov dword [esp + 0x78], eax
mov dword [esp + 0x7c], eax
mov dword [esp + 0x80], eax
lea eax, [esp + 0x64]
push eax
push ecx
lea ecx, [esp + 0x80]
call fcn.1002a56d
lea eax, [esp + 0x3c]
push eax
push 0x10068c74
call fcn.100490b2
mov esi, dword [esp + 0x80]
mov eax, dword [esp + 0x44]
pop ecx
pop ecx
mov ecx, edi
and eax, 0x80000001
jns 0x100295e3
dec eax
or eax, 0xfffffffe
inc eax
mov dword [esi + ecx*4], eax
mov eax, dword [esp + 0x3c]
cdq
sub eax, edx
sar eax, 1
dec ecx
mov dword [esp + 0x3c], eax
jns 0x100295d7
mov ecx, dword [esi + 4]
xor edx, edx
mov eax, dword [esi + 0x14]
mov dword [esi + 4], eax
mov dword [esi + 0x14], ecx
mov ecx, dword [esi + 8]
mov eax, dword [esi + 0xc]
mov dword [esi + 8], eax
mov dword [esi + 0xc], ecx
xor ecx, ecx
inc edx
mov eax, dword [esi + edi*4]
imul eax, edx
add edx, edx
add ecx, eax
dec edi
jns 0x10029613
push ecx
push str._ld_n
call fcn.10048e5f
pop ecx
pop ecx
lea ecx, [esp + 0x78]
call fcn.1000301b
push 4
pop edi
xor esi, esi
mov dword [esp + 0x28], edi
mov dword [esp + 0xc], esi
jmp 0x10029655
mov eax, dword [esp + 0xc]
mov dword [esp + eax*4 + 0x38], 8
inc dword [esp + 0xc]
cmp dword [esp + 0xc], 1
jl 0x10029645
lea eax, [esp + 0x28]
mov dl, 1
push eax
push 0x3460
push 0x3669
push 0x5e8
push 0x3be9
push 1
mov cl, dl
call fcn.10027597
add esp, 0x18
cmp dword [esp + 0x28], esi
je 0x100296a3
mov eax, dword [esp + 0x38]
mov eax, dword [esp + 0x38]
mov eax, dword [esp + 0x28]
cmp dword [esp + 0x28], esi
jle 0x1002969f
mov eax, dword [esp + 0x38]
mov eax, dword [esp + 0x28]
mov eax, dword [esp + 0x28]
mov eax, dword [0x10080930]
mov dword [esp + 0x28], 1
cmp eax, 0x270
jne 0x100296fa
mov edx, 0x10080938
mov ecx, dword [edx - 4]
xor ecx, dword [edx]
and ecx, 0x7fffffff
xor ecx, dword [edx - 4]
mov eax, ecx
and al, 1
movzx eax, al
neg eax
sbb eax, eax
shr ecx, 1
and eax, 0x9908b0df
xor eax, dword [edx + 0x630]
xor eax, ecx
mov dword [edx + 0x9bc], eax
add edx, edi
cmp edx, 0x100812f8
jl 0x100296c0
jmp 0x10029706
cmp eax, 0x4e0
jb 0x1002970b
call fcn.1002a5d9
mov eax, dword [0x10080930]
mov ecx, dword [eax*4 + 0x10080934]
inc eax
mov dword [0x10080930], eax
mov eax, ecx
shr eax, 0xb
and eax, dword [0x10081cb4]
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 [ebx], eax
mov ecx, dword [esp + 0xbc]
pop edi
pop esi
mov dword fs:[0], ecx
pop ebx
mov esp, ebp
pop ebp
ret