[PluginRequest] WDX для подсветки исполняемых файлов .net

Обсуждение только плагинов и утилит для Total Commander.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Serge Yolkin
Сообщения: 664
Зарегистрирован: Сб июл 25, 2009 11:12

[PluginRequest] WDX для подсветки исполняемых файлов .net

Сообщение Serge Yolkin »

Уважаемые программисты, насколько трудно написать wdx плагин, определяющий, является ли исполняемый файл дотнетовским? Логика работы примерно такая:
// возвращаемое поле, например, PEType
если (первые два байта - MZ) то {
если (файл содержит текст "mscoree.dll") то {
возвращаем "dotNet"
} иначе возвращаем "Win32/64"
} иначе пропускаем (возвращаем пустую строку)

А если он ещё и x64 от x32 отличить сумеет - цены ему не будет.
Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

Думаю, это можно сделать даже на script_wdx. Формат PE довольно простой, можно найти секцию импортов и поискать там mscoree.dll, чтобы весь файл не шерстить. Уточни, в чём именно у тебя тут был затык.

Насчёт 32/64: а разве .NET поддерживает спец-сборку под 64 бита? Вроде бы, с точки зрения PE-формата он остаётся 32-битным.
Почему же, ё-моё, ты нигде не пишешь "ё"?
Serge Yolkin
Сообщения: 664
Зарегистрирован: Сб июл 25, 2009 11:12

Сообщение Serge Yolkin »

CaptainFlint писал(а):Думаю, это можно сделать даже на script_wdx.
На счёт скриптовых технологий есть опасение по части тормозов, а не хотелось бы.
CaptainFlint писал(а):Формат PE довольно простой, можно найти секцию импортов и поискать там mscoree.dll, чтобы весь файл не шерстить.
Не специалист, но визуально (в hex) эта библиотека упомянута несколько отдельно, это может оказаться не секция импортов.
CaptainFlint писал(а):Уточни, в чём именно у тебя тут был затык.
Не понял, что надо уточнить. По предложенным плагинам я отписался. Болванку скрипта вчера пробовал сделать, но не дождался, когда он отработает на папке ~60Mb, прибил. Текущую проблему решить можно, если запустить на ночь, а как рабочий инструмент...
CaptainFlint писал(а):Насчёт 32/64: а разве .NET поддерживает спец-сборку под 64 бита?
Не-не-не, я имел в виду следующие варианты экспертных заключений плагина: dotNet, Win32, Win64, noPE. Возвращаемые значения значения не имеют ( :D ), хоть 1-2-3-4. Лишь бы можно было различить.
Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

Попробуй написать автору http://wincmd.ru/plugring/peviewer.html
- для него сделать Wdx plugin не трудно?
Serge Yolkin
Сообщения: 664
Зарегистрирован: Сб июл 25, 2009 11:12

Сообщение Serge Yolkin »

Alextp
Вариант. Но ещё немного подожду. Может, кто создаст нечто маленькое и шустрое, а то PE Viewer слегка избыточен для этой цели.
Может, я не прав, но логичнее было бы добавить такой функционал в UnicodeTest/LockedTest :)
Аватара пользователя
Alextp
Сообщения: 4957
Зарегистрирован: Вс фев 06, 2005 17:21

Сообщение Alextp »

Почему логичнее. нет не логичнее. Он не предназначен для рзбора форматов файлов
И я не знаю, как это делать
Serge Yolkin
Сообщения: 664
Зарегистрирован: Сб июл 25, 2009 11:12

Сообщение Serge Yolkin »

Alextp
Логика такая:
  1. Ваш плагин предназначен не столько для показа какой-то информации, сколько для детектирования файлов, удовлетворяющих определённому условию.
  2. Основной способ использования Вашего плагина - раскраска файлов и поиск с плагинами, а не создание колонок.
  3. Группы файлов "занят" и "юникодные" логически не особо связаны друг с другом.
Вот я и подумал, что добавить в него распознование ещё одной-двух групп файлов было бы логично, но нет - так нет.

Добавлено спустя 5 минут:

К тому же, Ваш плагин маленький и шустрый.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

CaptainFlint писал(а):Думаю, это можно сделать даже на script_wdx. Формат PE довольно простой, можно найти секцию импортов и поискать там mscoree.dll
А как эту секцию предлагается искать скриптом?
Serge Yolkin писал(а):раскраска файлов и поиск с плагинами, а не создание колонок.
Весьма сомнительная оценка необходимости действий контентного плагина. Не вижу смысла таким способом окрашивать файлы. Колонки наравне со всплывающими подсказками, по мне, - самое что ни на есть очевидное для использования подобных инфоплагинов.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Если собрать в виде экзешника это, можно будет скрипту скармливать...
Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

Serge Yolkin писал(а):Не специалист, но визуально (в hex) эта библиотека упомянута несколько отдельно, это может оказаться не секция импортов.
Вики:
In a .NET executable, the PE code section contains a stub that invokes the CLR virtual machine startup entry
Serge Yolkin писал(а):Не понял, что надо уточнить.
Я имел в виду фразу:
Вроде, там после заголовка exe ещё заголовок среды исполнения идти должен, только визуально я его не распознал. Скрипт бы написал, и дело с концом.
Там не надо ничего визуально распознавать. Надо просто посмотреть определения заголовков и пройти по цепочке смещений внутри EXE-файла. Соответственно, скриптом это делается не сложнее, чем плагином.
Serge Yolkin писал(а):Не-не-не, я имел в виду следующие варианты экспертных заключений плагина: dotNet, Win32, Win64, noPE.
А, понятно. Ну, битность можно ExeFormat'ом различать. Впрочем, если писать плагин или скрипт с самостоятельным разбором заголовков, то добавить определение архитектуры очень просто.

Flasher писал(а):А как эту секцию предлагается искать скриптом?
Я говорил не про самостоятельный скрипт, а про script_wdx. Искать так же, как и не-скриптовым плагином: считать заголовки файла, разобрать их и считать из файла данные по найденным смещениям.

Я, к сожалению, не помню структуру PE настолько подробно, чтобы сходу выложить готовую цепочку переходов, но в интернете информации полно, в том числе с примерами кода.
Почему же, ё-моё, ты нигде не пишешь "ё"?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

CaptainFlint писал(а):Я говорил не про самостоятельный скрипт, а про script_wdx.
Плагин сам ничего искать не может. Он только подхватывает имена файлов и возвращает полученные скриптом значения.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

Flasher писал(а):Плагин сам ничего искать не может. Он только подхватывает имена файлов и возвращает полученные скриптом значения.
Ну да. И вот этот скрипт, который запускается плагином, пусть выполняет всю работу по открытию файла и чтению нужных байтиков.
Почему же, ё-моё, ты нигде не пишешь "ё"?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

CaptainFlint писал(а):пусть выполняет всю работу по открытию файла и чтению нужных байтиков.
Так в этом-то и суть вопроса была, чтобы понять, откуда мысль родилась:
CaptainFlint писал(а):скриптом это делается не сложнее, чем плагином
Для поиска секций, как я понимаю, используются специальные API-функции, к которым без сторонних средств не подберёшься.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Serge Yolkin
Сообщения: 664
Зарегистрирован: Сб июл 25, 2009 11:12

Сообщение Serge Yolkin »

MVV
Код по приведенной Вами ссылке тоже дотнетовский. Не то, чтобы фатально, но крайне нежелательно.

Зато там заголовок довольно подробно описан:
Структура PE содержит заголовки разделов данных. PE заголовки содержат заголовки NT (IMAGE_NT_HEADERS в WinNT.h), в которых инкапсулированы необязательные заголовки (IMAGE_OPTIONAL_HEADER в WinNT.h). Необязательный заголовок имеет массив записей IMAGE_DATA_DIRECTORY, называется DataDirectory. Запись IMAGE_DATA_DIRECTORY указывает фактическое расположение данных в PE-файле (так называемый модуль загрузки). Запись, в которой вы заинтересованы является индексом IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR. Эта запись указывает на данные .NET. Если эта запись существует и поле VirtualAddress указывает на действительную область в рамках одной из последующих секций, это означает, что компонент является управляемым.
и картинка есть :)

Добавлено спустя 13 минут:
CaptainFlint писал(а):пусть выполняет всю работу по открытию файла и чтению нужных байтиков.
Serge Yolkin писал(а):Болванку скрипта вчера пробовал сделать, но не дождался, когда он отработает на папке ~60Mb, прибил.
"распространять в комплекте с седуксеном..."
Аватара пользователя
CaptainFlint
Сообщения: 6239
Зарегистрирован: Вт дек 14, 2004 22:34
Контактная информация:

Сообщение CaptainFlint »

Flasher писал(а):Для поиска секций, как я понимаю, используются специальные API-функции, к которым без сторонних средств не подберёшься.
Нет, никаких API нет. Вернее, может, и есть, но я о них не слышал. Обычно PE-формат разбирается вручную, структура заголовков документирована. Просто считывается блок данных фиксированного размера, по определённому смещению из него берётся число, это число задаёт новое смещение внутри файла для следующего заголовка и т.д.
Serge Yolkin писал(а):Болванку скрипта вчера пробовал сделать, но не дождался, когда он отработает на папке ~60Mb, прибил.
Если болванка скрипта выполняла тупой поиск подстроки во всём содержимом файла, то, разумеется, будет тормозить. Я потому и говорю про чтение и разбор заголовков, чтобы сразу прыгать на нужное смещение, а не перебирать весь двоичный мусор (в котором, к тому же, могут найтись сигнальные строки и дать ложное срабатывание).
Почему же, ё-моё, ты нигде не пишешь "ё"?
Ответить