Guest User

Untitled

a guest
Jan 24th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;this is a type-able PE quine PE:
  2. ;a working PE file, made entirely in assembly, with no need of a compiler, with its own source embedded, which it displays on execution, via 'typing' its own binary.
  3. ;you can do it manually via 'type quine.exe'.
  4.  
  5. ;Ange Albertini, BSD Licence, 2011
  6.  
  7. IMAGEBASE equ 400000h
  8.  
  9. db 'MZ'
  10. align 3bh, db 0dh
  11. dd nt_header - IMAGEBASE
  12.     db 0dh
  13.  
  14. incbin 'quine.asm'
  15. db 1ah
  16.  
  17. op db "open", 0
  18. fn db "cmd", 0
  19. param db "/K type quine.exe", 0
  20.  
  21. struc IMAGE_NT_HEADERS
  22.   .Signature         resd 1
  23. endstruc
  24.  
  25. struc IMAGE_FILE_HEADER
  26.   .Machine              resw 1
  27.   .NumberOfSections     resw 1
  28.   .TimeDateStamp        resd 1
  29.   .PointerToSymbolTable resd 1
  30.   .NumberOfSymbols      resd 1
  31.   .SizeOfOptionalHeader resw 1
  32.   .Characteristics      resw 1
  33. endstruc
  34.  
  35. struc IMAGE_OPTIONAL_HEADER32
  36.   .Magic                        resw 1
  37.   .MajorLinkerVersion           resb 1
  38.   .MinorLinkerVersion           resb 1
  39.   .SizeOfCode                   resd 1
  40.   .SizeOfInitializedData        resd 1
  41.   .SizeOfUninitializedData      resd 1
  42.   .AddressOfEntryPoint          resd 1
  43.   .BaseOfCode                   resd 1
  44.   .BaseOfData                   resd 1
  45.   .ImageBase                    resd 1
  46.   .SectionAlignment             resd 1
  47.   .FileAlignment                resd 1
  48.   .MajorOperatingSystemVersion  resw 1
  49.   .MinorOperatingSystemVersion  resw 1
  50.   .MajorImageVersion            resw 1
  51.   .MinorImageVersion            resw 1
  52.   .MajorSubsystemVersion        resw 1
  53.   .MinorSubsystemVersion        resw 1
  54.   .Win32VersionValue            resd 1
  55.   .SizeOfImage                  resd 1
  56.   .SizeOfHeaders                resd 1
  57.   .CheckSum                     resd 1
  58.   .Subsystem                    resw 1
  59.   .DllCharacteristics           resw 1
  60.   .SizeOfStackReserve           resd 1
  61.   .SizeOfStackCommit            resd 1
  62.   .SizeOfHeapReserve            resd 1
  63.   .SizeOfHeapCommit             resd 1
  64.   .LoaderFlags                  resd 1
  65.   .NumberOfRvaAndSizes          resd 1
  66.   .DataDirectory                resb 0
  67. endstruc
  68.  
  69. struc IMAGE_DATA_DIRECTORY_16
  70.     .ExportsVA        resd 1
  71.     .ExportsSize      resd 1
  72.     .ImportsVA        resd 1
  73.     .ImportsSize      resd 1
  74.     .ResourceVA       resd 1
  75.     .ResourceSize     resd 1
  76.     .Exception        resd 2
  77.     .Security         resd 2
  78.     .FixupsVA         resd 1
  79.     .FixupsSize       resd 1
  80.     .DebugVA          resd 1
  81.     .DebugSize        resd 1
  82.     .Description      resd 2
  83.     .MIPS             resd 2
  84.     .TLSVA            resd 1
  85.     .TLSSize          resd 1
  86.     .Load             resd 2
  87.     .BoundImportsVA   resd 1
  88.     .BoundImportsSize resd 1
  89.     .IATVA            resd 1
  90.     .IATSize          resd 1
  91.     .DelayImportsVA   resd 1
  92.     .DelayImportsSize resd 1
  93.     .COM              resd 2
  94.     .reserved         resd 2
  95. endstruc
  96.  
  97. struc IMAGE_SECTION_HEADER
  98.     .Name                    resb IMAGE_SIZEOF_SHORT_NAME
  99.     .VirtualSize             resd 1
  100.     .VirtualAddress          resd 1
  101.     .SizeOfRawData           resd 1
  102.     .PointerToRawData        resd 1
  103.     .PointerToRelocations    resd 1
  104.     .PointerToLinenumbers    resd 1
  105.     .NumberOfRelocations     resw 1
  106.     .NumberOfLinenumbers     resw 1
  107.     .Characteristics         resd 1
  108. endstruc
  109.  
  110. IMAGE_SIZEOF_SHORT_NAME equ 8
  111. IMAGE_SCN_MEM_EXECUTE            equ 020000000h
  112. IMAGE_SCN_MEM_WRITE              equ 080000000h
  113.  
  114. IMAGE_FILE_MACHINE_I386         equ 014ch
  115. IMAGE_NT_OPTIONAL_HDR32_MAGIC equ 010bh
  116.  
  117. IMAGE_FILE_RELOCS_STRIPPED         equ 00001h
  118. IMAGE_FILE_EXECUTABLE_IMAGE        equ 00002h
  119. IMAGE_FILE_LINE_NUMS_STRIPPED      equ 00004h
  120. IMAGE_FILE_LOCAL_SYMS_STRIPPED     equ 00008h
  121. IMAGE_FILE_32BIT_MACHINE           equ 00100h
  122.  
  123.  
  124. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  125.  
  126. FILEALIGN equ 4h
  127. SECTIONALIGN equ FILEALIGN
  128. org IMAGEBASE
  129.  
  130. align 4, db 0
  131. nt_header:
  132. istruc IMAGE_NT_HEADERS
  133.     at IMAGE_NT_HEADERS.Signature, db 'PE',0,0
  134. iend
  135. istruc IMAGE_FILE_HEADER
  136.     at IMAGE_FILE_HEADER.Machine,               dw IMAGE_FILE_MACHINE_I386
  137.     at IMAGE_FILE_HEADER.NumberOfSections,      dw NUMBEROFSECTIONS
  138.     at IMAGE_FILE_HEADER.SizeOfOptionalHeader,  dw SIZEOFOPTIONALHEADER
  139.     at IMAGE_FILE_HEADER.Characteristics,       dw IMAGE_FILE_RELOCS_STRIPPED | IMAGE_FILE_EXECUTABLE_IMAGE | IMAGE_FILE_LINE_NUMS_STRIPPED | IMAGE_FILE_LOCAL_SYMS_STRIPPED | IMAGE_FILE_32BIT_MACHINE
  140. iend
  141.  
  142. OptionalHeader:
  143. istruc IMAGE_OPTIONAL_HEADER32
  144.     at IMAGE_OPTIONAL_HEADER32.Magic                    , dw IMAGE_NT_OPTIONAL_HDR32_MAGIC
  145.     at IMAGE_OPTIONAL_HEADER32.AddressOfEntryPoint      , dd EntryPoint - IMAGEBASE
  146.     at IMAGE_OPTIONAL_HEADER32.ImageBase                , dd IMAGEBASE
  147.     at IMAGE_OPTIONAL_HEADER32.SectionAlignment         , dd SECTIONALIGN
  148.     at IMAGE_OPTIONAL_HEADER32.FileAlignment            , dd FILEALIGN
  149.     at IMAGE_OPTIONAL_HEADER32.MajorSubsystemVersion    , dw 4
  150.     at IMAGE_OPTIONAL_HEADER32.SizeOfImage              , dd SIZEOFIMAGE
  151.     at IMAGE_OPTIONAL_HEADER32.SizeOfHeaders            , dd SIZEOFHEADERS  ; can be 0 in some circumstances
  152.     at IMAGE_OPTIONAL_HEADER32.Subsystem                , dw 2
  153.     at IMAGE_OPTIONAL_HEADER32.NumberOfRvaAndSizes      , dd NUMBEROFRVAANDSIZES
  154. iend
  155.  
  156. DataDirectory:
  157. istruc IMAGE_DATA_DIRECTORY_16
  158.     at IMAGE_DATA_DIRECTORY_16.ImportsVA,   dd IMPORT_DESCRIPTOR - IMAGEBASE
  159. iend
  160.  
  161. NUMBEROFRVAANDSIZES equ 16
  162.  
  163. SIZEOFOPTIONALHEADER equ $ - OptionalHeader
  164.  
  165. SectionHeader:
  166. istruc IMAGE_SECTION_HEADER
  167.     at IMAGE_SECTION_HEADER.VirtualAddress, dd Section0Start - IMAGEBASE
  168.     at IMAGE_SECTION_HEADER.SizeOfRawData, dd SECTION0SIZE
  169.     at IMAGE_SECTION_HEADER.PointerToRawData, dd Section0Start - IMAGEBASE
  170.     at IMAGE_SECTION_HEADER.Characteristics, dd IMAGE_SCN_MEM_EXECUTE + IMAGE_SCN_MEM_WRITE
  171. iend
  172. NUMBEROFSECTIONS equ ($ - SectionHeader) / IMAGE_SECTION_HEADER_size
  173.  
  174. align FILEALIGN, db 0
  175. align 1000h, db 0           ; necessary under Win7
  176. SIZEOFHEADERS equ $ - IMAGEBASE
  177.  
  178. bits 32
  179. Section0Start:
  180.  
  181. EntryPoint:
  182.     push 1
  183.     push 0
  184.     push param
  185.     push fn
  186.     push op
  187.     push 0
  188.     call [ShellExecuteA]
  189.  
  190.     push 0
  191.     call [ExitProcess]
  192.  
  193. kernel32.dll_iat:
  194. ExitProcess:
  195.     DD hnExitProcess - IMAGEBASE
  196.     DD 0
  197.  
  198. shell32.dll_iat:
  199. ShellExecuteA:
  200.     DD hnShellExecuteA - IMAGEBASE
  201.     DD 0
  202.  
  203. IMPORT_DESCRIPTOR:
  204. kernel32.dll_DESCRIPTOR:
  205.     dd kernel32.dll_hintnames - IMAGEBASE
  206.     dd 0
  207.     dd 0
  208.     dd kernel32.dll - IMAGEBASE
  209.     dd kernel32.dll_iat - IMAGEBASE
  210.  
  211. shell32.dll_DESCRIPTOR:
  212.     dd shell32.dll_hintnames - IMAGEBASE
  213.     dd 0
  214.     dd 0
  215.     dd shell32.dll - IMAGEBASE
  216.     dd shell32.dll_iat - IMAGEBASE
  217.  
  218.     times 5 dd 0
  219.  
  220. HintNames:
  221. kernel32.dll_hintnames:
  222.     DD hnExitProcess - IMAGEBASE
  223.     DD 0
  224.  
  225. shell32.dll_hintnames:
  226.     DD hnShellExecuteA - IMAGEBASE
  227.     DD 0
  228.  
  229. kernel32.dll  DB 'kernel32.dll',0
  230. shell32.dll  DB 'shell32.dll',0
  231.  
  232. hnShellExecuteA:
  233.     dw 0
  234.     db 'ShellExecuteA',0
  235.  
  236. hnExitProcess:
  237.     dw 0
  238.     db 'ExitProcess',0
  239.  
  240.  
  241. SECTION0SIZE equ $ - Section0Start
  242. SIZEOFIMAGE equ $ - IMAGEBASE
Add Comment
Please, Sign In to add comment