Формирование PE-файла с чистой репутацией

Тема в разделе "WASM.WIN32", создана пользователем Zemoh, 24 фев 2012.

  1. Zemoh

    Zemoh New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2012
    Сообщения:
    16
    Всем привет!

    Есть у меня задумка - написать компилятор под Win32. С языком еще не определился. Возможно, будет мной же придуманный, смотрю в сторону компромисса между C++ и Python, но это сейчас пока еще неважно. Решил начать просто с записи шаблонной программки типа Хелло ворлд. Очень помог пример по этой ссылке: http://www.wasm.ru/article.php?article=win32appbyhand. Я сначала вбил его руками и убедился, что он работает, а потом повторил его программно, используя структуры для работы с PE-форматом из WinNt.h. В результате получил идентичный выходной файл.

    Одно но: на тот файл, что я вбил руками, заругался антивирус (!avast), предложив запустить в песочнице. Я настоял на запусе в обычном режиме и попросил это заполнить. В результате теперь этот файл запускается мгновенно (ну может, думает примерно 1 с при первом запуск после старта системы). Тот же, что я создал программно (такой же до байта, сравнивал в Total Commander) - думает 1 секунду всякий раз! Проверял, дело в антивирусе, если его отключить, задержек нет. Подозреваю, что это из-за того, что в PE-файле, который создается по этой статье, все намешано в единственной секции - и данные, и код, и таблица импорта, соответственно, права у нее и на чтение, и на запись, и на выполнение. Но могу быть неправ.

    Итак, у кого-нибудь есть опыт создания PE-файлов своими силами? Что нужно, чтобы было меньше подозрений со стороны антивируса, которые вызывают ощутимую задержку при запуске или вообще его диалог с пользователем по поводу благонадежности программы? Где-то мне попадалась ссылка, где похожий вопрос был затронут, но там обсуждались какие-то структуры, которые плохо или вообще не задокументированы, но которые все же пишутся обычными компиляторами, в результате чего антивирусы воспринимают выходной файл спокойно. Но вот не запомнил ее, а повторно не найти что-то.
     
  2. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    почитайте
    http://wasm.ru/article.php?article=sdf
    http://wasm.ru/article.php?article=avira
     
  3. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    В Сам себе Iczelion посмотри здесь #319
     
  4. Zemoh

    Zemoh New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2012
    Сообщения:
    16
    Mikl___, что ты хотел этим сказать? На обоих программных примерах выскакивает ошибка запуска приложения 0xc0000018. К тому же, антивирус имеет к ним претензии, хоть и не говорит, что явных злых намерений нет.
     
  5. Zemoh

    Zemoh New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2012
    Сообщения:
    16
    А, вот точно, Rich-сигнатура. Поковыряюсь с этим.
     
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    Zemoh
    На вопрос "у кого-нибудь есть опыт создания PE-файлов своими силами?" я ответил, показал где и как, это и хотел сказать. На WinXP всё работает нормально, а ошибка 0xc0000018 наверное на семерке или Висте? Но о том, что это должна быть не Хр у тебя ни слова не сказано.
     
  7. Zemoh

    Zemoh New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2012
    Сообщения:
    16
    Не было сказано. У меня windows 7. Но написание компилятора разве не предполагает автоматом, что выходной код должен идти во всех версиях системы, начиная с Windows XP и выше, а возможно, еще и на Windows 2000? Да и написание какой-нибудь определенной специфичной программы, думаю, тоже не должно быть ограничено одним Windows XP.

    А свой вопрос "Итак, у кого-нибудь есть опыт создания PE-файлов своими силами?" я задавал не отдельно, а все-таки в связке с последующим вопросом, уже напрямую затрагивающим мою проблему.

    Гм, я сегодня обновил avast! Теперь он заругался и на программу из одного ExitProcess, собранную в MASM32, хотя написал, что прямых угроз безопасности и нет, но все же предлагал запускать ее в песочнице. А раньше эта тестовая программка выполнялась мгновенно и без вопросов. Похоже, задача написать exe, не вызывающий подозрений, не такая уж тривиальная...
     
  8. Zemoh

    Zemoh New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2012
    Сообщения:
    16
    Так, почитал ту забугорную статью про этот Rich Signature авторства Daniel Pistelli. Описывается, как она формируется, но автор кончает статью тем, что выкладывает скрипт, который ее удаляет из PE-файла! Может, она и не нужна, тем более, что пишут ее только микрософтовские компиляторы. Если бы писали и другие, она бы была официально задокументирована, я так думаю.
     
  9. teXture

    teXture New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2011
    Сообщения:
    17
    Но ведь вы не криптор пишете. Зачем вам это. Может просто в саппорт стоит написать.
     
  10. artvy

    artvy New Member

    Публикаций:
    0
    Регистрация:
    13 фев 2012
    Сообщения:
    13
    За саму идею мега респект, но осмелюсь заметить что языки не от балды придумываются, а десятилетиями вынашиваются, развиваются, должны вписываться в контекст спроса на технологии и иже с ним. Т.е. ваша идея отдает максимализмом и конечно мега полезна для ума, но с таким подходом продать это потом у вас не выйдет. Хотя может конечно вы уже оценили все ведущие штук ~50 языков которые используются сейчас в индустрии и знаете чего им нехватает. Тогда я всеми руками и ногами за вашу идею. Например насколько глубоко вы осведомлены в современных тенденциях языков программирования? Насколько глубоко знакомы с функциональным программированием? Кто будет вашим целевым потребителем? В какой сфере вы планируете облегчить работу разработчикам, так как никто от балды переходить на непонятно что пусть даже и классное не будет, когда есть такое же но уже знакомое, и.т.д, и.т.п.
     
  11. Zemoh

    Zemoh New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2012
    Сообщения:
    16
    artvy
    Ваши вопросы, конечно, хороши. Но я поставил себе такую задачу больше для пользы уму - мне тема написания компиляторов/трансляторов/интерпретаторов очень интересна. Уже накопился некоторый опыт. Для студентов (небесплатно:) делал две курсовых и одну дипломную работу, последняя была особенно сложной. Кое-что навалял и для себя. Просто вот задумал очередной шаг вперед, не хочется останавливаться на достигнутом. Собственно идеи продавать изначально и не было - я не исследовал рынок и его потребности - так/, только слегка в начале этого года прощупал почву на двух сайтах среди участников - что им было бы интересно, идея какого проекта может быть стоящей. Пожалуй, единственное позитивное, что я из этого получил - это идея написания внедряемой виртуальной машины, в основном, для контроллеров (гораздо более легковесной, насколько этого можно добиться, чем Java) и компилятора для нее, обе тулзы должны быть кроссплатформенными, насколько это возможно. Собственно, это мне и подкинул человек, который железом и занимается, как программист и разработчик. Но так как со мной это и рядом не стояло, я в этом направлении двигаться не начал - тут я уже не в состоянии ставить для себя цели, составлять ТЗ. Тут был бы уже определяющим заказ, но я, опять-таки, вряд ли и получил бы такой, так как, повторюсь, меня и рядом не стояло.

    Идея же написать свой компилятор - и заняться этим - пришла ко мне, после того, как я порешал задачки на Project Euler. Ну собственно, решаю их еще с декабря, но просто тут перерешал парочку ранее уже решенных задач средствами Oracle SQL и PL-SQL, в конце концов, PL-SQL удалось изолировать целиком в row-generating function, возвращающей таблицу чисел, решение уже выглядело практически как целиком состоящее из одного SQL-запроса. В С++ встроенными средствами языка нельзя написать предикаты, осуществляющие итерацию в рамках одиночной инструкции. Но зато можно в Python, как я выяснил, и я начал изучать этот язык.

    Вот почему я в теме и заикнулся о чем-то, напоминающем симбиоз C++ и Python: меня заинтересовало расширение C-подобного (до объектной ориентированности я в своих наработках еще не дошел) языка интересными инструментами a-la в Python. Так как развивать чисто C-подобный язык мне как-то уже и не очень интересно (свои разработки в этом стиле я не стал продолжать).

    С функциональным программированием я знаком немного. Знаю, что в Python оно немного поддерживается в Python. Также я немного познакомился с F#.
     
  12. Zemoh

    Zemoh New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2012
    Сообщения:
    16
    Да, я пишу не криптор. Но что, мне ради этого писать в саппорты самых крупных антивирусников, чтобы те понизили антивирусные барьеры, только ради того, чтобы несколько моих программок не висело 1-2 секунды, а выполнялось сразу? Как Вы себе это представляете.

    Ну хотя, может, есть некоторое зерно. Вот как-то бы узнать, каким критериям должны отвечать программа, чтобы она не тормозилась антивирусом? Боюсь, в техсаппортах антивирусов не отвечают на такие вопросы.
     
  13. slesh

    slesh New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2009
    Сообщения:
    214
    Может реально проще будет сделать транслятор в С/С++ который будет преобразовывать код. таким образом можно убить двух зайцев: и свой язык написать с покером и путанами и добиться хорошей оптимизации и кросплатформенности, а также высокой скорости работы.
     
  14. Zemoh

    Zemoh New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2012
    Сообщения:
    16
    Гм, пока у меня есть опыт трансляции только в подобие стековой машины, в том числе и ассемблерный код, работающий со стеком для вычисления выражений. Некоторые навыки примения оптимизации уже есть (в дипломной работе делал constant folding и constant propogation), могу их расширять дальше.

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

    По поводу же кроссплатформенности. Я тут говорил (или не говорил? :) об импорте функций Win32 API, мне он очень нравится, а о других платформах я как-то и не думал совсем. Не уверен, что мир от этого много потеряет:) Но вот если бы вдруг (вдруг) мне бы удалось создать продукт, пользующийся популярностью, об этом бы стоило подумать. Но и будет ли это? Мне же для себя всякие никсы, маки как-то без надобности...
     
  15. Zemoh

    Zemoh New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2012
    Сообщения:
    16
    Господа, дела стали гораздо лучше! Я отделил код от данных и импорта, поместив в отдельную секцию. Антивирус при первом запуске проги как обычно предложил тиснуть в песочницу, я попросил его запускать в штатном режиме. Прис следующих запусках проблем не было вообще!

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

    P.S. Мое предположение относительно секций подтвердилось, но по-хорошему, и так бы разделять надо на три секции - код, данные, импорт
     
  16. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Компилятор не должен создавать PE файл. Это задача для линкера.
     
  17. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Partner
    Компилятором обычно называют совокупность транслятора и компоновщика. Так что должен.
     
  18. Zemoh

    Zemoh New Member

    Публикаций:
    0
    Регистрация:
    24 фев 2012
    Сообщения:
    16
    :) Ну тут как бы можно поспорить на эту тему. Но я далеко не сразу буду делать поддержку многомодульных программ с отдельной компиляцией модулей, так что компилятор будет сразу писать exe.