Bueno la tabla Bound Import molesta a la hora de añadir una nueva sección a un ejecutable por lo que he escrito esta función que la elimina.
Esta tabla no es especialmente importante en los ejecutables, no todos los ejecutables la tienen (Todos lo archivos compilados en vb6 sí). Esta tabla optimiza la ejecución del archivo pero si es eliminada el ejecutable no corrompe su ejecución.
#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.8.1
 Author: Naker90

 Script Function:
	Elimina la Bound Import de los ejecutables.
	
 Ejemplo de uso:
	_DeleteBoundImport(@Scriptdir & '\Anotador Naker90.exe') => Elimina la Bound Import del anotador

#ce ----------------------------------------------------------------------------

Func _DeleteBoundImport($sFilePath)

	Local $sFileOpen = FileOpen($sFilePath, 16)
	Local $sFileRead = FileRead($sFileOpen)
	Local $sFileSize = FileGetSize($sFilePath)
	FileClose($sFileOpen)

	Local $sPointerStruct = DllStructCreate('Byte[' & $sFileSize & ']')
	DllStructSetData($sPointerStruct, 1, $sFileRead)

	Local $sPointer = DllStructGetPtr($sPointerStruct, 1)

	Local $sIMAGE_DOS_HEADER = DllStructCreate('WORD e_magic;WORD e_cblp;WORD e_cp;WORD e_crlc;WORD e_cparhdr;WORD e_minalloc;WORD e_maxalloc;WORD e_ss;WORD e_sp;WORD e_csum;WORD e_ip;WORD e_cs;WORD e_lfarlc;WORD e_ovno;WORD e_res[4];WORD e_oemid;WORD e_oeminfo;WORD e_res2[10];LONG e_lfanew', $sPointer)

	$sPointer += DllStructGetData($sIMAGE_DOS_HEADER, 'e_lfanew')

	Local $sIMAGE_NT_HEADER = DllStructCreate('DWORD signature;CHAR IMAGE_FILE_HEADER[20];CHAR IMAGE_OPTIONAL_HEADER[224]', $sPointer)
	Local $sIMAGE_FILE_HEADER = DllStructCreate('WORD Machine;WORD NumberOfSections;DWORD TimeDateStamp;DWORD PointerToSymbolTable;DWORD NumberOfSymbols;WORD SizeOfOptionalHeader;WORD Characteristics;', DllStructGetPtr($sIMAGE_NT_HEADER, 'IMAGE_FILE_HEADER'))

	$sPointer += (DllStructGetData($sIMAGE_FILE_HEADER, 'SizeOfOptionalHeader') - 16)

	Local $sIMAGE_DATA_DIRECTORY = DllStructCreate('DWORD VirtualAddress;DWORD Size', $sPointer)

	DllStructSetData($sIMAGE_DATA_DIRECTORY, 1, 0)
	DllStructSetData($sIMAGE_DATA_DIRECTORY, 2, 0)

	$sPointer += 16

	Local $sValue = (24) + (DllStructGetData($sIMAGE_FILE_HEADER, 'NumberOfSections') * 0x28)

	$sPointer += $sValue

	Local $sBOUND_IMPORT_DIRECTORY = DllStructCreate('DWORD TimeDateStamp;WORD OffsetModuleName;WORD NumberOfModuleForwarderRefs', $sPointer)

	For $i = 1 to 3
		DllStructSetData($sBOUND_IMPORT_DIRECTORY, $i, 0)
	Next

	Local $sNew = FileOpen($sFilePath, 18)
	FileWrite($sNew, DllStructGetData($sPointerStruct, 1))
	FileClose($sNew)

	MsgBox(64, '_DeleteBoundImport', 'Bound Import Eliminada!')

EndFunc
Imagen


Imagen


Para la próxima la moveré en vez de eliminarla.
Saludos
Skype: naker.noventa
Responder

Volver a “Fuentes”