Function at 0x709f10
Capabilities:
Check for software breakpoints
Check os version
Get number of processors
Hook routines via microsoft detours

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
sub esp, 0xac
mov eax, dword [reloc.kernel32.dll_WaitForMultipleObjects]
xor eax, esp
mov dword [esp + 0xa8], eax
push ebx
push esi
mov ebx, edx
mov edx, ecx
push edi
xor edi, edi
mov dword [esp + 0x1c], ebx
mov dword [esp + 0x38], edx
test ebx, ebx
jne 0x709f59
lea eax, [ebx + 0x57]
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0xa8]
xor ecx, esp
call fcn.0070b13b
mov esp, ebp
pop ebp
ret 0xc
mov ecx, dword fs:[0x18]
mov eax, dword [reloc.kernel32.dll_WaitForMultipleObjects]
cmp eax, dword [ecx + 0x24]
je 0x709f86
mov eax, 0x10dd
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0xa8]
xor ecx, esp
call fcn.0070b13b
mov esp, ebp
pop ebp
ret 0xc
mov eax, dword [reloc.kernel32.dll_WaitForMultipleObjects]
test eax, eax
jne 0x70a5ab
test edx, edx
je 0x709fad
mov esi, dword [edx]
test esi, esi
jne 0x709fc9
mov dword [reloc.kernel32.dll_WaitForMultipleObjects], 6
mov dword [reloc.kernel32.dll_WaitForMultipleObjects], edx
mov eax, 6
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0xa8]
xor ecx, esp
call fcn.0070b13b
mov esp, ebp
pop ebp
ret 0xc
xor eax, eax
cmp byte [esi], 0xff
mov dword [esp + 0x34], eax
mov dword [esp + 0x2c], eax
jne 0x709ff8
cmp byte [esi + 1], 0x25
jne 0x709ff8
mov eax, dword [esi + 2]
mov ecx, esi
mov edx, eax
mov dword [esp + 0x10], eax
call fcn.00709490
test al, al
je 0x709ff8
mov esi, dword [esp + 0x10]
mov esi, dword [esi]
cmp byte [esi], 0xeb
jne 0x70a03a
movsx eax, byte [esi + 1]
add esi, 2
add esi, eax
mov al, byte [esi]
cmp al, 0xff
jne 0x70a02e
cmp byte [esi + 1], 0x25
jne 0x70a03a
mov eax, dword [esi + 2]
mov ecx, esi
mov edx, eax
mov dword [esp + 0x10], eax
call fcn.00709490
test al, al
je 0x70a03a
mov esi, dword [esp + 0x10]
mov esi, dword [esi]
jmp 0x70a03a
cmp al, 0xe9
jne 0x70a03a
mov eax, dword [esi + 1]
add esi, 5
add esi, eax
cmp byte [ebx], 0xff
jne 0x70a063
cmp byte [ebx + 1], 0x25
jne 0x70a063
mov eax, dword [ebx + 2]
mov ecx, ebx
mov edx, eax
mov dword [esp + 0x10], eax
call fcn.00709490
test al, al
je 0x70a063
mov ebx, dword [esp + 0x10]
mov ebx, dword [ebx]
mov dword [esp + 0x1c], ebx
cmp byte [ebx], 0xeb
jne 0x70a0ad
movsx eax, byte [ebx + 1]
add ebx, 2
add ebx, eax
mov dword [esp + 0x1c], ebx
mov al, byte [ebx]
cmp al, 0xff
jne 0x70a09d
cmp byte [ebx + 1], 0x25
jne 0x70a0ad
mov eax, dword [ebx + 2]
mov ecx, ebx
mov edx, eax
mov dword [esp + 0x10], eax
call fcn.00709490
test al, al
je 0x70a0ad
mov ebx, dword [esp + 0x10]
mov ebx, dword [ebx]
jmp 0x70a0a9
cmp al, 0xe9
jne 0x70a0ad
mov eax, dword [ebx + 1]
add ebx, 5
add ebx, eax
mov dword [esp + 0x1c], ebx
cmp ebx, esi
jne 0x70a0c2
cmp dword [reloc.kernel32.dll_WaitForMultipleObjects], edi
jne 0x70a5a0
jmp 0x70a557
mov eax, dword fs:[0x18]
push 0x18
push 0
mov eax, dword [eax + 0x30]
push dword [eax + 0x18]
call dword [0x1000400c]
mov dword [esp + 0x2c], eax
test eax, eax
je 0x70a552
cmp esi, 0x7ff80000
jbe 0x70a101
lea edi, reloc.kernel32.dll_WaitForMultipleObjects
cmp esi, 0x80000000
jb 0x70a106
mov ebx, 0xfff80000
jmp 0x70a10c
mov edi, 0x80000
lea ebx, reloc.kernel32.dll_WaitForMultipleObjects
cmp byte [esi], 0xe9
jne 0x70a145
mov eax, dword [esi + 1]
add eax, 5
add eax, esi
cmp eax, esi
jae 0x70a133
cmp eax, 0x80000000
jae 0x70a12c
lea ebx, reloc.kernel32.dll_WaitForMultipleObjects
jmp 0x70a145
mov ebx, 0xfff80000
jmp 0x70a145
lea edi, reloc.kernel32.dll_WaitForMultipleObjects
cmp eax, 0x7ff80000
ja 0x70a145
mov edi, 0x80000
mov ecx, dword [reloc.kernel32.dll_WaitForMultipleObjects]
mov eax, dword [reloc.kernel32.dll_WaitForMultipleObjects]
test ecx, ecx
jne 0x70a160
test eax, eax
je 0x70a173
mov ecx, eax
mov dword [reloc.kernel32.dll_WaitForMultipleObjects], ecx
mov edx, dword [ecx + 8]
test edx, edx
je 0x70a173
cmp edx, edi
jb 0x70a173
cmp edx, ebx
jbe 0x70a202
mov ecx, eax
mov dword [reloc.kernel32.dll_WaitForMultipleObjects], ecx
test eax, eax
je 0x70a19f
test ecx, ecx
je 0x70a192
mov eax, dword [ecx + 8]
test eax, eax
je 0x70a192
cmp eax, edi
jb 0x70a192
cmp eax, ebx
jbe 0x70a202
mov ecx, dword [ecx + 4]
mov dword [reloc.kernel32.dll_WaitForMultipleObjects], ecx
test ecx, ecx
jne 0x70a183
mov ecx, esi
mov edx, edi
push ebx
and ecx, 0xffff0000
call fcn.007097f0
mov ecx, eax
add esp, 4
test ecx, ecx
je 0x70a552
mov dword [ecx], reloc.kernel32.dll_WaitForMultipleObjects
xor edx, edx
mov dword [ecx + 8], 0
mov eax, dword [reloc.kernel32.dll_WaitForMultipleObjects]
mov dword [ecx + 4], eax
lea eax, reloc.kernel32.dll_WaitForMultipleObjects
mov dword [reloc.kernel32.dll_WaitForMultipleObjects], ecx
mov dword [reloc.kernel32.dll_WaitForMultipleObjects], ecx
mov dword [esp + 0xc], 0x38b
lea ecx, [ecx]
mov dword [eax + 0x40], edx
mov edx, eax
sub eax, 0x48
sub dword [esp + 0xc], 1
jne 0x70a1f0
mov dword [ecx + 8], edx
mov edx, dword [ecx + 8]
mov dword [esp + 0x20], edx
cmp edx, edi
jb 0x70a552
cmp edx, ebx
ja 0x70a552
mov eax, dword [edx + 0x40]
mov ebx, edx
mov dword [ecx + 8], eax
mov edi, esi
mov dword [edx], reloc.kernel32.dll_WaitForMultipleObjects
lea eax, [edx + 0x38]
mov dword [edx + 4], 0xcccccccc
xor ecx, ecx
mov dword [edx + 8], 0xcccccccc
mov dword [edx + 0xc], 0xcccccccc
mov dword [edx + 0x10], 0xcccccccc
mov dword [edx + 0x14], 0xcccccccc
mov dword [edx + 0x18], 0xcccccccc
mov dword [edx + 0x1c], 0xcccccccc
mov dword [edx + 0x20], 0xcccccccc
mov dword [edx + 0x24], 0xcccccccc
mov dword [edx + 0x28], 0xcccccccc
mov dword [edx + 0x2c], 0xcccccccc
mov dword [edx + 0x30], 0xcccccccc
mov dword [edx + 0x34], 0xcccccccc
mov dword [edx + 0x40], 0xcccccccc
mov dword [edx + 0x44], 0xcccccccc
mov dword [esp + 0x34], edx
add edx, 0x1e
mov dword [eax], ecx
mov dword [esp + 0x24], eax
mov dword [eax + 4], ecx
mov dword [esp + 0x3c], edx
mov dword [esp + 0x18], ecx
nop
mov dword [esp + 0x40], 0
lea eax, [esp + 0x6c]
mov dword [esp + 0x60], eax
mov edx, edi
mov dword [esp + 0x10], edx
lea eax, [esp + 0x30]
mov dword [esp + 0x44], 0
mov ecx, ebx
mov dword [esp + 0x48], 0
mov dword [esp + 0x54], 0
mov dword [esp + 0x58], 0
mov dword [esp + 0x4c], 0
mov dword [esp + 0x50], 0
mov dword [esp + 0x64], eax
mov dword [esp + 0x6c], 0
mov dword [esp + 0x30], 0
test ebx, ebx
jne 0x70a318
lea ecx, [esp + 0x70]
test edi, edi
jne 0x70a32b
mov eax, dword fs:[0x18]
mov dword [eax + 0x34], 0xd
jmp 0x70a34b
movzx eax, byte [edi]
mov edx, dword [eax*8 + reloc.kernel32.dll_WaitForMultipleObjects]
lea eax, reloc.kernel32.dll_WaitForMultipleObjects
push edi
push ecx
push eax
lea ecx, [esp + 0x4c]
call edx
mov edx, dword [esp + 0x10]
mov edi, eax
mov eax, edi
sub eax, edx
mov edx, dword [esp + 0x24]
add eax, dword [esp + 0x30]
inc dword [esp + 0x24]
add ebx, eax
mov dword [esp + 0xc], ebx
mov ebx, edi
mov ah, byte [esp + 0xc]
sub ebx, esi
sub ah, byte [esp + 0x20]
mov al, bl
mov cl, ah
mov byte [esp + 0x17], ah
shl cl, 3
and al, 7
or cl, al
mov byte [edx], cl
mov ecx, dword [esp + 0x18]
mov edx, dword [esp + 0x10]
inc ecx
mov dword [esp + 0x18], ecx
cmp ecx, 8
jae 0x70a3f0
mov al, byte [edx]
cmp al, 0xeb
je 0x70a3f0
cmp al, 0xe9
je 0x70a3f0
cmp al, 0xe0
je 0x70a3f0
cmp al, 0xc2
je 0x70a3f0
cmp al, 0xc3
je 0x70a3f0
cmp al, 0xcc
je 0x70a3f0
cmp al, 0xf3
jne 0x70a3b4
cmp byte [edx + 1], 0xc3
jmp 0x70a3e0
cmp al, 0xff
jne 0x70a3be
cmp byte [edx + 1], 0x25
jmp 0x70a3e0
cmp al, 0x26
je 0x70a3d6
cmp al, 0x2e
je 0x70a3d6
cmp al, 0x36
je 0x70a3d6
cmp al, 0x3e
je 0x70a3d6
cmp al, 0x64
je 0x70a3d6
cmp al, 0x65
jne 0x70a3e2
cmp byte [edx + 1], 0xff
jne 0x70a3e2
cmp byte [edx + 2], 0x25
je 0x70a3f0
cmp ebx, 5
jae 0x70a420
mov ebx, dword [esp + 0xc]
jmp 0x70a2b0
cmp ebx, 5
jae 0x70a417
mov ecx, edi
call fcn.00709570
test eax, eax
je 0x70a542
add edi, eax
mov ebx, edi
sub ebx, esi
cmp ebx, 5
jb 0x70a3f5
mov ah, byte [esp + 0x17]
mov ecx, dword [esp + 0x18]
cmp ecx, 8
ja 0x70a542
mov edi, dword [esp + 0x3c]
cmp dword [esp + 0xc], edi
jbe 0x70a42b
int3
mov byte [edi], ah
mov eax, dword [esp + 0x20]
push ebx
push esi
mov byte [eax + 0x36], bl
add eax, 0x20
push eax
call fcn.0070b7d1
add esp, 0xc
cmp ebx, 0x19
jbe 0x70a451
mov edi, 6
jmp 0x70a557
mov ecx, dword [esp + 0x20]
lea edx, [esi + ebx]
mov eax, dword [esp + 0x1c]
mov dword [ecx + 0x40], edx
mov dword [ecx + 0x44], eax
movzx ecx, byte [edi]
add ecx, dword [esp + 0x20]
lea eax, [ecx + 5]
mov byte [ecx], 0xe9
sub edx, eax
mov dword [ecx + 1], edx
add ecx, 5
cmp ecx, edi
jae 0x70a48c
sub edi, ecx
push edi
push 0xcc
push ecx
call fcn.0070b7d7
add esp, 0xc
lea eax, [esp + 0x28]
mov dword [esp + 0xc], ebx
mov ebx, dword [reloc.kernel32.dll_WaitForMultipleObjects]
push eax
push 0x40
lea eax, [esp + 0x14]
mov dword [esp + 0x30], 0
push eax
lea eax, [esp + 0x24]
mov dword [esp + 0x24], esi
push eax
push 0xffffffffffffffff
call ebx
mov edi, eax
cmp edi, 0xc0000045
jne 0x70a4ea
push dword [esp + 0xc]
push dword [esp + 0x1c]
call dword [0x10004024]
test al, al
je 0x70a4ee
lea eax, [esp + 0x28]
push eax
push 0x40
lea eax, [esp + 0x14]
push eax
lea eax, [esp + 0x24]
push eax
push 0xffffffffffffffff
call ebx
mov edi, eax
test edi, edi
jns 0x70a4f9
push edi
call dword [0x10004028]
mov edi, eax
jmp 0x70a557
mov ecx, dword [esp + 0x2c]
mov eax, dword [esp + 0x38]
mov dword [ecx + 8], eax
mov eax, dword [esp + 0x20]
mov dword [ecx + 0x10], eax
mov dword [ecx + 4], 0
mov dword [ecx + 0xc], esi
mov eax, dword [esp + 0x28]
mov dword [ecx + 0x14], eax
mov eax, dword [reloc.kernel32.dll_WaitForMultipleObjects]
mov dword [ecx], eax
xor eax, eax
mov dword [reloc.kernel32.dll_WaitForMultipleObjects], ecx
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0xa8]
xor ecx, esp
call fcn.0070b13b
mov esp, ebp
pop ebp
ret 0xc
cmp dword [reloc.kernel32.dll_WaitForMultipleObjects], 0
mov edi, 9
jne 0x70a55d
jmp 0x70a557
mov edi, 8
mov dword [reloc.kernel32.dll_WaitForMultipleObjects], edi
mov ebx, dword [esp + 0x34]
test ebx, ebx
je 0x70a583
push 0x48
push 0
mov esi, ebx
push ebx
and esi, 0xffff0000
call fcn.0070b7d7
mov eax, dword [esi + 8]
add esp, 0xc
mov dword [ebx + 0x40], eax
mov dword [esi + 8], ebx
mov eax, dword [esp + 0x2c]
test eax, eax
je 0x70a5a0
push eax
mov eax, dword fs:[0x18]
push 0
mov eax, dword [eax + 0x30]
push dword [eax + 0x18]
call dword [0x10004020]
mov eax, dword [esp + 0x38]
mov dword [reloc.kernel32.dll_WaitForMultipleObjects], eax
mov eax, edi
mov ecx, dword [esp + 0xb4]
pop edi
pop esi
pop ebx
xor ecx, esp
call fcn.0070b13b
mov esp, ebp
pop ebp
ret 0xc