Tag Archive lenguaje

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 bWikipedia
“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

Lenguajes de programación I

Ya hemos revisado que el lenguaje de las computadoras es el Lenguaje Máquina, y es una secuencia codificada de 0’s y 1’s, de esta forma podemos dar instrucciones que serán ejecutadas por el procesador, sin embargo programar en lenguaje máquina en la práctica y para la dimensión de los programas de computadora actuales es una tarea inviable.

A continuación se muestran instrucciones en código máquina, observa que está en formato hexadecimal, pero recuerda que los números hexadecimales son convertibles de forma directa a números binarios.

¿Cuándo se requiere programar en lenguaje máquina?

Codigo màquina

Codigo màquina

Típicamente se utiliza la programación en lenguaje máquina cuando se diseña un nuevo dispositivo de hardware, ya sea un CPU, un BIOS, una placa controladora, etc, como se parte de que no existe un programa que controle a dicho dispositivo, entonces surge la necesidad de realizar este programa primigenio en el lenguaje directo de dicho dispositivo. Como podrás imaginar, se programan todas las funciones indispensables y básicas que se requieren para controlar a dicho dispositivo y se deja la interface para que el dispositivo se pueda comunicar con otros dispositivos o programas.

Programar en lenguaje máquina es una tarea muy costosa en términos de tiempo – hombre, eso sin considerar la facilidad con que se pueden cometer errores al programar directamente en cádigo máquina.

Ensamblador

De esta necesidad surgió la necesidad de simplificar la programación en lenguaje máquina, la primera aproximación que se desarrolló fue representar lenguajes en forma simbólica las instrucciones del procesador. De modo que las instrucciones a base de palabras cortas y una sintaxis específica representan casi de forma directa el código máquina. Esta serie de palabras cortas recibieron el nombre de “mnemotécnicos” y el lenguaje desarrollado se denominó Lenguaje Ensamblador

Los Lenguajes Ensambladores al representar casi de forma directa las instrucciones máquina, son específicos de un procesador y/o arquitectura, de modo que difícilmente se podrá portar un código programado en ensamblador a otro procesador o arquitectura.

Los programas que toman código programado en ensamblador y los convierten en su equivalente en código máquina se denominaron Ensambladores.

El código en ensamblador supone grandes mejoras con respecto a escribir programas en código máquina

  • Es más fácil de escribir y leer
  • Es más fácil de mantener
  • Es prácticamente igual de eficiente que el código máquina

Sin embargo, a pasar que los lenguajes ensambladores supusieron un avance con respecto a los programas en lenguaje máquina, la programación en ensamblador sigue siendo compleja y ha quedado reservada en la programación de áreas muy específicas:

  • Programación de hardware
  • Programación de controladores de dispositivo (device drivers)
  • Optimización de procesos
  • Cuando los recursos disponibles son reducidos o limitados
  • Desarrollo de aplicaciones en tiempo real
  • Obtener acceso a funciones de bajo nivel del procesador para realizar tareas que no son soportadas por los lenguajes de alto nivel.

En términos generales las principales características del lenguaje ensamblador son:

  • Posibilidad de obtener la máxima velocidad con mínimo uso de memoria.
  • Está orientado a la máquina por tanto tiene mayor adaptación al equipo.
  • Se trabaja a nivel de instrucciones, es decir, su programación es al más fino detalle.
  • Genera programas más rápidos y pequeños comparados con los generados por otros lenguajes.

Finalmente señalo que a los lenguajes ensambladores se les denomina Lenguajes de Bajo Nivel por la estrecha relación que tienen con la máquina.

Lenguaje de Bajo Nivel

La palabra “bajo” no implica que el lenguaje sea inferior a un lenguaje de alto nivel; se refiere a la reducida abstracción entre el lenguaje y el hardware.

Un lenguaje de programación de bajo nivel es el que proporciona poca o ninguna abstracción del microprocesador de una computadora. Consecuentemente es fácilmente traducido en lenguaje máquina.

Lenguajes de alto nivel

Son aquellos que se encuentran más cercanos al lenguaje natural que al lenguaje máquina.
Están dirigidos a solucionar problemas mediante el uso de Estructuras Dinámicas de Datos.

Se tratan de lenguajes independientes de la arquitectura de la computadora. Por lo que, en principio, un programa escrito en un lenguaje de alto nivel, lo puedes migrar de una máquina a otra sin ningún tipo de problema. A esto se le denomina Portabilidad de un Programa

Estos lenguajes permiten al programador olvidarse por completo del funcionamiento interno de la maquina para la que están diseñando el programa.

Hay lenguajes de propósito general (cualquier tipo de aplicación) y de propósito especifico (como FORTRAN para trabajos científicos).

Lenguajes de Medio nivel

Lenguaje intermedio: El CLR de .Net

Lenguaje intermedio: El CLR de .Net

Se trata de un termino no aceptado por todos, pero que seguramente habrás oído. Estos lenguajes se encuentran en un punto medio entre los dos anteriores. Dentro de estos lenguajes podría situarse C ya que puede acceder a los registros del sistema, trabajar con direcciones de memoria, todas ellas características de lenguajes de bajo nivel y a la vez realizar operaciones de alto nivel.

Actualmente como lenguaje intermedio podemos entender una máquina abstracta diseñada para ayudar a realizar el análisis de un programa. De acuerdo a esta descripción, podemos considerar a la máquinas virtuales como máquinas de lenguaje intermedio. Dos de los principales exponentes son la máquina virtual de Java y el CIL (Common Intermediate Language) de Microsoft para su plataforma .NET

Redacción, composición y desarrollo por carenki
Publicado originalmente en ehack.info

 

 

 


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 bWikipedia
“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 carenki para HPSI 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

Lenguaje máquina

 Lenguaje máquina

Considerando estas definiciones podemos adaptar y ampliar nuestra propia definición de Lenguaje Máquina:

Lenguaje máquina es el sistema estructurado de símbolos y reglas sintácticas y semánticas basadas en el sistema de numeración binario que permiten controlar el comportamiento físico y lógico de una computadora y que son interpretadas directamente por el CPU sin requerir ningún cambio.

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.