Существует ли способ сказать, какой язык использовался для программы?

У меня есть настольная программа, которую я загрузил и установил. Это работает из .exe файла.

Есть ли некоторый путь из .exe файла для сообщения то, что язык программирования использовался для записи программы?

Есть ли какие-либо инструменты, доступны для помощи с этим?

Какие языки могут быть определены и которые не могут?


Хорошо вот два из вида вещей, которые я ищу:

  1. Подсказки, чтобы Определить, Записано ли Приложение в Delphi или Нет

  2. Эта программа "IsDelphi" Bruce McGee найдет все приложения, созданные с Delphi, Delphi для .NET или Разработчика C++, которые находятся на Вашем жестком диске.

14
задан Community 23 May 2017 в 10:32
поделиться

11 ответов

Я понимаю ваше любопытство.

Вы можете идентифицировать приложения Delphi и C++ Builder, а также их SKU, найдя пару специфических ресурсов, которые добавляет компоновщик. В частности, RC Data\DVCLAL и RC DATA\PACKAGEINFO. Редактор ресурсов XN делает это намного проще, но он может подавиться сжатыми EXE.

EXE компрессоры немного усложняют вещи. Они могут скрыть или забраковывать содержимое ресурсов. Программы, сжатые с помощью UPX легко идентифицировать с помощью HEX-редактора, потому что первые 2 секции в заголовке PE называются UPX0 и UPX1. Вы можете использовать приложение для их распаковки.

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

Рассказать, какой язык .Net был использован, сложнее. По умолчанию в VB.Net есть ссылка на Microsoft.VisualBasic, а в приложения VCL.Net включены специфические ссылки Borland. Однако, VCL.Net отказался от Delphi Prism, и вы можете добавить ссылку на ассемблер VB на любом управляемом языке.

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

Надеюсь, это поможет.

.
4
ответ дан 1 December 2019 в 09:32
поделиться

Я использую WinDowse (небольшую бесплатную утилиту, написанную в Delphi) для шпионажа за окнами программы... например, если вы посмотрите на TabSheet "Class", то увидите имя элемента управления "Class"...

Например:

  • TFormXX, TEditYY, TPanelZZZ для delphi-приложений
  • WindowsForms10. XXXX.yyy, для .NET приложений
  • wxWindowsXXX для wxWindows приложений
  • AfxWndXX для MFC/VC++ приложений (я думаю)

Я думаю, что это самый быстрый способ (хотя не самый точный) найти информацию о приложениях..

.
8
ответ дан 1 December 2019 в 09:32
поделиться

Сначала посмотрите, какие библиотеки времени выполнения он загружает. Программа на Си обычно не загружает библиотеку Visual Basic.

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

.
4
ответ дан 1 December 2019 в 09:32
поделиться

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

Конечно, Вы не доберётесь туда без знания различных возможных языков и их библиотечных стандартов - и если автор кода намеревался замаскировать информацию, то это тоже не составит для них труда.

.
3
ответ дан 1 December 2019 в 09:32
поделиться

IDA Pro Free ( http://www.hex-rays.com/idapro/idadownfreeware.htm) может быть полезен. Даже если вы не понимаете язык ассемблера, если вы загружаете EXE в IDA Pro, то в его исходный вывод может (если есть какие-нибудь сигналы telltale) быть включена его лучшая догадка о том, какой компилятор использовался.

.
2
ответ дан 1 December 2019 в 09:32
поделиться

Другие инструменты используют сигнатуры для идентификации компилятора, используемого для создания исполняемого файла, такие как PEiD, проводник CFF и т.д.

Они обычно сканируют точку входа исполняемого файла против сигнатуры.

Проводник сигнатур из Проводника CFF может дать представление о том, как строится одна сигнатура.

.
1
ответ дан 1 December 2019 в 09:32
поделиться

Начать с различных вариантов сброса. Названия символов, если их тщательно не стирать, дадут вам всевозможные подсказки, будь то C, C++, CLR или что-то еще.

.
1
ответ дан 1 December 2019 в 09:32
поделиться
[

] Похоже, что компоновщик VC++ из V6 до [] добавляет сигнатуру[] к заголовку PE, который вы можете разобрать.[

]
0
ответ дан 1 December 2019 в 09:32
поделиться

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

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

3
ответ дан 1 December 2019 в 09:32
поделиться

Если предположить, что это приложение для Windows...

Распознает ли рефлектор его как .NET сборку? Тогда это MSIL, 99% либо VB, либо C#, но вы, скорее всего, никогда не узнаете, какая именно, и это не имеет значения.

Нужен ли ему интрепретатор (например, Java?)? Тогда это Java (или любой другой интерпретатор.)

Проверьте, какие DLL ему нужны во время выполнения.

Требуются ли для этого VB DLL? Поздравляю, VB из VisualStudio 6.0 или более ранней версии.

Требуются ли для работы Delphi dll? Поздравляю, Дельфи.

Ты зашёл так далеко? C/C++. Предположим, что C++, если только для этого не нужны msys или cygwin dlls, в этом случае у C может быть 25%-ый шанс.

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

2
ответ дан 1 December 2019 в 09:32
поделиться

ik stel voor PEiD (freeware, gesloten bron). Heeft alle Delphi voor Win32-handtekeningen, kan u ook vertellen welke packer is gebruikt (indien aanwezig).

0
ответ дан 1 December 2019 в 09:32
поделиться
Другие вопросы по тегам:

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