PUBLIC lnVirtualResourceAddressLOCAL iSET ESCAPE ONm.lcFile = GETFILE()IF FILE(m.lcFile) m.hFile = FOPEN(m.lcFile,0) m.lnFileSize = FSEEK(m.hFile, 0, 2) =FSEEK(m.hFile, 0, 0) DIMENSION aPEFile(5000) *!* Get DOS Header - IMAGE_DOS_HEADER m.lnElementCounter = 1 FOR i = 1 TO 30 skip 2 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,2),"RS") m.lnElementCounter = m.lnElementCounter + 1 ENDFOR aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && e_lfanew - Pointer to where Windows executable starts *!* Goto NT Header =FSEEK(m.hFile, aPEFile(m.lnElementCounter), 0) *!* PE File Signature m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && IMAGE_NT_SIGNATURE from ImageSignatureTypes enum *!* IMAGE_FILE_HEADER m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,2),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,2),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,2),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,2),"RS") *!* IMAGE_OPTIONAL_HEADER m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,2),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,1),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,1),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") *!* IMAGE_OPTIONAL_HEADER_NT m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,2),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,2),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,2),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,2),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,2),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,2),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,2),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,2),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") *!* IMAGE_DATA_DIRECTORY *!* IMAGE_DIRECTORY_ENTRY_EXPORT m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Virtual Address m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Size *!* IMAGE_DIRECTORY_ENTRY_IMPORT m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Virtual Address m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Size *!* IMAGE_DIRECTORY_ENTRY_RESOURCE m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Virtual Address m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Size *!* IMAGE_DIRECTORY_ENTRY_EXCEPTION m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Virtual Address m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Size *!* IMAGE_DIRECTORY_ENTRY_SECURITY m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Virtual Address m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Size *!* IMAGE_DIRECTORY_ENTRY_BASERELOC m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Virtual Address m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Size *!* IMAGE_DIRECTORY_ENTRY_DEBUG m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Virtual Address m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Size *!* IMAGE_DIRECTORY_ENTRY_ARCHITECTURE m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Virtual Address m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Size *!* IMAGE_DIRECTORY_ENTRY_GLOBALPTR m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Virtual Address m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Size *!* IMAGE_DIRECTORY_ENTRY_TLS m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Virtual Address m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Size *!* IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Virtual Address m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Size *!* IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Virtual Address m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Size *!* IMAGE_DIRECTORY_ENTRY_IAT m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Virtual Address m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Size *!* IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Virtual Address m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Size *!* IMAGE_DIRECTORY_ENTRY_DOTNET_METADATA m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Virtual Address m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Size *!* ??? m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Virtual Address m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Size *!* 248 *!* IMAGE_SECTION_HEADER FOR i = 1 TO 8 m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = FREAD(m.hFile,8) && Name m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Size m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Virtual Address m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Raw Size m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Raw Address m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Reloc Address m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Linenumbers m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,2),"RS") && Relocations Number m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,2),"RS") && Linenumbers Number m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Characteristics ENDFOR *!* 568 m.lnFilePointer = 568 m.lnVirtualResourceAddress = aPEFile(174) m.InitialResourceDirectoryAddress = aPEFile(176) GetImageResourceDirectory(m.InitialResourceDirectoryAddress, m.InitialResourceDirectoryAddress, hFile, m.lnFilePointer, @aPEFile, @lnElementCounter) SET STEP ON ?FCLOSE(m.hfile)ENDIF*************************FUNCTION GetImageResourceDirectory(lnLocation, lnInitialLocation, hFile, lnFilePointer, aPEFile, lnElementCounter)************************* *!* Private Type IMAGE_RESOURCE_DIRECTORY *!* Characteristics As Long '\\Seems to be always zero? *!* TimeDateStamp As Long *!* MajorVersion As Integer *!* MinorVersion As Integer *!* NumberOfNamedEntries As Integer *!* NumberOfIdEntries As Integer *!* End Type m.lnFilePointer = lnLocation =FSEEK(m.hFile, m.lnFilePointer, 0) m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Characteristics m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && TimeDateStamp m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,2),"RS") && MajorVersion m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,2),"RS") && MinorVersion m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,2),"RS") && NumberOfNamedEntries m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,2),"RS") && NumberOfIdEntries m.lnFilePointer = m.lnFilePointer + 16 GetImageResourceDirectoryEntries(aPEFile(m.lnElementCounter), m.lnInitialLocation, hFile, lnFilePointer, @aPEFile, @lnElementCounter)ENDFUNC*************************FUNCTION GetImageResourceDirectoryEntries(lnNumberofEntries, lnInitialLocation, hFile, lnFilePointer, aPEFile, lnElementCounter)************************* *!* Private Type IMAGE_RESOURCE_DIRECTORY_ENTRY *!* dwName As Long *!* dwDataOffset As Long *!* CodePage As Long *!* Reserved As Long *!* End Type LOCAL llHighBitSet, lnOffset, lcOffset, lnLocation, i FOR i = 1 TO lnNumberofEntries && NumberOfIdEntries m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && dwName (ID) m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && dwDataOffset m.lnFilePointer = m.lnFilePointer + 8 m.lnOffset = aPEFile(m.lnElementCounter) + 2147483648 m.llHighBitSet = m.lnOffset <= 2147483648 IF m.llHighBitSet && Points to another Resource Directory m.lnLocation = m.lnOffset + m.lnInitialLocation GetImageResourceDirectory(m.lnLocation, m.lnInitialLocation, m.hFile, m.lnFilePointer, @aPEFile, @lnElementCounter) ELSE && Points to the data *!* dwName is offset, dwDataOffset is size m.lnLocation = aPEFile(m.lnElementCounter) + m.lnInitialLocation GetResourceDataEntry(m.lnLocation, aPEFile(m.lnElementCounter-2), m.hFile, m.lnInitialLocation, @aPEFile, @lnElementCounter) ENDIF =FSEEK(m.hFile, m.lnFilePointer, 0) ENDFORENDFUNC*************************FUNCTION GetResourceDataEntry(lnLocation, lnSize, hFile, lnInitialLocation, aPEFile, lnElementCounter)************************* IF lnLocation > 0 AND lnSize > 0 =FSEEK(m.hFile, lnLocation, 0) m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && OffSet m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Size m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && CodePage m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = CTOBIN(FREAD(m.hFile,4),"RS") && Reserved GetResourceData((aPEFile(m.lnElementCounter-3) - m.lnVirtualResourceAddress) + lnInitialLocation, aPEFile(m.lnElementCounter-2), m.hFile, @aPEFile, @lnElementCounter) ELSE SET STEP ON ENDIFENDFUNC*************************FUNCTION GetResourceData(lnLocation, lnSize, hFile, aPEFile, lnElementCounter)************************* IF lnLocation > 0 AND lnSize > 0 =FSEEK(m.hFile, m.lnLocation, 0) m.lnElementCounter = m.lnElementCounter + 1 aPEFile(m.lnElementCounter) = FREAD(m.hFile, m.lnSize) ELSE SET STEP ON ENDIFENDFUNC
Remember Me
a@href@title, b, blockquote@cite, em, i, strike, strong, sub, super, u