У меня есть настольная программа, которую я скачал и установил. Он запускается из файла .exe.
Есть ли какой-нибудь способ узнать из файла .exe, какой язык программирования использовался для написания программы?
Есть ли какие-нибудь инструменты, чтобы помочь с этим?
Какие языки можно определить, а какие нет?
Хорошо, вот две вещи, которые я ищу:
- Советы по определению, написано ли приложение в Delphi или нет
- Эта программа IsDelphi от Брюс МакГи найдет все приложения, созданные с помощью Delphi, Delphi для .Net или C ++ Builder, которые находятся на вашем жестком диске.
lkessler 30 Дек 2009 в 06:08
Джон/Роджер: Честно говоря, мой вопрос возник только тогда, когда я увидел функцию в другой программе, которая, как я думал, будет хороша в моей. Мне было бы легче искать, как реализована эта функция, если бы я знал язык, на котором она написана.
30 Дек 2009 в 06:13
Это уважительная причина. Не закрывайте это.
Christy John
30 Дек 2009 в 06:31
Ты смотришь только Простые видео по программированию не просто так
Какая функция? Знание языка реализации на самом деле не очень полезно, но вопрос об этой конкретной функции в сочетании с языками/инструментариями, которые вы уже используете или уже знаете, с гораздо большей вероятностью даст ответ, который вы можете использовать.
Roger Pate
30 Дек 2009 в 07:11
То, что вы не думаете, что у ОП есть веская причина делать то, что он делает, не означает, что это «не связано с программированием». Мне кажется, это вполне резонный вопрос. Интересная (и очень связанная с программированием) часть этого вопроса заключается в том, можете ли вы на самом деле вывести это и как, а не в том, существует ли инструмент. Серьезно, ребята, не все здесь являются разработчиками приложений. Существует более одного типа программирования и более одного определения «полезного».
Todd Gamblin
31 Дек 2009 в 03:52
Зачем задавать вопрос? Если он хочет знать, то он хочет знать, и, поскольку речь идет о программном обеспечении, это подходящий вопрос для Stack Overflow. Я не знаю о мотивах г-на Кесслера, но я время от времени задавался вопросом, на каком языке что-то было написано, как и многие другие, я уверен.
davidtbernal
31 Дек 2009 в 03:53
11 ответов
Лучший ответ
Я понимаю ваше любопытство.
Вы можете определить приложения Delphi и C ++ Builder и их SKU, просмотрев несколько конкретных ресурсов, которые добавляет компоновщик. В частности, RC Data DVCLAL и RC DATA PACKAGEINFO. XN Resource Editor значительно упрощает эту задачу, но может подавиться сжатым EXE.
Компрессоры EXE немного усложняют дело. Они могут скрывать или шифровать содержимое ресурсов. Программы, сжатые с помощью UPX, легко идентифицировать с помощью HEX editor, потому что первые 2 раздела в заголовке PE имеют имена UPX0 и UPX1. Вы можете использовать приложение, чтобы распаковать их.
Приложения, скомпилированные с помощью .Net, обнаружить несложно. Последние версии Delphi даже включают в себя функцию IsAssembly, или вы могли бы сделать небольшой анализ в заголовке PE. Ознакомьтесь с функцией IsManaged в IsDelphi.
Что пишут на языке программирования C++?
Сложнее определить, какой язык .Net использовался. По умолчанию VB.Net включает ссылку на Microsoft.VisualBasic, а приложения VCL.Net включают ссылки на конкретную версию Borland. Однако VCL.Net перестает функционировать в пользу Delphi Prism, и вы можете добавить ссылку на сборку VB на любой управляемый язык.
Я не смотрел некоторые приложения, которые используют сигнатуры для идентификации компилятора, поэтому не знаю, насколько хорошо они работают.
Надеюсь, это поможет.
Bruce McGee 7 Янв 2014 в 02:28
Спасибо, Брюс. Я рад, что добавил к вопросу тег Delphi.
6 Янв 2010 в 08:48
Хороший дизассемблер, плюс, конечно, отличное понимание базовой архитектуры ЦП, часто могут помочь вам определить используемые библиотеки времени выполнения. Если исполняемый файл не был тщательно «лишен» символов и / или замаскирован иным образом, имена символов, видимые в библиотеках времени выполнения, часто будут давать вам подсказки на языке программирования, потому что стандарты разных языков определяют разные имена, а поставщики компиляторов и сопутствующих библиотеки времени выполнения обычно очень строго соблюдают эти стандарты.
Конечно, вы не добьетесь этого без знания различных возможных языков и их библиотечных стандартов — и если автор кода намеревался замаскировать информацию, им это тоже не сложно сделать.
Alex Martelli 30 Дек 2009 в 06:15
Если у вас есть большой набор примеров из известных компиляторов, я думаю, это будет отличное приложение для машинного обучения. Я считаю, что здесь уместно так называемое «обучение с учителем». К сожалению, я почти ничего не знаю по этой теме — только то, что я слышал впечатляющие результаты, представленные на конференциях.
Вы можете покопаться в материалах Рабочей конференции по обратному проектированию , чтобы узнать, интересуется ли эта проблема еще кем-нибудь.
Norman Ramsey 31 Дек 2009 в 03:40
Предполагая, что это приложение для Windows .
Признает ли Reflector сборку .NET? Тогда это MSIL, 99% либо VB, либо C #, но вы, скорее всего, никогда не узнаете, какой именно, и это не имеет значения.
Нужен ли интпредставитель (например, Java?)? Тогда это Java (или другой интерпретатор.)
Проверьте, какие библиотеки DLL времени выполнения требуются.
Требуются ли DLL-библиотеки времени выполнения VB? Поздравляем, VB из VisualStudio 6.0 или более ранней версии.
Требуются ли для этого библиотеки Delphi? Поздравляю, Дельфи.
Вы зашли так далеко? C / C ++. Предположим, C ++, если он не требует msys или cygwin dll, и в этом случае C имеет вероятность 25%.
Поздравляем, это должно быть верным для подавляющего большинства программного обеспечения Windows. Это, вероятно, на самом деле вам не поможет, так как на всех этих языках можно сделать много одинаковых вещей.
Drakonite 31 Дек 2009 в 03:57
Это своего рода набор правил, который я искал. Есть ли что-нибудь, что дает это гораздо более подробно?
4 Янв 2010 в 05:51
Ну нет, и в этом суть. Я просто взял это из пары основных идей. Если у него есть особые требования к внешнему языку, такие как платформа .NET, интерпретатор или библиотеки времени выполнения для конкретного языка, это может вас сбить с толку. В противном случае могут потребоваться годы опыта работы с различными компиляторами, чтобы понять, какой компилятор создал код с какой-либо реальной точностью. Если внешних библиотек нет, лучше всего рискнуть и назвать его либо C, либо C++, в зависимости от возраста двоичного файла.
4 Янв 2010 в 06:27
Как насчет того, чтобы дать вам образец, написанный на ассемблере? Обнаружение сборки: в основном не ссылается на какую-либо dll среды выполнения C и не имеет в ней строк stdlib («запросил среду выполнения, чтобы завершить ее необычным образом»).
5 Янв 2010 в 07:02
Если это байт-код .Net (или Java), я бы не сказал «. но вы, вероятно, никогда не узнаете, какой, и это не имеет значения» — существует множество языков, которые работают на этих платформах. Delphi Prism, VB, C#/Scala, Groovy, Clojure или AspectJ имеют разные наборы функций.
5 Янв 2010 в 13:03
5 Янв 2010 в 20:07
IDA Pro Free (http://www.hex-rays.com/idapro/idadownfreeware. htm) может оказаться полезным. Даже если вы не понимаете язык ассемблера, если вы загрузите EXE в IDA Pro, его начальный вывод о ходе выполнения может (при наличии каких-либо явных признаков) включать его наилучшее предположение о том, какой компилятор использовался.
please delete meplease delete me 3 Янв 2010 в 03:29
Начните с различных опций в dumpbin. Имена символов, если их не стереть, дадут вам всевозможные подсказки относительно того, C, C ++, CLR или что-то еще.
bmargulies 30 Дек 2009 в 06:15
Другие инструменты используют сигнатуры для идентификации компилятора, используемого для создания исполняемого файла, например PEiD, CFF Explorer и другие.
Обычно они сканируют точку входа исполняемого файла по сравнению с подписью.
Обозреватель сигнатур из CFF Explorer может дать вам представление о том, как подпись построена.
pani 5 Янв 2010 в 11:02
Похоже, компоновщик VC ++ от V6 до добавляет подпись к заголовку PE, который вы можете проанализировать.
Bruce McGee 6 Янв 2010 в 14:32
Я предлагаю PEiD (бесплатное программное обеспечение, с закрытым исходным кодом). Имеет все подписи Delphi для Win32, также может сказать вам, какой упаковщик использовался (если есть).
Free Consulting 8 Янв 2010 в 05:34
Я использую WinDowse (небольшую бесплатную утилиту, написанную на Delphi) для шпионить за окнами программы . например, если вы посмотрите на Таблицу «Класс», вы можете обнаружить имя «Класс» элемента управления ..
- TFormXX, TEditYY, TPanelZZZ для приложений delphi
- WindowsForms10.XXXX.yyy, для приложений .NET
- wxWindowsXXX для приложений wxWindows
- AfxWndXX для приложений MFC / VC ++ (я думаю)
Я считаю, что это самый быстрый (хотя и не самый точный ) способ найти информацию о приложениях.
paolorossi 5 Янв 2010 в 12:45
Спасибо, Паоло. Эта программа WinDowse выглядит очень полезной для этой цели. Если бы я мог дать второй принятый ответ, вы бы его получили.
6 Янв 2010 в 09:07
Во-первых, посмотрите, какие библиотеки времени выполнения он загружает. Программа на C обычно не загружает библиотеку Visual Basic.
Также проверьте исполняемый файл на наличие контрольных строк. В большинстве исполняемых файлов это почти конец. Если программа использует строковые константы, это может указывать на то, как они хранятся.
wallyk 30 Дек 2009 в 06:18
Также это могут выдать символы и соглашение о вызовах, а также такие вещи, как использование ebp/rbp со стеком вызовов.
Источник: question-it.com
Как посмотреть на каком языке написана программа
Добрый день
Пару лет назад попросил 1-го программиста написать для меня прогу (бота для определенного сайта). Сейчас возникла необходимость кое-что подправить в проге. С программистом связь утеряна. Вопрос: как узнать, на каком языке она написана ?
www.Aobmen.ru — ввод/вывод/автообмен электронных денег WebMoney, Яндекс.Деньги
Участник клуба
Регистрация: 15.01.2010
Сообщений: 1,325
Если выложите фрагмент кода, то постараемся определить.
Грибы — они разные. Один тебя накормит, другой тебе кино покажет.
Редактор журнала » [ ПРО граммист] »
Y an’s H ome D igital L ab
Регистрация: 27.10.2009
Сообщений: 6
Если выложите фрагмент кода, то постараемся определить.
в том-то и дело, что чтобы выложить фрагмент кода, необходимо его открыть. Сама прога с расширением exe. Как же код посмотреть его ?
www.Aobmen.ru — ввод/вывод/автообмен электронных денег WebMoney, Яндекс.Деньги
Пользователь
Регистрация: 09.05.2010
Сообщений: 43
Для определения компилятора/упаковщика подойдет утилита PEiD [1]
Если прогамма на .NET, то поможет Reflector for .NET(Decomplier) [2]
Если программа на VB6, то VB Decompiler [3]
Регистрация: 15.02.2010
Сообщений: 15,397
Сейчас возникла необходимость кое-что подправить в проге. |
Если исходников нет, то прийдется постараться.
Регистрация: 27.10.2009
Сообщений: 6
Для определения компилятора/упаковщика подойдет утилита PEiD [1]
спасибо, вот что она показывает
насколько я понимаю, она написана на делфи
можно 6 или 7 файл открыть ?
www.Aobmen.ru — ввод/вывод/автообмен электронных денег WebMoney, Яндекс.Деньги
Регистрация: 15.02.2010
Сообщений: 15,397
Нет. Только Дизасм. (Конечно можно попробыать ДеДе, но фактически это тоже самое).
Регистрация: 27.10.2009
Сообщений: 6
Нет. Только Дизасм. (Конечно можно попробыать ДеДе, но фактически это тоже самое).
я конечно в техникуме изучал паскаль и ассемблер, но не до такой степени
вот что мне деде показывает
не понимаю вообще здесь ничего
а вот, что показывает IDA
я так понимаю, прога на ассемблере написана ?
www.Aobmen.ru — ввод/вывод/автообмен электронных денег WebMoney, Яндекс.Деньги
Регистрация: 15.02.2010
Сообщений: 15,397
Нет. Просто пока не существует автоматических возможностей восстановить исходник ЯП из машинного кода. Компилятор обычно не оставляет имен переменных, классов.
Регистрация: 27.10.2009
Сообщений: 6
Нет. Просто пока не существует автоматических возможностей восстановить исходник ЯП из машинного кода. Компилятор обычно не оставляет имен переменных, классов.
подождите, я что-то не пойму. я теперь вообще не смогу изменить код программы ? ведь там нужно только адрес сайта поменять .
www.Aobmen.ru — ввод/вывод/автообмен электронных денег WebMoney, Яндекс.Деньги
Источник: www.programmersforum.ru
Как проверить, на каком языке написана программа (.exe). Как посмотреть код?
У меня есть файл .exe, и мне нужно знать, на каком языке написана программа. А также есть ли уловка для просмотра кода (на основе этого .exe файла)? Я использовал Reflector и теперь знаю, что это не .NET.
задан 10 марта ’10, 18:03
4 ответы
Я сталкивался с этой проблемой раньше. Я только что открыл .exe файл в блокноте. Я нашел название и версию компилятора. Надеюсь, это кому-то поможет ..
У меня есть файл .exe, и мне нужно знать, на каком языке написана программа.
Вообще говоря, это невозможно. Каждый язык мог бы составить свою версию «Hello, world!». нацеливание данной платформы (или исполняемого формата) на один и тот же исполняемый файл (байт за байтом).
А также есть ли уловка для просмотра кода (на основе этого .exe файла)?
Нет, см. Выше. Однако вы можете попробовать декомпилятор по вашему выбору.
ответ дан 10 мар ’10, в 21:03
Компиляция высокоуровневого языка в .EXE низкого уровня обычно является односторонним процессом — практически невозможно надежно извлечь значимую информацию из исполняемого файла относительно исходного языка после завершения процесса. Возможно, вам повезет и вы найдете несколько идентифицируемых подсказок, оставшихся в двоичном файле, или, конечно, найдете сопроводительный файл (например, .pdb), который дает подсказки относительно исходного языка.
Однако то, что содержит .EXE, — это (обычно) язык ассемблера, который иногда можно декомпилировать обратно в высокоуровневое представление программы. Обратите внимание, что это никогда не даст вам исходный файл с точной инструкцией — результат, вероятно, будет очень многословным и трудным для понимания просто из-за того, что компилятор сделал в первую очередь, что превратилось в высокоуровневый «концептуальный» сложный язык в поток низкоуровневых инструкций, отбрасывающий большинство контекстных подсказок, которые не нужны ЦП для выполнения кода.
ответ дан 10 мар ’10, в 21:03
Я собираюсь возразить всем, заявляя что-либо вроде «Компиляция языка высокого уровня в .EXE низкого уровня, как правило, является односторонним процессом». Поскольку не все исполняемые файлы скомпилированы в необработанную сборку.
Поскольку это не всегда так. Хорошим примером является C # (. Net), где файл компилируется в IL, а не в исходную сборку. В случае IL вы можете дизассемблировать в исходный код (даже если процесс выполняется в памяти, например, извлечение из глобального кэша сборок)
Если файл был скомпилирован прямо в необработанную сборку, то обычно в синтаксисе / структуре есть какое-то указание на исходный язык. Хотя это скорее побочный продукт компилятора, чем сам язык.
Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками assemblies or задайте свой вопрос.
ADV
Последние вопросы
Связанные теги
stackovergo.com 2020–2023, под лицензией куб.см по-са 3.0 с указанием авторства. | Персональные данные | Cookies политики
Источник: stackovergo.com