移动光猫HN8546X6-10桥接补全SHELL改界面

前言

最近刚因携号转网被赠送了移动千兆网络,附送了一个型号为HN8546X6-10的华为万兆XG-PON光猫,看了一下性能很不错。马上折腾起来。

由于我有好习惯每次装完网都问装维小哥要一下超级管理员密码,所以省掉了很多破解超级管理员密码的麻烦。本篇也不涉及任何光猫密码破解的工作。

所有的工具均来自各种论坛搜索,如果有需要可以邮件我索要。

0x01 进入后台

宽带装好第一件事自然是桥接,因为上海移动这边的超级管理员密码是设备注册的时候下发的随机生成的密码,甚至过段时间远程升级还会变,所以进入后台第一件事自然是删掉TR-069接口,关掉周期上报。

但是移动定制的界面好像禁止了TR-069接口的删除,F12大法也不管用,点击按钮就会被退出登录,而接口并没有被删掉。

查资料得知可以通过一些办法来切换回华为原生界面,解除所有功能限制。因为我已经注册成功移动网络,所以下面的操作十分谨慎,生怕需要重新设备注册而超管密码被重置无法进入。

0x02 开启telnet

刷机的第一步自然是开启Telnet或者SSH登录,由于我有超级管理员后台,非常简单就完成了,只需在安全-广域网访问配置选项卡中打勾即可开启。

开启后使用telnet连接,用默认用户root,默认密码Hw8@cMcc登录。su切换权限,再输入shell即可。随便使用一个ls指令看一下。结果报错ERROR::Command is not existed。看来这个shell是被阉割过的版本。首先要补全SHELL功能,使指令能够全部使用。

0x03 补全SHELL指令

在一些论坛找到了ONT组播配置工具V3-V5 2.0,据说有五个版本,我使用的是最新的一个版本。

还有一个r20shell.bin文件。虽然我是V5R021C00S050版本,也就是传说中的R21新版。但是据说这个r20的固件也可以使用。

光猫拔掉光纤,打开ONT组播配置工具,选择升级,选择r20shell.bin文件,连接光猫,点击启动。工具便在不停的组播寻找光猫。

如果找不到可以重启光猫,在重启过程中就会寻找到,右侧会出现光猫序列号和Loading,此时光猫所有灯都在同步闪烁,闪烁多次后工具提示Failed。没有关系,此时已经补全成功了。

0x04 修改hw_boardinfo文件改界面

再次telnet登录光猫,发现指令都可以使用了,cd /mnt/jffs2 进入文件夹,在电脑上打开一个tftpd32来接收发送文件。

使用

tftp -p -l hw_boardinfo -r hw_boardinfo 电脑IP地址

发送hw_boardinfo到电脑,使用HW Dollar2.exe打开hw_boardinfo,里面有非常多可以设置的项目,这次我们只需要修改obj.id = "0x0000001a"和obj.id = "0x0000001b"对应的obj.value = 改为 “COMMON”,即可改回华为ONT原本的管理界面。

只改1a虽然可以修改界面,但是因为移动后台的地址和原生的不同,会造成无法登陆后台。需要修改1b为COMMON来清除注册状态。因为移动是用password来认证的,所以在修改之前最好备份一下password。

修改完成后保存,然后使用

tftp -g -l hw_boardinfo -r hw_boardinfo 电脑IP地址

从电脑下载修改后的文件回光猫。然后reboot重启

0x05 重启后配置

重启后登录后台已经是HN8546X6-10的华为原生后台了,可以使用光猫的全部功能和设置,界面也好看了不少。依旧使用之前的超管密码登录,选择WEB业务发放,输入Password(有自动保存的可以不用输入),快乐的删掉TR-069,桥接INTERNET接口。插好光纤,一会儿就注册成功了。

测速,NAT类型检测一气呵成。终于拥有了1000M的NAT1网络。

0x06 题外话

既然拿到了Telnet权限,必然在光猫系统里游览一番,发现有一个hw_ctree.xml里面包含所有的配置信息,可以使用huaweiXML_CFG.exe进行解密修改,当然通过前面的修改原生界面,其实在后台也可以导出配置进行修改,可以新建后台超管账号之类非常方便。

家庭网络架构

前言

家庭网络结构极大影响了在家使用网络的体验,我个人的家庭网络经过这么多年的演变,也逐渐形成了一个较为方便稳定的家用网络结构,该结构可能并不适用于每个人的情况,仅写下来作参考和记录。

演变

0.0(光猫 -> 终端设备)

可能大家使用的最简单的家用网络是由运营商提供的光猫直接负责拨号和接入,甚至可以忍受使用光猫发出的无线信号,我没有经历过这个时代,因为我从一开始就对运营商光猫的性能嗤之以鼻,经常会有网速不稳定,Wifi信号不稳定等问题,所以每次安装宽带第一件事就是让安装小哥把光猫配置成桥接模式,由路由器负责所有功能,把光猫只做一个光电转换器使用。

至于改桥接模式后的IPTV的vlan等配置,可以专门当作一篇文章来写了。

1.0(光猫 -> 路由器交换机AP三合一 -> 终端设备)

和每个人一样,我的家用网络最初也经历了由单个无线路由器负责包括防火墙、PPPoE、交换机、DNS、DHCP、FQ、Wifi等全部功能的时代。随着接入设备的增多、对速度、稳定性和扩展性的要求提升,这个模式逐渐无法满足我的需求。

2.0(光猫 -> 路由器交换机AP三合一 -> 终端设备)

随着有线设备的增多,路由器接口不够用,最简单直观的办法就是增加一台傻瓜交换机来扩展网口数量,而无线覆盖的增加,最简单的办法就是下挂更多Wifi路由器,为了统一分配网段和减少一层路由转发,下挂的Wifi路由器被配置为AP模式,或者关闭DHCP,直接接入LAN口做AP使用。这个阶段还是没有考虑到功能的分开,网段的划分,设备的隔离,无线信号的无缝漫游等问题。网络整体性能还是依赖主路由的性能。

3.0(光猫 -> 路由器交换机二合一 -> 多AP -> 终端设备)

家里增添了NanoPi,摄像机,各种智能家居iot,NAS,UPS,HTPC,PVE虚拟服务器,电视盒子,XBOX游戏机等设备,外部也由于需要连接多种服务器,对网络的要求也变得复杂多样,只好继续完善网络架构以便满足需求。

首先是把路由器和AP功能分开,使用一台纯有线的EdgeRouter X SFP来做主路由,负责PPPoE拨号、防火墙、DHCP和 VPN 等功能,其他无线路由器只做AP中途还刷了AP专用固件,支持无缝漫游、弱信号自动剔除等功能,让全屋有线无线内网都可以跑满千兆,性能和稳定性都有了进一步提升。

然后是把DNS和FQ功能分给了NanoPi来负责,安装Pi-Hole或AdguardHome来做DNS层面的加速、广告过滤和分流。

4.0(光猫 -> 路由器-> 交换机 -> 多AP -> 终端设备)

如果说3.0版本对于家用已经比较完善了,我现在的架构就有点企业级内味了。

首先是有线网口又又又又不够用了,由路由器和傻瓜交换机提供的十个有线网口被完全占满,本着折腾到底的原则,我直接淘了一台H3C S5120 24电口+4光口的企业级交换机,打算按企业级大二层网络来重做整个网络架构。到手发现风扇声音有点吵(毕竟是机房用的),我直接把风扇拆掉了,监测了一段时间温度,平时55度,满载也不会超过65度,还是比较稳定的。

有了S5120这个24+4口大家伙,这下所有东西都可以插在上面了。接下来就是网络配置,我划分了三个vlan来做网络分割,分别给我自己+受信任的服务器(vlan1)、不受信任的iot设备(vlan2)、不受信任的Guest(vlan3)使用,通过端口和mac地址来识别设备应该属于哪个vlan,这样可以在同一个Wifi名下使不同设备属于不同vlan,未知mac默认vlan3,并且把光猫和路由器和IPTV盒子的端口配置为trunk,光猫自带的运营商vlan1101和1103分别给路由器拨号和IPTV端口通过去。这样平时内网流量基本都可以走交换机二层满速转发,路由器的负载就小了很多,可以专心做一些三层的事情。

虽然UBNT的硬路由性能已经足够强,但是秉承着能少一个设备就少一个设备的想法,既然现在不缺网口,不需要用UBNT路由器上的网口做扩展,那么直接使用PVE主机虚拟一台软路由出来岂不美哉,于是我选定Router OS 6作为软路由操作系统,至于ROS6不能支持的一些协议和功能由一台虚拟的Debian来完成。

在ROS6里配置了三个vlan,并且分别为其配置了DHCP服务,为三个不同的/24的IP段,其中vlan1和2基本都是固定分配IP,DNS指向NanoPi,vlan3为动态分配,DNS指向公共DNS,对于vlan之间的互通,通过ROS6里的firewall来控制,其中vlan1可以随意访问vlan2和vlan3,vlan2的部分设备可以访问访问vlan1的iot控制器(Home Assistant),vlan3为独立网段。再配置好ROS6的PPPoE拨号和Masquerade就可以愉快的上网了。

大致数了一下,目前分配的IP有28个,可以通过ROS6对于单个设备进行精细化管控,外网分流,另外像静态路由,IPV6,端口映射,UPnP完全不在话下,甚至OSPF,BGP等协议都可以玩起来了(最近沉迷DN42,详见 https://dn42.tms.im )。

总结

目前家用网络的核心无非是光猫 - 路由器 - 交换机 - AP - 终端设备的组合,适合自己的才是最好的,我目前的网络架构是这些年用下来一点一点演变发展过来的,具有很好的扩展性,虽然未来还有很多可以升级的点(比如万兆、光纤内网、AC+AP等),但目前已经是能完全满足我需求的最佳性价比的架构了。

P.S. 架构图在画了在画了。

MP3文件隐写之Copyright位

最近在帮人做CTF的时候遇到一道有意思的题目,记录一下思维过程。

题目整个只有一个MP3文件的附件。下载

0x01

首先观察16进制数据,没有发现异常,只有一个PNG图片作为封面图,提取PNG图片观察图片的16进制数据,也没有发现任何异常。

0x02

观察到Comment tag中有一个 163 key(Don’t modify)

经查询资料得知是网易云MP3里的元数据。AES-128-ECB加密,用密码 #14ljk_!\]&0U<'( 解码,得到一个Json字符串,观察并没有发现任何有用信息。

0x03

使用Audacity加载,观察波形图和频谱图,没有发现异常。

0x04

猜测使用Mp3Stego加密,但是没有密码,无法解密。使用Mp3Stego测试了几个常用密码以后放弃。

0x05

正在一筹莫展没有思路的时候,发现MP3格式的帧数据中,有一个uint32 private_bit,可以作为私有数据的标记位。帧头具体格式为:

typedef FrameHeader

{

unsigned int sync:11;                        //同步信息

unsigned int version:2;                      //版本

unsigned int layer: 2;                           //层

unsigned int error protection:1;           // CRC校验

unsigned int bitrate_index:4;              //位率

unsigned int sampling_frequency:2;         //采样频率

unsigned int padding:1;                    //帧长调节

unsigned int private:1;                       //保留字

unsigned int mode:2;                         //声道模式

unsigned int mode extension:2;        //扩充模式

unsigned int copyright:1;                           // 版权

unsigned int original:1;                      //原版标志

unsigned int emphasis:2;                  //强调模式

}

曾经也有题目是使用private_bit来隐藏Flag。但是翻看了几帧发现private_bit位都是0,似乎并没有存储数据。但是在翻看的时候发现,uint32 copyright这一位似乎内藏玄机,这一位在相邻几帧的数据有0有1,查询得知这是版权位,通常不会出现不同帧有0有1的情况。

于是决定将copyright位的数据提取出来看看。

0x06

在提取的过程中发现一个问题。该MP3文件每一帧的长度不固定,有的是414H,有的是415H,一开始完全没有找到规律。网上相关题目和private位隐写数据的示例,也都是固定帧长度的。只好另外想办法。

翻看资料得知帧长度的变化和padding填充位有关。

帧长度是压缩时每一帧的长度,包括帧头的4个字节。它将填充的空位也计算在内。Layer 1的一个空位长4字节,Layer 2和Layer 3的空位是1字节。当读取MPEG文件时必须计算该值以便找到相邻的帧。注意:因为有填充和比特率变换,帧长度可能变化

观察本文件得知如果padding位为1,帧长度就是415H,padding位为0,帧长度就是414H。

查询得知第一帧的起始位置为984484,又因为帧头为4个字符,padding_bit位于第三个字符的倒数第二位,而copyright位于第四个字符的倒数第四位。所以从984486开始查找,向后读取一个字节提取padding_bit,再向后读取一个字节提取copyright。

故写出一下python代码进行copyright位的提取。

# coding:utf-8
import re
import binascii

n = 984486  # 起始位置
result = ''
file = open('2.mp3', 'rb')
# 提取
while n < 12658083:  # 结束位置
    file.seek(n, 0)
    head = file.read(1)
    padding = '{:08b}'.format(ord(head))[-2]

    file.seek(n+1, 0)
    file_read_result = file.read(1)
    result += '{:08b}'.format(ord(file_read_result))[-4]

    n += 1045 if padding == "1" else 1044
# 拼接
flag = ''
textArr = re.findall('.{'+str(8)+'}', result)
for i in textArr:
    flag = flag + chr(int(i, 2)).strip('\n')
print(flag)

执行代码得到 flag{b3d7bed5-e8da-4d9c-848c-e5d332d63bcd}

成功找到Flag,收工。

给Pico-Pi-I.MX7D安装Debian系统

手上有个闲置的PicoPI-I.MX7D,使用的是NXP的MCIMX7D7DVM10SC芯片,看了一下是ARM v7架构的,拥有512M内存和1G主频。虽然很鸡肋,但是好歹是个板子,不用又觉得浪费,于是想装一个Debian Linux上去跑跑小脚本用。

查阅了一圈资料发现,想用这货跑起debian需要自己编译内核外加使用u-boot来启动。
说干就干

1. BootLoader的写入

安装一些交叉编译的依赖库和软件

ARM Cross Compiler: GCC

1
2
3
wget -c https://releases.linaro.org/components/toolchain/binaries/6.5-2018.12/arm-linux-gnueabihf/gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf.tar.xz
tar xf gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf.tar.xz
export CC=`pwd`/gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
1
${CC}gcc --version

接下来编译U-boot

1
2
3
4
5
git clone -b v2019.07-rc4 https://github.com/u-boot/u-boot --depth=1
cd u-boot/
make ARCH=arm CROSS_COMPILE=${CC} distclean
make ARCH=arm CROSS_COMPILE=${CC} pico-pi-imx7d_defconfig
make ARCH=arm CROSS_COMPILE=${CC}

这样我们就拥有了一个适用于imx7d的U-boot。

想把BootLoader下载到板子上,需要用官方的 imx_usb_loader

连接板子的Console串口和type-c数据接口,从Github下载 imx_usb_loader。设置跳线到Download模式

1
2
3
git clone https://github.com/boundarydevices/imx_usb_loader
cd imx_usb_loader/
make
1
2
lsusb | grep Freescale
Bus 00x Device 00y: ID 15a2:0076 Freescale Semiconductor, Inc

使用imx_usb_loader加载SPL和uboot进系统

1
2
sudo ~/imx_usb_loader/imx_usb u-boot/SPL
sudo ~/imx_usb_loader/imx_usb u-boot/u-boot-dtb.img

这样系统就能从U-boot启动了。

1
2
3
4
5
6
7
Loading Environment from MMC... OK
In: serial
Out: serial
Err: serial
Net: FEC0
Hit any key to stop autoboot: 0
=>

在U-boot里设置一些参数以便启动dfu-agent

1
2
3
4
5
=> env default -f -a
=> saveenv

=> mmc partconf 0 0 7 0
=> dfu 0 mmc 0

这样就可以使用dfu-util写入u-boot到板子的eMMC存储了

1
2
sudo dfu-util -D u-boot/SPL -a spl
sudo dfu-util -R -D u-boot/u-boot-dtb.img -a u-boot

接下来就可以把板子从Download模式恢复为eMMC启动模式

重启以后板子会自动启动到U-boot,这时候在串口可以捕捉到u-boot,并且启用挂载外置存储模式,以便往eMMC里写入系统。

1
2
3
4
5
6
7
Loading Environment from MMC... OK
In: serial
Out: serial
Err: serial
Net: FEC0
Hit any key to stop autoboot: 0
=> ums 0 mmc 0

此时电脑上应该已经可以看到USB外接存储

1
2
lsusb | grep Netchip
Bus 00x Device 00y: ID 0525:a4a5 Netchip Technology, Inc. Pocketbook Pro 903

2. 系统的内核编译和写入

Linux Kernel
1
2
3
git clone https://github.com/RobertCNelson/armv7-lpae-multiplatform
cd armv7-lpae-multiplatform/
./build_kernel.sh

这里要耗费大量时间来编译内核,以及缺少各种依赖库需要安装,大概三四个小时的时间。

RootFS

首先选择系统,这里我选择的是Debian 10,当然也可以使用Ubuntu 20

Debian 10

1
2
3
4
wget -c https://rcn-ee.com/rootfs/eewiki/minfs/debian-10.4-minimal-armhf-2020-05-10.tar.xz
sha256sum debian-10.4-minimal-armhf-2020-05-10.tar.xz
cd598e42850cbef87602bf15ee343abfbf0d8c6ba81028c741672b5f24263534 debian-10.4-minimal-armhf-2020-05-10.tar.xz
tar xf debian-10.4-minimal-armhf-2020-05-10.tar.xz

Ubuntu 20.04 LTS

1
2
3
4
wget -c https://rcn-ee.com/rootfs/eewiki/minfs/ubuntu-20.04-minimal-armhf-2020-05-10.tar.xz
sha256sum ubuntu-20.04-minimal-armhf-2020-05-10.tar.xz
de0177ac9259fdbcc626ee239f4258b64070c0921dbc38c45fab6925a5becaa1 ubuntu-20.04-minimal-armhf-2020-05-10.tar.xz
tar xf ubuntu-20.04-minimal-armhf-2020-05-10.tar.xz

使用lsblk找到外置存储,我的是/dev/sdb1,并且进行清零

1
2
export DISK=/dev/sdb
sudo dd if=/dev/zero of=${DISK} bs=1M count=10

再次安装BootLoader

1
2
sudo dd if=./u-boot/SPL of=${DISK} seek=1 bs=1k
sudo dd if=./u-boot/u-boot-dtb.img of=${DISK} seek=69 bs=1k

创建分区

1
2
3
sudo sfdisk ${DISK} <<-__EOF__
1M,,L,*
__EOF__

格式化并挂载分区

1
2
3
sudo mkfs.ext4 -L rootfs ${DISK}1
sudo mkdir -p /media/rootfs/
sudo mount ${DISK}1 /media/rootfs/

首先写入rootfs

1
2
3
4
sudo tar xfvp ./*-*-*-armhf-*/armhf-rootfs-*.tar -C /media/rootfs/
sync
sudo chown root:root /media/rootfs/
sudo chmod 755 /media/rootfs/

然后找到编译完成的内核版本,如kernel_version=5.X.Y-Z

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
export kernel_version=5.X.Y-Z

sudo mkdir -p /media/rootfs/boot/extlinux/
sudo sh -c "echo 'label Linux ${kernel_version}' > /media/rootfs/boot/extlinux/extlinux.conf"
sudo sh -c "echo ' kernel /boot/vmlinuz-${kernel_version}' >> /media/rootfs/boot/extlinux/extlinux.conf"
sudo sh -c "echo ' append root=/dev/mmcblk2p1 ro rootfstype=ext4 rootwait quiet' >> /media/rootfs/boot/extlinux/extlinux.conf"
sudo sh -c "echo ' fdtdir /boot/dtbs/${kernel_version}/' >> /media/rootfs/boot/extlinux/extlinux.conf"

sudo cp -v ./armv7-lpae-multiplatform/deploy/${kernel_version}.zImage /media/rootfs/boot/vmlinuz-${kernel_version}

sudo mkdir -p /media/rootfs/boot/dtbs/${kernel_version}/
sudo tar xfv ./armv7-lpae-multiplatform/deploy/${kernel_version}-dtbs.tar.gz -C /media/rootfs/boot/dtbs/${kernel_version}/

sudo tar xfv ./armv7-lpae-multiplatform/deploy/${kernel_version}-modules.tar.gz -C /media/rootfs/

sudo sh -c "echo '/dev/mmcblk2p1 / auto errors=remount-ro 0 1' >> /media/rootfs/etc/fstab"

最后写入完成重启即可。

1
2
sync
sudo umount /media/rootfs

串口Console端

1
2
3
4
5
6
7
8
9
10
Loading Environment from MMC... OK
In: serial
Out: serial
Err: serial
Net: FEC0
Hit any key to stop autoboot: 0
=> ums 0 mmc 0
UMS: LUN 0, dev0, hwpart 0, section 0x0, count 0x720000
Ctrl+C to exit ...
=> reset

重启后就会自动进入Debian了

参考资料:

https://developer.android.com/things/hardware/imx7d

https://www.nxp.com/part/MCIMX7D7DVM10SC#/

https://www.digikey.com/eewiki/display/linuxonarm/PICO-PI-IMX7

骷髅峡谷(nuc6i7kyk)安装黑苹果(macOS Mojave 10.14.3)

一、前言

其实很久以前就给骷髅峡谷装过10.13版本的黑苹果+WIN10双系统,并且成功更新到Mojave。后来因为用的少又格式化掉了。去年用了一年的MacBook Pro以后,已经熟悉了苹果系统,并且基本工作都在macOS下完成了,遂又萌生了把骷髅峡谷装成苹果系统的想法。

黑苹果背后的基础知识我就不过多介绍了,可以在国内外各种论坛上了解,既然这次要搞,就要做到极致,目标是安装最新版的macOS系统,并且把能驱动的所有硬件都正常驱动起来,尽量完美使用骷髅峡谷的所有功能和最高效率。

二、准备

准备工作,需要的东西只是一个8G以上的U盘而已,USB3.0的为佳,因为速度会快很多。

安装黑苹果的步骤大同小异,因为这次是全盘格式化全新安装,所以我直接选择原版安装盘,使用原版安装包的磁盘管理来格式化全盘。

截止到写这篇文章为止,最新版的macOS是Mojave版本10.14.3 (18D109),使用手头的MacBook Pro直接在应用商店搜索Mojave就可以下载安装包。

下载完成后,这里因为图省事,直接使用了UniBeast来制作安装盘。这是全球最大的黑苹果论坛tonymacx86上的人开发的一款快速制作安装盘的工具,其实原理大同小异,不管MBR还是GPT分区表,首先把U盘格式化为两个区,其中EFI分区可以用FAT32或者其他格式,然后把安装包放在另一个区,并且做好引导记录,把Clover安装到EFI分区里,并且放好最小依赖的一些kext和config,安装盘就制作好了。

三、设置

这里稍微说一下我的配置,骷髅峡谷CPU是i7 6770HQ,内存我装的16G单条,SSD是SanDisk的256G非NVME接口。外接一台苹果的Apple LED Cinema Display,通过DP接口连接。

通过各方面查资料,得知我的配置没有什么和macOS不兼容的,需要调节的只是骷髅峡谷本身的一些硬件的开关。遂安心。

接下来进行一些基本BIOS设置,来把不兼容的地方修改掉。

  • Power->Secondary Power Settings, “Wake on LAN from S4/S5”, 设置成 “Stay Off”
  • Devices->Video, “IGD Minimum Memory” 设置为 64mb
  • Devices->Video, “IGD Aperture Size” 设置为 256mb
  • Boot->Secure Boot, “Secure Boot” 设置为 disabled
  • Security->Security Features, “Execute Disable Bit” 设置为 enabled.
  • Security->Security Features, “VT-d” 设置为 disabled

这里说一下骷髅峡谷的无线网卡芯片是苹果系统不支持的,所以目前没有办法驱动,可以关掉。但是蓝牙是可用的。

四、安装

插入安装U盘,开机,按F12选择从U盘启动,选择安装macOS,进入安装界面。选择磁盘工具,把整个硬盘格式化为APFS格式(Mojave只支持装在APFS分区格式上),回去选择安装,一路下一步,安装完毕自动重启。

至此系统安装完毕。

这时候安装完的macOS只是在硬盘上,因为骷髅峡谷不是苹果电脑,没法直接启动苹果系统,所以需要第三方启动器来进行引导。这时候我们就要请出Clover,关于这个启动器的资料可以上网查找,反正很强就是了。

介于刚才我们的U盘安装盘上已经装了这玩意,所以还是可以通过插入U盘来选择U盘启动,这时候Clover里多了一些选择,其中有一个preboot还是啥的可以引导进入硬盘里的苹果系统。继续执行安装过程。包括选择时区,设置用户名密码之类的,直到正式安装完毕

五、启动

再次重启,从U盘启动。我们终于看到了Boot from macOS选项。标志着macOS已经安装完毕到硬盘了。但是这只是神坑的刚刚开始。

这时候选择Boot from macOS,基本是进不去的。通过-v来看输出的log,有各种问题,需要对症下药,这里给出一个基本完美的解决方案,大致不会出现什么问题。

把U盘插到另一个电脑上,挂载EFI分区,做一下修改。

把调整完毕以后的clover启动盘插上,开机,U盘启动,选择Boot from macOS(最好还是-v看看log)。不出意外的话应该可以进入系统了。如果还是不行,需要看看-v输出的log,解决对应的error,有问题也可以和我交流。

最后需要把U盘里调好的可以启动macOS的Clover安装到硬盘的EFI分区,步骤和安装U盘Clover的差不多,如果你是UniBeast做的U盘,那你需要下载一个 https://github.com/RehabMan/Clover 的release并且安装。然后复制U盘Clover的相应文件到EFI分区即可了。

做完这步以后拔掉U盘重启,应该也可以使用硬盘的Clover引导进入macOS了。

六、调优

这时候应该可以正常启动进入macOS了,其实到这里,已经可以正常使用了。大部分硬件已经正常工作,可能性能不是最好或者部分硬件罢工罢了。如果不想折腾,或者只是体验,到这里就可以了。

如果要继续折腾可以继续看下去,但是调优这玩意是无止境的,每一个硬件都能折腾好几天,这里选择采用国外大神已经调节好的一些参数,加上部分需要自己调节的。

首先安装依赖,进入终端输入

xcode-select --install

安装完毕以后开始clone大神的git并使用

mkdir ~/Projects
cd ~/Projects
git clone https://github.com/RehabMan/Intel-NUC-DSDT-Patch nuc.git
cd ~/Projects/nuc.git
./download.sh
./install_downloads.sh
make
make install_nuc6sc

这样会自动编译DSDT/SSDT并且复制到EFI分区。

针对nuc的电源管理,执行

sudo pmset -a hibernatemode 0
sudo rm /var/vm/sleepimage
sudo mkdir /var/vm/sleepimage

最后使用文件夹里的config.plist

cp config_nuc6_sc.plist /Volumes/EFI/EFI/Clover/config.plist

这样调优就基本完成了,后续我又碰到了声音方面的问题和USB3.0不识别和掉速的问题。需要自己通过maciASL和各种kext注入的方法来解决。比较麻烦,后续如果有时间再写。

七、参考

https://www.tonymacx86.com/threads/guide-intel-skylake-nuc6-and-skull-canyon-using-clover-uefi-nuc6i5syk-nuc6i7kyk-etc.261708/

https://www.tonymacx86.com/threads/guide-booting-the-os-x-installer-on-laptops-with-clover.148093/

https://www.tonymacx86.com/resources/categories/tonymacx86-downloads.3/