Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;#########################################################################################################
- comment @
- *********************************************************************************************************
- Минимальное приложение для виндоуз
- использующее описания структур РЕ-файла для непосредственного конструирования
- РЕ-файла на ассемблере
- c выравниванием секций в памяти и на диске сведённым к минимуму
- командный файл для сборки может выглядеть, например, так:
- _______________________________________________________________________
- c:\masm32\bin\ml /c minwinpeunal.asm
- c:\masm32\bin\link16 /tiny minwinpeunal.obj, minwinpeunal.exe,,,,,
- pause
- _______________________________________________________________________
- *********************************************************************************************************
- @
- .386 ;разрешены непривелигированные инструкции для 386
- .model FLAT ;плоская модель памяти
- include pe.inc ;файл с описанием структур РЕ
- FLAG equ 103h ;32битный, исполняемый, без перемещаемых элементов
- SUBSYS equ 2 ;подсистема графического интерфейса
- BASE equ 400000h ;база загрузки
- SEC_ALIGN EQU 2h ;SectionAlignment
- FILE_ALIGN EQU 2h ;FileAlignment
- ; equ SEC_ALIGN - FILE_ALIGN ;разность между файловым и секционным выравниваанием
- ;начало файла
- ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- mycode segment BYTE USE32 ;определение 32-разрядного сегмента с байтовым выравниванием
- _file_start:
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- _IMAGE_DOS_HEADER <'ZM',,,,,,,,,,,,,,,,,,offset PEsign>
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;РЕ-заголовоки
- ;пояснения к структурам заголовка в РЕ.инк
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- PEsign dd IMAGE_NT_SIGNATURE ;РЕ-сигнатура
- FileHeader _IMAGE_FILE_HEADER {\
- 14Ch\;386 машина
- ,1\;число секций
- ,\;TimeDateStamp,
- ,\;PointerToSymbolTable
- ,\;NumberOfSymbols
- ,SIZEOF _IMAGE_OPTIONAL_HEADER \;SizeOfOptionalHeader
- ,FLAG\;Characteristics
- }
- comment @
- опциональный заголовок РЕ
- он также используется в для хранения имени функции 'MessageBoxA'
- значение полей следующее:
- Magic по умолчанию 10Bh нормальный исполняемый файл
- MajorLinkerVersion ?
- MinirLinkerVersion ?
- SizeOfCode
- SizeOfInitializeData
- SizeOfUninitializeData
- AddressOfEntryPoint начало исполняемого кода
- BaseOfCode ?
- BaseOfData ?
- ImageBase база загрузки файла BASE
- SectionAlignment выравнивание секций = SEC_ALIGN
- FileAlignment = FILE_ALIGN
- MajorOperatingSystemVersion ?
- MinirOperatingSystemVersion ?
- MajorImageVersion ?
- MinorImageVersion ?
- MajorSubsystemVersion версия ОС, на НТ 5.2 работало при 4 и 5
- MinorSubsystemVersion работало при 0,1,2 - оба значения проверяются
- Win32VersionValue ?
- SizeOfImage размер файла
- SizeOfHeaders размер заголовков - дос,НТ,таблицы секций, в случае несоотвенствия приложение может быть незагружено
- CheckSum ?
- Subsystem 2 ГУИ, при 3 КУИ - появляется также окно консоли, при 7 КУИ ПОСИКС, выдаётся сообщение, что система несмогла найти запускаемый файл
- DllCharacteristics ?
- SizeOfStackReserve 0;значения по умолчанию, выделение поумолчанию
- SizeOfStackCommit 0
- SizeOfHeapReserve 0
- SizeOfHeapCommit 0
- LoaderFlags ?
- NumberOfRvaAndSizes
- DataDirectoryExport директория экспорта - пустая
- DataDirectoryImport директория импорта - используется
- @
- OptionFileHeader_ _IMAGE_OPTIONAL_HEADER <,,,offset file_end - offset _file_start,,,offset _start\
- ,,,BASE,SEC_ALIGN,FILE_ALIGN,,,,,4,0,,offset file_end - offset _file_start,offset import - offset _file_start,,SUBSYS\
- ,,,,,,,16,,<offset import,offset endImport - offset import>,,,,,,,,,,,,,>
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;таблица секций
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;используется одна секция
- ;значение полей нижеследующей _IMAGE_SECTION_HEADER следующее:
- ;0. имя секции
- ;1. виртуальный размер секции
- ;2. РВА секции
- ;3. размер секции на диске
- ;4. файловое смещение секции на диске
- ;5. PointerToRelocations
- ;6. PointerToLinenumbers
- ;7. NumberOfRelocations
- ;8. NumberOfLinenumbers
- ;9. Characteristics
- section _IMAGE_SECTION_HEADER { \
- '.text'\;0
- ,0 \;1
- ,0 \;2
- ,offset file_end - offset _file_start\;3
- ,0 \;4
- ,0 \;5
- ,0 \;6
- ,0 \;7
- ,0 \;8
- ,0 \;9 можно утановить в 0
- }
- endSection:
- ;конец таблицы секций
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;db (200h- sizeof _IMAGE_NT_HEADERS - sizeof _IMAGE_DOS_HEADER - sizeof _IMAGE_SECTION_HEADER) DUP(0) ;файловое выравнивание секции
- import _IMAGE_IMPORT_DESCRIPTOR <0,0,0,offset szDllName ,offset firstThunk>
- _IMAGE_IMPORT_DESCRIPTOR <>
- endImport:
- firstThunk:
- MessageBoxA _IMAGE_THUNK_DATA32 <offset impName >, <0>
- impName dw 0
- szFuncName db 'MessageBoxA', 0
- szDllName db 'user32.dll', 0
- ;исполняемый код
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;точка входа
- _start:
- ;закидываем на стек параметры для MessageBoxA
- ;int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
- xor eax, eax ;обнуляем
- push eax ;uType, в еах после загрузки должен быть 0
- push offset szDllName + BASE;lpCaption
- push offset szFuncName + BASE;lpText
- push eax ;hWnd
- ;вызываем MessageBoxA
- call DWORD PTR MessageBoxA + BASE
- ;возвращаемся в CreateProcess загрузчика
- ret
- ;конец исполняемого кода
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- file_end:
- end _file_start
- ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- ;#########################################################################################################
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement