Código PHP:
function UPXPresent(const Filename:TFileName): Boolean
var 
  
i             integer
  
pBase     PByte
  
DOS        PImageDosHeader
  
pNtHeaders    PImageNtHeaders
  
hFilehFileMapdwOffset         Cardinal
  
pSectionHeaderPImageSectionHeader
  
SectNome      AnsiString
begin 
  Result
:=False

  
hFile := CreateFile(PChar(Filename), GENERIC_READFILE_SHARE_READnilOPEN_EXISTINGFILE_ATTRIBUTE_NORMAL0); 
  if (
hFile INVALID_HANDLE_VALUEthen Exit; 

  
hFileMap := CreateFileMapping(hFilenilPAGE_READONLY or SEC_IMAGE,  00nil); 
  if (
hFileMap 0then 
  begin 
    CloseHandle
(hFile); 
    Exit; 
  
end

  
pBase := MapViewOfFile(hFileMapFILE_MAP_READ000); 

  try 
  try 
      
dwOffset   := Cardinal(pBase); 
      
DOS := PImageDosHeader(pBase); 
      
pNtHeaders := PImageNtHeaders(dwOffset Cardinal(DOS._lfanew)); 
      
ShowMessage(IntToStr(pNtHeaders.OptionalHeader.ImageBase)); 
      
pSectionHeader := pImageSectionHeader(Cardinal(pNtHeaders) + SizeOf(TImageNtHeaders)); 
      for 
:= 0 to pNtHeaders.FileHeader.NumberOfSections-do 
      
begin 
        SetString
(SectNomePAnsiChar(@pSectionHeader.Name), SizeOf(pSectionHeader.Name)); 
        
Result:=Pos('UPX',SectNome)>0
        If 
Result then break; 
        
Inc(pSectionHeader); 
      
end
  finally 
    
UnmapViewOfFile(pBase); 
    
CloseHandle(hFileMap); 
    
CloseHandle(hFile); 
  
end
Except 
On E 
except do 
ShowMessage(E.Message); 

end
Créditos:
  • AceStryker