Каталог расширений

Популярные теги

3gp       avi       fb2       jpg       mp3       pdf      

Exe файл как раскомпилировать


Как декомпилировать EXE-файлы

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

Способы декомпиляции EXE-файлов

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

Способ 1: VB Decompiler

Первым рассмотрим VB Decompiler, который позволяет декомпилировть программы, написанные на Visual Basic 5.0 и 6.0.

Загрузить программу VB Decompiler

  1. Нажмите «Файл» и выберите пункт «Открыть программу» (Ctrl+O).
  2. Найдите и откройте программу.
  3. Декомпиляция должна сразу запуститься. Если этого не произошло, нажмите кнопку «Старт».
  4. По завершении внизу окна появится слово «Декомпилировано». В левой части расположено дерево объектов, а в центральной можно просматривать код.
  5. При необходимости, сохраните декомпилированные элементы. Для этого нажмите «Файл» и выберите подходящий вариант, например, «Сохранить декомпилированный проект», чтобы извлечь все объекты в папку на диске.

Способ 2: ReFox

В плане декомпиляции программ, скомпилированных через Visual FoxPro и FoxBASE+, неплохо себя зарекомендовал ReFox.

Загрузить программу ReFox

  1. Через встроенный обозреватель файлов найдите нужный EXE-файл. Если его выделить, то справа будет отображаться краткая информация о нём.
  2. Откройте контекстное меню и выберите пункт «Decompile».
  3. Откроется окно, где нужно указать папку для сохранения декомпилированных файлов. После нажмите «ОК».
  4. По окончании появится такое сообщение:

Можно просмотреть результат в указанной папке.

Способ 3: DeDe

А DeDe будет полезна для декомпиляции программ на Delphi.

Загрузить программу DeDe

  1. Нажмите кнопку «Добавление файла».
  2. Найдите файл EXE и откройте его.
  3. Для запуска декомпиляции нажмите кнопку «Процесс».
  4. При успешном завершении процедуры появится такое сообщение:
  5. В отдельные вкладки будет выведена информация о классах, объектах, формах и процедурах.

  6. Для сохранения всех этих данных откройте вкладку «Project», проставьте галочки рядом с типами объектов, которые нужно сохранить, выберите папку и нажмите «Сделать файлы».

Способ 4: EMS Source Rescuer

Декомпилятор EMS Source Rescuer позволяет работать с EXE-файлами, скомпилированными при помощи Delphi и C++ Builder.

Загрузить программу EMS Source Rescuer

  1. В блоке «Executable File» нужно указать нужную программу.
  2. В «Project name» пропишите имя проекта и нажмите «Next».
  3. Выберите необходимые объекты, укажите язык программирования и нажмите «Next».
  4. В следующем окне исходный код доступен в режиме предпросмотра. Осталось выбрать выходную папку и нажать кнопку «Save».

Мы рассмотрели популярные декомпиляторы для файлов EXE, написанных на разных языках программирования. Если Вам известны другие рабочие варианты, напишите об этом в комментариях.

Мы рады, что смогли помочь Вам в решении проблемы.
Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.
Помогла ли вам эта статья?
ДА НЕТ

Процесс декомпиляции файлов с расширением EXE

27

Эта процедура подразумевает под собой воспроизведение кода утилиты языком, которым она изначально была создана. То есть это обратная процедура компиляции (преобразование кода в компьютерные команды). Выполнить эти действия можно воспользовавшись специальными программами.

Способы преобразования файлов EXE

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

Способ 1: Использование утилиты VB Decompiler

Данный софт используется для преобразования утилит, которые были созданы на Visual Basic 5.0 или 6.0.

  1. Активируем программу и в главном окне выбираем вкладку «Файл».
  2. В появившемся меню нажимаем на «Открыть программу». Выполнить ту же процедуру можно используя быстрые клавиши Ctrl+O.
  3. В «Проводнике» находим нужный файл.
  4. Процесс преобразования должен запуститься самостоятельно. Если по какой-либо причине это не произошло, выберите «Старт».
  5. По завершению процедуры высветится надпись «Декомпилировано».
  6. Основное поле программы будет поделено на два окна. В левом можно увидеть хронологию, а в правом отобразится исходный код.
  7. Есть возможность сохранить на компьютер преобразованные файлы. В верхнем меню выберите «Файл» и перейдите по вкладке «Сохранить декомпилированный проект».

Способ 2: Воспользоваться программой ReFox

Данная программа предназначена для преобразования утилит написанных на FoxPro или FoxBASE+.

  1. Откройте программу и воспользуйтесь интегрированным Проводником для поиска необходимого файла. При нажатии на него сразу можно увидеть некоторую информацию.
  2. Нажмите правой кнопкой мыши на файл и в появившемся меню кликните на «Decompile».
  3. В следующем окне определите место для хранения новых файлов.
  4. После нажатия на «ОК», процедура будет автоматически запущенна и по окончанию выдаст оповещение.

Способ 3: С помощью DeDe

Эта утилита используется при необходимости выполнить процедуру с программами, написанными на Delphi.

  1. Запустите софт, и найдите значок «Добавление файла».
  2. Выберете файл с необходимым расширением.
  3. Для запуска работы утилиты кликните на «Процесс».
  4. После завершения процедуры появится окно со следующим текстом: «Дампирование Выполнено».
  5. Теперь можно просмотреть всю полученную информацию.
  6. Для сохранения полученных данных перейдите на раздел «Project» и поставьте напротив необходимых объектов галочки.

Способ 4: Программа EMS Source Rescuer

Данная утилита может работать с файлами, написанными на двух языках Delphi и C++ Builder.

  1. Активируйте программу и в первой строке выставьте путь к нужному файлу.
  2. Пропишите имя нового объекта в графе «Project name».
  3. Определите нужные файлы и выберите, какой кодировкой они были созданы.
  4. Открывшееся окно показывает еще не сохраненный код. Для дублирования его на компьютер укажите необходимый каталог и нажмите на «Save».

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

декомпилируй с удовольствием / Блог компании Digital Security / Хабр


В этой статье я собираюсь рассказать о плагине для IDA Pro, который написал прошлым летом, еще находясь на стажировке в нашей компании. В итоге, плагин был представлен на ZeroNights 2016 (Слайды), и с тех пор в нём было исправлено несколько багов и добавлены новые фичи. Хотя на GitHub я постарался описать его как можно подробнее, обычно коллеги и знакомые начинают пользоваться им только после проведения небольшого воркшопа. Кроме того, опущены некоторые детали внутренней работы, которые позволили бы лучше понять и использовать возможности плагина. Поэтому хотелось бы попытаться на примере объяснить, как с ним работать, а также рассказать о некоторых проблемах и тонкостях.

HexRaysPyTools, как можно догадаться из названия, предназначен для улучшения работы декомпилятора Hex-Rays Decompiler. Декомпилятор, создавая псевдо-С код, существенно облегчает работу ревёрсера. Основым его достоинством, выделяющим инструмент на фоне других, является возможность трансформировать код, приводя его к удобному и понятному виду, в отличие от ассемблерного кода, который, даже при самом лучшем сопровождении, требует некоторой доли внимания и сосредоточенности для понимания его работы. У Hex-Rays Decompiler, как и самой IDA Pro, есть API, позволяющий писать расширения и выходить за рамки стандартного функционала. И хотя API очень широк, и в теории позволяет удовлетворить самые изысканные потребности разработчика дополнений, у него есть несколько существенных недостатков, а именно:


  • Слабая документированность. Для того, чтобы найти подходящие функции или классы, самый эффективный способ — произвести поиск регулярными выражениями по файлам, угадывая ключевые слова
  • Произвольные названия функций и структур — часто их название не говорит ни о чём
  • Deprecated методы, для которых не предложено замены
  • Общая запутанность работы. Например, для изменения типа аргумента у функции, нужно написать 8 строк кода и задействовать 3 класса. И это не самый странный пример
  • API для языка Python не совсем совпадает с тем, что для C++. idaapi содержит новые методы, наткнуться на которые получилось чисто случайно
  • Есть неочевидные вещи: например, IDA Pro будет падать, если не отключать Garbage Collector для объектов, добавленных с помощью idaapi в абстрактное синтаксическое дерево (оно всегда строится, когда происходит декомпиляция, и в нём можно изменять объекты или вставлять свои).

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

Перейдем к описанию плагина. В HexRaysPyTools можно выделить две отдельные категории — это помощь по трансформации дефолтного вывода Hex-Rays Decompiler к удобному виду и реконструкция структур и классов.


Изначально, после запуска декомпилятора клавишей F5, IDA Pro выдаёт не очень понятый код, состоящий преимущественно из стандартных типов и имён переменных. И несмотря на то, что местами пытается угадать типы, создать массивы или назвать эти переменные (которым повезло оказаться аргументами у стандартных функций), получается это не очень хорошо. В целом, задача ревёрсера — привести в адекватный вид декомпилированный код. К сожалению, есть вещи, которые невозможно сделать, не прибегая к IDA SDK. Например, отрицательные обращения к полям структур, которые всегда выглядят безобразно (порой превращаясь в массивы с отрицательными индексами), а также длинные условные вложения, тянущиеся из левого верхнего угла в правый нижний. Кроме этого, очень не хватает горячих клавиш и опций для более быстрой трансформации кода. По мере получения информации в процессе анализа программы приходится изменять сигнатуры функций, переименовывать переменные и изменять типы. Всё это требует большого количества манипуляций мышкой и копирований-вставок. Перейдем к описанию того, что предлагает плагин для решения этих проблем.


Отрицательные смещения

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

В результате, когда мы смотрим на то, что получается в IDA Pro, видим следующую картину:

Такой вывод будет всякий раз, когда в исходных кодах программ используются макросы CONTIAINING_RECORD (windows) и container_of (linux). Эти макросы возвращают указатель на начало структуры по её типу, адресу и названию поля. И именно их плагин позволяет вставлять в дизассемблер. Вот как выглядит пример после его применения:

Еще с отрицательными смещениями можно встретиться при множественном наследовании, но это довольно изысканный пример, он редко встречается на практике.

Для того, чтобы вставить макрос в дизассемблер, нужно, чтобы подходящая в данном контексте структура существовала в Local Types или в одной из библиотек в Types Library (их может быть несколько). Мы кликаем по вложенной структуре правой кнопкой и выбираем Select Containing Structure. Далее определяем, где искать структуру, — либо в Local Types, либо в Types Library, и плагин составляет список подходящих структур. Для этого он анализирует, как указанная переменная используется в коде и определяет минимальную и максимальную границы, в которых может находиться поле типа этой переменной. Затем, используя эти сведения, проходит по всем структурам, содержащим поле, у которых все в порядке с границей. При поиске плагин смотрит вложенные структуры и объединения на любую глубину.

В примере выше у exe-файла есть символы, поэтому список подходящих структур получился довольно большой:

Помимо этого, существует ситуация, когда плагин автоматически может вставить макрос. Дело в том, что если есть явное присвоение указателя, IDA Pro догадывается (иногда неправильно) его вставить, но не распространяет его дальше в коде.

Без плагина:

С плагином:


Сильная вложенность

Пожалуй, лучше всего показать искусственный пример. Без плагина:

С плагином:

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


Переименования

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

Часто IDA Pro создаёт дублированные переменные. Можно было бы, используя стандартную опцию "map to another variable", избавиться от них. Но это не всегда удобно при отладке, может быть ошибочно и к тому же невозможно откатить, не пересоздавая функцию заново.

Перебросить можно имя с одной переменной на другую, при этом добавляется символ "_":

До:

После:

Можно переименовать аргумент у функции, заставив её взять имя переменной (при этом лишние символы подчёркивания уберутся). Либо, наоборот, переменной присвоить имя аргумента функции.


Recasts

Существует множество ситуаций, когда есть взаимодействие между двумя некоторыми сущностями с разными типами, и нам нужно перенести тип одной сущности на другую. Под сущностями понимаются локальные, глобальные переменные, аргументы, функции, поля структур (с обращением по ссылке и без) и возвращаемые значения функции. Плагин позволяет это быстро произвести. Сложно показать картинкой, рекомендую в случае, если нужно перенести тип одной сущности на другую, кликнуть правой кнопкой мыши по ней и посмотреть на опции. Наверняка там появится "Recast ..." (а если не появится, то можно написать мне, и я попробую её добавить).


Прочее

Помимо этого, добавляются следующие опции:


  1. Поиск структуры по размеру и замена числа на sizeof(Structure)). Удобно для поиска структуры подходящего размера по числу байт, указанных оператору new или функции malloc.
  2. Быстрое изменение сигнатуры функции. Кликнув правой кнопкой по её объявлению, можно добавить/удалить возвращаемое значение, удалить аргумент, сбросить соглашение о вызове к __stdcall.
  3. Переход по двойному клику у виртуальных методов.

Одной из самых сложных и энергозатратных задач ревёрс-инжиниринга является понимание работы и реконструкция структур и классов. HexRaysPyTools выступает помощником в этом процессе. В чём, собственно, проблема? Средствами по умолчанию можно только залить уже готовое объявление структуры, поэтому приходится "ползать" по коду, пытаясь насобирать сведения о полях, вручную высчитывать смещения и записывать куда-то всю информацию (например, в блокнот). Но, если у нас размеры классов исчисляются сотнями байт и, в придачу, имеют множество методов и несколько виртуальных таблиц, всё становится гораздо сложнее.

Рассмотрим на примере, как помогает в данном случае плагин. Когда-то (исключительно ради самообразования :D) мной был создан бот для онлайн-игрушки. В процессе наткнулся на защиту, шифрующую пакеты, не позволявшую модифицировать код в памяти и мешающую хукать вызов шифрующей функции (которая была жестко обфусцирована). Для того, чтобы обойти её, нужно было распарсить класс, отвечающий за обмен данными между клиентом и сервером и научиться, используя его, вызывать отправку пакетов и считывать полученные, расшифрованные пакеты за несколько вызовов от функций защиты. Тогда это было непростой задачей, но с плагином всё делается довольно просто.

Вот так выглядит метод, принимающий пакеты. this и v1 являются указателями на объект класса, gepard_1 — это функция, заменяющая recv

Если заглянуть внутрь функций sub_41AF50 и sub_41AFF0, можно увидеть довольно много кода, обращающегося к разным полям. И даже это — лишь часть функционала, ответственного за создание и отправку пакетов, поэтому разобраться в назначении полей может быть непросто. Плагин помогает автоматически проанализировать большое количество кода, и из собранной информации составить некий каркас структуры, которая в дальнейшем анализе может быть изменена исследователем и использована для автоматического создания нового типа. Для начала надо открыть Structure Builder через Edit->Plugins->HexRaysPyTools. Это окошко будет содержать собранную информацию, предоставлять возможность для редактирования имен полей и разрешения конфликтов, а также просмотра виртуальных таблиц и сканирования виртуальных функций.

Есть 3 возможных способа собирать информацию о полях:

1) Можно кликнуть правой кнопкой по переменной и, нажав Scan Variable, запустить сканирование в пределах одной функции. При сканировании будет рассматриваться то, как происходит обращение к переменной и, если оно под падает под паттерн обращения к полю, такая информацию будет запомнена. Если другой переменной присваивается значение первой (причем их типы не обязательно должны совпадать), она так же подключается к сканированию (и отключается, если ей будет присвоено новое значение). Вот какой результат будет, если применить этот метод к переменной this в функции выше:

Хотя мы запускали сканирование для переменной this, информация о v1 также была собрана.
Жёлтым отмечены разного рода обращения к полям, и нужно выбрать, какой вариант подходит больше всего, отключив все остальные. До тех пор, пока есть конфликты, создать финальную структуру будет нельзя. Красный — это смещение, начиная с которого производится сканирование. Его можно сдвинуть с помощью кнопки Origin для того, чтобы просканировать потенциальную подструктуру. Например, можно зайти в функцию sub_41AF50 и, сдвинув указатель, собрать немного новой информации:

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

2) Кликнув правой кнопкой по переменной, можно выбрать опции "Deep Scan Variable". Основной процесс сканирования будет таким же, как и у первого способа, только теперь, если указатель на структуру будет передаваться как аргумент функции, будет запущено рекурсивное сканирование данного аргумента. Warning! Здесь есть одна проблема — декомпилятор не всегда распознает правильно аргументы функции, которую он еще не декомпилировал, поэтому приходится рекурсивно заходить и декомпилировать каждую функцию, которая потенциально может содержать указатель на нашу структуру как аргумент. Этот процесс запускается автоматически, и происходит только один раз за сессию для каждой функции. Поэтому первые процессы глубокого сканирования могут занять некоторое время (порядка пары минут).

Переместившись несколько раз вверх по цепочке вызов, можно найти место, где создается структура:

Запустив здесь сканирование, получаем следующее:

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

Если зайти в функции sub_419890, которая впервые возвращает указатель на структуру, то можно увидеть, что используется паттерн-одиночка:

Количество вызовов этой функции очень велико:

Сканировать каждую переменную было бы утомительно, поэтому есть возможность запустить сканер для всех сразу, кликнув по заголовку функции и выбрав опцию "Deep Scan Returned Variables".

Вот результат применения на примере:

Можно заметить, что нашлась информация об обращении к полям 0x8 — 0x14. Так же нашлись виртуальные таблицы — они отображены жирным шрифтом и, дважды кликнув по ним, можно увидеть список виртуальных функций (а заодно и просканировать их как по одной, так и все сразу).

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

Вот, что получилось после непродолжительного анализа:

Подготовка создания структуры завершена. Теперь можно кликнуть "Finalize" и, внеся последние изменения, закончить её создание:

Далее, везде, куда "дотянулся" сканнер, переменным, которые являлись указателем на эту структуру, будет применён её новосозданный тип. Вот как преобразится функция отправки пакетов:

Помимо представленного, в Structure Builder можно создать или попытаться угадать подструктуры, выделив необходимое количество полей и нажав Pack или Recognize Shape соответственно. При поиске подходящей структуры учитываются типы полей — они должны точно совпадать, за исключением базовых типов (charBYTE, intDWORDint *), считающихся одинаковыми.

Для уже созданных классов (структур с виртуальными таблицами), в плагине есть возможность более удобной работы с ними. По пути View-> Open Subviews-> Classes можно открыть следующее окошко:

Здесь можно:


  1. Переименовать методы, в результате чего изменения будут произведены сразу в коде и виртуальных таблицах (сделано, чтобы избежать рассинхронизации)
  2. Изменить объявление методов
  3. Быстро конвертировать первый аргумент в this
  4. Переместиться к функции в окне дизассемблера
  5. Фильтровать информацию регулярными выражениями

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

Надеемся, что эта статья поможет разобраться, как пользоваться плагином. Найти его и сообщить о багах можно по адресу — https://github.com/igogo-x86/HexRaysPyTools. Также ждем feature requests.

Компиляция и интерпретация. Создание .EXE файла

Здравствуйте, дорогие читатели! Сегодня мы с вами немного окунемся в теорию. Наверняка, вы все когда-то хотели отправить свою супер-пупер программу другу. Но как это сделать? Не заставлять же его устанавливать PascalABC.NET! О том, как это сделать, мы сегодня и поговорим.

Все языки программирования делятся на два типа — интерпретируемые и компилируемые.

Интерпретаторы

Программируя на интерпретируемом языке, мы пишем программу не для выполнения в процессоре, а для выполнения программой-интерпретатором. Ее также называют виртуальной машиной.

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

При интерпретации выполнение кода происходит последовательно строка за строкой (от инструкции до инструкции). Операционная система взаимодействует с интерпретатором, а не исходным кодом.

Примеры интерпретируемых языков: PHP, JavaScript, C#, Python.

Скомпилированные программы работают быстрее, но при этом очень много времени тратится на компиляция исходного кода.

Программы же, рассчитанные на интерпретаторы, могут выполняться в любой системе, где таковой интерпретатор присутствует. Типичный пример — код JavaScript. Интерпретатором его выступает любой современный браузер. Вы можете однократно написать код на JavaScript, включив его в html-файл, и он будет одинаково выполняться в любой среде, где есть браузер. Не важно, будет ли это Safari в Mac OS, или же Internet Explorer в Windows.

Компиляторы

Компилятор — это программа, превращающая исходный текст, написанный на языке программирования, в машинные инструкции.

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

При компиляции весь исходный программный код (тот, который пишет программист) сразу переводится в машинный. Создается так называемый отдельный исполняемый файл, который никак не связан с исходным кодом. Выполнение исполняемого файла обеспечивается операционной системой. То есть образуется, например,.EXE файл.

Примеры компилируемых языков: C, C++, Pascal, Delphi.

Препроцессинг

Эту операцию осуществляет текстовый препроцессор.

Исходный текст частично обрабатывается — производятся:

  • Замена комментариев пустыми строками
  • Подключение модулей и т. д. и т. п.

Компиляция

Результатом компиляции является объектный код.

Объектный код — это программа на языке машинных кодов с частичным сохранением символьной информации, необходимой в процессе сборки.

Компоновка

Компоновка также может носить следующие названия:  связываниесборка или линковка.

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

EXE файл.

После компоновки у вас образуется.EXE файл вашей программы. Вы можете кинуть ее другу, и она откроется у него прямо в командной строке, как в старом добром DOS. Давайте попробуем создать.EXE файл. Все действия будут приводится в PascalABC.NET.

Заходим в Сервис -> Настройки -> Опции компиляции. Поверяем, стоит ли галочка напротив 2 пункта. Если стоит, то убираем ее.

Теперь откройте свою программу и запустите ее.

Откройте директорию, в которой у вас лежит исходный код программы.

Вот он,.EXE файл.

Кликаем по приложению. Как вы видите, после ввода данных, окошко сразу закрывается. Для того чтобы окно не закрывалось сразу, следует дописать две строчки кода, а именно: uses crt (перед разделом описания переменных) и readkey (в конце кода, перед оператором end).

Подключаем внешнюю библиотеку crt и используем встроенную в нее функцию readkey.

Теперь окно закроется по нажатию любой клавиши.

На заметку: [button colour=»black» type=»dropshadow» size=»small» link=»» target=»_self»]PascalABC.NET[/button] — это интегрированная среда разработки.

Среда разработки включает в себя:

  • текстовый редактор;
  • компилятор;
  • средства автоматизации сборки;
  • отладчик.

На сегодня все! Задавайте любые вопросы в комментариях к этой статье. Не забывайте кликать по кнопочкам и делится ссылками на наш сайт со своими друзьями. А для того, чтобы не пропустить выход очередной статьи, рекомендую вам подписаться на рассылку новостей от нашего сайта. Одна из них находится в самом верху справа, другая — в футере сайта.

Как декомпилировать программу? — Хабр Q&A

Вы используете только дизассемблер, а необходим еще декомпилятор C++ (например Hex-Rays - скачайте и установить его в IDA), а также отладчик как средство отслеживания и контроля программы в работе, для UNIX очевидным выбором является отладчик gdb, да и для других ОС он тоже применяется хотя порой с меньшим успехом.
К тому же у вас совсем нет опыта иначе бы вы хотя бы догадались что сперва нужно открыть функцию main в списке слева, поскольку выполнение executable начинается с этой функции.
Сама программа, на всякий случай тут.

На тот случай, если я недостаточно устал от работы, чтобы еще и вами заниматься, а то нечего мне тут бездельничать на Новый год, да? :)
Только начал пробовать участвовать в ctf

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

Используем PyInstaller для создания exe-файла игры на Pygame / Песочница / Хабр

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

На недостаток обучалок по созданию игр на Pygame не пожалуешься, но мне не удалось найти подробной инструкции как собрать единый exe-файл, для запуска которого не требуется держать рядом папку с изображениями и игровыми звуками.

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

Установка PyInstaller

В командной строке пишем:

pip install pyinstaller

Создание spec-файла (файла спецификации)

Pyinstaller создает приложение, выполняя содержимое файла спецификации.

Чтобы создать spec-файл, через командную строку в папке с проектом набираем:

pyi-makespec --onefile mygame.py

Флаг --onefile создает файл спецификации, который позволит упаковать всё необходимое в один exe-файл.

Получаем файл mygame.spec

Редактирование spec-файла

Теперь нужно правильно настроить spec-файл. Открываем spec-файл в текстовом редакторе.

block_cipher = None a = Analysis(['mygame.py'], pathex=['C:/Users/1/Desktop/Python/test'], binaries=[], datas=[('Images/image.png', 'Images'), ('Music/track.mp3', 'Music'), ('font.ttf', '.')], hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='mygame', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=False, icon='C:/Users/1/Desktop/Python/test/icon.ico') 

В качестве первого атрибута для объекта класса Analysis передается имя py-файла, который нужно скомпилировать.

Атрибут pathex отвечает за путь к папке проекта.

В списке datas указываются файлы, которые нужно загрузить для работы приложения (изображения, музыка/звуки, шрифты). Datas — это список кортежей. Каждый кортеж имеет два элемента строкового типа:

  • Первый — путь до файла, который нужно загрузить.
  • Второй указывает имя папки для хранения файла во время выполнения программы
    ('.' — означает, что файл будет помещен во временную папку без подкаталога).

В экземпляре класса EXE редактируем:
name — имя exe-файла.
console — отвечает за то, будет ли вызываться консоль при запуске приложения (True) или нет (False).
icon — содержит путь к иконке игры.

Редактирование путей к файлам в коде

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

def resource_path(relative): if hasattr(sys, "_MEIPASS"): return os.path.join(sys._MEIPASS, relative) return os.path.join(relative) 

При запуске приложения PyInstaller распаковывает данные во временную папку и сохраняет путь к ней в переменной среды _MEIPASS.

Функция resource_path проверяет создана ли временная папка, и если да, то возвращает путь к ней для дальнейшей загрузки файлов. В противном случае (например, если запустить код через интерпретатор) функция вернет тот путь, который в неё передали (то есть путь к папке проекта с игрой).

Чтобы получить путь к файлу

  • если файл лежит в той же папке, что и py-файл, пишем:
path = resource_path('image.png')

  • если файл вынесен в отдельную папку проекта, пишем:
path = resource_path(os.path.join('Folder', 'image.png'))

При этом, если файл вынесен в отдельную папку проекта, то и во временной папке нужно создавать соответствующий подкаталог (см. редактирование параметра datas).

Далее загружаем файл:

img = pygame.image.load(path)

С музыкой и шрифтами аналогично.

Создание exe

В командной строке вводим:

pyinstaller mygame.spec

Готово! Exe-файл находится в папке dist. Замечание про функции quit() и exit() Если в коде вашей игры в качестве функций выхода используются quit() или exit(), то скомпилированное приложение работать не будет.

Эти функции включены, чтобы новичкам было проще ориентироваться в коде, и предназначены только для использования в интерпретаторе. На самом деле для их корректной работы требуется загрузить модуль site.

Стандартным способом выйти из программы является использование sys.exit().

Более подробно здесь.

EXE Расширение файла - Что такое EXE-файл и как его открыть?

EXE-файл содержит исполняемую программу для Windows. EXE - это сокращение от «исполняемый файл», и это стандартное расширение файла, используемое программами Windows. Для многих пользователей Windows EXE-файлы являются синонимами программ Windows, что делает ".exe" одним из самых узнаваемых расширений файлов.

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

На платформах, отличных от Windows, таких как macOS и Linux, EXE-файлы не используются для исполняемых файлов. Например, macOS использует файлы .APP для запуска приложений. Однако, если вы хотите запустить EXE-файл на платформе, отличной от Windows, вы можете использовать виртуальную машину, такую ​​как Parallels Desktop или VM VirtualBox, которая позволяет запускать Windows в среде, отличной от Windows.

В Windows, чтобы запустить программу, содержащуюся в EXE-файле, найдите файл и дважды щелкните его. Однако, как мы предупреждаем ниже, не щелкайте файл дважды, если вы не можете проверить его легитимность.

В macOS вы можете использовать виртуальную машину Windows, созданную Parallels Desktop или VMware Fusion, для запуска программы, содержащейся в EXE-файле.

В Linux вы можете использовать виртуальную машину Windows, созданную Oracle VM VirtualBox, для запуска программы, содержащейся в EXE-файле, или вы можете использовать Wine, приложение, специально разработанное для того, чтобы пользователи могли запускать приложения Windows без установки Windows.

Файлы

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

.

python - Как сделать exe файл из файла pyc

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
.

Как выполнить файл .exe на сервере Windows через PHP?

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании

Загрузка…

  1. Авторизоваться зарегистрироваться
.

Сборка из командной строки с помощью csc.exe | Документы Microsoft

  • 3 минуты на чтение

В этой статье

Вы можете вызвать компилятор C #, введя имя его исполняемого файла ( csc.exe ) в командной строке.

Если вы используете окно командной строки разработчика для Visual Studio , все необходимые переменные среды будут установлены для вас.Для получения информации о том, как получить доступ к этому инструменту, см. Тему Командная строка разработчика для Visual Studio.

Если вы используете стандартное окно командной строки, вы должны скорректировать свой путь, прежде чем сможете вызывать csc.exe из любого подкаталога на вашем компьютере. Вы также должны запустить VsDevCmd.bat , чтобы установить соответствующие переменные среды для поддержки сборок из командной строки. Дополнительные сведения о VsDevCmd.bat , включая инструкции по его поиску и запуску, см. В разделе Как задать переменные среды для командной строки Visual Studio.

Если вы работаете на компьютере, на котором установлен только Windows Software Development Kit (SDK), вы можете использовать компилятор C # в командной строке SDK , которую вы открываете из пункта меню Microsoft .NET Framework SDK .

Вы также можете использовать MSBuild для программного построения программ C #. Дополнительные сведения см. В разделе MSBuild.

Исполняемый файл csc.exe обычно находится в папке Microsoft.NET \ Framework \ <версия> в каталоге Windows .Его расположение может отличаться в зависимости от точной конфигурации конкретного компьютера. Если на вашем компьютере установлено несколько версий .NET Framework, вы найдете несколько версий этого файла. Дополнительные сведения о таких установках см. В разделе Как определить, какие версии .NET Framework установлены.

Подсказка

При сборке проекта с помощью IDE Visual Studio можно отобразить команду csc и связанные с ней параметры компилятора в окне Вывод .Чтобы отобразить эту информацию, следуйте инструкциям в разделе Как просмотреть, сохранить и настроить файлы журнала сборки, чтобы изменить уровень детализации данных журнала на Обычный или Подробный . После перестройки проекта найдите в окне Output csc , чтобы найти вызов компилятора C #.

В этой теме

Правила синтаксиса командной строки для компилятора C #

Компилятор C # использует следующие правила при интерпретации аргументов, заданных в командной строке операционной системы:

  • Аргументы разделяются пробелом, который является либо пробелом, либо табуляцией.) не распознается как escape-символ или разделитель. Символ обрабатывается синтаксическим анализатором командной строки в операционной системе, прежде чем он будет передан в массив argv в программе.

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

  • Двойная кавычка, перед которой стоит обратная косая черта (\ "), интерпретируется как буквальный символ двойной кавычки (").

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

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

  • Если за нечетным числом обратных косых черт следует двойная кавычка, в массив argv помещается одна обратная косая черта для каждой пары обратных косых черт, а двойные кавычки «экранируются» оставшейся обратной косой чертой.Это приводит к добавлению буквальных двойных кавычек (") в argv .

Примеры командных строк для компилятора C #

  • Компилирует File.cs создает File.exe :

      csc File.cs  
  • Компилирует File.cs создает File.dll :

      csc -target: библиотека File.cs  
  • Компилирует File.cs и создает My.exe :

      csc -out: My.exe File.cs  
  • Компилирует все файлы C # в текущем каталоге с включенной оптимизацией и определяет символ DEBUG. На выходе получается File2.exe :

    .
      csc -define: DEBUG -optimize -out: File2.exe * .cs  
  • Компилирует все файлы C # в текущем каталоге, создавая отладочную версию File2.dll . Без логотипа и предупреждений не отображается:

      csc -target: library -out: File2.dll -warn: 0 -nologo -debug * .cs  
  • Компилирует все файлы C # в текущем каталоге в Something.xyz (DLL):

      csc -target: library -out: Something.xyz * .cs  

Различия между компилятором C # и выводом компилятора C ++

Нет файлов объектов ( .obj ), созданных в результате вызова компилятора C #; выходные файлы создаются напрямую. В результате компилятор C # не нуждается в компоновщике.

См. Также

.

Смотрите также