- •Глава V методы защиты от исследования программ
- •Средства исследования программ
- •Защита программ от дисассемблирования
- •Защита программ от работы под контролем отладчика
- •5. Защита программ от несанкционированного копирования
- •5.1. Защита дискет от копирования
- •Программа fmt256
- •Программа fmt81trk
- •Программа rw81trk
- •Программа fmtintrl
- •Программа chkintrl
- •5.2. Защита программ на жестком диске
- •Список кластеров, распределенных файлу
- •Программа clustlst
- •Привязка к bios
- •Программа biosver
- •5.3. Защита программ от трассировки
Привязка к bios
Рассмотрим теперь использование BIOS для защиты от копирования программ с жесткого диска.
Программа может определить дату изготовления BIOS, прочитав 8 байт из области памяти, расположенной по адресу F000h:FFF5h.
Более подробную информацию о BIOS можно получить, воспользовавшись функцией C0h прерывания INT 15h . Эта функция возвращает в регистрах ES:BX адрес таблицы конфигурации:
Смещение, байт |
Размер, байт |
Описание |
0 |
2 |
Размер таблицы в байтах |
2 |
1 |
Код модели компьютера |
3 |
1 |
Дополнительный код модели |
4 |
1 |
Версия изменений BIOS (0 - первая реализация, 2 - вторая и т. д.) |
5 |
1 |
Байт конфигурации оборудования |
6 |
2 |
Зарезервировано |
8 |
2 |
Зарезервировано |
Анализируя байт конфигурации оборудования, можно определить состав аппаратного обеспечения:
Бит |
Описание |
0 |
Зарезервировано |
1 |
Если этот бит установлен, компьютер оборудован шиной Micro Channel, в противном случае используется шина ISA, PCI или EISA |
2 |
Используется расширенная область данных BIOS |
3 |
BIOS способна ожидать внешние события |
4 |
Каждый раз после вызова прерывания от клавиатуры INT 9h вызывается функция 4Fh прерывания INT 15h |
5 |
В компьютере есть часы реального времени |
6 |
Имеется второй контроллер прерываний |
7 |
Для работы с диском BIOS использует канал 3 контроллера прямого доступа к памяти |
Программа установки программного обеспечения может прочитать эти поля и записать их в зашифрованном виде, например, в один из файлов защищаемого программного пакета.
Программа biosver
В листинге 5.7 приведен исходный текст программы BIOSVER, которая отображает дату изготовления BIOS, а также расширенную информацию о BIOS, полученную с помощью функции C0h прерывания INT 15h .
Листинг 5.7. Файл biosver\biosver.cpp
#include <stdio.h>
#include <conio.h>
#include <dos.h>
typedef struct _BIOSINFO_
{
unsigned size;
unsigned char model;
unsigned char submodel;
unsigned char version;
unsigned char hardcfg;
unsigned reserved1;
unsigned reserved2;
} BIOSINFO;
void main(void)
{
void far *biosdate;
BIOSINFO far *binfo;
int i;
union REGS rg;
struct SREGS srg;
biosdate = (void far*)MK_FP(0xf000, 0xfff5);
printf("\n\nДата изготовления BIOS: ");
for(i = 0; i < 8; i++)
putch(*((char far*)biosdate + i));
rg.h.ah = 0xc0;
int86x(0x15, &rg, &rg, &srg);
binfo = (BIOSINFO far*)MK_FP(srg.es, rg.x.bx);
printf("\nКод модели: %02.2X"
"\nДополнительный код модели: %d"
"\nВерсия изменений BIOS: %d"
"\nКонфигурация оборудования: %02.2X\n",
binfo->model, binfo->submodel,
binfo->version, binfo->hardcfg);
}