Work on a dynamic darwin.iso fetcher

This commit is contained in:
I049299 2015-10-10 06:36:51 +01:00
parent 153f0a50d1
commit 258b81c531
14 changed files with 114 additions and 44 deletions

View File

@ -47,6 +47,7 @@ if sys.version_info < (2, 7):
sys.stderr.write('You need Python 2.7 or later\n')
sys.exit(1)
def bytetohex(bytestr):
return ''.join(['%02X ' % ord(x) for x in bytestr]).strip()

View File

@ -1,7 +1,7 @@
#!/bin/sh
set -e
echo VMware Unlocker 2.0.7
echo VMware Unlocker 2.0.8
echo ===============================
echo Copyright: Dave Parsons 2011-15

View File

@ -1,7 +1,7 @@
#!/bin/sh
set -e
echo VMware Unlocker 2.0.7
echo VMware Unlocker 2.0.8
echo ===============================
echo Copyright: Dave Parsons 2011-15

54
gettools.py Normal file
View File

@ -0,0 +1,54 @@
import os
import urllib
import urllib2
from HTMLParser import HTMLParser
import shutil
import tarfile
import zipfile
# Parse the Fusion directory page
class myHTMLParser(HTMLParser):
def __init__(self):
self.reset()
self.HTMLDATA = []
def handle_data(self, data):
if data.find("\n") == -1 :
if data[0].isdigit():
self.HTMLDATA.append(data)
def clean(self):
self.HTMLDATA = []
def main():
url = 'http://softwareupdate.vmware.com/cds/vmw-desktop/fusion/'
dir = os.path.dirname(os.path.abspath(__file__))
response = urllib2.urlopen(url)
html = response.read()
parser = myHTMLParser()
parser.feed(html)
url = url + parser.HTMLDATA[-1] + '/'
response = urllib2.urlopen(url)
html = response.read()
parser.clean()
parser.feed(html)
url = url + parser.HTMLDATA[-1] + '/packages/com.vmware.fusion.tools.darwin.zip.tar'
urllib.urlretrieve(url, 'tools/com.vmware.fusion.tools.darwin.zip.tar')
parser.clean()
tar = tarfile.open('tools/com.vmware.fusion.tools.darwin.zip.tar', 'r')
tar.extract('com.vmware.fusion.tools.darwin.zip', path='tools/')
zip = zipfile.ZipFile('tools/com.vmware.fusion.tools.darwin.zip', 'r')
zip.extract('payload/darwin.iso', path='tools/')
zip.extract('payload/darwin.iso.sig', path='tools/')
shutil.move(dir + '/tools/payload/darwin.iso', dir + '/tools/darwin.iso')
shutil.move(dir + '/tools/payload/darwin.iso.sig', dir + '/tools/darwin.iso.sig')
shutil.rmtree(dir + '/tools/payload', True)
os.remove(dir + '/tools/com.vmware.fusion.tools.darwin.zip.tar')
os.remove(dir + '/tools/com.vmware.fusion.tools.darwin.zip')
if __name__ == '__main__':
main()

View File

@ -1,7 +1,7 @@
#!/bin/bash
set -e
echo VMware Unlocker 2.0.7
echo VMware Unlocker 2.0.8
echo ===============================
echo Copyright: Dave Parsons 2011-15

View File

@ -1,7 +1,7 @@
#!/bin/bash
set -e
echo VMware Unlocker 2.0.7
echo VMware Unlocker 2.0.8
echo ===============================
echo Copyright: Dave Parsons 2011-15

View File

@ -2,7 +2,7 @@
set -e
set -x
echo VMware ESXi 6.x Unlocker 2.0.7
echo VMware ESXi 6.x Unlocker 2.0.8
echo ===============================
echo Copyright: Dave Parsons 2011-15

View File

@ -1,7 +1,7 @@
#!/bin/bash
set -e
echo VMware Unlocker 2.0.7
echo VMware Unlocker 2.0.8
echo ===============================
echo Copyright: Dave Parsons 2011-15

View File

@ -1,7 +1,7 @@
#!/bin/bash
set -e
echo VMware Unlocker 2.0.7
echo VMware Unlocker 2.0.8
echo ===============================
echo Copyright: Dave Parsons 2011-15

View File

@ -9,8 +9,8 @@ If you are using an earlier product please continue using Unlocker 1
Version 2 has been tested against:
[LIST]
[*]Workstation 11/12 on Windows and Linux[/*]
[*]Player 7 & Workstation Player 12 on Windows and Linux[/*]
[*]Workstation 11/12 Pro on Windows and Linux[/*]
[*]Player 7 & Workstation Player 12 on Windows and Linux[/*]
[*]Fusion 7/8 on Mavericks and Yosemite[/*]
[*]ESXi 6.0[/*]
[/LIST]
@ -22,7 +22,6 @@ being patched:
[*]Fix libvmkctl.so on ESXi 6 to allow use with vCenter[/*]
[*]A copy of the latest VMware Tools for OS X is included[/*]
[/LIST]
Note that not all products recognise the darwin.iso via install tools menu item.
You will have to manually mount the darwin.iso for example on Workstation and Player.
@ -50,16 +49,16 @@ If you are using VMware Player or Workstation on Windows you may get a core dump
Latest Linux and ESXi products are OK and do not show this problem.
[color=#ff0000][u][b] IMPORTANT:[/b][/u]
[color=#ff0000][u][b] IMPORTANT:[/b][/u]
 If you create a new VM using version 11 hardware VMware will stop and 
 create a core dump.There are two options to work around this issue:
 If you create a new VM using version 11 hardware VMware will stop and 
 create a core dump.There are two options to work around this issue:
 1. Change the VM to be HW 10 - this does not affect performance.
 2. Edit the VMX file and add: [/color]
 
[code=auto:0] smc.version = "0" |[/code]
 
 1. Change the VM to be HW 10 - this does not affect performance.
 2. Edit the VMX file and add: [/color]
 
[code=auto:0] smc.version = "0" |[/code]
 
To remove the check for server versions for OS X Leopard and Snow Leopard
(10.5 and 10.6) you must use a replacement EFI firwmare module from the firmware
@ -69,16 +68,16 @@ If you are using a 32-bit installation of OS X:
1. Copy efi32-srvr.rom to guest folder.
2. Edit the vmx file and add:
 
 
[code=auto:0]efi32.filename = "efi32-srvr.rom"[/code]
 
 
If you are using a 64-bit installation of OS X:
1. Copy efi64-srvr.rom to guest folder.
2. Edit the vmx file and add:
 
 
[code=auto:0]efi64.filename = "efi64-srvr.rom"[/code]
 
 
[u]4. Windows[/u]
On Windows you will need to either run cmd.exe as Administrator or using
@ -178,4 +177,9 @@ debugging expertise. Sam also wrote the code for patching ESXi ELF files.
[LIST]
[*]Workstation 12 on Linux fixes[/*]
[/LIST]
[/LIST]
16/09/15 2.0.8
[LIST]
[*]Player 12 on Linux fixes[/*]
[/LIST]
(c) 2011-2015 Dave Parsons

View File

@ -157,6 +157,6 @@ History
- Latest tools from Fusion 7.1.2
20/06/15 2.0.6 - ESXi 6 patch for smcPresent vCenter compatibility
16/09/15 2.0.7 - Workstation 12 on Linux fixes
19/09/15 2.0.8 - Player 12 on Linux fixes
(c) 2011-2015 Dave Parsons

0
tools/darwin.iso Executable file → Normal file
View File

0
tools/darwin.iso.sig Executable file → Normal file
View File

View File

@ -50,10 +50,10 @@ if sys.version_info < (2, 7):
sys.exit(1)
# Setup imports depending on whether IronPython or CPython
if sys.platform == 'win32' \
or sys.platform == 'cli':
from _winreg import *
try:
import _winreg
except ImportError:
pass
def rot13(s):
chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz'
@ -67,17 +67,19 @@ def bytetohex(bytestr):
def printkey(i, offset, smc_key, smc_data):
print str(i+1).zfill(3) \
+ ' ' + hex(offset) \
+ ' ' + smc_key[0][::-1] \
+ ' ' + str(smc_key[1]).zfill(2) \
+ ' ' + smc_key[2][::-1].replace('\x00', ' ') \
+ ' ' + '{0:#0{1}x}'.format(smc_key[3], 4) \
+ ' ' + hex(smc_key[4]) \
+ ' ' + bytetohex(smc_data)
print str(i + 1).zfill(3) \
+ ' ' + hex(offset) \
+ ' ' + smc_key[0][::-1] \
+ ' ' + str(smc_key[1]).zfill(2) \
+ ' ' + smc_key[2][::-1].replace('\x00', ' ') \
+ ' ' + '{0:#0{1}x}'.format(smc_key[3], 4) \
+ ' ' + hex(smc_key[4]) \
+ ' ' + bytetohex(smc_data)
E_CLASS64 = 2
E_SHT_RELA = 4
E_CLASS64 = 2;
E_SHT_RELA = 4;
def patchELF(f, oldOffset, newOffset):
f.seek(0)
@ -87,7 +89,7 @@ def patchELF(f, oldOffset, newOffset):
ei_class = struct.unpack('=B', f.read(1))[0]
if ei_class != E_CLASS64:
raise Exception('Not 64bit elf header: ' + ei_class)
raise Exception('Not 64bit elf header: ' + ei_class)
f.seek(40)
e_shoff = struct.unpack('=Q', f.read(8))[0]
@ -96,7 +98,7 @@ def patchELF(f, oldOffset, newOffset):
e_shnum = struct.unpack('=H', f.read(2))[0]
e_shstrndx = struct.unpack('=H', f.read(2))[0]
#print 'e_shoff: 0x{:x} e_shentsize: 0x{:x} e_shnum:0x{:x} e_shstrndx:0x{:x}'.format(e_shoff, e_shentsize, e_shnum, e_shstrndx)
# print 'e_shoff: 0x{:x} e_shentsize: 0x{:x} e_shnum:0x{:x} e_shstrndx:0x{:x}'.format(e_shoff, e_shentsize, e_shnum, e_shstrndx)
for i in range(0, e_shnum):
f.seek(e_shoff + i * e_shentsize)
@ -108,7 +110,7 @@ def patchELF(f, oldOffset, newOffset):
e_sh_entsize = e_sh[9]
if e_sh_type == E_SHT_RELA:
e_sh_nument = e_sh_size / e_sh_entsize
#print 'RELA at 0x{:x} with {:d} entries'.format(e_sh_offset, e_sh_nument)
# print 'RELA at 0x{:x} with {:d} entries'.format(e_sh_offset, e_sh_nument)
for j in range(0, e_sh_nument):
f.seek(e_sh_offset + e_sh_entsize * j)
rela = struct.unpack('=QQq', f.read(e_sh_entsize))
@ -116,7 +118,7 @@ def patchELF(f, oldOffset, newOffset):
r_info = rela[1]
r_addend = rela[2]
if r_addend == oldOffset:
r_addend = newOffset;
r_addend = newOffset
f.seek(e_sh_offset + e_sh_entsize * j)
f.write(struct.pack('=QQq', r_offset, r_info, r_addend))
print 'Relocation modified at: ' + hex(e_sh_offset + e_sh_entsize * j)
@ -125,6 +127,8 @@ def patchELF(f, oldOffset, newOffset):
def patchkeys(f, vmx, key, osname):
# Setup struct pack string
key_pack = '=4sB4sB6xQ'
smc_old_memptr = 0
smc_new_memptr = 0
# Do Until OSK1 read
i = 0
@ -198,9 +202,13 @@ def patchkeys(f, vmx, key, osname):
i += 1
return smc_old_memptr, smc_new_memptr
def patchsmc(name, osname, sharedobj):
with open(name, 'r+b') as f:
smc_old_memptr = 0
smc_new_memptr = 0
# Read file into string variable
vmx = f.read()
@ -326,8 +334,8 @@ def patchvmkctl(name):
f.close()
print 'smcPresent Patched: ' + name
def main():
def main():
# Work around absent Platform module on VMkernel
if os.name == 'nt' or os.name == 'cli':
osname = 'windows'
@ -343,18 +351,20 @@ def main():
vmx_debug = vmx_path + 'vmware-vmx-debug'
vmx_stats = vmx_path + 'vmware-vmx-stats'
vmwarebase = ''
libvmkctl = ''
elif osname == 'linux':
vmx_path = '/usr/lib/vmware/bin/'
vmx = vmx_path + 'vmware-vmx'
vmx_debug = vmx_path + 'vmware-vmx-debug'
vmx_stats = vmx_path + 'vmware-vmx-stats'
vmx_version = subprocess.check_output(["vmware", "-v"])
if vmx_version.startswith('VMware Workstation 12'):
vmx_version = subprocess.check_output(["vmplayer", "-v"])
if vmx_version.startswith('VMware Player 12'):
vmx_so = True
vmwarebase = '/usr/lib/vmware/lib/libvmwarebase.so/libvmwarebase.so'
else:
vmwarebase = '/usr/lib/vmware/lib/libvmwarebase.so.0/libvmwarebase.so.0'
libvmkctl = ''
elif osname == 'vmkernel':
vmx_path = '/unlocker/'
@ -374,6 +384,7 @@ def main():
vmx_debug = vmx_path + 'vmware-vmx-debug.exe'
vmx_stats = vmx_path + 'vmware-vmx-stats.exe'
vmwarebase = vmwarebase_path + 'vmwarebase.dll'
libvmkctl = ''
else:
print('Unknown Operating System: ' + osname)