Какие типы исполняемых файлов могут быть декомпилированы? - PullRequest
4 голосов
/ 04 сентября 2008

Я думаю, что исполняемые файлы java (jar-файлы) тривиальны для декомпиляции и получения исходного кода.

А как насчет других языков? .net и все?

Какие все языки могут компилироваться только в код, декомпилируемый?

Ответы [ 5 ]

10 голосов
/ 04 сентября 2008

Как правило, такие языки, как Java, C # и VB.NET, относительно легко декомпилировать, поскольку они скомпилированы на промежуточный язык, а не на чистый машинный язык. В своей форме IL они сохраняют больше метаданных, чем код C при компиляции на машинный язык.

Технически, вы не получаете исходный исходный код, а вариацию исходного кода, которая при компиляции вернет вам скомпилированный код. Он не идентичен исходному коду, поскольку такие вещи, как комментарии, аннотации и директивы компилятора, обычно не переносятся в скомпилированный код.

5 голосов
/ 04 сентября 2008

Управляемые языки могут быть легко декомпилированы, поскольку исполняемый файл должен содержать много метаданных для поддержки отражения .
Такие языки, как C ++, могут быть скомпилированы в нативный код. Структура программы может быть полностью изменена в процессе компиляции \ перевода.
Компилятор может легко заменить \ объединить \ удалить части вашего кода. Между исходным и скомпилированным (нативным) кодом нет связи 1: 1.

2 голосов
/ 04 сентября 2008

.NET очень легко декомпилировать. Лучшим инструментом для этого будет отражатель .NET , недавно приобретенный RedGate.

1 голос
/ 04 сентября 2008

VB6, если скомпилировано в pcode, также возможно декомпилировать до почти полного источника, используя P32Dasm , Flash (или ActionScript) также возможно декомпилировать до полного источника, используя что-то вроде Flare

1 голос
/ 04 сентября 2008

Большинство языков можно декомпилировать, но некоторые легче декомпилировать, чем другие. .Net и Java помещают больше информации об исходной программе в исполняемые файлы (имена методов, имена переменных и т. Д.), Чтобы вы вернули больше исходной информации.

C ++, например, преобразует переменные, функции и т. Д. В адреса памяти (да, я знаю, что это грубое упрощение), поэтому декомпилятор не будет знать, что именно называется. Но вы все равно можете получить часть структуры программы обратно.

...