Научная статья на тему 'Декомпилятор исполняемых модулей программ'

Декомпилятор исполняемых модулей программ Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
225
48
i Надоели баннеры? Вы всегда можете отключить рекламу.
i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Декомпилятор исполняемых модулей программ»

На каждом последующем шаге появляется новое значение математического ожидания и запоминается / - число учтенных примеров.

Преимущество метода состоит в возможности приближенного формирования области «все чужие» при малых размерах обучающего подмножества ТЧ (Ь2=2Щ. Однако это преимущество может и негативно отразиться на точности идентификации. Аппроксимация области «все чужие» ограниченным числом точек (2Щ может привести в процессе обучения ИНС к неконтролируемым «выбросам» области «свой» в периферийные зоны гиперпространства. При случайном попадании биометрических параметров реального «чужого» в область «выброса» это приведет к ошибке идентификации второго рода (ложный допуск «чужого»). Такую ситуацию в двумерном пространстве иллюстрирует рис. 5.

Моделируемая интегральная область «все чужие»

Реальная область «свой»

Область реального «чужого» в зоне «выброса» области «свой»

Рис. 5. Возникновение ошибки идентификации

Тем не менее, метод позволяет обойти весьма трудную проблему - обучение ИНС без наличия биометрических параметров всех возможных «чужих» пользователей.

Библиографический список

1. Брюхомицкий Ю.А., Казарин М.Н. Система аутентификации личности по почерку / Сборник трудов научно-практической конференции с международным участием «Информационная безопасность». Таганрог: изд-во ТРТУ, 2002. С. 22-29.

2. Иванов А.И. Биометрическая идентификация личности по динамике подсознательных движений. Пенза: Изд-во ПГУ, 2000. 188 с.

3. Хорн Р., Джонсон Ч. Матричный анализ: Пер. с англ. М.: Мир, 1989. 655

Кулагин О.В.

Россия, г. Пенза, ФГУП ПНИЭИ

ДЕКОМПИЛЯТОР ИСПОЛНЯЕМЫХ МОДУЛЕЙ ПРОГРАММ

Принципы открытой архитектуры средств вычислительной техники, на основе которых строятся разнообразные информационные системы (ИС), делают их весьма уязвимыми для вирусных атак. Защитить ИС от вирусов можно за счет аппаратного выполнения алгоритмов обработки информации (в том числе и при помощи аппаратной компиляции [1], позволяющей напрямую выполнять алгоритм любой программы в виде схемы на ПЛИС), позволяющего исключить процессоры из состава ИС.

Создан прототип аппаратного компилятора (АК), обрабатывающий исполняемые модули программ разных процессоров (для сравнения - все зарубежные АК обрабатывают исходные тексты программ на каком-то одном языке высокого уровня). Его основой является описываемый далее декомпилятор исполняемых модулей программ. Для программ разных процессоров он должен восстанавливать ассемблерный (мнемонический) текст и одновременно формировать текст программы в виде раннеоператорных польских инверсных (постфиксных) записей

команд (далее - текст постфиксных записей). Например, имеющаяся в процессорах Intel 80x86 команда арифметического сложения содержимого регистров АХ и ВХ с сохранением результата в регистре АХ (ADD AX, BX) опишется постфиксной записью АХ ВХ + АХ =. Управляющие команды в тексте постфиксных записей необходимо описывать согласно табл. 1. Условия в них указываются либо в виде условного выражения, либо (при отсутствии условий) в виде цифры 1.

Возможность обработки декомпилятором исполняемых модулей программ разных процессоров достигается за счет использования: 1) промежуточного формата для исполняемых модулей программ; 2) специализированной базы данных (СБД). В исполняемых модулях могут встречаться следующие секции: кодов команд, исходных данных и используемых ресурсов операционной системы (ОС), причем две последние секции могут отсутствовать. Поэтому, формируются три файла промежуточного формата - файл кодов команд *.OSF, файл исходных данных *.OSD, файл ресурсов *.OSR - путем пословного или побайтного переноса в них соответствующих кодов исходного исполняемого модуля (в формате своей ОС или компилятора). Общая структура файлов промежуточного формата, представляющих собой последовательности шестнадцатиразрядных слов, приведена на рис.1а. Первое слово каждого файла содержит служебную информацию: код процессора (например, 0 - TMS320C50, 1 - Intel 80386 в 32-разрядном защищенном режиме), формат слов f (f=0 - слова обрабатывать 16-разрядными словами, f=1 -слова обрабатывать байтами), число а. При записи информации в этот файл байтами в старшие байты каждого слова записываются первый и все последующие нечетные байты исходного исполняемого модуля, а в младшие байты слов - четные байты. Во втором слове файла содержится код операционной системы, используемой обрабатываемой программой: 0) никакая операционная система не используется; 1) MS-DOS (формат файлов MZ); 2) Windows NT 3.5/95/98 (формат файлов РЕ).

Таблица 1.

Описание управляющих команд процессоров.________________________

Запись команд Описание команд

[условие] адрес Адресный переход

(условие) адрес Вызов подпрограммы, оканчивающейся командой возврата RET

(условие,кол-во команд) адрес Вызов подпрограммы, состоящей из указанного количества команд

0 Команда возврата из прерывания RET

а)

б)

разряды 15...2 слова 1 - код типа процесс ора

разряд 1 слова 1- формат слов f

разряд 0 слова 1 -число a

Операционная система

1 слово

Блок команд/данных/ресурсов 1

Блок команд/данных/ресурсов М

\

Начальный адрес блока в памяти процессора -(a+1)слово.

Количество слов (N) в блоке - ( a+1) слово.

Слово команд/данных/ресурсов 1

Слово команд/данныхфесурсов

N

Рис. 1. Структура файлов *.OSF, *.OSD, *.OSR: а) общая структура файлов; б) структура блока команд/данных/ресурсов Далее в файле располагается один (или несколько) блоков команд / данных / ресурсов в зависимости от количества соответствующих секций в исходном ис-

полняемом модуле. Структура блока приведена на рис. 1б. В его начале содержатся два поля, каждое из которых занимает (а+1) слово: начальный адрес блока в памяти процессора и количество слов N в блоке. Если значения указанных полей представлены двумя словами (32-разрядными значениями), то каждое из этих полей записывается в файл в виде двух шестнадцатиразрядных слов - сначала старшее слово, а затем младшее. За этими полями в блоках команд и данных следуют соответствующие слова из исходного исполняемого модуля. В блоке ресурсов после поля N следует начальное слово, формат которого приведен в табл. 2 и которое определяет тип описываемого ресурса путем указания единицы в одном из битов

2-0.

Таблица 2.

_____________________Формат начального слова блока ресурсов.__________________________

Биты 15 - 3 2 1 0

слова

Значения полей Длина строки-названия ресурса (если есть) или нули Ресурс ОС Подпрограмма ОС Прерывание

После начального слова в блоке ресурсов следует строка - название ресурса, если она имеется в исходном файле, а после нее (либо сразу после начального слова блока ресурсов, если этой строки нет) следуют слова описания ресурса, перенесенные из исходного исполняемого модуля. Описания некоторых ресурсов, используемых декомпилируемой программой, например, номера прерываний MS-DOS, могут быть получены только после декомпиляции программы. Поэтому, в этом случае файл ресурсов должен быть дописан (или записан заново) по окончании декомпиляции. В [2] показано, что и декомпиляция, и компиляция выполняются при помощи одинаковых методов, основанных на теории формальных грамматик [3]. Описываемый декомпилятор выполняет, по сути дела, только дизассемблирование исполняемого модуля, что сводит декомпиляцию к заменам кодов полей команд исполняемого модуля на соответствующие им математические и мнемонические обозначения. Правила таких замен содержатся в СБД. В начале своей работы декомпилятор считывает файл *.OSF, по коду типа процессора из первого слова файла разыскивает нужную СБД, и с ее помощью декомпилирует этот файл. Так обеспечивается автоматическая настройка декомпилятора на систему команд требуемого процессора.

Основой СБД является список команд процессора, содержащий: 1) коды команд; 2) описания форматов команд; 3) постфиксную математическую и мнемоническую расшифровку команд. Для упрощения СБД в отдельный список выделены описания, присутствующие в некоторой группе команд процессора, одинаковые для всей этой группы и занимающие в разных командах одни и те же поля. Они названы дополнительными полями. Например, в системе команд процессоров ІШєІ 80x86 такими описаниями являются ссылки на регистры или на адреса памяти. Кроме того, для декомпилятора нужна информация обо всех регистрах и аппаратных прерываниях процессора (далее - постоянные данные), а также о регистрах процессора (если они есть), указывающих на другие его регистры. Способ указания одних регистров на другие назван дополнительными данными СБД. Таким образом, в состав СБД входят четыре файла: постоянных данных (*Лрр), дополнительных данных (*.dpd), функций дополнительных полей (*^р:1) и списка команд (*Лрк).

Файл постоянных данных содержит информацию о регистрах и аппаратных прерываниях процессора.

Файл дополнительных данных есть последовательность записей, каждая из которых включает следующие поля: 1) имя регистра; 2) значение регистра; 3) имя регистра, на которое указывают предыдущие поля записи.

Файл функций дополнительных полей есть последовательность записей, каждая из которых включает следующие поля: 1) имя дополнительного поля; 2) значение дополнительного поля; 3) математическая расшифровка дополнительного поля; 4) мнемоническая расшифровка дополнительного поля. В записях функций допускаются вызовы файла дополнительных данных по ссылке &_<регистр>. Имена дополнительных полей могут быть следующими: 1) йномер{биты][масш]; 2) &<регистр>{биты} [маска]; 3) fномер {биты}[маска]; 4) \<регистр> {биты} [маска]. Встречающиеся в файле списка команд имена дополнительных полей, начинающиеся с d, в файле функций дополнительных полей отыскиваются по имени и значению. Имена дополнительных полей, начинающиеся с f , отыскиваются только по имени. В описаниях всех полей СБД биты указываются одним из следующих способов: 1) один бит; 2) начало-конец; 3) слово1. начало-слово2. конец. В последнем случае разрядность поля СБД не должна превышать 32 бит, причем первое слово (байт) является старшим словом (байтом) поля, а последнее слово (байт) - младшим словом (байтом) поля. Маска - 16-ти или 32-разрядное значение, накладываемое на декодируемое слово перед его анализом.

Файл списка команд есть последовательность записей, каждая из которых включает следующие поля: 1) имя команды; 2) распределение полей команды; 3) шестнадцатеричный код команды; 4) количество слов в команде; 5) математическая расшифровка команд; 6) мнемоническая расшифровка команд. Распределение полей команды есть произвольная последовательность следующих элементов, разделяемых пробелами (все первые буквы - латинские): 1) кномер{биты}[маска] -код команды; 2) r(k1,k2,.,kn) - объединение в единое 32-разрядное слово нескольких полей кодов команды одной командной последовательности для ее распознавания в процессе декомпиляции; 3) dномер (или d<регистр> или омер или f< регистр >){биты} - дополнительные поля, описанные в файле функций дополнительных полей; 4) с<номер>{биты} - константы; 5) рномер{биты} - адреса отображенных в память данных регистров процессора, которые по файлу постоянных данных необходимо заменить на их имена; 6) $<регистр> - ссылка на регистр, описанный в файле дополнительных данных с учетом последнего значения, присвоенного ему в декомпилируемой программе; 7) d_<регистр> - ссылка на регистр, описанный в файле дополнительных данных с учетом значения этого поля; 8) я{биты} - собственный адрес команды (или первый адрес многословной команды); 9) (номер) - номер слова в многословной команде. Эти обозначения указываются также в полях математической и мнемонической расшифровки команд для их последующей замены на обозначаемые ими объекты. При необходимости одни и те же биты командных слов могут быть описаны несколькими элементами. В описаниях элементов параметры номер и [маска] могут отсутствовать.

Таким образом, разработанный декомпилятор способен автоматически настраиваться на систему команд требуемого процессора. Формируемый декомпилятором ассемблерный текст программы предназначен для контрольных целей (сверки с исходным листингом либо для документирования программы при отсутствии листинга), а текст постфиксных записей - для дальнейших преобразований алгоритма декомпилированной программы.

Библиографический список

1. Кулагин О.В., Чижухин Г.Н. способ аппаратной компиляции программ. // http://beda.stup.ac.ru/rv-conl7v03/20.

2. Cifuentes C. Reverse Compilation Techniques: PhD dissertation. Queensland University of Technology, Australia, July 1994. URL: http://www.csee.uq. edu.au/csm/dcc.htm.

3. ГордеевА.В., Молчанов А.Ю. Системное программное обеспечение. СПб.: Питер, 2001.

i Надоели баннеры? Вы всегда можете отключить рекламу.