Chefito escribió:
Por ejemplo, yo hace tiempo necesitaba borrar el propio programa que ejecutaba, y para eso tenía que crear otro programa aparte que lo hiciese (lo intente llamando al comando del justo al cerrar el programa, pero había veces que se borraba y otras no, ya que a veces justamente se cerraba y otras no). Con esto se pueden hacer dos scripts, compilar el secundario y que se ejecute desde el primario, sin dejar rastro (supongo, tendría que probarlo).
Para auto-borrar el script yo me hice esta func (crea un .bat que borra el script y luego se auto-borra a si mismo)
Código: Seleccionar todo
#Region Comentarios
#cs
Parametros: _AutoDel($T = 2) ; Tiempo a esperar para borrar
#ce
#EndRegion Comentarios
#Region Funcion
Func _AutoDel($T = 2)
$archivo1 = FileOpen(@ScriptDir & "\autdel.bat", 10) ; Crear y abrir el archivo 'autdel.bat'
FileWriteLine($archivo1, "@echo off") ; Escribir el contenido del .bat...
FileWriteLine($archivo1, "title .")
FileWriteLine($archivo1, "ping localhost -n " & $T) ; Esto es para esperar un tiempo antes de borrar el script (para que acabe de cerrarse)
FileWriteLine($archivo1, 'del "' & @ScriptName & '"') ; Borrar el script
FileWriteLine($archivo1, "del %0") ; Borrar el .bat
FileWriteLine($archivo1, "Exit") ; Salir
FileClose($archivo1) ; Cerrar el .bat
Sleep(1000) ; Esperar 1 segundo
ShellExecute(@ScriptDir & "\autdel.bat", "", @ScriptDir, "", @SW_HIDE) ; Ejecutar el archivo en una consola oculta
EndFunc ;==>_AutoDel
#EndRegion Funcion
------------------------------
Me he quedado impresionado con esa función!
como soy muy vago para sacar los datos binarios, he hecho una GUI para que lo haga por mi xD
por si a alguien la quiere aqui esta:
Código: Seleccionar todo
Select
Case StringInStr("0409 0809 0c09 1009 1409 1809 1c09 2009 2409 2809 2c09 3009 3409", @OSLang) ; English | Inglés
Local $_Title = "GetBinaryData"
Local $_Browse = "Browse"
Local $_Copytoc = "Copy to clipboard"
Local $_Saveas = "Save as..."
Local $_Defaultname = "\binarydata.au3"
Local $_Filetoconvert[2] = ["Select the file to convert to binary", "All files (*.*)"]
Local $_Wheretosave[2] = ["Select where to save the binary data", "All files (*.*)"]
Local $_Error[4] = ["Please select a file", "Error reading the binary data", "Select where to save the file!", "Error saving the file"]
Local $_Finished = "Finished!"
Case StringInStr("040a 080a 0c0a 100a 140a 180a 1c0a 200a 240a 280a 2c0a 300a 340a 380a 3c0a 400a 440a 480a 4c0a 500a", @OSLang) ; Spanish | Español
Local $_Title = "Obtener datos binarios"
Local $_Browse = "Buscar"
Local $_Copytoc = "Copiar al portapapeles"
Local $_Saveas = "Guardar como..."
Local $_Defaultname = "\Datosbinarios.au3"
Local $_Filetoconvert[2] = ["Selecciona el archivo para convertir a binario", "Todos los archivos (*.*)"]
Local $_Wheretosave[2] = ["Selecciona donde guardar los datos binarios", "Todos los archivos (*.*)"]
Local $_Error[4] = ["Por favor selecciona un archivo", "Error leyendo los datos binarios", "Selecciona donde guardar el archivo!", "Error guardando el archivo"]
Local $_Finished = "Finalizado!"
Case Else ; Other languages | Otros idiomas
Local $_Title = "GetBinaryData"
Local $_Browse = "Browse"
Local $_Copytoc = "Copy to clipboard"
Local $_Saveas = "Save as..."
Local $_Defaultname = "\binarydata.au3"
Local $_Filetoconvert[2] = ["Select the file to convert to binary", "All files (*.*)"]
Local $_Wheretosave[2] = ["Select where to save the binary data", "All files (*.*)"]
Local $_Error[4] = ["Please select a file", "Error reading the binary data", "Select where to save the file!", "Error saving the file"]
Local $_Finished = "Finished!"
EndSelect
Global Const $MAX_LINESIZE = 4095
#Region GUI
$getbinarygui = GUICreate($_Title, 248, 114, 192, 124)
$getbinaryfilename = GUICtrlCreateInput("", 8, 8, 177, 21)
$getbinarybrowse = GUICtrlCreateButton($_Browse, 192, 8, 49, 21, 0x00020000)
$getbinarycopytoclip = GUICtrlCreateCheckbox($_Copytoc, 8, 40, 150, 17)
$getbinarysaveas = GUICtrlCreateCheckbox($_Saveas, 8, 64, 150, 17)
$getbinarysavelocation = GUICtrlCreateInput(@ScriptDir & $_Defaultname, 8, 88, 89, 21) ; Default at script folder | Por defecto en la carpeta del script
GUICtrlSetState($getbinarysavelocation, 32) ; 32 = hide ; 16 = show | 32 = Ocultar ; 16 = Mostrar
$getbinarysaveselect = GUICtrlCreateButton($_Browse, 104, 88, 57, 21, 0x00020000)
GUICtrlSetState($getbinarysaveselect, 32) ; 32 = hide ; 16 = show | 32 = Ocultar ; 16 = Mostrar
$GetBinary = GUICtrlCreateButton("GetBinary", 168, 40, 73, 41, 0x00020000)
GUISetState(@SW_SHOW) ; Show GUI | Mostrar la GUI
#EndRegion GUI
While 1
$e = GUIGetMsg()
Switch $e
Case -3 ; If close is pressed... | Si se presiona cerrar...
Exit
Case $getbinarybrowse ; Select the file to convert | Seleccionar el archivo del que sacar los datos binarios
$f = FileOpenDialog($_Filetoconvert[0], @ScriptDir & "\", $_Filetoconvert[1], 1 + 4)
If Not @error Then GUICtrlSetData($getbinaryfilename, $f)
Case $getbinarysaveas
If GUICtrlRead($getbinarysaveas) = 1 Then ; If the checkbox is checked | Si esta activada la checkbox...
GUICtrlSetState($getbinarysavelocation, 16) ; 16 = show | Mostrar
GUICtrlSetState($getbinarysaveselect, 16) ; 16 = show | Mostrar
Else
GUICtrlSetState($getbinarysavelocation, 32) ; 32 = hide | Ocultar
GUICtrlSetState($getbinarysaveselect, 32) ; 32 = hide | Ocultar
EndIf
Case $getbinarysaveselect
$f = FileSaveDialog($_Wheretosave[0], @ScriptDir & "\", $_Wheretosave[1], 1 + 4) ; Dialog to select where to save the file | Dialogo para seleccionar donde guardar el archivo
If Not @error Then GUICtrlSetData($getbinarysavelocation, $f)
Case $GetBinary
Global $sModule = GUICtrlRead($getbinaryfilename)
If Not FileExists($sModule) Then
Errores(1)
Else
$FinalBin = _GetBinaryFromFile($sModule) ; Get binary data from the file | Obtiene los datos binarios del archivo
If @error Then
Errores(2)
Else
If GUICtrlRead($getbinarycopytoclip) = 1 Then ClipPut($FinalBin) ; If checked, copy the data to the clipboard | SI esta seleccionada la checkbox, copia los datos binarios al portapapeles
If GUICtrlRead($getbinarysaveas) = 1 Then
$location = GUICtrlRead($getbinarysavelocation)
If $location = "" Then Errores(3)
$file = FileOpen($location, 10)
FileWrite($file, $FinalBin)
FileClose($file)
Else
Errores(4)
EndIf
If Not @error Then MsgBox(0, $_Finished, $_Finished)
EndIf
EndIf
EndSwitch
WEnd
Func Errores($errornum) ; Errors | Errores
Select
Case $errornum = 1
MsgBox(0, "Error", $_Error[0])
Case $errornum = 2
MsgBox(0, "Error", $_Error[1])
Case $errornum = 3
MsgBox(0, "Error", $_Error[2])
Case $errornum = 4
MsgBox(0, "Error", $_Error[3])
EndSelect
EndFunc ;==>Errores
Func _GetBinaryFromFile($sModule)
Global $hModule = FileOpen($sModule, 16)
If @error Then Exit
Global $bBinary = FileRead($hModule)
FileClose($hModule)
Global $iNewLine, $j
Global $iChinkSize = 32
Global $sBinary
For $i = 1 To BinaryLen($bBinary) Step $iChinkSize
$j += 1
If 4 * ($j * $iChinkSize) > $MAX_LINESIZE - 129 Then
$iNewLine = 1
EndIf
If $iNewLine Then
$iNewLine = 0
$j = 0
$sBinary = StringTrimRight($sBinary, 5)
$sBinary &= @CRLF & '$bBinary &= "' & StringTrimLeft(BinaryMid($bBinary, $i, $iChinkSize), 2) & '" & _' & @CRLF
ContinueLoop
EndIf
If $i = 1 Then
$sBinary &= '$bBinary = "' & BinaryMid($bBinary, $i, $iChinkSize) & '" & _' & @CRLF
Else
$sBinary &= ' "' & StringTrimLeft(BinaryMid($bBinary, $i, $iChinkSize), 2) & '" & _' & @CRLF
EndIf
Next
$sBinary = StringTrimRight($sBinary, 5)
Return $sBinary
EndFunc ;==>_GetBinaryFromFile
(la funcion de sacar los datos binarios, es la del mismo autor de la funcion)