lunes, 5 de diciembre de 2016

Leer Binario En VBScript

Hoy vamos a ver como leer los archivos binarios en vbscript, yo al principio creía que no se podía leer binario en este lenguaje y ase poco creando el ransomware(el cual no es la gran cosa pero aveces me gusta matar el tiempo programando cualquier cosa) tuve la necesidad de leer binario, así que en una búsqueda de 5 minutos encontré esta web:

http://www.gatodev.com/index.php?qa=225695&qa_1=leer-y-escribir-archivos-binarios-en-vbscript

El cual contenía este código:

NOTA: lo pondré por si algún día la pagina borra el tema, se cae o algo por el estilo solo para tener un respaldo.

Function readBinary(path)
Dim a
Dim fso
Dim file
Dim i
Dim ts
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.getFile(path)
If isNull(file) Then
    MsgBox("File not found: " & path)
    Exit Function
End If
Set ts = file.OpenAsTextStream()
a = makeArray(file.size)
i = 0
' Do not replace the following block by readBinary = by ts.readAll(), it would result in broken output, because that method is not intended for binary data 
While Not ts.atEndOfStream
    a(i) = ts.read(1)
i = i + 1
Wend
ts.close
readBinary = Join(a,"")
End Function

Sub writeBinary(bstr, path) Dim fso Dim ts Set fso = CreateObject("Scripting.FileSystemObject") On Error Resume Next Set ts = fso.createTextFile(path) If Err.number <> 0 Then MsgBox(Err.message) Exit Sub End If On Error GoTo 0 ts.Write(bstr) ts.Close End Sub

Function makeArray(n) ' Small utility function Dim s s = Space(n) makeArray = Split(s," ") End Function 


Viendo el código de esa web me base para crear el mio, que es casi igual pero con unas modificaciones.
Así que para practicar tomaremos mi crackme, el numero 7 que lo encontraran aquí:

http://elblogdeflamer.blogspot.mx/p/mis-cackmes.html


Tratare de explicar todo el código con clama.
Así que primeramente empecemos declarando todas las variables que usaremos

option explicit
Dim x,objsystem,file,i,f,largo


Ahora creamos un objecto FileSystemObject y lo representaremos con la variable objsystem

Set objsystem = CreateObject("Scripting.FileSystemObject")

Luego creamos una referencia al archivo que vamos a leer, que en este caso es el "crackme7.exe" y lo representaremos con la variable file.
OJO donde dice "crackme7.exe" es la ruta del archivo yo lo pongo así por que estoy trabajando en la misma carpeta.

Set file = objsystem.getFile("Crackme7.exe") 

Después de esto inicializamos la variable largo, con el valor del tamaño del archivo en bytes

largo=file.size 


Ya que tenemos enlazado al archivo que esta representado con la variable file, trataremos de abrirlo con el comando OpenAsTextStream así.

Set f = file.OpenAsTextStream()  

Después usaremos el comando Redim para crear un array el cual llamaremos bytes con el tamaño de el archivo, el cual esta representado con la variable largo

redim bytes(largo)  

Ahora para leer los bytes del archivo crearemos un ciclo for, el cual leerá byte por byte del archivo y los almacenara en el array llamado bytes

for i=0 to largo - 1
   bytes(i)=f.read(1)
next  

y para cerrar el archivo usamos el comando close

f.close   

Ya que leímos todos los bytes del archivo crearemos un archivo llamado "dump.txt" con el comando CreateTextFile, para almacenar los datos que leímos y el archivo creado lo representaremos con la variable file.

set file = objsystem.createtextfile("dump.txt")    

Ya que no podemos almacenar los datos de forma binaria, los convertiremos a su valor ascii y los separaremos con 2 guiones

Para eso crearemos un ciclo for para recorrer el array donde se encuentran los datos y de paso escribiremos los nuevos datos con el comando Write

for x = 0 to i - 1
   file.write(asc(bytes(x)) & "--")
next   

Y por ultimo cerramos el archivo con el comando close

file.close    


Aquí el código completo

option explicit
Dim x,objsystem,file,i,f,largo  

Set objsystem = CreateObject("Scripting.FileSystemObject") 

Set file = objsystem.getFile("Crackme7.exe")  

largo=file.size 

Set f = file.OpenAsTextStream()  

redim bytes(largo)

for i=0 to largo - 1
   bytes(i)=f.read(1)
next 

f.close 

set file = objsystem.createtextfile("dump.txt") 

for x = 0 to i - 1
   file.write(asc(bytes(x)) & "--")
next

file.close    



Bueno creo que eso es todo por hoy saludos flamer


No hay comentarios.:

Publicar un comentario