Можно ли получить исходный файл из EXE-файла?

39394
Pavitar

Я видел, как мой друг извлекал файл исходного кода из файла java '* .class'. Он использовал для этого какое-то программное обеспечение.

Можно ли сделать то же самое с «* .exe» ? Если да, как я могу это сделать? Также этично ли это делать, учитывая, что исполняемый файл - это просто небольшой файл, который не защищен от копирования?

5
Что касается последнего вопроса, то в прошлом было много споров вокруг этой проблемы, но в основном в тех случаях, когда исполняемый файл был перепроектирован с единственной целью производства конкурирующего продукта. Если ваш интерес чисто академический, разработчик обычно не обращается за помощью. Blomkvist 13 лет назад 2
С чего вы взяли, что исполняемые файлы не защищены авторским правом? Или вы просто имели в виду, что вас интересует один конкретный исполняемый файл, который оказался в открытом доступе? Dave Sherohman 13 лет назад 0
Да, я имел в виду, что тот, который у меня есть, не защищен от копирования Pavitar 13 лет назад 0

6 ответов на вопрос

8
Alan Barber

Это зависит от языка, который использовали разработчики.

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

Другие языки, такие как C / C ++, не так просты.

Что касается этики, если вы просто программист, увлекающийся игрой, то это нормально. Однако, если вы профессионал, и вы пытаетесь получить исходный код для копирования приложения, то это очень неэтично и ничего страшного!

4
Bob G

Если приложение написано на одном из языков .NET (VB / C #), вы можете использовать отражатель Красных ворот в reflector.red-gate.com разбирать приложения в соответствующем исходные файлы. Однако не все приложения написаны на таких управляемых языках, и декомпиляция приложения C ++, или написанного на Delphi, или другого неуправляемого языка не так проста, и все, что вы можете получить - это шестнадцатеричные дампы, которые очень трудно затем реконструировать в реальное приложение.

Reflector больше не является бесплатным, [ILSpy] (http://ilspy.net/) будет делать то же самое и бесплатен (как в libre, так и в цене) для использования. Scott Chamberlain 11 лет назад 0
2
Diogo

Вы не можете сделать это, если ваш .exeкод находится в C / C ++, но если он находится в C #, вы можете сделать это. Я не знаю хорошего инструмента для этого, но одним из способов является использование ANTS Profiler. Он показывает вам все объекты, методы и аргументы из двоичного файла C #.

1
Stuart Woodward

Да, можно декомпилировать .exes, используя такие инструменты, как декомпилятор dcc . Это даст хорошие результаты, если оригинальная программа была написана на C. Если она была написана на другом языке, вам, возможно, придется попробовать другой инструмент, подходящий для этого языка.

При декомпиляции программного обеспечения, чем больше вы знаете языка ассемблера, тем лучше вам, возможно, придется исследовать код высокого уровня из сборки низкого уровня, если декомпилятор запутается или часть кода была фактически написана на языке ассемблера.

Декомпиляция является отличным способом изучения работы программ на самом низком уровне. Вы также обнаружите, что во многих случаях декомпилированная программа компилируется обратно в exe, но символы, используемые для описания переменных, совершенно бессмысленны. Возможно, вам придется выполнять детективную работу, чтобы действительно понять, что означает и делает код.

Я не вижу ничего плохого в этическом отношении для декомпиляции кода для вашего собственного развлечения или обучения, но если у вас есть злонамеренные намерения, такие как декомпиляция коммерческого программного обеспечения, чтобы изменить сообщение об авторском праве на ваше собственное или найти уязвимость для злонамеренной эксплуатации, то это может быть считается неэтичным.

Вы можете обнаружить, что разработчик пошел на все, чтобы предотвратить декомпиляцию, создав загрузчик, который распаковывает программное обеспечение в память или имеет код, явно запутывающий декомпиляторы. Это все часть веселья.

1
Dave Sherohman

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

Юридическая сторона: в соответствии с Законом о защите авторских прав в цифровую эпоху предпринимается попытка декомпилировать или перепроектировать любое программное обеспечение, которое правообладатель пытался защитить от этого. До сих пор суды толковали, что неважно, насколько нелепой может быть попытка, это все же незаконно. Даже если нет никаких технических мер для защиты кода, вероятно, существует лицензионное соглашение, в котором говорится, что вы не можете декомпилировать или перепроектировать исполняемый файл.

Как правило, я склонен считать эти вещи полностью этическими, если вы не делаете их с намерением причинить вред кому-либо еще, но закон имеет тенденцию не соглашаться.

0
rakesh

Получить исходный код из .class-файлов java легко, но сложно получить код из .exe-файлов. Используйте этот http://www.hiew.ru/ для дизассемблирования .exe-файлов, но этот сгенерированный код не будет таким же, как оригинальный он пропускает много строк, которые игнорируются компилятором, что затрудняет его чтение.

Похожие вопросы