View previous topic :: View next topic |
Author |
Message |
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Fri Sep 13, 2013 20:45 Post subject: Как идентифицировать бинарник .net ? |
|
|
Доброго времени суток всем!
Понадобился способ отличить бинарник Win32 от бинарника .net. Программы-анализаторы бинарников не подходят. Идеальный вариант - контентный плагин для TC (искал, не нашёл), но устроит описание сигнатуры, однозначно идентифицирующей исполняемый файл DotNet. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Sep 13, 2013 20:56 Post subject: |
|
|
Serge Yolkin
PEViewer (WLX) ?
Поправил. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Last edited by Flasher on Fri Sep 13, 2013 23:43; edited 1 time in total |
|
Back to top |
|
|
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
|
Back to top |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Fri Sep 13, 2013 22:48 Post subject: |
|
|
Flasher
WFX? Не нашёл...
А WLX - не вариант. Так и с PEStudio можно возиться
MVV
DotNetInfo сам на дотнете... Но, наверное, сошёл бы, как разовый инструмент, только кто бы скомпилил... (Как и сказал Alextp, бинарника нет)
А с методом определения ни у кого идей нет? Вроде, там после заголовка exe ещё заголовок среды исполнения идти должен, только визуально я его не распознал. Скрипт бы написал, и дело с концом.
Оффтоп Месяца два, как снёс плагин для просмотра .hlp за ненадобностью. И вот, в соответствии с законом подлости, у DotNetInfo справка именно в этом формате.
Добавлено спустя 40 минут:
О! Кажется, в дотнет-бинарниках есть явное упоминание mscoree.dll. Жаль, что не в начале, а ближе к концу. Из скрипта большие файлы читать долго.
! | Avada: | Для оффтопных вставок в постах теперь есть механизм спойлеров. Поправил. | |
|
Back to top |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Sat Sep 14, 2013 16:47 Post subject: |
|
|
Avada
Продолжение оффтопа Прошу прощения, но здесь не нашёл, поиск по слову "спойлер" в разделе "Сайт Все о Total Commander" ничего не дал, просмотр названий тем в том же разделе - тоже. Может, эту информацию куда-нибудь прилепить? А пока, если не трудно, ткните носом, пожалуйста. |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10263 Location: Россия, Саратов
|
(Separately) Posted: Sat Sep 14, 2013 16:56 Post subject: |
|
|
Serge Yolkin
Hidden text А там, в стандартном FAQ, ничего и быть не может. Вот где надо смотреть. Как и все прочие новации. А ежели искать по спойлер*, то и поиском обнаружится. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Thu Sep 19, 2013 14:28 Post subject: |
|
|
Несмотря на то, что актуальная проблема была решена благодаря MVV и ProgMan13 в другой ветке, идея разбора бинарника из скрипта показалась интересной (и не такой сложной, как на первый взгляд) Code: | var
b=new ActiveXObject('Microsoft.XMLDOM').createElement('binObj'),
d=false, // DLL?
f=new ActiveXObject('Scripting.FileSystemObject'),
n, // имя файла (аргумент)
s=new ActiveXObject('ADODB.Stream'),
t;
b.dataType='bin.hex';
s.type=1;
s.open();
if(WScript.Arguments.length&&f.fileExists(WScript.Arguments(0)))n=WScript.Arguments(0);
else fa('Файл не найден!');
if(f.getFile(n).size<256)fa(n+'\nНе исполняемый');
s.loadFromFile(n);
b.nodeTypedValue=s.read(64); // читаем заголовок (64 байта)
// b.text — hex строка
t=b.text.substr(0,4); // берём первые 2 байта (сигнатура)
if(t=='5a4d')fa(n+'\nDOS 16 ZM(exe)'); // ZM — не актуально?
if(t!='4d5a')fa(n+'\nНе исполняемый'); // не MZ
// теперь у нас есть файл, и он, вроде как, исполняемый
t=b.text.substr(48,2); // берём байт по смещению 0x18 (24)
if('0x'+t<64)fa(n+'\nDOS 16 MZ(exe)'); // адрес relocation table
t=fb(60); // берём 4 байта по смещению 0x3C (60)
// здесь находится адрес заголовка PE
if(f.getFile(n).size<256+t)fa(n+'\nНеизвестный формат');
s.Position=t;
b.nodeTypedValue=s.read(24); // читаем заголовок PE (24 байта)
t=b.text.substr(0,4); // берём первые 2 байта (сигнатура)
if(t=='4e45')fa(n+'\nWin 16 NE(exe)'); // NE
if(t=='4c45')fa(n+'\nWin 16 LE(VxD)'); // LE — не актуально?
if(t=='4c58')fa(n+'\nOS2 16 LX(VxD)'); // LX — не актуально?
if(t=='5733')fa(n+'\nWin 16 W3(exe)'); // W3 — не актуально?
if(t=='5734')fa(n+'\nWin 32 W4(VMM)'); // W4 — не актуально?
if(t!='5045')fa(n+'\nНеизвестный формат'); // не PE
if(b.text.substr(4,4)!='0000')fa(n+'\nНеизвестный формат'); // неправильный PE?
// теперь, похоже, наш файл ещё и PE
t=1*('0x'+b.text.substr(46,2)); // берём последний байт (Characteristics)
if(t&32)d=true; // да, это DLL
// дополнительный заголовок PE:
// заголовок COFF 28 байт?
// заголовок NT 64 байта
// массив директорий данных 128 байт?
b.nodeTypedValue=s.read(20); // читаем 20 байт дополнительного заголовка PE
if(b.text.substr(2,2)=='02'){ // если 64 бита (PE32+), на этом и закончили
if(d)fa(n+'\nWin 64 (DLL)');
else fa(n+'\nWin 64 (exe)');
}
// теперь мы знаем, что наш файл PE и он 32 бита
// осталось проверить на дотнетность
s.Position+=(208-20);
// перешли на смещение D0 (208) от начала дополнительного заголовка
b.nodeTypedValue=s.read(8);
// здесь должен быть The CLR header address and size
t=fb(4); // берём 4 байта по смещению 0x04 (4)
if(t){ // если размер CLR заголовка > 0 значит, .Net
if(d)fa(n+'\nDotNet DLL');
else fa(n+'\nDotNet exe');
}else{ // иначе — Win32PE
if(d)fa(n+'\nWin 32 DLL');
else fa(n+'\nWin 32 exe');
}
s.close();
function fa(e){s.close();WScript.echo(e);WScript.quit();} // Выход с сообщением
function fb(e){ // вычисление двордов (DWORD)
return(
1*('0x'+b.text.substr(2*e,2))+
256*('0x'+b.text.substr(2*e+2,2))+
65536*('0x'+b.text.substr(2*e+4,2))+
16777216*('0x'+b.text.substr(2*e+6,2))
);
} |
|
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|