Другое

Что такое исходный код программы на С: просто о сложном

Lorem ipsum dolor

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

С — это язык программирования, который проверен временем. Изначально он задумывался как заменитель Ассемблера, чтобы писать на нем операционные системы. 

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

 

Исходный код программы на С

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

Исходный код программы на С — это программный код, который еще не был скомпилирован и содержится в файлах с расширением данного языка. У этого языка имеется несколько расширений, и делятся они в зависимости от типов файлов:

  • заголовочный файлы используют расширение «.h», поэтому называются h-файлы;

  • файлы реализации используют расширение «.с» для языка С и «.срр», «.схх», «.сс» для языка программирования С++.

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

  • h-файлы — это файлы, содержащие сведения о программе;

  • файлы реализации — это сам код программы.

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

 

Как получить исходный код программы на С

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

  • помочь доработать программу, вплоть до того, чтобы стать соавтором;

  • использовать код, чтобы создать подобную программу, однако тут есть тонкости: нужно будет указать автора исходного кода или что-то еще;

  • чуть-чуть подправить программу для личного пользования;

  • и др.

Если автор скрывает исходный код программы, то получить его:

  • противозаконно, потому что авторы закрывают код и защищают его лицензиями;

  • очень сложно, а иногда практически невозможно.

Процесс получения исходного кода из закрытой программы — это реверсивная инженерия или обратное программирование. У закрытых программ пользователи не могут видеть исходный код программы, лишь ее исполняемые или скомпилированные файлы, например, файлы «.ехе» для Windows-программ. Если открыть исполняемый или скомпилированный файл, то там не будет ничего общего с языком программирования. Все, что там можно будет увидеть, — это беспорядочный набор цифр и букв или двоичный код из сочетания «1» и «0».

 

Исходный код программы на С: обратное программирование 

Обратное программирование — это длительный и муторный процесс. Чем больше программа, для которой вы хотите получить исходный код, тем сложнее будет этот процесс. В некоторых случаях процесс «реверса» займет несколько лет, например, попробуйте воссоздать исходный код операционной системы Windows.

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

Способы попробовать восстановить исходный код программы на С:

  • IDA Pro — одна из лучших и бесплатных программ из категории «реверсивная инженерия»;

  • «hiew.exe» утилита, которая не выдаст исходный код программы, но поможет править его на языке ассемблера;

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

  • необходимо проверить, не встроен ли в программу «debug info»: если встроен, то можно использовать его, как и в предыдущем способе, чтобы узнать информацию об исходном коде;

  • DisSharp — программа, которая способна раскрыть часть кода на С++ и С#;

  • Refox — данная утилита поможет, если программа на С скомпилирована в какой-либо байт-кодовый язык;

  • exe.scope.exe или Resourcehacker.exe — утилиты, которые не раскрывают исходный код, но помогают определить, какие библиотеки используются в программе.

Универсальных средств нет. Нет такого, чтобы вы запустили какое-то программное обеспечение, и оно вам выдало исходный код программы на С. Чтобы добиться исходного кода, нужно будет повозиться и узнавать все частями. Например:

  • при помощи одной утилиты вы узнаете используемые библиотеки;

  • при помощи другой имена классов и функций;

  • третья поможет частично раскрыть код;

  • и т. д., пока у вас не сложится общая картина об исходниках.

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

 

Заключение

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

Схожие статьи

Рендер, рендеринг (визуализация): что значит рендерить в играх
Другое

Рендер, рендеринг (визуализация): что значит рендерить в играх

Теория вероятности для чайников: типовые примеры для начинающих
Другое

Теория вероятности для чайников: типовые примеры для начинающих

Ранги программистов: юниор, миддл, сеньор, что они означают?
Другое

Ранги программистов: юниор, миддл, сеньор, что они означают?

Как проверить файл «hosts» на Windows 7, где он находится и для чего нужен
Другое

Как проверить файл «hosts» на Windows 7, где он находится и для чего нужен

×