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

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

Я помню, 5 лет назад я обнаружил вызов API, который требует дескриптора окна и возвращает имя класса окна. Я заметил, что если программа написана на VB, имени класса любого объекта должно предшествовать «гром». Если он написан на Delphi, имя класса обычно имеет букву «T». Я не уверен, так ли это до сих пор.

user922757 01.09.2011 07:03
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
40
1
76 967
13
Перейти к ответу Данный вопрос помечен как решенный

Ответы 13

Ответ принят как подходящий

Попробуйте PEiD

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

Он еще существует? Если да, то где взять (без зловреда sofstsonic)?

Serge 25.03.2014 16:34

Сработало, и это забавно, что название этого приложения на португальском означает «ПУДЕТ» ...

delphirules 15.06.2016 17:20

PEiD v0.95 (2008.11.03) успешно загружен из указанного выше местоположения и работает под Windows 7 Pro 64. Однако PEiD сообщает Not a valid PE file для большинства, но не для всех файлов .exe и .dll в моей системе. Я предполагаю, что PEiD работает для старых двоичных файлов, но не актуален для новых.

CODE-REaD 15.09.2016 20:08

У меня хорошо сработало :-)

Rahim 05.03.2019 02:36

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

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

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

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

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

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

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

Я предполагаю, что если он ищет инструмент, чтобы обнаружить это, у него нет легкого доступа к разработчику.

Decio Lira 16.12.2008 22:06

Вроде бы глупый ответ, но на самом деле «хакеры» делают свою работу именно так. "Социальная инженерия" это называется ... +1

Dan Rosenstark 05.11.2009 02:48

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

Хотя вы всегда можете ссылаться на более старую версию CRT.

i_am_jorf 31.08.2009 08:53

Полагаю, что так. Однако вы бы знали, что это был VC++.

jgottula 31.08.2009 08:55

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

Но что насчет разных языков в .Net.

rahul 31.08.2009 08:53

феникс - никак не определить. После компиляции C# и VB.NET взаимозаменяемы.

Beep beep 31.08.2009 08:56

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

Arsen Mkrtchyan 31.08.2009 09:00

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

jgottula 31.08.2009 09:04

взаимозаменяемые, но НЕ идентичные. Например, VB реализует C# "?" как вызов функции Iif (). VB включает Microsoft.VisualBasic для многих вещей.

Blue Toque 31.08.2009 09:21

В общем, нельзя.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Голосов против без комментариев? Есть ли конструктивные отзывы у кого-либо из противников?

Blue Toque 12.04.2013 07:44

Касательно "археологии программирования", теперь существует формальная наука под названием Программная археология (я не говорю об этом бойко).

CODE-REaD 15.09.2016 20:20

Это невероятно круто.

Blue Toque 16.09.2016 03:25

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

Другие вопросы по теме