Skip to content

akiracrying/info-os

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

InfoOS

В работе представлена операционная система InfoOS, позволяющая узнавать различные системные данные

Цель работы

Приобретение навыков по защите приложений от нелегального использования, по анализу исполняемых кодов в отсутствие исходных текстов и по применению способов защиты программ от дизассемблирования и отладки.

Ход работы

Описание загрузчика

Для выполнения данной лабораторной работы было необходимо следовать следующим требованиям:

  • Работа выполняется в ОС Linux
  • Транслятор ассемблера для загрузчика: YASM, синтаксис: AT&T
  • Компилятор ядра: gcc
  • Задание для реализации: InfoOS

Рассмотрим эти пункты подробнее.

YASM — это один из многих трансляторов программы из текста на языке ассемблера. В ОС Linux для компиляции программы использовалось следующая команда:

 yasm -p gas -f bin -o $(boot).tmp $(boot).asm

На месте $(boot) и $(ker) далее должны стоять названия файлов загрузчика и ядра.

Данная команда создаёт .tmp файл на основе файла bootsect.asm, который в последствии используется утилитой dd для занесения на загрузочный диск:

 dd bs=31744 skip=1 if=$(boot).tmp of=$(boot).bin

AT&T — это один из основных синтаксисов формата записи инструкций процессора(мнемоник). Основными отличиями от синтаксиса Intel являются: Регистры записываются с префиксом % (знак процента).

  • Каждая команда записывается с суффиксом, указывающим размер операндов команды (b — операнды размером 1 байт, w — 2 байта, l — 4 байта).
  • В командах пересылки данных приемник данных находится справа от источника (movl %ebx, %eax == из ebx в eax)
  • Константы записываются с префиксом $ (знак доллара). Если знак доллара не записан — процессор будет использовать значение, хранящееся в памяти по указанному адресу.
  • Адрес текущего смещения в памяти — знак . (точка).
  • Доступ к памяти по адресу, расположенном в регистре, осуществляется с помощью записи N(%reg), где N — смещение в байтах в памяти относительно адреса, хранящегося в регистре reg. Например, команда movb 0(%bx), %al копирует один байта из памяти с адресом, хранящимся в регистре bx в регистр al.

GCC — компилятор языка си. В работе он был использован для компиляции ядра с помощью следующей команды.

 g++ -ffreestanding -m32 -o $(ker).o -c $(ker).cpp

Далее файл kernel.o необходимо перевести в бинарный файл:

ld --oformat binary -Ttext 0x10000 -o $(ker).bin --entry=kmain -m elf_i386 $(ker).o

После чего необходимо провести инициализацию загрузчика и ядра на виртуальной машине qemu:

 qemu –fda bootsect.bin –fdb kernel.bin

В качестве операционной системы, которую необходимо было реализовать, была представлена InfoOS — ОС, которая должна соответствовать следующим требованиям:

  • Загрузчик должен собрать необходимую информацию с помощью функций BIOS и сохранить ее в памяти, доступной в дальнейшем ядру. Должно быть собрано текущее время.
  • Также должен быть реализован спектр различных функций. Реализация описана в таблице 1.

Описание реализации загрузчика

Загрузчик представляет собой системное программное обеспечение, обеспечивающее загрузку операционной системы непосредственно после включения компьютера и начальной загрузки. В работе, в качестве загрузчика выступает файл bootsect.bin.

После старта процессор выполняет операцию самотестирования — BIST (built-in self test). Затем происходит выполнение первой инструкции, находящейся по физическому адресу 0xFFFFFFF0 (в вершине адресного пространства), по которому записан код EPROM (Erasable Programmable Read-Only Memory), содержащий программу дальнейшей инициализации аппаратуры компьютера. Загрузчик ОС располагается в первом секторе диска.

В зависимости от установок BIOS порядок устройств, на которых осуществляется поиск загрузчика, может меняться, но, в общем случае, этими устройствами могут быть: дискета, жесткий диск, привод лазерных дисков, сервер сети. Наиболее простой способ загрузки ОС, поддерживаемый всеми версиями BIOS, — это загрузка с дискеты. Если BIOS находит дискету в дисководе, выполняется считывание ее первого сектора (512 байт) в оперативную память по физическому адресу 0x00007C00. Файл bootsect.asm, содержащий код загрузчика, также выполняет дополнительную функцию для съёма значений времени BIOS. Для удобства был написан Makefile. С его помощью, запуск кода представляет собой комадну:

make boot=bootsect ker=kernel

About

InfoOS, позволяющая узнавать различные системные данные

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors