mirror of
https://github.com/paolo-projects/unlocker.git
synced 2025-07-24 22:45:11 +02:00
Applied @mkitchingh patch to unlocker.py and updated gettools.py to look into core com.vmware.fusion.zip if tools are not found. Rebuilt unlocker.exe and gettools.exe
This commit is contained in:
parent
b9c0059fcb
commit
d4802acdd7
202
gettools.py
202
gettools.py
@ -71,112 +71,138 @@ def convertpath(path):
|
||||
# OS path separator replacement funciton
|
||||
return path.replace(os.path.sep, '/')
|
||||
|
||||
|
||||
def main():
|
||||
# Check minimal Python version is 2.7
|
||||
if sys.version_info < (2, 7):
|
||||
sys.stderr.write('You need Python 2.7 or later\n')
|
||||
sys.exit(1)
|
||||
# Check minimal Python version is 2.7
|
||||
if sys.version_info < (2, 7):
|
||||
sys.stderr.write('You need Python 2.7 or later\n')
|
||||
sys.exit(1)
|
||||
|
||||
dest = os.path.dirname(os.path.abspath(__file__))
|
||||
dest = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
# Re-create the tools folder
|
||||
shutil.rmtree(dest + '/tools', True)
|
||||
os.mkdir(dest + '/tools')
|
||||
# Re-create the tools folder
|
||||
shutil.rmtree(dest + '/tools', True)
|
||||
os.mkdir(dest + '/tools')
|
||||
|
||||
parser = CDSParser()
|
||||
success = False
|
||||
n = 1
|
||||
parser = CDSParser()
|
||||
|
||||
# Last published version doesn't ship with darwin tools
|
||||
# so in case of error fall back to the latest version that has them
|
||||
while (success == False):
|
||||
print('Trying for the '+str(n)+'th time')
|
||||
# Last published version doesn't ship with darwin tools
|
||||
# so in case of error get it from the core.vmware.fusion.tar
|
||||
print('Trying to get tools from the packages folder...')
|
||||
|
||||
# Setup url and file paths
|
||||
url = 'http://softwareupdate.vmware.com/cds/vmw-desktop/fusion/'
|
||||
# Setup url and file paths
|
||||
url = 'http://softwareupdate.vmware.com/cds/vmw-desktop/fusion/'
|
||||
|
||||
# Get the list of Fusion releases
|
||||
# And get the last item in the ul/li tags
|
||||
|
||||
response = urlopen(url)
|
||||
html = response.read()
|
||||
parser.clean()
|
||||
parser.feed(str(html))
|
||||
url = url + parser.HTMLDATA[-n] + '/'
|
||||
parser.clean()
|
||||
# Get the list of Fusion releases
|
||||
# And get the last item in the ul/li tags
|
||||
|
||||
response = urlopen(url)
|
||||
html = response.read()
|
||||
parser.clean()
|
||||
parser.feed(str(html))
|
||||
url = url + parser.HTMLDATA[-1] + '/'
|
||||
parser.clean()
|
||||
|
||||
# Open the latest release page
|
||||
# And build file URL
|
||||
response = urlopen(url)
|
||||
html = response.read()
|
||||
parser.feed(str(html))
|
||||
|
||||
urlpost15 = url + parser.HTMLDATA[-1] + '/packages/com.vmware.fusion.tools.darwin.zip.tar'
|
||||
urlpre15 = url + parser.HTMLDATA[-1] + '/packages/com.vmware.fusion.tools.darwinPre15.zip.tar'
|
||||
parser.clean()
|
||||
# Open the latest release page
|
||||
# And build file URL
|
||||
response = urlopen(url)
|
||||
html = response.read()
|
||||
parser.feed(str(html))
|
||||
|
||||
lastVersion = parser.HTMLDATA[-1]
|
||||
|
||||
urlpost15 = url + lastVersion + '/packages/com.vmware.fusion.tools.darwin.zip.tar'
|
||||
urlpre15 = url + lastVersion + parser.HTMLDATA[-1] + '/packages/com.vmware.fusion.tools.darwinPre15.zip.tar'
|
||||
parser.clean()
|
||||
|
||||
# Download the darwin.iso tgz file
|
||||
print('Retrieving Darwin tools from: ' + urlpost15)
|
||||
try:
|
||||
urlretrieve(urlpost15, convertpath(dest + '/tools/com.vmware.fusion.tools.darwin.zip.tar'))
|
||||
# Download the darwin.iso tgz file
|
||||
print('Retrieving Darwin tools from: ' + urlpost15)
|
||||
try:
|
||||
# Try to get tools from packages folder
|
||||
urlretrieve(urlpost15, convertpath(dest + '/tools/com.vmware.fusion.tools.darwin.zip.tar'))
|
||||
|
||||
except:
|
||||
print('Link didn\'t work, trying another one...')
|
||||
n += 1
|
||||
continue
|
||||
except:
|
||||
# No tools found, get em from the core tar
|
||||
print('Tools aren\'t here... Be patient while I download and' +
|
||||
' give a look into the core.vmware.fusion.tar file')
|
||||
urlcoretar = url + lastVersion + '/core/com.vmware.fusion.zip.tar'
|
||||
|
||||
try:
|
||||
# Get the main core file
|
||||
urlretrieve(urlcoretar, convertpath(dest + '/tools/com.vmware.fusion.zip.tar'))
|
||||
|
||||
print('Extracting com.vmware.fusion.zip.tar...')
|
||||
tar = tarfile.open(convertpath(dest + '/tools/com.vmware.fusion.zip.tar'), 'r')
|
||||
tar.extract('com.vmware.fusion.zip', path=convertpath(dest + '/tools/'))
|
||||
tar.close()
|
||||
|
||||
print('Extracting files from com.vmware.fusion.zip...')
|
||||
cdszip = zipfile.ZipFile(convertpath(dest + '/tools/com.vmware.fusion.zip'), 'r')
|
||||
cdszip.extract('payload/VMware Fusion.app/Contents/Library/isoimages/darwin.iso', path=convertpath(dest + '/tools/'))
|
||||
cdszip.extract('payload/VMware Fusion.app/Contents/Library/isoimages/darwinPre15.iso', path=convertpath(dest + '/tools/'))
|
||||
cdszip.close()
|
||||
|
||||
# Move the iso and sig files to tools folder
|
||||
shutil.move(convertpath(dest + '/tools/payload/VMware Fusion.app/Contents/Library/isoimages/darwin.iso'), convertpath(dest + '/tools/darwin.iso'))
|
||||
shutil.move(convertpath(dest + '/tools/payload/VMware Fusion.app/Contents/Library/isoimages/darwinPre15.iso'), convertpath(dest + '/tools/darwinPre15.iso'))
|
||||
|
||||
# Cleanup working files and folders
|
||||
shutil.rmtree(convertpath(dest + '/tools/payload'), True)
|
||||
os.remove(convertpath(dest + '/tools/com.vmware.fusion.zip.tar'))
|
||||
os.remove(convertpath(dest + '/tools/com.vmware.fusion.zip'))
|
||||
|
||||
print('Tools retrieved successfully')
|
||||
return
|
||||
except:
|
||||
print('Odds are against you. Sorry.')
|
||||
return
|
||||
|
||||
# Tools have been found, go with the normal way
|
||||
|
||||
# Extract the tar to zip
|
||||
tar = tarfile.open(convertpath(dest + '/tools/com.vmware.fusion.tools.darwin.zip.tar'), 'r')
|
||||
tar.extract('com.vmware.fusion.tools.darwin.zip', path=convertpath(dest + '/tools/'))
|
||||
tar.close()
|
||||
|
||||
# Extract the tar to zip
|
||||
tar = tarfile.open(convertpath(dest + '/tools/com.vmware.fusion.tools.darwin.zip.tar'), 'r')
|
||||
tar.extract('com.vmware.fusion.tools.darwin.zip', path=convertpath(dest + '/tools/'))
|
||||
tar.close()
|
||||
# Extract the iso and sig files from zip
|
||||
cdszip = zipfile.ZipFile(convertpath(dest + '/tools/com.vmware.fusion.tools.darwin.zip'), 'r')
|
||||
cdszip.extract('payload/darwin.iso', path=convertpath(dest + '/tools/'))
|
||||
cdszip.extract('payload/darwin.iso.sig', path=convertpath(dest + '/tools/'))
|
||||
cdszip.close()
|
||||
|
||||
# Extract the iso and sig files from zip
|
||||
cdszip = zipfile.ZipFile(convertpath(dest + '/tools/com.vmware.fusion.tools.darwin.zip'), 'r')
|
||||
cdszip.extract('payload/darwin.iso', path=convertpath(dest + '/tools/'))
|
||||
cdszip.extract('payload/darwin.iso.sig', path=convertpath(dest + '/tools/'))
|
||||
cdszip.close()
|
||||
# Move the iso and sig files to tools folder
|
||||
shutil.move(convertpath(dest + '/tools/payload/darwin.iso'), convertpath(dest + '/tools/darwin.iso'))
|
||||
shutil.move(convertpath(dest + '/tools/payload/darwin.iso.sig'), convertpath(dest + '/tools/darwin.iso.sig'))
|
||||
|
||||
# Move the iso and sig files to tools folder
|
||||
shutil.move(convertpath(dest + '/tools/payload/darwin.iso'), convertpath(dest + '/tools/darwin.iso'))
|
||||
shutil.move(convertpath(dest + '/tools/payload/darwin.iso.sig'), convertpath(dest + '/tools/darwin.iso.sig'))
|
||||
# Cleanup working files and folders
|
||||
shutil.rmtree(convertpath(dest + '/tools/payload'), True)
|
||||
os.remove(convertpath(dest + '/tools/com.vmware.fusion.tools.darwin.zip.tar'))
|
||||
os.remove(convertpath(dest + '/tools/com.vmware.fusion.tools.darwin.zip'))
|
||||
|
||||
# Cleanup working files and folders
|
||||
shutil.rmtree(convertpath(dest + '/tools/payload'), True)
|
||||
os.remove(convertpath(dest + '/tools/com.vmware.fusion.tools.darwin.zip.tar'))
|
||||
os.remove(convertpath(dest + '/tools/com.vmware.fusion.tools.darwin.zip'))
|
||||
# Download the darwinPre15.iso tgz file
|
||||
print('Retrieving DarwinPre15 tools from: ' + urlpre15)
|
||||
urlretrieve(urlpre15, convertpath(dest + '/tools/com.vmware.fusion.tools.darwinPre15.zip.tar'))
|
||||
|
||||
# Download the darwinPre15.iso tgz file
|
||||
print('Retrieving DarwinPre15 tools from: ' + urlpre15)
|
||||
try:
|
||||
urlretrieve(urlpre15, convertpath(dest + '/tools/com.vmware.fusion.tools.darwinPre15.zip.tar'))
|
||||
except:
|
||||
print('Link didn\'t work, trying another one...')
|
||||
n += 1
|
||||
continue
|
||||
# Extract the tar to zip
|
||||
tar = tarfile.open(convertpath(dest + '/tools/com.vmware.fusion.tools.darwinPre15.zip.tar'), 'r')
|
||||
tar.extract('com.vmware.fusion.tools.darwinPre15.zip', path=convertpath(dest + '/tools/'))
|
||||
tar.close()
|
||||
|
||||
# Extract the tar to zip
|
||||
tar = tarfile.open(convertpath(dest + '/tools/com.vmware.fusion.tools.darwinPre15.zip.tar'), 'r')
|
||||
tar.extract('com.vmware.fusion.tools.darwinPre15.zip', path=convertpath(dest + '/tools/'))
|
||||
tar.close()
|
||||
# Extract the iso and sig files from zip
|
||||
cdszip = zipfile.ZipFile(convertpath(dest + '/tools/com.vmware.fusion.tools.darwinPre15.zip'), 'r')
|
||||
cdszip.extract('payload/darwinPre15.iso', path=convertpath(dest + '/tools/'))
|
||||
cdszip.extract('payload/darwinPre15.iso.sig', path=convertpath(dest + '/tools/'))
|
||||
cdszip.close()
|
||||
|
||||
# Extract the iso and sig files from zip
|
||||
cdszip = zipfile.ZipFile(convertpath(dest + '/tools/com.vmware.fusion.tools.darwinPre15.zip'), 'r')
|
||||
cdszip.extract('payload/darwinPre15.iso', path=convertpath(dest + '/tools/'))
|
||||
cdszip.extract('payload/darwinPre15.iso.sig', path=convertpath(dest + '/tools/'))
|
||||
cdszip.close()
|
||||
# Move the iso and sig files to tools folder
|
||||
shutil.move(convertpath(dest + '/tools/payload/darwinPre15.iso'),
|
||||
convertpath(dest + '/tools/darwinPre15.iso'))
|
||||
shutil.move(convertpath(dest + '/tools/payload/darwinPre15.iso.sig'),
|
||||
convertpath(dest + '/tools/darwinPre15.iso.sig'))
|
||||
|
||||
# Move the iso and sig files to tools folder
|
||||
shutil.move(convertpath(dest + '/tools/payload/darwinPre15.iso'),
|
||||
convertpath(dest + '/tools/darwinPre15.iso'))
|
||||
shutil.move(convertpath(dest + '/tools/payload/darwinPre15.iso.sig'),
|
||||
convertpath(dest + '/tools/darwinPre15.iso.sig'))
|
||||
|
||||
# Cleanup working files and folders
|
||||
shutil.rmtree(convertpath(dest + '/tools/payload'), True)
|
||||
os.remove(convertpath(dest + '/tools/com.vmware.fusion.tools.darwinPre15.zip.tar'))
|
||||
os.remove(convertpath(dest + '/tools/com.vmware.fusion.tools.darwinPre15.zip'))
|
||||
success = True
|
||||
# Cleanup working files and folders
|
||||
shutil.rmtree(convertpath(dest + '/tools/payload'), True)
|
||||
os.remove(convertpath(dest + '/tools/com.vmware.fusion.tools.darwinPre15.zip.tar'))
|
||||
os.remove(convertpath(dest + '/tools/com.vmware.fusion.tools.darwinPre15.zip'))
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
26
unlocker.py
26
unlocker.py
@ -44,6 +44,7 @@ Offset Length Struct Type Description
|
||||
from __future__ import print_function
|
||||
import codecs
|
||||
import os
|
||||
import re
|
||||
import struct
|
||||
import sys
|
||||
|
||||
@ -55,7 +56,11 @@ if sys.version_info < (2, 7):
|
||||
if sys.platform == 'win32' \
|
||||
or sys.platform == 'cli':
|
||||
# noinspection PyUnresolvedReferences
|
||||
from _winreg import *
|
||||
if sys.version_info > (3, 0):
|
||||
from winreg import *
|
||||
else:
|
||||
from _winreg import *
|
||||
|
||||
|
||||
|
||||
def bytetohex(data):
|
||||
@ -301,9 +306,10 @@ def patchbase(name):
|
||||
f = open(name, 'r+b')
|
||||
|
||||
# Entry to search for in GOS table
|
||||
# Should work for 12 & 14 of Workstation...
|
||||
darwin = b'\x10\x00\x00\x00\x10\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00' \
|
||||
'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|
||||
# Should work for Workstation 12-15...
|
||||
darwin = re.compile(
|
||||
b'\x10\x00\x00\x00[\x10|\x20]\x00\x00\x00[\x01|\x02]\x00\x00\x00\x00\x00\x00\x00'
|
||||
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
|
||||
|
||||
# Read file into string variable
|
||||
base = f.read()
|
||||
@ -311,19 +317,15 @@ def patchbase(name):
|
||||
# Loop through each entry and set top bit
|
||||
# 0xBE --> 0xBF (WKS 12)
|
||||
# 0x3E --> 0x3F (WKS 14)
|
||||
offset = 0
|
||||
while offset < len(base):
|
||||
offset = base.find(darwin, offset)
|
||||
if offset == -1:
|
||||
break
|
||||
for m in darwin.finditer(base):
|
||||
offset = m.start()
|
||||
f.seek(offset + 32)
|
||||
flag = ord(f.read(1))
|
||||
flag = set_bit(flag, 0)
|
||||
flag = chr(flag)
|
||||
# flag = chr(flag)
|
||||
f.seek(offset + 32)
|
||||
f.write(flag)
|
||||
f.write(bytes([flag]))
|
||||
print('GOS Patched flag @: ' + hex(offset))
|
||||
offset += 40
|
||||
|
||||
# Tidy up
|
||||
f.flush()
|
||||
|
Loading…
x
Reference in New Issue
Block a user