Ответ 1
Попробуйте PEiD
конечно, если они использовали упаковщик, сначала нужно будет выполнить распаковку:)
Самый простой способ узнать, на каком языке программирования было написано приложение? Я хотел бы знать, есть ли его vb или С++ или delphi или .net и т.д. Из файла exe программы.
Попробуйте PEiD
конечно, если они использовали упаковщик, сначала нужно будет выполнить распаковку:)
Запустите его и проверьте, какие DLL файлы во время выполнения используются в Process Explorer.
Если это не сразу станет очевидным, найдите в Интернете ссылки на эти DLL.
Большинство дизассемблеров (включая Olly, я думаю) могут легко показать вам текст, содержащийся в EXE или DLL, и это также может иногда дать ключ. Типы Delphi часто префиксны с T как в TMyClass.
Если это небольшой исполняемый файл без ссылок на DLL, а текст не может быть SOL. В этот момент вам нужно будет искать идиомы конкретных компиляторов, и это будет главным образом догадки.
Существует искусство определять, на каком языке была написана программа. Это возможно, но нет жестких и быстрых правил. Это требует большого опыта (и это также приводит к вопросу "Зачем вам нужно...", но вот несколько идей о том, как это сделать.
То, что вы ищете, - это "подпись". Подпись может представлять собой определенную строку, включенную компилятором, ссылку на 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.
Я полагаю, вы могли бы написать книгу о том, как точно определить линию любого исполняемого файла. Этот предмет, вероятно, будет называться "программирующей археологией".
Вы можете попытаться использовать Depends, чтобы узнать, какие ожидания выполняются в нем, что может дать некоторые подсказки.
Самый простой способ - спросить разработчика программы. Он не требует каких-либо знаний и служебных программ.
Скомпилированные языки (под этим я подразумеваю, что языки сценариев или Java,.NET и т.д.) не компилируются в инструкции по сборке процессора, что по сути является односторонним преобразованием. Как правило, невозможно определить, на каком языке была написана программа. Однако с помощью ходячего зависимостей вы могли бы определить, какую библиотеку времени выполнения загружалась программа (если она есть) и, следовательно, определять, какой язык он использует (например, MS Visual С++ 9 использует msvcr90.dll).
вы можете проверить, что сборка .net или нет, пытаясь открыть с помощью инструмента ildasm.exe
В общем, вы не можете.
Если вы можете загрузить его в Reflector, вы знаете, что это управляемая сборка.
Это хороший вопрос. Не существует общего способа рассказать, но я уверен, что большинство компиляторов и библиотек оставляют отметку в результирующем EXE файле. Если вы хотите потратить на это много времени, вы можете собрать кучу EXE, написанных на известных языках, и просмотреть общие строки. Я бы хотел, чтобы вы нашли.
Dependancy Walker, который кто-то еще упомянул, был бы хорошим способом поиска контрольных зависимостей, таких как версии MSVCRT и т.д.
Если я правильно помню PE Explorer Disassembler дает некоторую информацию о компиляторе, который создает заданные не .net и java двоичные файлы, для использования .net Reflector или Инструмент ILDAsm
Я бы попробовал запустить .exe через программу 'strings', чтобы получить различные подсказки.
Вот отличный видео, объясняющий, как вы можете распаковать файл .exe, если он был упакован UPX. Программное обеспечение, которое вам нужно для этого: PEiD, OllyDbg, ImpREC
После распаковки двоичного файла вы можете проверить с PEiD, какой язык программирования имеет двоичный файл.
Самый простой способ, который я нашел (по крайней мере в компьютерных играх), - это посмотреть в папку "redist", вложенную в основную папку игры. Для некоторых из вас может быть очевидно, что более опытные в программировании самостоятельно, но конкретная цель MSI в этой папке - разрешить файлу setup.exe автоматически устанавливать предварительные условия для самой игры. Например: В Empire Total War имеется MSI под названием "vcredist_x86-sp1.exe". Это указывает на то, что игра/программа была написана в Microsoft Visual C 2005 в .NET Framework (обычно). Фактически, если вы открываете MSI/EXE, установщик должен немедленно указать язык, на котором он записал, и какую версию. Причина, по которой я знаком, заключается в том, что я кодирую С# и VB в .NET Framework, и мы автоматически устанавливаем предварительные условия для нашего бизнес-приложения. Надеюсь, это поможет!