Бинарные программы что это

Что такое binary file?

Хочу скачать музыку по соответствующей ссылке, файл хочет сохраниться, как binary file. Что это за формат, не опасно ли сохранять? Что с ним потом делать, чтобы в итоге получился обычный аудиофайл?

комментировать
в избранное up —>
10 ответов:
8 лет назад

Любой файл — это набор байт. Байт состоит из восьми бит — бинарных кодов. Бинарный от слова би — два. То есть может принимать два значения: один или ноль. Все файлы хранятся в битах.

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

Какой файл операционная система определяет с помощью двух этапов.

1 Первый — предварительный. Это по расширению файла. Если его поменять вручную, то операционная система сразу может не понять, что за файл. В тексте расширение файла, к примеру .txt, а в картинках, к примеру .jpg , . png , .bmp , .gif и так далее.

Что такое бинарный файл прошивки?

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

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

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

(здесь введите расширение вашего файла, без скобок) (здесь вводите расширение файла звуков, которое понимает Windows, например .wav) (слово конвертер)

Вобщем в строке поиска гугл должно быть примерно следующее (поменяйте под себя):

mp3 to wav конвертер

Конвертер — это программа преобразующяя файл одного типа в другой.

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

Источник: www.bolshoyvopros.ru

9. Операторные и бинарные программы.

Рассмотрим 2 типа программ: операторные и бинарные. Операторная программа не содержит условных переходов, порядок ее команд в точности соответствует нумерации элементов в схеме, а система команд соответствует базису схемы. Элементы схемы нумеруются числами 1. n таким образом, чтобы на любом пути от входа к выходу номера элементов возрастали. При этом номер 1 получит один из входных элементов, а номер n — выходной элемент.

Что такое бинарный файл прошивки

Бинарные программы это программы, состоящие из команд типа y =  ;  = и условных переходов.

Замечание. Бинарные программы обладают двумя достоинствами по сравнению с операторными:

  1. Отсутствием промежуточной памяти в процессе работы программы. Это позволяет реализовать бинарную программу на постоянных элементах памяти.
  2. Более высоким быстродействием.

Пример. Составить для функции f = ( x1 v x3 )  x4 v x2) бинарную и операторную программы.

Решение. Воспользуемся языком С++, будем иметь код:

bool f=0, x1,x2,x3,x4,x5 ; // описание типа переменных

cin>> x1>>x2>>x3>>x4>>x5; // ввод переменных

switch (x1) // оператор выбора

case 0: switch(x3)

case 1: switch ( x5)

case 0: switch (x2)

case 1: switch (x4)

case 1: switch (x2)

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

f =  (x1 (  ( x5 x2 )

bool f, x1,x2,x3,x4,x5 ; // описание типа переменных

cin>> x1>>x2>>x3>>x4>>x5; // ввод переменных

10. Логические схемы. Элементная база.

Логический вентиль (вентиль) – это своего рода элемент, из которого состоят электронные узлы ЭВМ. Он работает по принципу крана, открывая или закрывая путь сигналам.

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

Логические функции отрицания, дизъюнкции и конъюнкции реализуют логические схемы, называемые инвертором, дизъюнктором и конъюнктором.

Логическая функция «инверсия», или отрицание, реализуется логической схемой (вентилем), называемой инвертор.

Дизъюнкцию реализует логическое устройство (вентиль) называемое дизьюнктор

Конъюнкцию реализует логическая схема (вентиль), называемая конъюнктором.

Пример. В двоичной системе таблицу суммирования цифры x и цифры y и получения цифры z с учетом переноса p в следующий разряд можно изобразить таблицей вида:

Источник: studfile.net

C#: разбираем бинари

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

Исполняемые файлы Windows

Определимся с областью изучения. C# практически намертво спаян с операционной системой Windows и её подсистемой .NET, хотя и есть версия .NET Core, которая предпринимает попытки стать кроссплафторменной. В нашей статье будем говорить о той части, которая относится именно к Windows.

Читайте также:
Что за программа winzip

Итак, любой файл, который будет получаться после компиляции кода на C#, это нативный исполняемый файл PE или PE+ (зависит от выбранной разрядности процессора). Грубо говоря, создание именно исполняемого файла — это просто способ заставить операционную систему воспринимать приложения для .NET как нативное приложение, написанное на таких языках как C++/ASM и т.д.

Сам по себе полученный исполняемый файл можно описать как набор служебных данных — заголовков и полезных данных — секций . Общую структуру файла очень здорово описал хабровчанин здесь. Труд был создан еще в далеком 2015 году, но не потерял своей актуальности. Для полноты картины, которую придется изучать под микроскопом, приведу общий и сокращенный вид того самого исполняемого файла:

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

  • sys — файлы драйверов
  • exe — файлы приложений
  • dll — расшариваемые библиотеки и драйвера
  • cpl — апплеты, которые могут использоваться для расширения функционала приложений в Windows. Для примера можно набрать WIN+R и вести control.cpl появится интерфейс для настройки системы.
  • .

Но как операционная система понимает, к какому типу файлов в итоге отнести, то что отдает пользователь или зовет приложение? Ответ очень прост, в структуре PE файла существует ряд полей, которые могут быть использованы для того чтобы определить что делать с файлом. Вот некоторые из них:

  • Characteristics его описание можно найти тут
  • Subsystem , его описание так же можно обнаружить по ссылке выше

Оба этих поля дают возможность понять, какой тип файла придется разбирать и какая подсистема Windows отвечает за его работоспособность. Да, в Windows рекомендованный путь разработки — переиспользование библиотек, которые предоставляются сразу с операционной системой. Наборы библиотек объединяются в подсистемы, одна из них как раз платформа .NET. Кстати, для нее константы не найдете в документации, её там нет.

Для примера сравним 2 файла: первый создан с помошью компилятора для C++, а второй — компилятором C#. (Естественно, для тестов будем брать компиляторы Visual Studio).

Так как файл PE — это бинарный формат, поэтому нам придется прибегнуть к использованию софта, умеющего его разбирать. Для скрина будем использовать Explorer Suite.

На картинке представлены 2 исполняемых файла, слева для создания использовался C#, справа C++. Рассматривать будем в первую очередь части, которые относятся именно к служебной информации, а именно заголовки. Как видно, параметры одинаковые. Что наталкивает на мысль — «А как же операционка понимает, что это .NET?».

Ответ стоит искать в секции, которая во многих компиляторах используется для заточения кода, который и будет выполнять алгоритм приложения. Называется эта секция text . В обычном случае в этой секции находится только код и константы, которые он использует, однако если приложение написано для .NET, то в начале секции будет дополнительный набор служебных данных. Здесь их называют стримами и они содержат в структуре данные, которые могут описать всё, чем пользуется платформа:

  • #~ — стрим метаданных, тут все вперемешку: данные о типах, методах и т.д.
  • #Strings — строки, которые содержат информацию из пространств имен их членов и имен
  • #US — строки, которые были созданы программистом и используются в методах
  • #GUID — GUID данные, которые используются в приложении
  • #Blob — по сути, сырые данные, на которые могут ссылаться другие стримы

Вот такая матрешка. Все это парсится автоматически операционной системой и в момент, когда все разобрано, запускается платформа .NET. Процесс запуска тоже реализован весьма интересно. .NET это по сути виртуальная машина, которая понимает команды, отличные от того, что привык разбирать железный процессор современных устройств. Поэтому, чтобы выполнить код, в каждый .NET файл вставляется специальный трамплин, который запускает начальную функцию виртуальной мащины .NET. Если открыть исполняемые файлы в дизассемблерных приложениях и перевести курсор на первые команды, например в Hiew, то можно увидеть вот такие команды. Слева приложение написанное на C#, справа приложение созданное на C++:

Как видно, .NET даже понятнее, чем то, что писалось на C++ для чтения невооруженным глазом. Теперь о грустном. По причине такой структуры C# исполняемого файла, вернуть исходный читаемый код из уже созданного приложения очень просто. Для этого можно использовать любой декомпилятор, например dnSpy.

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

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

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

Способы защиты приложений

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

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

У этих подходов есть общий термин — обфускация.

  • шифрование частей исполняемого файла или самых важных с точки зрения алгоритма частей приложения
  • упаковка частей исполняемого файла или самых важных с точки зрения алгоритма частей
Читайте также:
Программа iobit что это

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

Эти подходы можно объединить. Попробуем создать приложение, которое позволит использовать хотя бы один способ зашиты — переименование методов.

Mono.cecil

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

Библиотека выбрана не случайно, именно при помощи ее создаются приложения, которые декомпилируют уже собранные проекты. Почему это возможно? .NET приложение в результате компиляции представляет собой набор команд, которые написаны на специальном ассемблере — IL. Конструкции этого ассемблера напрямую могут быть связаны с конструкциями языков программирования .NET платформы. Поэтому достаточно просто получать исходный код приложений после компиляции. Так же, кстати, можно и переводить приложения автоматически на другие языки платформы.

Для использования библиотеки можно загрузить NuGet пакет, для этого достаточно прописать Mono.Cecil в поиске и установить пакет для использования в проекте.

Для преобразований будем использовать простую программу:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TestApp2 < internal class Program < static int sumTwoNumbers(int a, int b) < return a + b; >static int multiple(int a, int b) < return a * b; >static void Main(string[] args) < Console.WriteLine(sumTwoNumbers(4, 3)); Console.WriteLine(multiple(4, 3)); >> >

Приложение для выполнения обфускации может выглядеть так:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Mono.Cecil; namespace TestApp < internal class Program < private static Random random = new Random(); public static string RandomString(int length) < const string chars = «ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789»; return new string(Enumerable.Repeat(chars, length) .Select(s =>s[random.Next(s.Length)]).ToArray()); > static void Main(string[] args) < AssemblyDefinition asm = AssemblyDefinition.ReadAssembly(«TestApp2.exe»); foreach (TypeDefinition t in asm.MainModule.Types) < if (t.Name == «Program») < foreach (MethodDefinition m in t.Methods) < if (m.Name == «sumTwoNumbers» || m.Name == «multiple») < m.Name = RandomString(5); >> > > asm.Write(«TestApp2_obf.exe»); > > >

Смотрим, что получилось через dnspy: слева исходный вид, справа пропатченная версия:

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

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

Статью написал Александр Колесников в преддверии старта курса «C# Developer. Professional».

Всех желающих приглашаем на бесплатное demo-занятие «Что полезного в новых версиях C#?». На этом открытом занятии мы разберем ключевые нововведения .Net 4.8 и познакомимся с полезными и часто используемыми новшествами .Net 4.7.2. Если интересно, записывайтесь.

  • Блог компании OTUS
  • Программирование
  • C#

Источник: habr.com

Бинарные и исходные пакеты: что использовать?

Бинарные и исходные пакеты: что использовать?

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

Что такое бинарные пакеты?

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

Файлы для отдельных программ хранятся в архивном формате. . Это объединяет все в один файл для быстрого доступа позже. Например, Debian использует формат DEB для хранения своих программ. Эти пакеты называются бинарными пакетами .

формат пакета deb

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

Откуда берутся посылки?

Все программное обеспечение написано в строках текста, называемых исходным кодом. Они написаны на конкретных языках программирования , , например, C или C ++. Как правило, однако, вы не можете просто связать это в архив и назвать его пакетом. Эти строки должны быть переведены на язык, который ваш компьютер может понимать и выполнять.

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

Что такое установка «Из источника»?

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

В большинстве случаев вы можете загрузить исходный код проекта с таких хостинговых сервисов, как GitHub или BitBucket . Большие программы могут даже разместить его на личном веб-сайте. Код обычно застежка в архивном формате (также известный как пакет источника).

дерево исходного пакета

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

Читайте также:
Безопасность xiaomi что это за программа

Emacs Makefile

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

Быстрая демонстрация

Например, приведенная ниже команда создает файл конфигурации для Calligra Office Suite используя CMake. Созданный файл сообщает программе make только о компиляции компонента Writer в Calligra.

cmake -DPRODUCTSET=WORDS -DCMAKE_INSTALL_PREFIX=$HOME/kde/inst5 $HOME/kde/src/calligra

Сделав это, все, что нужно сделать человеку, это запустить инструмент make, чтобы скомпилировать и скопировать результаты на свой компьютер. Это делается следующим образом:

make make install

Хотя это общий шаблон для компиляции программ, существует множество других способов установки исходных пакетов. Gentoo Linux , например, имеется встроенный способ обработки этого, что делает процесс намного быстрее и проще. Наряду с этим, сборка бинарных пакетов занимает несколько больше шагов, чем только приведенные выше команды.

Преимущества использования бинарных пакетов

Если вы используете Linux, скорее всего, установленные вами программы были предварительно скомпилированы. В наши дни это гораздо чаще, чем использование исходных пакетов. Есть несколько причин, почему это так.

Проще управлять

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

формат пакета deb

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

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

Улучшенная стабильность

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

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

патчи Debian

Наряду с этим, пакеты обычно должны придерживаться строгого набора правил, чтобы гарантировать, что они будут работать в вашей системе. Например, Debian и Ubuntu имеют руководство по политике, как и многие другие операционные системы Linux.

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

Преимущества компиляции исходных пакетов

Установка программ из исходного кода — это не то, что нужно делать всем. На самом деле, лучше, если вы будете придерживаться бинарных пакетов. Тем не менее, есть несколько преимуществ использования этого немного более сложного способа установки программ.

Последнее программное обеспечение

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

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

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

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

Тщательно выбирать

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

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

особенности ffmpeg

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

Когда ресурсов недостаточно, удаление функций может стать отличным способом облегчить нагрузку. Неудивительно, что Chrome OS , найденный на многих недорогих компьютерах, основан на Gentoo Linux. Gentoo, основанный на исходных текстах, компилирует большую часть своего программного обеспечения, что потенциально делает эти системы намного более легкими.

Почему бы не установить с обоими?

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

Вам когда-нибудь приходилось компилировать программное обеспечение раньше? Зачем?

Изображение предоставлено: Андрей Симоненко через Shutterstock.com

Источник: gadgetshelp.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru