Quais são algumas maneiras legais de inspecionar detalhes de DLL / EXE?

13

Com a maioria dos executáveis ​​do Windows (DLL, EXE ...), a versão e outros detalhes podem ser visualizados usando a guia "Detalhes" em "Propriedades" ( Alt+ Enter).

Detalhes de shell32.dll no Windows 7 amd64

Eu me pergunto: existe também uma maneira da linha de comando para fazer isso? Estou particularmente interessado na versão do produto, mas também outras coisas podem ser úteis.

As seguintes propriedades são desejadas, em ordem de precedência:

  • aceita caminho exe / dll como parâmetro
  • saída para saída padrão (para que você possa processar o restante via |tubo)
  • disponível por padrão em todos os Windows suportados (XP +)
  • disponível por padrão no Windows Vista +
  • disponível por padrão no Windows XP
  • utilizável em ambiente comercial
  • licença gratuita (semelhante à GPL)
  • portátil (ex. autônomo, talvez acompanhado por DLL)
Alois Mahdal
fonte
Isso já foi solicitado na Stack Overflow: ferramenta de linha de comando para despejar a versão da DLL do Windows?
Alois Mahdal

Respostas:

9

No PowerShell, get-command "full-path-to-executable" | format-listfaria o truque. Powershell é a nova linha de comando para o Vista e Windows posterior, pode ser instalada no XP.

kreemoweet
fonte
Eu não posso obter o seu código de trabalho ...
soandos
Eu tenho até onde get-command "$args[0]" | format-list, que eu salvei como aaa.ps1e chamado como, powershell -File aaa.ps1 shell32.dllmas que não imprime nada.
Alois Mahdal
@soandos: parece que o powershell v2 é necessário para que o comando get trabalhe com executáveis ​​arbitrários.
Kreemoweet
Eu tenho o powershell v2
soandos
legal, eu não sabia disso, até retornava um pouco mais de informações do que a janela da propriedade. As informações interessantes estão encapsuladas na FileInfoVersionpropriedade do ApplicationInfoobjeto.
Mjsr
5

Use o utilitário DUMPBIN da Microsoft .

Possui muitas opções úteis, no entanto, depende do que você deseja fazer.

No entanto, não é gratuito, mas acredito que pode ser obtido livremente com o Windows SDK.

wizzard0
fonte
3
Por que não é gratuito se pode ser obtido livremente com o SDK?
CJ7
4

Você pode usar uma sigcheck.exeferramenta portátil que faz parte do Sysinternals Suite , por exemplo

$ sigcheck.exe some_app.exe

Sigcheck v2.51 - File version and signature viewer
Copyright (C) 2004-2016 Mark Russinovich
Sysinternals - www.sysinternals.com

C:/Program Files (x86)/Foo App\some_app.exe:
    Verified:   Signed
    Signing date:   14:48 23/12/2015
    Publisher:  X
    Company:    X
    Description:    X
    Product:    Some App
    Prod version:   5.0.0.1241
    File version:   5.0.0.1241
    MachineType:    32-bit

Para versões mais antigas do Windows, como XP / 2k / 2003 (ainda funciona em novas), use a filever.exeferramenta (verifique o link direto em exedll.info ) para obter informações específicas sobre um arquivo, como:

  • A plataforma na qual o arquivo é executado
  • A versão do arquivo
  • Os atributos do arquivo
  • O tipo de arquivo
  • O idioma do arquivo
  • Se o arquivo é um tipo de remessa ou um tipo de depuração
  • O tamanho do arquivo
  • A data em que o arquivo foi criado
  • O caminho do arquivo

Alguns outros a considerar:

  • O dumper de arquivo binário do Microsoft COFF (DUMPBIN.EXE)

    Exibe informações sobre arquivos binários do Common Object File Format (COFF). Você pode usar DUMPBIN para examinar arquivos de objetos COFF, bibliotecas padrão de objetos COFF, arquivos executáveis ​​e bibliotecas de vínculo dinâmico (DLLs).

  • binwalk- pesquise no (s) arquivo (s) especificado (s) por códigos de operação executáveis ​​comuns a uma variedade de arquiteturas de CPU. Ferramenta fácil de usar para analisar, fazer engenharia reversa e extrair arquivos / dados interessantes de arquivos binários.


Para mais comandos, verifique:

kenorb
fonte
3
Function GetProductVersion (sFilePath, sProgram)  
Dim objShell, objFolder, objFolderItem, i  
If FSO.FileExists(sFilePath & "\" & sProgram) Then  
    Set objShell = CreateObject("Shell.Application")  
    Set objFolder = objShell.Namespace(sFilePath)  
    Set objFolderItem = objFolder.ParseName(sProgram)  
    Dim arrHeaders(300)  
    For i = 0 To 300  
        arrHeaders(i) = objFolder.GetDetailsOf(objFolder.Items, i)  
        'WScript.Echo i &"- " & arrHeaders(i) & ": " & objFolder.GetDetailsOf(objFolderItem, i)  
        If lcase(arrHeaders(i))= "product version" Then  
            GetProductVersion= objFolder.GetDetailsOf(objFolderItem, i)  
            Exit For  
        End If  
    Next  
End If  
End Function  

Origem é um link para um arquivo .vbs que pode obter a versão do arquivo para você, e você pode pegar isso e usar a saída da maneira que desejar.

Navios serão todas as versões do Windows, não tenho certeza sobre a licença, muito portátil, mas não exe ou DLL.

soandos
fonte
Há algumas respostas lá, não tenho certeza de qual delas você quer dizer. No entanto, eu tentei alguns deles, eles parecem ter o caminho para o notepad.exe codificado. Existe uma maneira fácil de embrulhá-los para que eles aceitem o caminho para dll / exe como um parâmetro? Preferencialmente saída para saída padrão?
Alois Mahdal
Ele segue um caminho como parâmetro e a versão do produto está contida emGetProductVersion
soandos