Как посмотреть код exe файла
Перейти к содержимому

Как посмотреть код exe файла

  • автор:

Как посмотреть исходный код программы?

Я хочу подправить исходный код, ничего серьезного, только вывод нескольких строк. Программа написана скорее всего на С++. Мне использовать отладчик? Или как-то открыть в IDE? Просто я не хочу запускать программу, хочу просто поковыряться в коде. И может посоветуете какой нибудь? P.S. Сам файл — .exe

Отслеживать
Anton Sorokin
задан 5 июл 2017 в 10:40
Anton Sorokin Anton Sorokin
7,038 6 6 золотых знаков 38 38 серебряных знаков 66 66 бронзовых знаков

Если подправить exe 32-битный и знаю ассемблер/ понимаю запись строк и других данных в двоичном коде — скачайте hiew.exe (можно как править надписи, так и код)

5 июл 2017 в 10:46
@nick_n_a А с notepad++ можно exeшники открывать? Или к .exe применять 2 комментарий?
5 июл 2017 в 10:52
А я думал у вас исходный код в наличии.
5 июл 2017 в 10:52
@nick_n_a Нет, есть только .exe файл и все.
5 июл 2017 в 11:10

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Исходный код раскрыть невозможно если для этого постарались обеспечить безопасность (особенно если это фирменная вещь).

Но есть способы полностью или частично раскрыть код.

  • IDA Pro — самый лучший из безплатных взломщиков, некоторые макросы возможно позволяют преобразовать код назад. Но не всегда. Особо хорошо раскрываются borland-продукты.
  • Hiew.Exe бесплатная утилита, очень маленькая, позволяет править код на языке ассемблера. Можно править текстовые и целые константы. Можно ею даже сделать «перевод» программы на другой язык, затереть имя фирмы и т.п.
  • Если есть PDB-файл, или подшита debug-info к файлу то код можно получить в среде разработки (если debug-info полная) редко можно использовать. Исходный код получить нельзя, но можно получить «номера строк и имена исходников», а так же имена/значения всех констант, локальных переменных, избежать «раздроблености функций» а так же получить классы с начинкой класса (почти все структуры кроме текста программы) что значительно упростит понимание работы программы. Для некоторых библиотек (dll) pdb-файлы можно скачать отдельно. Врядли уважающая себя фирма допустит утечку pdb своего стоящего продукта.
  • Debug info, существует DebugInfo-информация встроеная в exe. Если есть такая информация, и соответствующая утилита (Например на Borland Delphi собран, и он есть в наличии), то можно сделать аналогичное предыдущему пункту. Но врядли уважающая себя фирма допустит такую «глупую» ошибку (аналогично pdb).
  • Если файл написан на с# его можно почти полностью просмотреть в кодах с помощью disSharp (такие программы «подключают» в таблице импорта лишь mscorlib и всё). DisSharp плохо дизассемблирует некоторые части программы, но возможно его платная версия или платная версия подобных утилит раскрывает код лучше.
  • Если файл написан на FoхPro, clipper и других подобный байт-кодовых языках — он раскрывается спец-утилитами (Refox например).
  • Утилита exescope.exe ResourceHacker.exe и её-подобные утилиты позволяют смотреть шапку, подключенные библиотеки (по ним можно понять на чём писана программа) и редактировать ресурсы программы (ресурс-формы в.т.ч. delphi, иконки, картинки, таблицы ресурсо-строк).
  • Если извесно чем создан код — думаю есть специальные утилиты способные его раскрыть (они платные и малодоступные).

Опять-же, это при условии что нету паковщика кода (тогда нужно сначала применить депаковщик), шифровальщика/самомодифицирующегося кода. Если не разбит обфускатором так что не распутать. Чем больше код — тем сложнее разобраться.

P.S. Лично моё мнение — раскрывается-взламывается всё, но на это нужно потратить много-много времени. Возможно год и более (зависит от опыта и инструментов, в свободном доступе хороших инструментов нету).

Можно ли из .exe файла получить исходный код?

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

Ответ написан 16 окт. 2023

Комментировать

Нравится 2 Комментировать

Viji

Associate DevOps Engineer

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

Ответ написан 17 окт. 2023

Как посмотреть исходный код .exe файла?

Исходный код.. . Боюсь что никак. Впрочем, есть декомпиляторы разных языков программирования, но единственный рабочий, который я видел, декомпилировал VB6. Вот ресурсы вытянуть и поменять — не проблема. Сам в свое время искал декомпилятор, откопал кучу долбанутых IDE и декомпиляторов в ассемблер, но ничего больше =(((

Источник: собственные мучения

Как правило полностью восстановить исходный код на языке высокого уровня невозможно. Значит ли это, что другие тоже не смогут восстановить исходный код Вашей программы? Хм . и да и нет .

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

После компиляции и линковки проекта и получения исполняемого файла все имена, используемые в программе конвертируются в адреса. Потеря имён означет, что декомпилятор создаст уникальное имя для каждой константы, переменной, функции и процедуры. Даже если мы и достигнем какого-то успеха в декомпиляции исполняемого файла, то получим уже другой синтаксис программы. Данная проблема связана с тем, что при компиляции практически идентичные куски кода могут быть скомпилированы в разные последовательности машинных команд (ASM), которые присутствуют в .exe файле. Естевственно декомпилятор не обладает такой степенью интеллектуальности, чтобы решить — какова же была последовательность инструкций языка высокого уровня в исходном проекте.

Как извлечь код программы из ехе файла?

Author24 — интернет-сервис помощи студентам

Как вызвать запуск .ехе файла другой программы?
Запуск левой программы с под WForm

Можно ли как-нибудь из ехе-файла получить дизассемблированый код
Можно ли как нибудь из ехе файла получить дизассемблированый код на FASM\MASM?

Как узнать исходный код файла-ЕХЕ для Visual Basic 6.0?
Здравствуйте! Прошу помощи. Как узнать P-Code? Научите, пожалуйста, пользоваться компиляторами и.

Как средствами Delphi реализовать извлечение ехе файла при запуске ехе?
Здорова, народ. Как средствами Delphi реализовать извлечение ехе файла при запуске ехе? Заранее.

895 / 328 / 12
Регистрация: 29.01.2011
Сообщений: 1,679

Точно не знаю,но кажется в домашних условиях нет.Может быть какой нибудь профессиональной платной софтиной. хотя вряд ли.

Эксперт JavaЭксперт С++

8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709

na3ar1y, полностью получить исходный код — никак. Для этого используются дизассемблеры, но от них толку мало

Регистрация: 29.03.2010
Сообщений: 233

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

Регистрация: 14.11.2010
Сообщений: 163
erthalion , а что за тулзы?? объясни пожалуйста )
Заблокирован

ЦитатаСообщение от na3ar1y Посмотреть сообщение

кто знает как извлечь код програми с ехе файла?? это возможно зделать?

иди изучай архитектуру ЭВМ долго и тщательно, паралельно практикуясь с асм. Только после того как твои мозги очистятся от текущего рака, тогда ты сможешь приступить к реверсингу и просветвлишься насчет того что такое «получить код из бинарника»

2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200

ЦитатаСообщение от unStatiK Посмотреть сообщение

иди изучай архитектуру ЭВМ долго и тщательно, паралельно практикуясь с асм. Только после того как твои мозги очистятся от текущего рака, тогда ты сможешь приступить к реверсингу и просветвлишься насчет того что такое «получить код из бинарника»

смешно, хоть и флуд.

na3ar1y, exe-файл — и есть код программы.
а то, что вы хотите получить называется листингом программы на каком-либо языке.
судя по разделу, вы хотите листинг программы на C++, или даже на Visual C++.
программы? способные выполнить ваше желание, называются декомпиляторами.
декомпиляторы для С++ — большая-большая редкость.
просто в силу того, что это язык достаточно низкого уровня, и в результате компиляции программы в exe-файл из очень-очень разных исходных листингов получаются практически идентичные исполнимые exe-файлы.

можете поискать, но скорее всего, ничего, удовлетворяющего вашим требованиям вы не найдете.

Заблокирован

ЦитатаСообщение от Patch Посмотреть сообщение

na3ar1y, exe-файл — и есть код программы.
а то, что вы хотите получить называется листингом программы на каком-либо языке.
судя по разделу, вы хотите листинг программы на C++, или даже на Visual C++.
программы? способные выполнить ваше желание, называются декомпиляторами.
декомпиляторы для С++ — большая-большая редкость.
просто в силу того, что это язык достаточно низкого уровня, и в результате компиляции программы в exe-файл из очень-очень разных исходных листингов получаются практически идентичные исполнимые exe-файлы.

можете поискать, но скорее всего, ничего, удовлетворяющего вашим требованиям вы не найдете.

ссылку на спеки ЯЗЫКА visual C++ можно предоставить, а то я что то видимо проспал.
«exe-файл — и есть код программы» . «в результате компиляции программы в exe-файл из очень-очень разных исходных листингов получаются практически идентичные исполнимые exe-файлы.» — а теперь выдыхните, соберитесь и расшифруйте сей высер гуманитария техническими терминами

Регистрация: 29.03.2010
Сообщений: 233
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200

ЦитатаСообщение от unStatiK Посмотреть сообщение

Идиотом только и остается как смеятся, на большее они не способны.
ссылку на спеки ЯЗЫКА visual C++ можно предоставить, а то я что то видимо проспал.
«exe-файл — и есть код программы» . «в результате компиляции программы в exe-файл из очень-очень разных исходных листингов получаются практически идентичные исполнимые exe-файлы.» — а теперь выдыхните, соберитесь и расшифруйте сей высер гуманитария техническими терминами

кончай выдрючиваться.
троллинг никому не интересен.
а если правда не понял — поясняю:
1)автор хочет исходник для Студии; от бишь с шаблонами диалогов, дотнетом, и прочими финтифлюшками.
это специфические реализации С++, требующие специфического декомпилятора.
обычным декомпилятором С++ ты шаблоны ресурсов для Студии не получишь.
2)есть несколько вариантов реализации одного и того-же алгоритма.
например, простейший цикл.
можно написать
for(i=. ;;)<>
а можно руками:
lebel: i = . ;делаем чего-то;goto label
а в итоге компилятор сделает ИДЕНТИЧНЫЕ exe.
т.е., как правило, восстановить исходный листинг программы на С++ невозможно в принципе. но можно получить что-то похожее.
а в языках высокого уровня листинг как правило транслируется в код (и обратно) однозначно, без таких вариантов.

и хватит хамить.
я хоть в этом разделе уже и не модератор, но репу загадить могу по самый бан.

Заблокирован

ЦитатаСообщение от Patch Посмотреть сообщение

кончай выдрючиваться.
троллинг никому не интересен.
а если правда не понял — поясняю:
1)автор хочет исходник для Студии; от бишь с шаблонами диалогов, дотнетом, и прочими финтифлюшками.
это специфические реализации С++, требующие специфического декомпилятора.
обычным декомпилятором С++ ты шаблоны ресурсов для Студии не получишь.
2)есть несколько вариантов реализации одного и того-же алгоритма.
например, простейший цикл.
можно написать
for(i=. ;<>
а можно руками:
lebel: i = . ;делаем чего-то;goto label
а в итоге компилятор сделает ИДЕНТИЧНЫЕ exe.
т.е., как правило, восстановить исходный листинг программы на С++ невозможно в принципе. но можно получить что-то похожее.
а в языках высокого уровня листинг как правило транслируется в код (и обратно) однозначно, без таких вариантов.

и хватит хамить.
я хоть в этом разделе уже и не модератор, но репу загадить могу по самый бан.

ну вот сейчас вменяемое объяснение. это так сложно сразу нормально писать.
То что можно только повторить примерный листинг пользуясь диззасемблером/декомпилятором это и говорилось автору сразу, но он сам этого мало понимает в силу своих очень скудных познаний (да и интелектуальный потенциал этого индивида тоже вызывает сомнения)
>>1)автор хочет исходник для Студии; от бишь с шаблонами диалогов, ДОТНЕТОМ, и прочими финтифлюшками. это специфические реализации С++

с++ это не дотнет, дотнетовские проги просматриваются CLR просмоторщиками (который входит в состав студии)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *