Pull to refresh

Активируем отключенный VT-x

Reading time2 min
Views20K
Написал однажды мне друг с ноутбуком Samsung r60. Процессор в этом ноутбуке поддерживает аппаратную виртуализацию, но по умолчанию она отключена, и пункт включения в биосе отсутствует. Биос — Phoenix. Мы не будем патчить биос, мы будем патчить NVRAM!

Нам понадобятся:
• Samsung's FW Modules Extractor
• Phoenix BIOS Editor
• SYMCMOS — читалка/писалка cmos
• NDISASM — дизассемблер x86 кода
• Загрузочная флешка/дискета с DOS

Ну что ж, приступим!
Качаем прошивку с сайта Samsung. Прошивка идет одним .exe файлом вместе с прошивальщиком, нужно достать сам файл прошивки. Для этого воспользуемся Samsung's FW Modules Extractor



Не все файлы распаковались, но это не важно.

Открываем прошивку в Phoenix BIOS Editor, сворачиваем его и достаем файлы BIOSCOD*.ROM из папки TEMP Phoenix BIOS Editor'а. Он распаковал нашу прошивку. Копируем файлы в другую папку, закрываем Phoenix BIOS Editor.

Начинается самое интересное. Дизассемблируем файлы из прошивки, в моем случае их было 7 (0-6):
$ for i in {0..6}; do ndisasm -a -p intel -b 16 BIOSCOD0$i.ROM > BIOSCOD0$i.dasm; done

Путем гугления выяснилось, что искать нужно команду mov ecx,0x3a:
$ grep 'mov ecx,0x3a' *.dasm
BIOSCOD04.dasm:0000BE99 66B93A000000 mov ecx,0x3a

Отлично, команда найдена в файле BIOSCOD04.dasm!

0000BE99 66B93A000000 mov ecx,0x3a
0000BE9F 0F32 rdmsr
0000BEA1 668BD8 mov ebx,eax
0000BEA4 83E305 and bx,byte +0x5
0000BEA7 B86F06 mov ax,0x66f
0000BEAA 9A355400F0 call word 0xf000:0x5435
0000BEAF C1E002 shl ax,0x2
0000BEB2 40 inc ax
0000BEB3 38D8 cmp al,bl
0000BEB5 7432 jz 0xbee9

Из кода видно, что в регистр ax записывается значение по адресу 0x66f, выполняются сравнения между al и bl, и если оба значения совпадают — прыгаем на адрес 0xbee9 — адрес отключения виртуализации.

Пришло время SYMCMOS. Создаем загрузочную флешку/дискету, записываем программу на носитель, загружаемся и выполняем
symcmos -v2 -lNVRAM.TXT
Теперь у нас есть файл nvram.txt примерного содержания:
( SYMBOLIC CMOS EDITOR - Version 643710-035 )

CRC = 350F
(0015) [0000]
(0018) [0001]
(001B) [0001]
(0021) [0000]
(0024) [0001]
(0027) [0001]
(002A) [0000]
(002D) [0001]
(0030) [0000]
(0036) [0000]
(0039) [0000]
(003F) [0001]
(0042) [0000]
...
(066F) [0000]
(0672) [0000]
(0675) [0000]
(0678) [0002]
(067B) [0000]
(067E) [0000]
(0681) [0002]

Видно, что значение параметра, отвечающего за виртуализацию, установлено в 0. Изменим его прямо в этом файле:
(066F) [0001]
Опять загрузимся в DOS и выполним:
symcmos -v2 -uNVRAM.TXT

Перезагружаемся. Та-дам! Аппаратная виртуализация активирована!

Интересные ссылки:
http://tjworld.net/wiki/Sony/Vaio/FE41Z/HackingBiosNvram — программа для активации VT-x без прошивки CMOS для linux
http://forum.notebookreview.com/acer/465936-acer-laptop-phoenix-bios-enable-virtualization-test-machine-acer-aspire-9420-a.html — С чего все начиналось
Tags:
Hubs:
Total votes 53: ↑47 and ↓6+41
Comments41

Articles