[メモ] LinuxホストのVirtualBoxで、Win7ゲストを使用

## 概要
- VirtualBoxでは、Windowsのアクティベーションに使われている、ホストの`SLIC.BIN`をダンプすることで、それをゲストで使うことができる。
- 認証済みの`tokens.dat`と組み合わせで、Windowsのアクティベーションができるらしい.
- <del><font color='red'>*動作確認取れてません*</font>（ぉ</del> 動作しました。(2016.10.24)
- ちょいとグレーなネタですね。限定公開にされたら、そういうことだった、ということで。

## 環境
- Windows 7(64bit)プリインストールのパソコン。<br>Linuxを入れてしまうので、Windowsをとっておきたいばあいは、別HDDを使うのがいいかと。
- Windows 7(64bit)インストールメディア (ISOイメージにて使用) 付属のやつじゃないとだめっぽい?
- Windows 7 のシリアル(本体にシールが張ってあるやつ？)
- ホストOS: Lubuntu 16.04.1(64bit)をインストールします。
- VirtualBox: 5.1.6 (virtualbox-5.1_5.1.6-110634~Ubuntu~xenial_amd64.deb)

## 手順
### Windowsで作業
1. Windowsで起動
2. `C:\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform\tokens.dat` どこかにコピー.
3. `tokens.dat`のなかから、一部をきりぬいて、`oem.xrm-ms`というファイルを作る。
    バイナリエディタで、
    1. `OEM Certificate`を後方検索
    2. `<?xml version=`を前方検索　(前に戻って)
    3. そこから、`</r:license>`の終わりまで切り抜く

### Linuxで
1. Lubuntu インストール<br>http://cdimage.ubuntu.com/lubuntu/releases/16.04/release/
    - 更新・再起動 :<br>`sudo apt-get update; sudo apt-get dist-upgrade; sudo reboot`
2. VirtualBoxのインストール
    - https://www.virtualbox.org/wiki/Linux_Downloads

    ```bash:
# レポジトリとキー追加
echo 'deb http://download.virtualbox.org/virtualbox/debian xenial contrib' | sudo tee -a /etc/apt/sources.list
wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
# レポジトリ更新
sudo apt-get update
# インストール
sudo apt-get install virtualbox-5.1 -y
#
#拡張パックのインストール.
#VBOX_VER=5.1.6-110634
VBOX_VER=5.1.8-111374
VBOX_VERONLY=$(echo $VBOX_VER | cut -d '-' -f1)
wget http://download.virtualbox.org/virtualbox/${VBOX_VERONLY}/Oracle_VM_VirtualBox_Extension_Pack-${VBOX_VER}.vbox-extpack
sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-${VBOX_VER}.vbox-extpack
```

3. 仮想マシン作成: `VM_Win7`
    - a. 普通にGUIで.
    - b. コマンドラインで.

    ```bash:VM作成
VM='VM_Win7'
#VBoxManage list ostypes #サポートしているOS一覧.
#
VBoxManage createvm --name $VM --ostype "Windows7_64" --register
cd ~/VirtualBox\ VMs/$VM
#仮想HDD作成
#VBoxManage createhd --filename $VM.vdi --size 32768  #32GB
VBoxManage createhd --filename $VM.vdi --size 65536  #64GB
# SATAポート作成
VBoxManage storagectl $VM --name "SATA" --add sata --controller IntelAHCI --portcount 2
# HDDとISOイメージを割り当てる.
VBoxManage storageattach $VM --storagectl "SATA" --port 0 --device 0 --type hdd --medium $VM.vdi
VBoxManage storageattach $VM --storagectl "SATA" --port 1 --device 0 --type dvddrive --medium /path/to/windows_7_install_disc.iso
#
# CPU2個 メモリ1GB ビデオRAM128MB.
VBoxManage modifyvm $VM --cpus 2
VBoxManage modifyvm $VM --memory 1024 --vram 128
#
# こまごまとオプション設定
VBoxManage modifyvm $VM --ioapic on
VBoxManage modifyvm $VM --pae off
VBoxManage modifyvm $VM --largepages on
#VBoxManage modifyvm $VM --audiocontroller hda
VBoxManage modifyvm $VM --audiocontroller ac97
VBoxManage modifyvm $VM --lpt2 "0x378" 7
VBoxManage modifyvm $VM --lpt2 off
VBoxManage modifyvm $VM --mouse usbtablet
VBoxManage modifyvm $VM --usb on
#VBoxManage modifyvm $VM --nic1 bridged --bridgeadapter1 ens160
#
VBoxManage setextradata $VM "GUI/RestrictedRuntimeDevicesMenuActions" "HardDrives"
VBoxManage setextradata $VM "GUI/RestrictedRuntimeMachineMenuActions" "SaveState,PowerOff"
VBoxManage setextradata $VM "GUI/StatusBar/IndicatorOrder" "HardDisks,OpticalDisks,FloppyDisks,Network,USB,SharedFolders,Display,VideoCapture,Features,Mouse,Keyboard"
#
#ポート転送の設定 ホストの23389をゲストの3389へ。リモートデスクトップ. 
VBoxManage modifyvm $VM --natpf1 delete "guestrdp"
VBoxManage modifyvm $VM --natpf1 "guestrdp,tcp,,23389,,3389"
```

4. ホスト機からSLIC.BINの生成とVirtualBoxへの設定

    ```bash
# VMの確認
VBoxManage list vms
#
VM='VM_Win7'
cd ~/VirtualBox\ VMs/${VM}
# SLIC.BINのダンプ
sudo cat /sys/firmware/acpi/tables/SLIC > SLIC.BIN
# 
VBoxManage setextradata "${VM}" VBoxInternal/Devices/acpi/0/Config/SLICTable SLIC.BIN
```
 <del>   <font color='red'>--- **以降未確認** ---</font></del>
5. ゲストにWindows7をインストール。ライセンスキーのとこは、スキップ。
6. `cmd.exe`を管理者で開く

7. ライセンスキー

    ```bat
rem Windowsのキー
slmgr.vbs /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
rem ダイアログウィンドウ出るまで待つ
slmgr.vbs /ilc oem.xrm-ms
rem ダイアログウィンドウ出るまで待つ
rem 確認
slmgr.vbs /dlv   
```

## その他
- ノートPC本体のHDDに入ってるのから、DVDを作るとかいうのだったとおもうんだけど、さくと消してしまった.ような...。<br>ので、検証は、うまいPCが発掘できたら...