Найти используемый язык программирования - PullRequest
34 голосов
/ 16 декабря 2008

Какой самый простой способ узнать, на каком языке программирования написано приложение? Я хотел бы знать, если его VB или C ++ или Delphi или .net и т. Д. Из файла EXE программы.

Ответы [ 14 ]

27 голосов
/ 16 декабря 2008

Попробуйте PEiD

конечно, если они использовали упаковщик, сначала нужно выполнить некоторую распаковку:)

11 голосов
/ 16 декабря 2008

Запустите его и проверьте, какие библиотеки времени выполнения он использует с Process Explorer.

Если это не делает это сразу очевидным, поищите в Интернете ссылки на эти библиотеки DLL.

Большинство дизассемблеров (включая Олли, я думаю) могут легко показать вам текст, содержащийся в EXE или DLL, и иногда это может дать подсказку. Типы Delphi часто имеют префикс T, как в TMyClass.

Если это небольшой исполняемый файл без ссылок на DLL и без текста, возможно, вы SOL. На этом этапе вам нужно искать идиомы конкретных компиляторов, и это будет в основном догадка.

8 голосов
/ 31 августа 2009

Существует искусство определения языка, на котором написана программа. Это возможно, но жестких и быстрых правил не существует. Это требует большого опыта (и это также приводит к вопросу «Почему вы хотите ...», но вот несколько идей о том, как это сделать.

То, что вы ищете, это "подпись". Сигнатура может быть определенной строкой, включенной компилятором, ссылкой на API, довольно распространенным в используемом инструменте программирования, или даже стилем программирования, который является общим для используемых инструментов, видимым в содержащихся строках. в приложении.

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

Java-приложения, помещенные в самозапускаемый исполняемый файл, будут содержать ссылки на java-библиотеки и, вероятно, будут содержать определенные библиотеки или файлы, включенные в тот же каталог, которые указывают, что это java.

Как указано в других ответах, управляемая сборка также будет показывать определенные признаки: вы можете открыть ее в Reflector и т. Д. Хотя верно, что c # и VB являются «взаимозаменяемыми» после компиляции, неверно, что они идентичны. Если вы используете Reflector для дизассемблирования кода VB, вы часто будете видеть, что сборка ссылается на сборку Microsoft.VisualBasic.dll. Вы сможете увидеть разницу между Mono приложениями, потому что они, скорее всего, будут содержать ссылки на моно сборки.

Многие компиляторы собирают и связывают код определенным образом и оставляют следы. Например, изучив исполняемый файл окна с помощью вкладки "strings:" в Process Explorer , вы увидите много строк. Используя их, вы сможете определить стили программирования, вызываемые методы, ошибки или методы трассировки с помощью Отлично.

Примером является то, что компиляторы используют разные механизмы для локализации: Microsoft хранит локализованные строки в файлах XML или файлах ресурсов. Другие компиляторы будут использовать другую тактику.

Другим примером является c ++ искажение имени . Компилятор CodeWarrior использует другой алгоритм для управления именами переменных-членов и функций вызова, отличных от Visual Studio.

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

3 голосов
/ 16 декабря 2008

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

2 голосов
/ 16 декабря 2008

Самый простой способ - спросить у разработчика программы. Не требует никаких знаний и служебных программ.

1 голос
/ 31 августа 2009

Вы можете проверить, является ли сборка .net или нет, пытаясь открыть с помощью инструмента ildasm.exe

1 голос
/ 31 августа 2009

Скомпилированные языки (под этим я подразумеваю отсутствие языков сценариев или Java, .NET и т. Д.) Скомпилированы в инструкции по сборке ЦП, что по сути является односторонним преобразованием. Обычно невозможно определить, на каком языке была написана программа. Однако, используя средство обхода зависимостей, вы могли бы потенциально определить, какую библиотеку времени выполнения загружала программа (если есть), и, следовательно, определить, какой язык она использовала (например, MS Visual C ++ 9). использует msvcr90.dll).

1 голос
/ 16 декабря 2008
  • Определение приложения Delphi
  • Используйте eda_preview270.exe (из здесь ) или другой шпионский инструмент и проверьте имена классов окна. Если они читают как TButton или TfrmBlubb, это приложение VCL. Если в них есть «Afx», это, вероятно, MFC.
0 голосов
/ 23 марта 2014

Самый простой способ, который я нашел (по крайней мере, в компьютерных играх), - заглянуть в папку «redist», вложенную в основную папку игры. Для некоторых из вас это может быть очевидно, если вы сами более опытны в программировании, но особая цель MSI в этой папке - позволить файлу setup.exe автоматически установить необходимые компоненты для самой игры. Например: В Empire Total War существует MSI под названием «vcredist_x86-sp1.exe». Это указывает на то, что игра / программа была написана в Microsoft Visual C 2005 в .NET Framework (обычно). Фактически, если вы откроете MSI / EXE, установщик должен немедленно указать язык, на котором он написан, и какую версию. Моя знакомая причина в том, что я пишу код на C # и VB в .NET Framework, и мы автоматически устанавливаем предварительные условия для нашего бизнес-приложения. Надеюсь, это поможет!

0 голосов
/ 10 мая 2013

Вот отличное видео , объясняющее, как вы можете распаковать .exe-файл, если он был упакован с UPX. Для этого вам необходимо: PEiD , OllyDbg , ImpREC

После распаковки бинарного файла вы можете проверить с PEiD, какой язык программирования есть в бинарном файле.

...