Criptografía/Esteganografía
Solución al reto «Fix the PNG I» – Sinfocol
23 dic
En la página de retos de Sinfocol ( World Of Wargame ) me encontré con uno un tanto interesante. Se trata de reparar una imagen PNG -Portable Network Graphics- que está corrupta para así obtener la contraseña y pasar el reto.
La descripción es la siguiente:
Encontramos varios archivos PNG en una carpeta secreta de un terrorista. Las imágenes parecen almacenar información sobre las respuestas que los investigadores buscan. La siguiente imagen fue la primera que encontramos, parece que la cabecera está un poco perdida!
Bien, ahora vamos a resolverlo para ello necesitaremos un editor Hexadecimal y procedemos a abrir el archivo:
Lo primero que notamos es que al inicio del archivo falta el identificador del formato, el cuál debería de ser “PNG”. Por lo cual, podemos deducir que no existe la cabecera pero, ¿Cómo es la cabecera de un fichero PNG?
Un archivo de este tipo empieza con una firma de 8 bytes cuyos valores hexadecimalmente son: 89 50 4E 47 0D 0A 1A 0A
Ahora, lo único que habría que hacer es copiarla y pegarla al inicio del fichero en el editor.
Y vualá!, la imagen queda perfectamente bien:
TinEye: Sitio web para reconocimiento de imágenes
23 dic
TinEye es un motor de búsqueda de imágenes. Puedes enviar una imagen a TinEye para averiguar de dónde viene, cómo se está utilizando, si las versiones modificadas de la imagen existen, o para encontrar versiones más altas de resolución.
TinEye es el primer motor de búsqueda que por primera vez en la web utiliza la tecnología de identificación de la imagen en lugar de palabras clave, metadatos o marcas de agua. Es gratuito.
Búsqueda TinEye
Buscador de Hash MD5 en Python
20 jul
A lo que llega uno cuando está algo aburrido, y no sabes en qué gastar algo de tiempo.
Pues bien, recordando mis viejos tiempos en el deface, se me vino a la mente el nombre de los típicos cifrados (hash) que encuentras al explotar una vulnerabilidad web, como por ejemplo mediante la Inyección SQL (SQLi). Sí, hablo del más común y más usado de los «hashes», el MD5 (Message-Digest Algorithm 5).
«Descifrar» una cadena cifrada mediante algún hash es algo prácticamente imposible, pues el algoritmo es de una sola vía por lo cual no existe una contraparte que nos dé la cadena original de «una manera fácil».
¡Claro!, hay una manera de obtenerlos pero es muy poca ortodoxa. Éste método es mejor conocido con el vulgar nombre de «ataque de fuerza bruta». Por éste método se generan cada segundo muchas palabras o se emplean los famosos diccionarios, que luego serán convertidos en un hash. Si éste hash resultante coincide con el hash «a descifrar» se puede deducir que se ha obtenido la palabra correcta, pero bien, éstos ataques pueden durar horas, días, meses y hasta bastantes años; todo radicando en la pura fuerza criptográfica del algoritmo.
Retomando el tema principal. Por la Inet existen bastantes sitios Más >
¿Su contraseña es segura?
25 jun
Las contraseñas son de vital importancia a la hora de proteger nuestra información y/o privacidad en servicios como por ejemplo: correo electrónico, redes sociales, entre otros. O en nuestros sistemas como GNU/Linux, el cuál tiene una estrecha relación con el uso de contraseñas para su correcto desempeño.
Alguna vez te haz preguntado, ¿cuán segura es tú contraseña? o tal vez…¿cuánto tardaría una PC en descubrirla?.
Pues gracias a la web «How Secure Is My Password» tendremos un cálculo aproximado del tiempo que tardaría una PC en hacerle un ataque de fuerza bruta y obtener nuestra contraseña.
¿Qué es el Cifrado César?
29 may
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 decodificación 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.
En síntesis, el cifrado César es una técnica de codificación que consiste en mover los caracteres de una palabra de acuerdo a la posición dada en la clave, por ejemplo:
Palabra Original: Hola
Clave de cifrado: 3
Palabra cifrada: Krod
Siendo así:
El descifrado es igual de sencillo, pero haciendo el proceso contrario, si en el cifrado sumamos la clave a la palabra, logrando así un movimiento, en el descifrado simplemente restamos.
Enfocándonos un poco en la implementación de este cifrado en la programación, se han realizado varias versiones de acuerdo a cada lenguaje.
Versiones disponibles ( Java por [p3ll3] ) ( C++ por .:WindHack:. ) ( Pascal por .:WindHack:.) ( Batch por Bolivianito ) ( Python Más >
Cifrado César en ASM
29 may
Versión en ASM del algoritmo de cifrado César, programada por CronuX.
Cesar.inc:
.data Cifrado db 128 Dup(?) msgerror db "Ingresado Caracteres Invalidos",0 msgerrorclave db "Clave Ingresada Invalida",0 .data? Nombre db 256 Dup(?) clave db 256 dup(?)
Cesar.asm:
;**************************************** ; @---------------------------------- ; @ Autor original: [p3ll3] ; @ Version original: Java ; @ Autor modificacion: CronuX ; @ Version modificacion: ASM (Masm32) ; @ Sitio web: ; - http://foro.code-makers.net ; @---------------------------------- ;***************************************** invoke GetDlgItemText,hWin,EditNombre,addr Nombre,128 xor eax,eax invoke GetDlgItemText,hWin,Editclave,addr clave,18 invoke atodw,addr clave cmp eax, 19h jnl errorclave xor ecx,ecx mov ecx,eax xor ebx,ebx xor eax,eax bucle: mov al,byte ptr [ebx+Nombre] cmp al, 41h jl error cmp al, 5bh jl suma jmp sigue suma: add al,32 sigue: cmp al,61h jl error cmp al, 7bh jnl error add al,cl cmp al,7ah jbe sigue2 sub al,7ah add al,60h jmp sigue2 sigue2: mov byte ptr [Cifrado+ebx],al inc ebx cmp byte ptr [Nombre+ebx],0 je sale jmp bucle sale: mov byte ptr[Cifrado+EBX],0 Invoke SetDlgItemText,hWin,EditCifrado,addr Cifrado jmp salida error: invoke SetDlgItemText,hWin,EditCifrado,addr msgerror jmp salida errorclave: invoke SetDlgItemText,hWin,EditCifrado,addr msgerrorclave salida: fin
Cifrado César en Batch
29 may
Versión en Batch del algoritmo de cifrado César, programada por Bolivianito.
@echo off setlocal enabledelayedexpansion set c=0 for %%a in (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) do ( set "!C!=%%a"&set "%%a=!c!" call:sum ) set /p "texto=Ingrese un texto : " set /p "desp=Ingrese un numero de desplazamiento : " Set /p "=%texto%"text&call:cc text for /l %%a in (0,1,%leght%) do ( call:procesa !texto:~%%a,1! ) echo %resultado% pause>nul exit :procesa set /a j=!%1!+%desp% if %j% GEQ 26 (set /a “j-=26″) set resultado=%resultado%!%j%! exit/b :sum set /a c+=1 exit/b :cc set /a "leght=%~z1-1" exit/b
Cifrado César en Python
29 may
Versión en Python del algoritmo de cifrado César, programada por Sifaw.
#**************************************** # ---------------------------------- # Autor original: [p3ll3] # Version original: Java # Autor modificacion: Sifaw # Version modificacion: Python 2.5.4 # Sitio web: # - http://foro.code-makers.net # ---------------------------------- #***************************************** #Abecedario usado para el cifrado Abecedario = ['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'] NuevaPalabra = '' #Pedimos la palabra Palabra = raw_input('Escibra la palabra que desea cifrar: ') Palabra = Palabra.lower() #pasamos a minuscula ALength = len(Abecedario) #Obtenemos la longitud del abecedario #Pedimos la clave Clave = input('Elija la palabra con la que cifrar (de 1 a 24): ') if (Clave >= 1) and (Clave <= 26): #Verificamos que sea incorrecta i = 0 while i < len(Palabra): #Recorremos la palabra x = 0 while x < ALength: #Recorremos el abecedario if (Palabra[i] == Abecedario[x]): #Buscamos caracteres que esten en ambos if (x+Clave <= 26): Temp = x+Clave Tmp = Temp-26 NuevaPalabra += Abecedario[Tmp] #Creamos la palabra else: NuevaPalabra += Abecedario[x+Clave] #Creamos la palabra x += 1 i += 1 else: print 'Clave incorrecta' print 'La palabra cifrada es %s' % NuevaPalabra raw_input()
Alternativa a este cifrado, programada por mí.
################################### # Autor: .:WindHack:. # # Sitio web: http://daw-labs.com # # Agradecimientos: Sifaw # ################################### def Cifrar_Cesar(String,Key): tmp = '' for i in String: tmp += chr(ord(i)+Key) return tmp def Descifrar_Cesar(String,Key): return Cifrar_Cesar(String,-Key) print " ================================= " print "| Des/Cifrar Cesar |" print "| .:WindHack:. |" print "| http://daw-labs.com |" print " ================================= " Palabra = raw_input("Introduce la frase: ") Clave = input("Introduce la clave: ") print "Palabra cifrada: " + Cifrar_Cesar(Palabra,Clave) print "Palabra descifrada: " + Descifrar_Cesar(Palabra,Clave)Más >
Cifrado César en Pascal
29 may
Versión en Pascal del algoritmo de cifrado César, programada por mí.
program CesarCifrado; {$APPTYPE CONSOLE} uses SysUtils; var Alphabet: Array [0..25] of Char=('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'); NWord:String = ''; Palabra: String; Clave:Integer; function CifrarCesar(AString:String;AKey:Integer):String; var I,J,ALength,Temp,Tmp:Integer; begin Result := ''; AString := LowerCase(AString); ALength := Length(Alphabet); if (AKey >= 1) and (AKey <= 26) then begin for I := 0 to Length(AString) do for J := 0 to ALength -1 do if (AString[I] = Alphabet[J]) then if J+AKey <= 26 then begin Temp := J+AKey; Tmp := Temp-26; NWord := NWord + Alphabet[Tmp] end else NWord := NWord + Alphabet[J+AKey]; end; Result := NWord; end; begin try WriteLn('Escriba la palabra que desea cifrar > '); ReadLn(Palabra); WriteLn('Escriba la clave para codificar (entre 1 y 24) > '); ReadLn(Clave); Write('La palabra cifrada es: ',CifrarCesar(Palabra,Clave)); ReadLn; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end.
Cifrado César en C++
24 may
Versión en C++ del algoritmo de cifrado César, programada por mí.
/**************************************** @---------------------------------- @ Autor original: [p3ll3] @ Version original: Java @ Autor modificacion: .:WindHack:. @ Version modificacion: C++ @ Sitio web: - http://daw-labs.com - http://foro.code-makers.net @---------------------------------- *****************************************/ #include <iostream> #include <string> using namespace std; /* Declaracion de variables.. El abecedario que usaremos para el cifrado. */ char Abecedario[]={'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'}; string Palabra,NuevaPalabra = ""; unsigned int i,x,ALength,Temp,Tmp,Clave = 0; /* Funcion para convertir una cadena de texto a minusculas. */ string StringToLower(string strToConvert) { for(unsigned int i=0;i < strToConvert.length();i++) { strToConvert[i] = tolower(strToConvert[i]); } return strToConvert; } /* Instancia principal de la aplicacion. */ int main() { cout << "Escriba la palabra que desea cifrar > "; /* Pedimos la palabra */ cin >> Palabra; /* La recibimos y guardamos en la variable "Palabra". */ Palabra = StringToLower(Palabra); /* La convertimos a minusculas. */ ALength = strlen(Abecedario); /* Obtenemos la longitud del abecedario */ cout << "Escriba la clave para codificar (entre 1 y 24) > ";/* Pedimos la clave de cifrado. */ cin >> Clave; /* La recibimos y guardamos en la varible "Clave". */ if ((Clave >= 1) & (Clave <= 26)){ /* Confirmamos si es correcta...*/ for (i = 0; i < Palabra.length(); i++){ /* Recorremos la palabra hasta el final. */ for (x = 0; x < ALength - 1; x++){ /* Recorremos el abecedarios. */ if (Palabra[i] == Abecedario[x]){ /* Buscamos caracteres que estén en ambos. */ if (x+Clave >= 26){ Temp = x+Clave; Tmp = Temp-26; NuevaPalabra = NuevaPalabra + Abecedario[Tmp]; /* Creando la palabra. */ }else NuevaPalabra = NuevaPalabra + Abecedario[x+Clave]; /* Creando la palabra. */ } } } }else cout << "Clave errónea"; cout << "La palabra cifrada es " << NuevaPalabra; /* Muestro la palabra cifrada. */ getchar(); return 0; }
Una alternativa un poco más cómoda:
/*
===================================
@Autor: Más > 
