Пытался гуглить на эту тему, да как-то не получается сформулировать вопрос.
Вопрос: Включается ли в скопилированный *.exe информация о среде разработки, компиляторе?
Что-то (здравый разум) мне подсказывает, что IDE — нет, а вот про компилятор — да.
И второй вопрос: как поменять эту информацию?
ЗЫ: Если бы в настройках компилятора ObjectPascal можно было бы сменить такую инфу я бы очень удивился и очень обрадовался ))
G.Azamat < Web Development / Computer simulation >
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра.
Заблокирован
Регистрация: 20.07.2008
Сообщений: 4,033
Поменять практически не возможно, ибо это не одна запись а куча маленьких:
http://ru.wikipedia.org/wiki/%D0%A1%. B9%D0%BB%D0%B0
Например, любой откомпилированный класс языка Java начинается с шестнадцатеричного «магического числа» 0xCAFEBABE. Второй широко известный пример — любой исполняемый файл ОС Microsoft Windows с расширением .exe начинается с последовательности байт 0x4D5A. Менее известным примером является неинициализированный указатель в Microsoft Visual С++ (начиная с 2005 версии Microsoft Visual Studio), который в режиме отладки имеет адрес 0xDEADBEEF. |
Участник клуба
Регистрация: 11.01.2009
Сообщений: 1,916
У многих программа перестала работать…. Что делать?
Вопрос: Включается ли в скопилированный *.exe информация о среде разработки, компиляторе? |
Есть такая бесплатная игрушка «Detect it easy»
На вкладке Scan жмешь внизу OpenPE и смотришь инфу по файлу .
Вложения
die_0.64.rar (930.1 Кб, 250 просмотров) |
php / delphi
Форумчанин
Регистрация: 10.06.2007
Сообщений: 175
Спасибо большое))
Detect it easy оказалась совсем хорошей игрушкой! И показала
Borland Delphi [ver: 7] | Object Pascal |
вопреки всем мои ожиданиям ))
Поменять практически не возможно |
Ну я пока надежды не теряю )) Внушает уверенность небольшая выдержка из одного мануала
Delphi 2005 Предопределенный символ для идентификации компилятора — VER170 (выяснено опытным путем, в Help информация отсутствует). |
Вдруг там в одном месте ногтем подколупнуть, и вуаля. Где бы еще эти «предопределенные символы» узнать.
G.Azamat < Web Development / Computer simulation >
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра.
Реверсинг python программы, почему python не безопасен
Trust no one.
Регистрация: 07.04.2009
Сообщений: 6,526
А я вот, что заметил — в файлах, сделанных с помощью паскаля (exe,TP) — включается такая строка: «copyright borland 19xx-19xx» откройте в хексе и убедитесь.
SQUARY PROJECT — НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK — УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
php / delphi
Форумчанин
Регистрация: 10.06.2007
Сообщений: 175
Ну это вроде не то, идентификация куда-то глубже привязана)) Я вот вскрыл свой экзешник через Resours Hacker (эдакий редактор для бездельников/домозяек), а там вот чего есть:
type=»win32″ type=»win32″
|
Менять пробовал — в «Detect it easy» все попрежнему
G.Azamat < Web Development / Computer simulation >
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра.
я получил эту роль
Регистрация: 25.05.2007
Сообщений: 3,694
DiE, как и многие другие тулзы, ищет сигнатуры, свойственные разным компиляторам — у программ, написанных на делфи, это 3-4 вызова процедуры инициализации + мусор в ресурсах, в С — вызов GetModuleHandle и функция Main, кроме того майкрософтовский линкер оставляет сигнатуру Rich после MZ-заголовка. Какой-то конкретной ‘волшебной метки’ нет
php / delphi
Форумчанин
Регистрация: 10.06.2007
Сообщений: 175
Всем спасибо )
Вдоволь наковырявшись в файлах и программах, постепенно и начал приходить к одной мысли:
Какой-то конкретной ‘волшебной метки’ нет |
Например, проги откомпилированные Lasarus идентифицировались как С/С++. Видимо какая-то из библиотек оставляла специфичный код ))
Зато узнал много нового))
G.Azamat < Web Development / Computer simulation >
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра.
Регистрация: 14.02.2010
Сообщений: 2
Спасибо большое))
Detect it easy оказалась совсем хорошей игрушкой! И показала
вопреки всем мои ожиданиям ))
Ну я пока надежды не теряю )) Внушает уверенность небольшая выдержка из одного мануала
Вдруг там в одном месте ногтем подколупнуть, и вуаля. Где бы еще эти «предопределенные символы» узнать.
Есть ещё одна интересная игрушка — OgreGUI. Позволяет поменять много чего в уже откомпилированном файле.
.equ CMD_PORT= PORTA
.equ CMD_PIN = PINA
.equ CMD_DDR = DDRA
Источник: www.programmersforum.ru
Compiler Explorer – это больше, чем посмотреть результат компиляции
Сегодня мы поговорим про Compiler Explorer (godbolt.org). Если Вы ещё не знакомы с этим сервисом для экспериментов с компиляцией кода в режиме online, значит пришло время прочитать про этот полезный и интересный инструмент. А если уже знакомы, то после прочтения заметки Вы сможете по новому взглянуть на этот инструмент.
Что такое Compiler Explorer
Compiler Explorer – это интерактивный инструмент, который позволяет Вам набирать код в одном окне и сразу видеть результат компиляции в другом окне (онлайн компилятор).
Здесь Вы можете изучать предупреждения/ошибки и ассемблерный код, выдаваемые компилятором, а также просматривать результат выполнения скомпилированной программы.
Поддерживаются различные языки, например, Ada, D, Fortran, Python. Впрочем, нам здесь сейчас интересно пообсуждать поддержку языков C и C++.
Заметка! Если Вам интересно, у Compiler Explorer есть С++-канал в Slack. Вы можете присоединиться к нему, получив автоматический инвайт.
Важной полезной фичей является возможность создавать постоянные ссылки на «слепок» того, что Вы делаете, с сохранением напечатанного кода и взаимного расположения открытых Вами окон. Например, вот ссылка, открыв которую, Вы можете сразу увидеть текст программы, ассемблерный код и результат работы программы. Такими ссылками очень удобно делиться или использовать их в постах.
Интересный функционал Compiler Explorer
Возможно, всё это Вы уже знали и до прочтения данной статьи. Однако мне есть что добавить. Compiler Explorer постепенно развивается и из просто online-компилятора он превращается в нечто большее. Начал пополняться раздел дополнительных инструментов («Add tool»), и теперь возможно не только скомпилировать код, но и посмотреть, что о коде думают, например, такие анализаторы как clang-tidy или PVS-Studio.
Конечно, здесь надо проявлять разумность и не пытаться проверять с помощью сайта свой многофайловый проект – гораздо естественнее делать такую проверку, установив анализатор на компьютер. Также не стоит пытаться на основании синтетических примеров оценивать возможности анализаторов, ведь в таком случае очень легко ненароком поставить неправильные эксперименты.
В остальном это очень прикольная штука. Вы можете играться с анализаторами, список которых наверняка будет постепенно пополняться. Вы можете посмотреть, находится ли та или иная ошибка и как анализаторы предупреждают о них. Это можно использовать для удовлетворения любопытства, при написании статей или при каких-то исследованиях.
Пример использования
Это ещё не всё. Предлагаю взглянуть на Compiler Explorer как на среду для выполнения простых лабораторных работ. Конечно, возможности Compiler Explorer ограничены, однако для лабораторных работ из одного файла это самое то.
Можно набрать текст программы, скомпилировать и посмотреть, что будет распечатано в консоль. После можно создать ссылку на выполненную работу и отправить её по почте для проверки. И для всего этого устанавливать на компьютер ничего не требуется. Можно вообще сделать и сдать лабораторную работу с любого терминала, даже с телефона (хотя последнее, наверное, будет не так удобно). Думаю, студенты смогут оценить всё это, особенно в сессионную пору :).
А ещё при этом можно сразу пользоваться статическими анализаторами. Удастся сразу найти многие ошибки/опечатки и заодно приобщиться к хорошей полезной практике применения статических анализаторов кода.
Давайте посмотрим, как это может выглядеть на практике. Предположим, кто-то изучает массивы и циклы и ему нужно написать программу для транспонирования матрицы. И он пишет вот такую программу.
Как видите, программа компилируется и даже запускается. Вот только она как-то странно работает, и изменённая матрица упрямо не хочет печататься на экране.
Хорошо, что в правом нижнем углу статический анализатор PVS-Studio предупреждает о возможной опечатке. И действительно, во внутреннем цикле увеличивается переменная i, а не j. Возникает вечный цикл. Исправим код и теперь всё работает так, как и ожидалось.
Если Вы преподаватель, то возьмите такой сценарий выполнения лабораторных работ на заметку. Иногда он может оказаться весьма удобным. Заодно и студенты познакомятся с методологией статического анализа кода.
P.S. Для более сложных лабораторных работ или курсовых проектов такой подход, конечно, не годится. В этом случае можно установить PVS-Studio на компьютер и использовать бесплатные лицензии. См. раздел «Бесплатное использование PVS-Studio студентами и преподавателями».
На сегодня это все, пока!
Источник: info-comp.ru
Реверсинг .NET. Как искать JIT-компилятор в приложениях
Во время декомпиляции и анализа .NET-приложений реверсеры сталкиваются с различными методами антиотладки. Один из них — сокрытие метаданных и IL-кода, которые восстанавливаются только при JIT-компиляции программы. Для борьбы с ними хакеры и реверс‑инженеры придумали целый комплекс специальных инструментов и методов, которые мы рассмотрим в сегодняшней статье.
info
C легкой руки Microsoft одной из самых популярных платформ для программирования в настоящее время стала .NET. Огромное количество инструментов, библиотек и документации обеспечивают простоту вхождения даже для самых начинающих кодеров, а кросс‑платформенность и все более совершенная оптимизация кода делают ее одним из основных стандартов написания коммерческого софта. Как следствие, инструментов для взлома и реверс‑инжиниринга под эту платформу тоже успели создать немало. Среди них dnSpy, ILspy, ILdasm, Dile, SAE и многие другие, имя им — легион!
Задача для реверсеров упрощается тем, что по умолчанию скомпилированная программа фактически содержит свой исходник: имена символов хранятся в явном виде, а кросс‑платформенный IL-псевдокод легко восстанавливается до исходных синтаксических конструкций C# или VB, из которых он был получен при компиляции. Соответственно, взлом такой программы для начинающего хакера — одно удовольствие: достаточно загрузить ее в dnSpy, и вот она, на блюдечке в своих исходниках, для удобства даже окрашенных в приятные цвета. Отлаживай и правь как хочешь, как будто сам эту программу и написал!
Немного теории
Разумеется, производители софта мириться с подобным положением дел не могут, и на очередном витке конфронтации между хакерами и протекторами было разработано много инструментов, препятствующих восстановлению исходного кода из IL-сборки. Грубо говоря, все подобные инструменты используют три основных принципа:
- сокрытие (шифрование, компрессия и так далее) .NET-метаданных и IL-кода с восстановлением только в краткий миг JIT-компиляции;
- обфускация IL-кода, то есть преднамеренное запутывание его логики, борьба с читаемостью текстовых строк и имен символов, чтобы понять логику работы восстановленного IL-кода было сложнее;
- комбинация двух предыдущих категорий.
Сегодня мы поговорим о методах из первой категории. В принципе, наиболее простой и дубовый способ оградить программу от ILDasm — скомпилировать ее с атрибутом SupressIldasmAttribute . Понятное дело, это защита от честных людей, поскольку такая сборка превосходно детектируется как .NET-приложение, декомпилируется другими инструментами, а данный атрибут с полпинка снимается в CFF Explorer или, при изрядной сноровке, в простом HEX-редакторе. Более интересно «завернуть» метаданные в обычное нативное приложение, формирующее и запускающее .NET-сборку на лету.
В этом случае никакие детекторы не распознают в ней .NET, если их предварительно не обучили этому трюку, а декомпиляторы и отладчики, с ходу не увидевшие в программе метаданных, обломаются при загрузке. С помощью dnSpy можно попытаться исследовать такое приложение, однако при прерывании он навряд ли сможет восстановить и трассировать код дальше, что делает такую отладку бесполезной. Как быть в таком случае?
Самый простой способ — воспользоваться утилитой MegaDumper (или даже ее более продвинутой версией ExtremeDumper). Если .NET сформирован и запущен по всем правилам, то он корректно распознается упомянутыми утилитами именно как .NET-процесс, и при нажатии кнопочки . NET dump дампится как стандартное .NET-приложение. Правда, Wowсе не факт, что оно будет запускаться.
Чтобы привести его в запускаемый вид, придется проделать определенные телодвижения, в зависимости от продвинутости протектора. Тем не менее метаданные .NET и IL в такой сдампленной сборке будут доступны для декомпиляции и анализа. Можно убедиться в этом, открыв сборку, например, в CFF Explorer. Однако я специально сделал оговорку «если». Попробуем разобраться, почему подобное может не сработать.
Для этого постараюсь коротко в двух словах напомнить принцип функционирования .NET-приложения для тех, кто забыл матчасть. Несмотря на то что сборка состоит из метаданных и кросс‑платформенного IL-кода, при выполнении приложения он не интерпретируется, а компилируется в весьма оптимизированный нативный код целевого процессора и целевой операционной системы. Делается это непосредственно при загрузке блока кода один раз, впоследствии будет выполняться уже скомпилированный нативный код метода. Сам процесс называется JIT-компиляция (Just In Time, «временная компиляция на лету»). То есть если прервать программу в произвольный момент в отладчике типа x64dbg, то процесс будет остановлен именно во время исполнения такого временно скомпилированного нативного кода.
Трассировать, отлаживать и реверсировать его, конечно, можно, но целесообразность этого сомнительна. Нас интересует другой подход — поймать и сдампить уже восстановленный фрагмент IL-кода перед его JIT-компиляцией. Логика подсказывает, что, если мы хотим сделать это вручную, нам надо найти в отладчике изначальную точку входа в JIT-компилятор. Самое простое — отыскать метод SystemDomain:: Execute в библиотеке clr. dll (или mscorwks. dll для более старых версий .NET). Обычно для подобных вещей рекомендуют использовать WinDbg и его расширение SOS, но я для примера покажу, как это делать в x64dbg.
Ищем JIT-компилятор
Итак, загрузив нужное приложение в отладчик, мы с неприятным удивлением обнаруживаем, что библиотека clr. dll отсутствует в списке отладочных символов. Значит, ее придется загрузить дополнительно, предварительно отыскав глубоко в недрах подкаталогов системной папки Windows. Найдя и загрузив clr. dll (попутно загрузится несколько библиотек), мы снова с раздражением обнаружим, что метод SystemDomain:: Execute отсутствует в правом списке экспорта. Ну что ж, по счастью, x64dbg предоставляет прекрасную возможность загрузить отладочные символы прямо с майкрософтовского сервера — для этого нужно щелкнуть правой клавишей мыши на clr. dll и выбрать соответствующий пункт в контекстном меню.
Подождав некоторое время, мы увидим, что список в правой части окна отладчика изрядно увеличился и искомый метод SystemDomain:: Execute в нем уже присутствует. Ставим на него точку останова и запускаем программу. В момент останова на этом методе дотнетовские метаданные чаще всего уже расшифрованы, распакованы и их можно дампить в файл хоть MegaDumper’ом, хоть Scylla из самого дебаггера. Однако этого тоже может оказаться недостаточно. Попробуем копнуть чуть глубже и выйти на исходный JIT-компилятор.
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Источник: xakep.ru