Подтвердить что ты не робот

Найти используемый язык программирования

Самый простой способ узнать, на каком языке программирования было написано приложение? Я хотел бы знать, есть ли его vb или С++ или delphi или .net и т.д. Из файла exe программы.

4b9b3361

Ответ 1

Попробуйте PEiD

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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

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

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

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

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

  • Определить приложение Delphi
  • Используйте eda_preview270.exe(из здесь) или какой-либо другой инструмент-шпион и проверьте имена классов окон. Если они читают как TButton или TfrmBlubb, это приложение VCL. Если в них есть "Afx", это, вероятно, MFC.

Ответ 7

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

Ответ 8

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

Ответ 9

В общем, вы не можете.

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

Ответ 10

Это хороший вопрос. Не существует общего способа рассказать, но я уверен, что большинство компиляторов и библиотек оставляют отметку в результирующем EXE файле. Если вы хотите потратить на это много времени, вы можете собрать кучу EXE, написанных на известных языках, и просмотреть общие строки. Я бы хотел, чтобы вы нашли.

Dependancy Walker, который кто-то еще упомянул, был бы хорошим способом поиска контрольных зависимостей, таких как версии MSVCRT и т.д.

Ответ 11

Если я правильно помню PE Explorer Disassembler дает некоторую информацию о компиляторе, который создает заданные не .net и java двоичные файлы, для использования .net Reflector или Инструмент ILDAsm

Ответ 12

Я бы попробовал запустить .exe через программу 'strings', чтобы получить различные подсказки.

Ответ 13

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

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

Ответ 14

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