Страница 1 из 4
[PluginRequest] WDX для подсветки исполняемых файлов .net
Добавлено: Сб сен 14, 2013 01:06
Serge Yolkin
Уважаемые программисты, насколько трудно написать wdx плагин, определяющий, является ли исполняемый файл дотнетовским? Логика работы примерно такая:
// возвращаемое поле, например, PEType
если (первые два байта - MZ) то {
если (файл содержит текст "mscoree.dll") то {
возвращаем "dotNet"
} иначе возвращаем "Win32/64"
} иначе пропускаем (возвращаем пустую строку)
А если он ещё и x64 от x32 отличить сумеет - цены ему не будет.
Добавлено: Сб сен 14, 2013 11:44
CaptainFlint
Думаю, это можно сделать даже на script_wdx. Формат PE довольно простой, можно найти секцию импортов и поискать там mscoree.dll, чтобы весь файл не шерстить. Уточни, в чём именно у тебя
тут был затык.
Насчёт 32/64: а разве .NET поддерживает спец-сборку под 64 бита? Вроде бы, с точки зрения PE-формата он остаётся 32-битным.
Добавлено: Сб сен 14, 2013 13:52
Serge Yolkin
CaptainFlint писал(а):Думаю, это можно сделать даже на script_wdx.
На счёт скриптовых технологий есть опасение по части тормозов, а не хотелось бы.
CaptainFlint писал(а):Формат PE довольно простой, можно найти секцию импортов и поискать там mscoree.dll, чтобы весь файл не шерстить.
Не специалист, но визуально (в hex) эта библиотека упомянута несколько отдельно, это может оказаться не секция импортов.
CaptainFlint писал(а):Уточни, в чём именно у тебя тут был затык.
Не понял, что надо уточнить. По предложенным плагинам я отписался. Болванку скрипта вчера пробовал сделать, но не дождался, когда он отработает на папке ~60Mb, прибил. Текущую проблему решить можно, если запустить на ночь, а как рабочий инструмент...
CaptainFlint писал(а):Насчёт 32/64: а разве .NET поддерживает спец-сборку под 64 бита?
Не-не-не, я имел в виду следующие варианты экспертных заключений плагина: dotNet, Win32, Win64, noPE. Возвращаемые значения значения не имеют (

), хоть 1-2-3-4. Лишь бы можно было различить.
Добавлено: Сб сен 14, 2013 16:10
Alextp
Попробуй написать автору
http://wincmd.ru/plugring/peviewer.html
- для него сделать Wdx plugin не трудно?
Добавлено: Сб сен 14, 2013 16:22
Serge Yolkin
Alextp
Вариант. Но ещё немного подожду. Может, кто создаст нечто маленькое и шустрое, а то PE Viewer слегка избыточен для этой цели.
Может, я не прав, но логичнее было бы добавить такой функционал в UnicodeTest/LockedTest

Добавлено: Сб сен 14, 2013 16:25
Alextp
Почему логичнее. нет не логичнее. Он не предназначен для рзбора форматов файлов
И я не знаю, как это делать
Добавлено: Сб сен 14, 2013 17:06
Serge Yolkin
Alextp
Логика такая:
- Ваш плагин предназначен не столько для показа какой-то информации, сколько для детектирования файлов, удовлетворяющих определённому условию.
- Основной способ использования Вашего плагина - раскраска файлов и поиск с плагинами, а не создание колонок.
- Группы файлов "занят" и "юникодные" логически не особо связаны друг с другом.
Вот я и подумал, что добавить в него распознование ещё одной-двух групп файлов было бы логично, но нет - так нет.
Добавлено спустя 5 минут:
К тому же, Ваш плагин маленький и шустрый.
Добавлено: Сб сен 14, 2013 17:41
Flasher
CaptainFlint писал(а):Думаю, это можно сделать даже на script_wdx. Формат PE довольно простой, можно найти секцию импортов и поискать там mscoree.dll
А как эту секцию предлагается искать скриптом?
Serge Yolkin писал(а):раскраска файлов и поиск с плагинами, а не создание колонок.
Весьма сомнительная оценка необходимости действий контентного плагина. Не вижу смысла таким способом окрашивать файлы. Колонки наравне со всплывающими подсказками, по мне, - самое что ни на есть очевидное для использования подобных инфоплагинов.
Добавлено: Сб сен 14, 2013 17:55
MVV
Если собрать в виде экзешника
это, можно будет скрипту скармливать...
Добавлено: Сб сен 14, 2013 19:48
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 настолько подробно, чтобы сходу выложить готовую цепочку переходов, но в интернете информации полно, в том числе с примерами кода.
Добавлено: Сб сен 14, 2013 19:55
Flasher
CaptainFlint писал(а):Я говорил не про самостоятельный скрипт, а про script_wdx.
Плагин сам ничего искать не может. Он только подхватывает имена файлов и возвращает полученные
скриптом значения.
Добавлено: Сб сен 14, 2013 20:08
CaptainFlint
Flasher писал(а):Плагин сам ничего искать не может. Он только подхватывает имена файлов и возвращает полученные скриптом значения.
Ну да. И вот этот скрипт, который запускается плагином, пусть выполняет всю работу по открытию файла и чтению нужных байтиков.
Добавлено: Сб сен 14, 2013 20:11
Flasher
CaptainFlint писал(а):пусть выполняет всю работу по открытию файла и чтению нужных байтиков.
Так в этом-то и суть вопроса была, чтобы понять, откуда мысль родилась:
CaptainFlint писал(а):скриптом это делается не сложнее, чем плагином
Для поиска секций, как я понимаю, используются специальные API-функции, к которым без сторонних средств не подберёшься.
Добавлено: Сб сен 14, 2013 20:36
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, прибил.
"распространять в комплекте с седуксеном..."
Добавлено: Сб сен 14, 2013 20:43
CaptainFlint
Flasher писал(а):Для поиска секций, как я понимаю, используются специальные API-функции, к которым без сторонних средств не подберёшься.
Нет, никаких API нет. Вернее, может, и есть, но я о них не слышал. Обычно PE-формат разбирается вручную, структура заголовков документирована. Просто считывается блок данных фиксированного размера, по определённому смещению из него берётся число, это число задаёт новое смещение внутри файла для следующего заголовка и т.д.
Serge Yolkin писал(а):Болванку скрипта вчера пробовал сделать, но не дождался, когда он отработает на папке ~60Mb, прибил.
Если болванка скрипта выполняла тупой поиск подстроки во всём содержимом файла, то, разумеется, будет тормозить. Я потому и говорю про чтение и разбор заголовков, чтобы сразу прыгать на нужное смещение, а не перебирать весь двоичный мусор (в котором, к тому же, могут найтись сигнальные строки и дать ложное срабатывание).