krot

MessageBox minimal

May 6th, 2021
571
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;#########################################################################################################
  2. comment @
  3. *********************************************************************************************************
  4. Минимальное приложение для виндоуз
  5. использующее описания структур РЕ-файла для непосредственного конструирования
  6. РЕ-файла на ассемблере
  7. c выравниванием секций в памяти и на диске сведённым к минимуму
  8. командный файл для сборки может выглядеть, например, так:
  9. _______________________________________________________________________
  10. c:\masm32\bin\ml /c minwinpeunal.asm
  11. c:\masm32\bin\link16 /tiny minwinpeunal.obj, minwinpeunal.exe,,,,,
  12. pause
  13. _______________________________________________________________________
  14.  
  15. *********************************************************************************************************
  16. @
  17.  
  18. .386        ;разрешены непривелигированные инструкции для 386
  19. .model FLAT ;плоская модель памяти
  20. include pe.inc ;файл с описанием структур РЕ
  21. FLAG equ 103h ;32битный, исполняемый, без перемещаемых элементов
  22. SUBSYS equ 2 ;подсистема графического интерфейса
  23. BASE equ 400000h ;база загрузки
  24. SEC_ALIGN EQU 2h ;SectionAlignment
  25. FILE_ALIGN EQU 2h ;FileAlignment
  26. ; equ SEC_ALIGN - FILE_ALIGN ;разность между файловым и секционным выравниваанием
  27. ;начало файла
  28. ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  29. mycode segment BYTE USE32 ;определение 32-разрядного сегмента с байтовым выравниванием
  30. _file_start:
  31. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  32. _IMAGE_DOS_HEADER <'ZM',,,,,,,,,,,,,,,,,,offset PEsign>
  33. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  34.  
  35. ;РЕ-заголовоки
  36. ;пояснения к структурам заголовка в РЕ.инк
  37. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  38. PEsign dd IMAGE_NT_SIGNATURE ;РЕ-сигнатура
  39. FileHeader _IMAGE_FILE_HEADER {\
  40. 14Ch\;386 машина
  41. ,1\;число секций
  42. ,\;TimeDateStamp,
  43. ,\;PointerToSymbolTable
  44. ,\;NumberOfSymbols
  45. ,SIZEOF _IMAGE_OPTIONAL_HEADER \;SizeOfOptionalHeader
  46. ,FLAG\;Characteristics
  47. }
  48.  
  49. comment @
  50. опциональный заголовок РЕ
  51. он также используется в для хранения имени функции 'MessageBoxA'
  52. значение полей следующее:
  53. Magic       по умолчанию 10Bh нормальный исполняемый файл
  54. MajorLinkerVersion      ?
  55. MinirLinkerVersion      ?
  56. SizeOfCode             
  57. SizeOfInitializeData   
  58. SizeOfUninitializeData 
  59. AddressOfEntryPoint     начало исполняемого кода
  60. BaseOfCode              ?
  61. BaseOfData              ?
  62. ImageBase               база загрузки файла BASE
  63. SectionAlignment        выравнивание секций = SEC_ALIGN
  64. FileAlignment           = FILE_ALIGN
  65. MajorOperatingSystemVersion ?
  66. MinirOperatingSystemVersion ?
  67. MajorImageVersion           ?
  68. MinorImageVersion           ?
  69. MajorSubsystemVersion       версия ОС, на НТ 5.2 работало при 4 и 5
  70. MinorSubsystemVersion       работало при 0,1,2 - оба значения проверяются
  71. Win32VersionValue       ?
  72. SizeOfImage             размер файла
  73. SizeOfHeaders           размер заголовков - дос,НТ,таблицы секций, в случае несоотвенствия приложение может быть незагружено
  74. CheckSum                ?
  75. Subsystem               2 ГУИ, при 3 КУИ - появляется также окно консоли, при 7 КУИ ПОСИКС, выдаётся сообщение, что система несмогла найти запускаемый файл
  76. DllCharacteristics      ?
  77. SizeOfStackReserve      0;значения по умолчанию, выделение поумолчанию
  78. SizeOfStackCommit       0
  79. SizeOfHeapReserve       0
  80. SizeOfHeapCommit        0
  81. LoaderFlags             ?
  82. NumberOfRvaAndSizes    
  83. DataDirectoryExport     директория экспорта - пустая
  84. DataDirectoryImport     директория импорта - используется
  85. @
  86.  
  87. OptionFileHeader_ _IMAGE_OPTIONAL_HEADER <,,,offset file_end - offset _file_start,,,offset _start\
  88. ,,,BASE,SEC_ALIGN,FILE_ALIGN,,,,,4,0,,offset file_end - offset _file_start,offset import - offset _file_start,,SUBSYS\
  89. ,,,,,,,16,,<offset import,offset endImport - offset import>,,,,,,,,,,,,,>
  90.  
  91. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  92.  
  93. ;таблица секций
  94. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  95. ;используется одна секция
  96. ;значение полей нижеследующей _IMAGE_SECTION_HEADER следующее:
  97. ;0. имя секции
  98. ;1. виртуальный размер секции
  99. ;2. РВА секции
  100. ;3. размер секции на диске
  101. ;4. файловое смещение секции на диске
  102. ;5. PointerToRelocations
  103. ;6. PointerToLinenumbers
  104. ;7. NumberOfRelocations
  105. ;8. NumberOfLinenumbers
  106. ;9. Characteristics
  107. section _IMAGE_SECTION_HEADER { \
  108. '.text'\;0
  109. ,0  \;1        
  110. ,0 \;2         
  111. ,offset file_end - offset _file_start\;3
  112. ,0 \;4         
  113. ,0 \;5
  114. ,0 \;6
  115. ,0 \;7
  116. ,0 \;8     
  117. ,0 \;9 можно утановить в 0
  118. }
  119. endSection:
  120. ;конец таблицы секций
  121. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  122.  
  123.  
  124.  
  125. ;db (200h- sizeof _IMAGE_NT_HEADERS - sizeof _IMAGE_DOS_HEADER - sizeof _IMAGE_SECTION_HEADER) DUP(0) ;файловое выравнивание секции
  126.  
  127. import _IMAGE_IMPORT_DESCRIPTOR <0,0,0,offset szDllName ,offset firstThunk>
  128. _IMAGE_IMPORT_DESCRIPTOR <>
  129. endImport:
  130. firstThunk:
  131. MessageBoxA _IMAGE_THUNK_DATA32 <offset impName >, <0>
  132. impName dw 0
  133. szFuncName db 'MessageBoxA', 0
  134. szDllName db 'user32.dll', 0
  135. ;исполняемый код
  136. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  137.  
  138. ;точка входа
  139. _start:
  140.     ;закидываем на стек параметры для MessageBoxA
  141.     ;int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
  142.     xor  eax, eax ;обнуляем
  143.     push  eax   ;uType, в еах после загрузки должен быть 0
  144.     push offset szDllName +    BASE;lpCaption
  145.     push offset szFuncName  +   BASE;lpText
  146.     push eax    ;hWnd
  147.     ;вызываем    MessageBoxA
  148.     call DWORD PTR MessageBoxA +   BASE
  149.     ;возвращаемся в CreateProcess загрузчика
  150.     ret
  151.  
  152. ;конец исполняемого кода
  153. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  154. file_end:
  155. end _file_start
  156. ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  157. ;#########################################################################################################
  158.  
RAW Paste Data