Página 1 de 1

Editar File Information

Publicado: 04 Jun 2015, 06:22
por culd
Alguien tiene algun ejemplo para editar la informacion de un .exe (la de PE)... Ejemplo editar la fecha de creacion... nombre del creador... version del programa etc.

Re: Editar File Information

Publicado: 04 Jun 2015, 09:42
por Blau
Desde ResourceHacker se puede hacer modificando el recurso VersionInfo (creo que era así). Un ejemplo sería este:

Código: Seleccionar todo

BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904e4"
        BEGIN
            VALUE "Build Date", "11/03/2009"
            VALUE "CompanyName", "My Company "
            VALUE "FileDescription", "My DLL"
            VALUE "FileVersion", VERSTR
            VALUE "InternalName", "MyCode.dll"
            VALUE "LegalCopyright", "Copyright © Me"
            VALUE "ProductVersion", VERSTR
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1252
    END
END
Si no tienes manejo en VB.NET/C# puede ser un dolor de cabeza (lo digo por experiencia).

Re: Editar File Information

Publicado: 04 Jun 2015, 15:58
por culd
El tema es usar alguna api de windows, no utilizar otro programa externo

Re: Editar File Information

Publicado: 04 Jun 2015, 16:44
por culd
Esas api aparentemente ayudan... No encuentro ejemplo para vb6, vi algunos para c++
BeginUpdateResource
UpdateResource
EndUpdateResource

Toca leerme la estructura de PE y ver si puedo modificarlo de manera manual tocando los bytes del archivo

Re: Editar File Information

Publicado: 04 Jun 2015, 17:00
por SadFud
Es como ha dicho blau con el resource hacker, creo que fue SUDO quien hizo un generador de file info, esta en el foro

Re: Editar File Information

Publicado: 04 Jun 2015, 17:03
por Blau
Te dejo un módulo para clonar el VersionInfo:
Attribute VB_Name = "mCloneInfo"
'Made By: ZeR0/0cm4n for HackHound.org
'Thanks to: Noble (C++ Source Code), Cobein (mDelRes Module)
Option Explicit

Private Const RT_VERSION         As Long = 16
Private Const VS_VERSION_INFO    As Long = 1

Private Declare Function BeginUpdateResource Lib "kernel32" Alias "BeginUpdateResourceA" (ByVal pFileName As String, ByVal bDeleteExistingResources As Long) As Long
Private Declare Function EndUpdateResource Lib "kernel32" Alias "EndUpdateResourceA" (ByVal lUpdate As Long, ByVal fDiscard As Long) As Long
Private Declare Function UpdateResource Lib "kernel32" Alias "UpdateResourceA" (ByVal lUpdate As Long, ByVal lpType As Long, ByVal lpName As Long, ByVal wLanguage As Long, lpData As Any, ByVal cbData As Long) As Long
Private Declare Function GetFileVersionInfo Lib "Version.dll" Alias "GetFileVersionInfoA" (ByVal lptstrFilename As String, ByVal dwhandle As Long, ByVal dwlen As Long, lpData As Any) As Long
Private Declare Function GetFileVersionInfoSize Lib "Version.dll" Alias "GetFileVersionInfoSizeA" (ByVal lptstrFilename As String, lpdwHandle As Long) As Long
Private Declare Function VerQueryValue Lib "Version.dll" Alias "VerQueryValueA" (pBlock As Any, ByVal lpSubBlock As String, lplpBuffer As Any, puLen As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As Any, Source As Any, ByVal Length As Long)
Public Sub CloneFileInformation(ByVal Source As String, ByVal Destination As String)
    
    Dim lLenSource        As Long
    Dim lLenDestination   As Long
    Dim lHandle           As Long
    Dim hRes              As Long
    Dim lVerPointer       As Long
    Dim lLangId           As Long
    Dim iVal              As Long
    Dim lSize             As Long
     
    Dim bFileInfo()       As Byte
    Dim bDestination()    As Byte
    
    lLenSource = GetFileVersionInfoSize(Source, lHandle)
    ReDim bFileInfo(lLenSource)
    Call GetFileVersionInfo(Source, 0&, lLenSource, bFileInfo(0))
    
    lLenDestination = GetFileVersionInfoSize(Destination, lHandle)
    ReDim bDestination(lLenDestination)
    Call GetFileVersionInfo(Destination, 0&, lLenDestination, bDestination(0))
   
    Call VerQueryValue(bDestination(0), "\\VarFileInfo\\Translation", lVerPointer, lSize)
    hRes = BeginUpdateResource(Destination, False)
    CopyMemory lLangId, ByVal lVerPointer, 2

    Call UpdateResource(hRes, RT_VERSION, VS_VERSION_INFO, lLangId, bFileInfo(0), lLenSource)
    Call EndUpdateResource(hRes, False)
End Sub

Re: Editar File Information

Publicado: 04 Jun 2015, 21:01
por culd
Blau escribió:Te dejo un módulo para clonar el VersionInfo:
Attribute VB_Name = "mCloneInfo"
'Made By: ZeR0/0cm4n for HackHound.org
'Thanks to: Noble (C++ Source Code), Cobein (mDelRes Module)
Option Explicit

Private Const RT_VERSION         As Long = 16
Private Const VS_VERSION_INFO    As Long = 1

Private Declare Function BeginUpdateResource Lib "kernel32" Alias "BeginUpdateResourceA" (ByVal pFileName As String, ByVal bDeleteExistingResources As Long) As Long
Private Declare Function EndUpdateResource Lib "kernel32" Alias "EndUpdateResourceA" (ByVal lUpdate As Long, ByVal fDiscard As Long) As Long
Private Declare Function UpdateResource Lib "kernel32" Alias "UpdateResourceA" (ByVal lUpdate As Long, ByVal lpType As Long, ByVal lpName As Long, ByVal wLanguage As Long, lpData As Any, ByVal cbData As Long) As Long
Private Declare Function GetFileVersionInfo Lib "Version.dll" Alias "GetFileVersionInfoA" (ByVal lptstrFilename As String, ByVal dwhandle As Long, ByVal dwlen As Long, lpData As Any) As Long
Private Declare Function GetFileVersionInfoSize Lib "Version.dll" Alias "GetFileVersionInfoSizeA" (ByVal lptstrFilename As String, lpdwHandle As Long) As Long
Private Declare Function VerQueryValue Lib "Version.dll" Alias "VerQueryValueA" (pBlock As Any, ByVal lpSubBlock As String, lplpBuffer As Any, puLen As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As Any, Source As Any, ByVal Length As Long)
Public Sub CloneFileInformation(ByVal Source As String, ByVal Destination As String)
    
    Dim lLenSource        As Long
    Dim lLenDestination   As Long
    Dim lHandle           As Long
    Dim hRes              As Long
    Dim lVerPointer       As Long
    Dim lLangId           As Long
    Dim iVal              As Long
    Dim lSize             As Long
     
    Dim bFileInfo()       As Byte
    Dim bDestination()    As Byte
    
    lLenSource = GetFileVersionInfoSize(Source, lHandle)
    ReDim bFileInfo(lLenSource)
    Call GetFileVersionInfo(Source, 0&, lLenSource, bFileInfo(0))
    
    lLenDestination = GetFileVersionInfoSize(Destination, lHandle)
    ReDim bDestination(lLenDestination)
    Call GetFileVersionInfo(Destination, 0&, lLenDestination, bDestination(0))
   
    Call VerQueryValue(bDestination(0), "\\VarFileInfo\\Translation", lVerPointer, lSize)
    hRes = BeginUpdateResource(Destination, False)
    CopyMemory lLangId, ByVal lVerPointer, 2

    Call UpdateResource(hRes, RT_VERSION, VS_VERSION_INFO, lLangId, bFileInfo(0), lLenSource)
    Call EndUpdateResource(hRes, False)
End Sub
Es lo que buscaba, mejor imposible. Gracias!