Skip to content
This repository has been archived by the owner on Nov 8, 2022. It is now read-only.

SerafimArts/PEReader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PE/COFF Reader

Note: WIP

See: https://en.wikipedia.org/wiki/Portable_Executable

TL;DR: This means that this implementation reads data from the following files:

  • *.exe
  • *.dll
  • *.ocx
  • *.sys
  • *.scr
  • *.drv
  • *.cpl
  • *.efi

Example

Reading example:

<?php

use Serafim\PEReader\Reader;
use Serafim\PEReader\Stream\FileStream;

$reader = new Reader();

dump($reader->read(new FileStream('../path/to/file.exe')));

An example output of php.exe (PHP 8.0.1 x64 NTS):

Serafim\PEReader\Image {#20
  +dos: Serafim\PEReader\Image\DosHeader {#29
    +signature: 23117
    +usedBytesInTheLastPage: 144
    +fileSizeInPages: 3
    +numberOfRelocationItems: 0
    +headerSizeInParagraphs: 4
    +minimumExtraParagraphs: 0
    +maximumExtraParagraphs: 65535
    +initialRelativeSS: 0
    +initialSP: 184
    +checksum: 0
    +initialIP: 0
    +initialRelativeCS: 0
    +addressOfRelocationTable: 64
    +overlayNumber: 0
    -reserved: array:4 [
      0 => 0
      1 => 0
      2 => 0
      3 => 0
    ]
    +oemIdentifier: 0
    +oemInfo: 0
    -reserved2: array:10 [
      0 => 0
      1 => 0
      2 => 0
      3 => 0
      4 => 0
      5 => 0
      6 => 0
      7 => 0
      8 => 0
      9 => 0
    ]
    +addressOfNewExeHeader: 272
  }
  +coff: Serafim\PEReader\Image\CoffHeader {#52
    +signature: 17744
    +fileHeader: Serafim\PEReader\Image\Coff\FileHeader {#48
      +machine: 34404
      +numberOfSections: 6
      +timestamp: DateTimeImmutable @1611147557 {#57
        date: 2021-01-20 12:59:17.0 UTC (+00:00)
      }
      +pointerToSymbolTable: 0
      +numberOfSymbols: 0
      +sizeOfOptionalHeader: 240
      +characteristics: 34
    }
    +optionalHeader: Serafim\PEReader\Image\OptionalHeader\OptionalHeader64 {#40
      +magic: 523
      +majorLinkerVersion: 14
      +minorLinkerVersion: 28
      +sizeOfCode: 48128
      +sizeOfInitializedData: 90624
      +sizeOfUninitializedData: 0
      +addressOfEntryPoint: 49360
      +baseOfCode: 4096
      +imageBase: 5368709120
      +sectionAlignment: 4096
      +fileAlignment: 512
      +majorOperatingSystemVersion: 6
      +minorOperatingSystemVersion: 0
      +majorImageVersion: 0
      +minorImageVersion: 0
      +majorSubsystemVersion: 6
      +minorSubsystemVersion: 0
      +win32VersionValue: 0
      +sizeOfImage: 163840
      +sizeOfHeaders: 1024
      +checkSum: 163994
      +subsystem: 3
      +dllCharacteristics: 49504
      +sizeOfStackReserve: 67108864
      +sizeOfStackCommit: 4096
      +sizeOfHeapReserve: 1048576
      +sizeOfHeapCommit: 4096
      +loaderFlags: 0
      +numberOfRvaAndSizes: 16
      +dataDirectories: Serafim\PEReader\Image\OptionalHeader\DataDirectories {#32
        +export: Serafim\PEReader\Image\OptionalHeader\DataDirectory {#38
          +virtualAddress: 121936
          +size: 144
        }
        +import: Serafim\PEReader\Image\OptionalHeader\DataDirectory {#34
          +virtualAddress: 122080
          +size: 320
        }
        +resource: Serafim\PEReader\Image\OptionalHeader\DataDirectory {#51
          +virtualAddress: 147456
          +size: 4356
        }
        +exception: Serafim\PEReader\Image\OptionalHeader\DataDirectory {#36
          +virtualAddress: 143360
          +size: 1956
        }
        +security: Serafim\PEReader\Image\OptionalHeader\DataDirectory {#78
          +virtualAddress: 0
          +size: 0
        }
        +baseRelocationTable: Serafim\PEReader\Image\OptionalHeader\DataDirectory {#77
          +virtualAddress: 155648
          +size: 5160
        }
        +debugDirectory: Serafim\PEReader\Image\OptionalHeader\DataDirectory {#76
          +virtualAddress: 118316
          +size: 84
        }
        +copyrightOrArchitectureSpecificData: Serafim\PEReader\Image\OptionalHeader\DataDirectory {#80
          +virtualAddress: 0
          +size: 0
        }
        +globalPtr: Serafim\PEReader\Image\OptionalHeader\DataDirectory {#81
          +virtualAddress: 0
          +size: 0
        }
        +tlsDirectory: Serafim\PEReader\Image\OptionalHeader\DataDirectory {#79
          +virtualAddress: 0
          +size: 0
        }
        +loadConfigurationDirectory: Serafim\PEReader\Image\OptionalHeader\DataDirectory {#75
          +virtualAddress: 118400
          +size: 312
        }
        +boundImportDirectory: Serafim\PEReader\Image\OptionalHeader\DataDirectory {#45
          +virtualAddress: 0
          +size: 0
        }
        +importAddressTable: Serafim\PEReader\Image\OptionalHeader\DataDirectory {#35
          +virtualAddress: 53248
          +size: 2200
        }
        +delayLoadImportDescriptors: Serafim\PEReader\Image\OptionalHeader\DataDirectory {#46
          +virtualAddress: 0
          +size: 0
        }
        +comRuntimeDescriptor: Serafim\PEReader\Image\OptionalHeader\DataDirectory {#44
          +virtualAddress: 0
          +size: 0
        }
        +reserved: Serafim\PEReader\Image\OptionalHeader\DataDirectory {#73
          +virtualAddress: 0
          +size: 0
        }
      }
    }
  }
  +sections: Serafim\PEReader\Image\SectionHeaders {#27
    -headers: array:6 [
      0 => Serafim\PEReader\Image\SectionHeader {#24
        +name: ".text"
        +misc: 47788
        +virtualAddress: 4096
        +sizeOfRawData: 48128
        +pointerToRawData: 1024
        +pointerToRelocations: 0
        +pointerToLineNumbers: 0
        +numberOfRelocations: 0
        +numberOfLineNumbers: 0
        +characteristics: 1610612768
      }
      1 => Serafim\PEReader\Image\SectionHeader {#63
        +name: ".rdata"
        +misc: 76800
        +virtualAddress: 53248
        +sizeOfRawData: 76800
        +pointerToRawData: 49152
        +pointerToRelocations: 0
        +pointerToLineNumbers: 0
        +numberOfRelocations: 0
        +numberOfLineNumbers: 0
        +characteristics: 1073741888
      }
      2 => Serafim\PEReader\Image\SectionHeader {#82
        +name: ".data"
        +misc: 11480
        +virtualAddress: 131072
        +sizeOfRawData: 1536
        +pointerToRawData: 125952
        +pointerToRelocations: 0
        +pointerToLineNumbers: 0
        +numberOfRelocations: 0
        +numberOfLineNumbers: 0
        +characteristics: 3221225536
      }
      3 => Serafim\PEReader\Image\SectionHeader {#42
        +name: ".pdata"
        +misc: 1956
        +virtualAddress: 143360
        +sizeOfRawData: 2048
        +pointerToRawData: 127488
        +pointerToRelocations: 0
        +pointerToLineNumbers: 0
        +numberOfRelocations: 0
        +numberOfLineNumbers: 0
        +characteristics: 1073741888
      }
      4 => Serafim\PEReader\Image\SectionHeader {#23
        +name: ".rsrc"
        +misc: 4356
        +virtualAddress: 147456
        +sizeOfRawData: 4608
        +pointerToRawData: 129536
        +pointerToRelocations: 0
        +pointerToLineNumbers: 0
        +numberOfRelocations: 0
        +numberOfLineNumbers: 0
        +characteristics: 1073741888
      }
      5 => Serafim\PEReader\Image\SectionHeader {#56
        +name: ".reloc"
        +misc: 5160
        +virtualAddress: 155648
        +sizeOfRawData: 5632
        +pointerToRawData: 134144
        +pointerToRelocations: 0
        +pointerToLineNumbers: 0
        +numberOfRelocations: 0
        +numberOfLineNumbers: 0
        +characteristics: 1107296320
      }
    ]
  }
  +exportDirectory: Serafim\PEReader\Image\ExportDirectory {#93
    +characteristics: 0
    +timeDateStamp: DateTimeImmutable @4294967295 {#58
      date: 2106-02-07 06:28:15.0 UTC (+00:00)
    }
    +majorVersion: 0
    +minorVersion: 0
    +name: 122006
    +base: 1
    +numberOfFunctions: 3
    +numberOfNames: 3
    +addressOfFunctions: 121976
    +addressOfNames: 121988
    +addressOfNameOrdinals: 122000
    +functions: array:3 [
      0 => "OPENSSL_Applink"
      1 => "php_cli_get_shell_callbacks"
      2 => "sapi_cli_single_write"
    ]
  }
}

Why?

Why not?

About

Portable Exacutable (PE/COFF) reader

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages