Хакерский софт и услуги. Программирование. Взлом. Форум сайта - SoftXaker.Ru
Старый 09.01.2013, 12:52   #1
XRoad
Модератор
 
Регистрация: 25.09.2011
Сообщений: 236
XRoad скоро придёт к известностиXRoad скоро придёт к известности
По умолчанию Что такое декомпилятор.

Создавая программу на С++ или Pascal, мы редко задумываемся о том, как именно процессор должен воспринимать ее, зная лишь то, что без исходного кода в скомпилированной программе никто не разберется. А это важно, так как в программу обычно вкладывают хитрые алгоритмы, предназначенные отнюдь не для использования конкурентами. Между тем, получение исходного кода из скомилированного – вовсе не фантастика, и такие программы называются декомпиляторами.

Не нужно путать их с дизассемблерами, которые преобразуют машинный код в инструкции ассемблера – там действительно разобраться очень трудно. Больше скажем: скомпилировать обратно ассемблерную программу без «шаманских плясок» тоже не получится. Поэтому не секрет, что многие жаждут найти этот самый декомпилятор. И даже не для взлома чужих алгоритмов или получения исходников Windows, а, например, чтобы восстановить свой потерянный исходный код. В теории создание автоматического декомпилятора невозможно, но на практике они существуют у профессиональных хакеров в виде набора личного инструментария, которым они не делятся.

Давайте посмотрим, как должен действовать такой инструмент при исследовании, скажем, программы на Turbo Pascal. Мы имеем exe-файл, в котором присутствуют:

- Заголовок
- Секция данных
- Секция кода
- Внешние библиотеки пользователя
- Внешние библиотеки языка (RTL)

RTL – самая важная часть, которую нужно выделить из программы. Делается это через таблицы настраиваемых адресов заголовка. Зная точку входа в RTL, мы может найти все адреса из основной программы, ведущие в эту область. Каждый адрес – вызов функции вроде writeln, paramstr, sin, abs, blockwrite и т.д. Интересно, что сама RTL часто поставляется в исходниках, т.е. идентифицировать ее с кодом из программы можно однозначно. Используемые стандартные функции имеют набор параметров, по которым можно выделить отдельные структуры данных в секции данных. Скажем, отделить переменные типа byte от word, longint от real.

Сама же исходная программа выглядит довольно просто. Все циклы и операции в ней преобразуются «на месте» в виде несложных логических конструкций ассемблера, а для вызова стандартной функции используется следующая модель поведения:

- Подготовить нужные регистры, настроив их значениями данных или ссылками на область данных
- Записать эти регистры в стек
- Вызвать стандартную подпрограмму обработки

Вызов подпрограммы – обращение к зоне RTL, причем адрес входа однозначно определяет функцию даже «на глаз». Недостатки декомпилятора: потеря комментариев, невозможность восстановить оптимизированные выражения и имена идентификаторов, трудность при разборе с ассемблерными вставками или элементами изощренного кодирования.

Заметим, что для языков, генерирующих промежуточный код, декомпиляторы уже есть – FoxPro и другие СУБД, языки платформ.

NET и JVM и некоторых других. Но «настоящий» автоматический декомпилятор еще пока ждет своего разработчика.
XRoad вне форума  
 

Метки
декомпилятор, программирование

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что такое DDoS атака и анти DDoS хостинг. AntonXxX Новости 0 08.01.2013 19:09
Что такое троян sertaras Статьи 1 28.09.2012 02:40
Что такое криптор sertaras Статьи 1 28.09.2012 02:39




Powered by SoftXaker® Version 3.5.1
, Форум хакеров и программистов: Forum.SoftXaker.ru
Софт для взлома и защиты. Хакерский софт.
Лаборатория Хакера |