Convertir un script en ruby en un fichero exe para windows

Buenas :slight_smile:

Hoy vamos a ver como hacer fichero exe en windows con un script ruby.Para python hay py2exe que es muy facil a usar y que anda bien.Para ruby hay ocra y vamos a ver que… no es tan facil a usar que py2exe.

Yo me gusta el ruby por su “syntax” y vamos a ver y solucionar los problemos paso a paso con ocra.

Primero descargar ruby:

https://rubyinstaller.org/downloads/

No hay nada que décir sobre la instalacion es muy sencillo.

Una vez que todo esta instalado hay que instalar algunos “gem” (los gem son las dépendencias del script) es igual que los “modulos” con python.Para poder empezar a hacer codigo en ruby consejo de instalar esos gem:

gem install highline gem install rake gem install bundler gem install timeout gem install httparty

Se tendra que instalar mas gem si quieres hacer algo mas especial.

Al final instalamos ocra que nos va a convertir un script ruby en exe:

gem install ocra

Y ahora que ? normalmente todo tiene que andar… pero no… ocra es un poco “caprichoso” para que puede andar bien.Me ha tomado tiempo para encontrar en github y stackoverflow las errores y como solucionar las.

Error 1 al momento te iniciar ocra:

ocra test.rb fiber.so No such file or directory @ rb_sysopen (Errno::ENOENT)

Efectivamente el fichero “fiber.so” no esta en la carpeta de mingw(mingw no sirve a compilar el script ruby en un exe).No sé porqué no esta aqui por defecto pero lo he encontrado en github y le he puesto en mega.nz

Fichero fiber.so a descargar:

https://mega.nz/file/oLMm3bDb#-a2e27jDbcyWYBflMCbiHfSsYui1RzlrH1TtEqnFYbM

Ahora que lo tienes, copia lo en:

C:\Ruby31-x64\lib\ruby\3.1.0\x64-mingw-ucrt

Error 2 al momento de iniciar ocra:

undefined method `relative_path_from' for nil:NilClass (NoMethodError)".

Hay que modificar el fichero ocra en: C:\Ruby31-x64\lib\ruby\gems\3.1.0\gems\ocra-1.3.11\bin linea 930:

Se ve eso:

manifests.each do |manifest| Ocra.msg "Adding external manifest #{manifest}" target = manifest.relative_path_from(Host.exec_prefix) sb.createfile(manifest, target) end

Y hay que cambiar esa seccion por:

manifests.each do |manifest| next if manifest.nil? Ocra.msg "Adding external manifest #{manifest}" target = manifest.relative_path_from(Host.exec_prefix) sb.createfile(manifest, target) end

Eso viene de que el manifest es siempre “nil?” lo que significa que su valor es “0” o “null” en ruby y con “next if manifest.nil?” se inicia una bucla que valida la valor “null” y pasa al siguiente sin problemas.

Una vez que se ha modificado esa parte del fichero ocra se puede registrar el fichero y iniciar otra vez ocra… se hace bien el ficher exe pero al momento de usar lo para hacer una prueba… hay una tercera error con los dll de windows.

Error 3 cuando se inicia el fichero exe creado por ocra se ve une pantalla en windows con:

libssp-0.dll no ha sido encontrado

Eso viene de que ocra no toma automaticamente los dll que se necesita, hay que indicar le que typos de dll usar.Al final para que todo anda bien y hacer una compilacion sin problema hay que usar (ejemplo con un script que he llamado hello.rb):

ocra hello.rb --windows --dll ruby_builtin_dlls\libssp-0.dll --dll ruby_builtin_dlls\libgmp-10.dll --dll ruby_builtin_dlls\libgcc_s_seh-1.dll --dll ruby_builtin_dlls\libwinpthread-1.dll

https://zupimages.net/up/22/40/mddx.png

Y ya tienes tu programo que anda :slight_smile:

NOTAS -1: si hace un script ruby de prueba que pone “hello world” se vera 2 cosas:
-1 windows da un nombre en txt aunqué tu script esta en ruby, lo puedes ver con el comando “dir”:

https://zupimages.net/up/22/40/b459.png

Hay que dar el bueno nombre del fichero a “mano”

ren ficheroenruby.rb.txt ficheroenruby.rb

(en mi caso es hello.rb)

https://zupimages.net/up/22/40/zcl0.png

NOTA -2: no aparece nada al iniciar el fichero exe, no se puedo ver el “hello world” que esta en el script.Eso es raro pero no significa que tu script no anda, para verificar que anda bien he pedido al script de crear un fichero “wifilibre.txt” despuès del “hello world”

https://zupimages.net/up/22/40/iwal.png

Y despuès de convertir el script ruby en exe con el comando que he dado antes, se ve bien el fichero wifilibre.txt creado por nuestro nuevo fichero exe (el fichero exe es con el icon de ruby)

https://zupimages.net/up/22/40/wl9q.png

Suelo usar siempre linux para hacer codigos en ruby/python y mi uso personal pero he guardado windows 10 en dual boot para convertir mi scripts en fichero exe.La verdad es que me gusta mas el ruby que el python pero con eso cada uno tiene su opinion y lo comprendo perfectamente.Lo que me da pena es que “ocra” no parece totalmente finito, hay que buscar en la web para poder hacer le andar bien… pero bueno al final no es tan complicado que eso y si has seguido bien ese tutorial lo podras hacer andar :slight_smile:

@++

Muy bien explicado y muy útil. :slight_smile:
Una de las ventajas muy interesantes de Ruby es que es el lenguaje empleado para metasploit framework
Es siempre bueno saber hacer un exploit en Ruby que se incorpora perfectamente al ecosistema metasploit.
Gracias por el manual amigo :biere:

[quote]Una de las ventajas muy interesantes de Ruby es que es el lenguaje empleado para metasploit framework
Es siempre bueno saber hacer un exploit en Ruby que se incorpora perfectamente al ecosistema metasploit.[/quote]

Soy intentando de hacer algo asi… pero aunqué anda el codigo se base no consiguo a hacer todo lo que quiero, ya té comentaré algo si consigo hacer lo… :wink: