Собственно сабж. Я знаю несколько отличий: 1. Subsystem = 1 2. Import Table содержит только импорт из ntoskrnl.exe Что есть ещё?
пишется на законное место в PE-хидере. Как высчитывается точно не скажу, обычно использую lordPE для пересчета после модификации бинарника. А насчет импорта - да, там она более другая. Я когда пытался на фасме собрать драйвер долго не мог понять в чем проблема. Потом нашел на форуме фасма пример драйвера (beep.sys) - там все расписано. ps: вот еще отличия - обязательное присутсвие релокейшенов, предопределенные имена секций - INIT (обязательно и именно так), PAGE (по моему может и не быть). Вроде все...
Согласен с bogrus'ом. INIT это секция содержащая код, который вызывается 1 раз, и после вызова можно удалить его. А если у меня IT нет, то всё норма?
у меня на XP были проблемы. Правда они были как с импортом так и с секциями. Приду домой - попробую переименовать - посмотрим. Насчет it - помнится тут был топик о том что exe вообзе без импорта не грузится. Подозреваю что и с драйверами может быть похожий прикол. Но как минимум надо тетстить на nt4/2k/xp что-бы говорить уверенно.
Значит так... 1. Для запуска драйвера необходимы всего две секции: код и relocation. Названия секций роли не играют. 2. В импорте необходимости нет. 3. PE Checksum - если очень нужно могу замылить исходник. Все проверено и для W2k и для XP
>>3. PE Checksum - если очень нужно могу замылить исходник. Замыль не в падлу markamer@mail.ru infern0 сам проверял для обычного PE, импорт не нужен.
Zufyxe 1. Тогда видимо можно одну секцию n0name Для обычного PE (на NT4.0, w2k) нужен импорт с kernel32.dll, а драйверу эта dll не нужна
я конечно начинающий но я посмотрел в разных dll-ках во всех Checksum 0000000h смотрел с помощью TC6.02 Image File Header : Machine: 014Ch (i386 or later, and compatible) Number of Sections: 0005h Time Date Stamp: 3E9D7937h -> 16/04/2003 19:39:35 Symbols Pointer: 00000000h Number Of Symbols: 00000000h Size Of Optional Header: 00E0h Flags: 210Eh Image Optional Header Magic 010Bh ( PE32 : normal 32-bit ) Linker version 6.00 Size of code 00003000h Size of initialized data 00050000h Size of uninitialized data 00000000h Address of Entry Point (RVA) 0000381Bh Base of code 00001000h Base of data 00004000h Image base 10000000h Section Alignment 00001000h File Alignment 00001000h Required OS version 4.00 Image version 0.00 Subsystem version 4.00 Reserved1 0 Size of image 00054000h ( 344064 bytes) Size of headers 00001000h Checksum 00000000h Subsystem 0002h (Image runs in the Windows GUI subsystem) DLL Characteristics 0000h Size of Stack Reserve 00100000h Size of Stack Commit 00001000h Size of Heap Reserve 00100000h Size of Heap Commit 00001000h loader flags 00000000h (obsolete) Number of Data Directory 00000010h DATA DIRECTORY (Virtual Address and Size) EXPORT rva: 00004F40h size: 0000004Eh IMPORT rva: 00004970h size: 000000A0h RESOURCE rva: 00007000h size: 0004B660h или это не CRC ????
можно конечно и в дллках смотреть, но разговор шел о _драйверах_, поэтому попробуй посмотреть на файлы *.sys например из каталога %windir%\system32\drivers
Вот что касается PE checksum: это я использовал в одном вирусе, сейчас уже не вспомню где взял описание алгоритма. Однозначно работает под NT 4.0\5.0\5.1 Без коментариев разберетесь? CSum proc ; ESI - file image ; ECX - image size push ebx push ebp push esi push ecx shr ecx,1 dec ecx xor eax,eax mov ebx,eax scount: lodsw add ebx,eax mov eax,ebx and ebx,0ffffh shr eax,10h add ebx,eax loop scount mov eax,ebx shr eax,10h add ax,bx mov di,ax xor edx,edx mov ebx,1 cmp di,dx mov ebp,ebx adc ebp,-1 mov cx,dx sub di,bp sub di,cx xor eax,eax cmp di,ax adc ebx,-1 sub di,bx sub di,ax movzx eax,di pop ecx add eax,ecx pop edx pop ebp pop ebx CSum_end: ret CSum endp