2008-09-04 5 views
3

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

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

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

ответ

9

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

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

1

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

0

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

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

0

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

4

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

Смежные вопросы