填坑黑苹果(VMware装MacOS) - 修改 Unlocker 补丁源码版

时间:2019-09-21 21:25:01   收藏:0   阅读:5379

最近闲的突然想找点事来折腾一下, 于是随着苹果的发布会就盯上自己手上的 iPhone, 也想弄个 Mac 来搞 IOS. 于是就有了这个填坑故事.

为什么要修改补丁源码:

  1. 不再苦苦去寻找和下载 drawn.iso 文件, 虽然我会告诉你这里可以下载到官网的;
  2. 遇到个错误, 既然也是搞 python 的, 那自己当然也要动手动手了.

1. 安装前

\1. 安装环境

\2. 系统硬件配置

\3. 安装 MacOS 必备包

填壹号坑: Unlocker 的最新版本 v3.0.2 仅支持 VMware 的 12~14 版本(终端输出的, 本人之前用的是15的, 总是报各种错, 所以就发现了这个坑).

一定要使用 Pro 版本, Player 版本安装的黑苹果不稳定, 经常会自动重启..

VMware pro 14 官网下载地址

  1. cdr [推荐], 懒人安装包, 因为易装, 麻烦少.

填贰号坑: 试过使用神马HFSExplorer将dmg 转cdr的工具, 结果那工具不行, 老是弹出 error 框. 于是就搜索下载别人发的 cdr包进行安装

  1. dmg, 原始镜像, 没有试过这个格式的安装, 不了解填这个坑
  2. ISO, 可以使用 UltraISO 工具将 dmg 格式转为 iso 格式, 然后进行安装, 但是中途遇到了 boot 问题, 于是换用cdr 进行安装

能够让 VMware 选择 Mac 系统进行安装的补丁

Unlocker 在 github 的下载地址

windows 选择第一个 unlocker302.zip 进行下载即可

2. 安装

\1. 安装 VMware Pro 14, 并注册

此处网络上教程挺多, 安装也不复杂, 过程很顺利

注册看个人了, 惯用方式是网上搜索密钥进行注册, 密钥如:
ZC5XK-A6E0M-080XQ-04ZZG-YF08D ;
ZY5H0-D3Y8K-M89EZ-AYPEG-MYUA8 .

\2. 安装 Unlocker

  1. 使用超级管理员运行 cmd.

在任务栏的搜索框中, 搜索 cmd, 然后右击使用管理员运行 cmd

解压已经下载的 unlocker, 并在 刚才打开的终端中 cd 到目录下

执行 win-install.cmd

  1. 终端报错了

看到终端有 Successfully, Finished 等词, 先不要高兴太早, 因为那整句话是否定的.

报错内容有:

  • ***.*** 文件权限问题

    哪一个文件的权限出了问题, 就找到它并给它添加权限就可以了.

    操作步骤: 右击选择属性 --> 选择安全选项卡 --> 点击编辑 --> 选择 Everyone (组或用户名) --> 允许完全控制.

  • 没有找到 drawn*.* 文件

    看了一下终端是访问了 http://*** 链接之后才报的错误, 认为是访问超时了结果重试了几次都不行, 然后打开浏览器进行访问该链接, 结果浏览器返回 not found. 一脸懵逼, 简直坑爹啊

    填叁号坑: 解决办法 - 修改源码后重新编译打包exe
    修改文件: gettools.py, 修改后的完整代码放在最后, 有中文注释.
    思路: 访问问题, 那就修改访问的链接; 由于VMware 服务器识别 UA, 所以伪装 UA.
    打包exe: 需要 python3.x 环境, 依赖包: requests, PyInstaller; 打包命令 pyinstaller -F gettools.py
    替换 gettools.exe 文件: 打包 exe 后, 会生成 dist 文件夹, 找到里面的 exe 文件, 替换 unlocker 文件夹中的 gettools.exe 文件

    补充: 安装依赖包的命令: pip3 install requests; pip3 install PyInstaller; 打包exe 前, 需要打开终端并切换目录到 gettools.py 文件所在目录下.

\3. 安装 mac

  1. 运行 VMware 并创建新的虚拟机
  2. CD/DVD 处选择 cdr 文件, 然后启动虚拟系统
  3. 安装虚拟系统过程中出现的问题
  • 虚拟系统启动, 虚拟机报错问题:

打开 ***.vmx 文本文件, 添加 smc.version = "0" 配置项

  • 安装盘问题:

选择菜单栏上的实用工具 --> 然后选择 VMware 硬盘 --> 点击抹掉按钮 --> 输入一个英文名称即可

  1. 安装 VMTools

关机mac, 在 CD/DVD 处选择 VMware Pro 安装目录下的 darwn.iso (Unlocker 生成的文件), 我的安装目录是 C:\Program Files (x86)\VMware\VMware Workstation

开机, 打开桌面上的光盘进行安装, 所以 drawn.iso 是用来安装 VMTools 插件的.

\4. 屏幕大小, 分辨率问题

在VMware里装 VMTools 后发现全屏时的分辨率是 950 (HiDPI) 的, 在设置/显示器/缩放中, 点击1920 的死活切换不了

打开终端依次输入以下命令:

cd /Library/Preferences, 切换目录.
plutil -p com.apple.windowserver.plist 查看现在的plist设置, 值应该是 1.
sudo plutil -replace DisplayResolutionEnabled -bool "NO" com.apple.windowserver.plist 修改plist 设置为 0.

重启生效.

gettools.py

from __future__ import print_function

import os
import shutil
import sys
import tarfile
import zipfile

# 添加处, 方便伪装 User-Agent
import requests


# 添加处
def download_drawn(url, path):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36',
    }
    resp = requests.get(url, headers=headers, timeout=180)
    with open(path, "wb") as fp:
        fp.write(resp.content)


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)

    # Setup url and file paths
    url = 'http://softwareupdate.vmware.com/cds/vmw-desktop/fusion/'
    dest = os.path.dirname(os.path.abspath(__file__))

    # Re-create the tools folder
    shutil.rmtree(dest + '/tools', True)
    os.mkdir(dest + '/tools')

    # 删改处
    urlpost15 = url + '11.1.0/13668589' + '/packages/com.vmware.fusion.tools.darwin.zip.tar'
    urlpre15 = url + '11.1.0/13668589' + '/packages/com.vmware.fusion.tools.darwinPre15.zip.tar'

    # Download the darwin.iso tgz file
    print('Retrieving Darwin tools from: ' + urlpost15)
    # 修改处
    download_drawn(urlpost15, convertpath(dest + '/tools/com.vmware.fusion.tools.darwin.zip.tar'))

    # 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()

    # 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'))

    # Download the darwinPre15.iso tgz file
    print('Retrieving DarwinPre15 tools from: ' + urlpre15)
    # 修改处
    download_drawn(urlpre15, convertpath(dest + '/tools/com.vmware.fusion.tools.darwinPre15.zip.tar'))

    # 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()

    # 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'))


if __name__ == '__main__':
    main()
评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!