EPI Crypter 1.0
¿Qué es?
EPI Crypter 1.0, es un sencillísimo crypter programado en C++ para Win32. Puedes cifrar y descifrar ficheros con el algoritmo ROT13 con absoluta facilidad.
Información
El main ocupa 7 KB.
Inconvenientes
- No tiene GUI.
- Sólo puede cifrar ficheros de texto (.doc, .txt, ...).
Bucles infinitos.ARREGLADO- Cuando buscas la ruta, dónde esta el archivo, el directorio no puede contener espacios. Por ejemplo, si escribimos: C:\Documents and Settings\fichero.txt, no lo reconoce, en cambio: C:\fichero.txt, sí.
- Ocupa bastante para ser un mini-crypter.
- El algoritmo de cifrado es sólo uno: ROT13 (básicamente no he podido hacer más por tiempo).
Código
//------------------------------------------------------------------------------------------------------------------------- //Título: EPI Crypter 1.0 //Autor: elprogramadorinformatico [EPI] //Fecha: 03-01-2010 // //Se puede distribuir libremente este código, siempre que se mantenga esta cabecera //------------------------------------------------------------------------------------------------------------------------- #pragma comment(lib,"shlwapi.lib") #include <windows.h> #include <shlwapi.h> #include <stdio.h> #include <iostream> #include <locale> void cifrar() { using namespace std; //Para que nuestro programa se adapte al español locale::global(locale("spanish")); //Creamos un LPCSTR que tendrá la dirección del fichero LPCSTR nombrefichero = (LPSTR)GlobalAlloc(GPTR,MAX_PATH); //Escribimos el nombre del fichero cout << "Escribe el nombre del fichero (ejemplo: C:\\fichero.txt):" << endl; scanf("%s",nombrefichero); cout << "Comprobando..." << endl; Sleep(1000); //Comprovamos si el fichero existe if(PathFileExistsA(nombrefichero) == TRUE) { MessageBoxA(0,"El fichero se ha encontrado y se ha cifrado correctamente","Fichero encontrado",0); } else { MessageBoxA(0,"El fichero no se ha encontrado, vuélvelo a escribir y asegúrate de que existe","Fichero no encontrado",0); system("CLS"); cifrar(); } //Abrimos el fichero, abrirfichero es el HANDLE de archivo abierto, que utilizamos para trabajar con él HANDLE abrirfichero = CreateFileA(nombrefichero,GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,0,0); //Obtenemos el tamaño del archivo abierto, con un DWORD DWORD tamaniofichero = GetFileSize(abrirfichero,0); //Creamos un buffer que contendrá el contenido del archivo, con un LPSTR LPSTR bufferfichero = (LPSTR)GlobalAlloc(GPTR,tamaniofichero); //Leemos el archivo, metiendo el contenido en bytesfichero, con un DWORD DWORD bytesfichero; ReadFile(abrirfichero,bufferfichero,tamaniofichero,&bytesfichero,0); //Sumamos 13 (sistema ROT13) a todos los caracteres for(DWORD caracteresfichero = 0;caracteresfichero < tamaniofichero;caracteresfichero++) { bufferfichero[caracteresfichero] = bufferfichero[caracteresfichero] + 13; } //Borramos los carácteres iniciales del fichero SetFilePointer(abrirfichero,FILE_BEGIN,0,0); //Sobreescribimos los nuevos carácteres BOOL sobreescribirfichero = WriteFile(abrirfichero,bufferfichero,tamaniofichero,&bytesfichero,0); //Cerramos el fichero CloseHandle(abrirfichero); //Creamos un char, para preguntar si queremos volver a cifrar char pregunta2; cout << "¿Quiéres volver a cifrar otro fichero? (s/n):" << endl; cin >> pregunta2; //Con la función switch(), decidimos que hacer switch(pregunta2) { case 's': system("CLS"); cifrar(); break; case 'S': system("CLS"); cifrar(); break; case 'n': cout << endl; cout << "Gracias por utilizar: EPI Crypter 1.0" << endl; getchar(); break; case 'N': cout << endl; cout << "Gracias por utilizar: EPI Crypter 1.0" << endl; getchar(); break; default: MessageBoxA(0, "Su opción no es válida","Error",MB_ICONERROR); system("CLS"); cifrar(); break; } //Damos una pausa y cerramos el programa getchar(); } void descifrar() { using namespace std; //Para que nuestro programa se adapte al español locale::global(locale("spanish")); //Creamos un LPCSTR que tendrá la dirección del fichero LPCSTR nombrefichero = (LPSTR)GlobalAlloc(GPTR,MAX_PATH); //Escribimos el nombre del fichero cout << "Escribe el nombre del fichero (ejemplo: C:\\fichero.txt, y sólo se pueden descifrar ficheros cifrados en ROT13):" << endl; scanf("%s",nombrefichero); cout << "Comprobando..." << endl; Sleep(1000); //Comprovamos si el fichero existe if(PathFileExistsA(nombrefichero) == TRUE) { MessageBoxA(0,"El fichero se ha encontrado y se ha descifrado correctamente","Fichero encontrado",0); } else { MessageBoxA(0,"El fichero no se ha encontrado, vuélvelo a escribir y asegúrate de que existe","Fichero no encontrado",0); system("CLS"); descifrar(); } //Abrimos el fichero, abrirfichero es el HANDLE de archivo abierto, que utilizamos para trabajar con él HANDLE abrirfichero = CreateFileA(nombrefichero,GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,0,0); //Obtenemos el tamaño del archivo abierto, con un DWORD DWORD tamaniofichero = GetFileSize(abrirfichero,0); //Creamos un buffer que contendrá el contenido del archivo, con un LPSTR LPSTR bufferfichero = (LPSTR)GlobalAlloc(GPTR,tamaniofichero); //Leemos el archivo, metiendo el contenido en bytesfichero, con un DWORD DWORD bytesfichero; ReadFile(abrirfichero,bufferfichero,tamaniofichero,&bytesfichero,0); //Restamos 13 (sistema ROT13) a todos los caracteres for(DWORD caracteresfichero = 0;caracteresfichero < tamaniofichero;caracteresfichero++) { bufferfichero[caracteresfichero] = bufferfichero[caracteresfichero] - 13; } //Borramos los carácteres iniciales del fichero SetFilePointer(abrirfichero,FILE_BEGIN,0,0); //Sobreescribimos los nuevos carácteres BOOL sobreescribirfichero = WriteFile(abrirfichero,bufferfichero,tamaniofichero,&bytesfichero,0); //Cerramos el fichero CloseHandle(abrirfichero); //Creamos un char, para preguntar si queremos volver a descifrar char pregunta2; cout << "¿Quiéres volver a descifrar otro fichero? (s/n):" << endl; cin >> pregunta2; //Con la función switch(), decidimos que hacer switch(pregunta2) { case 's': system("CLS"); descifrar(); break; case 'S': system("CLS"); descifrar(); break; case 'n': cout << endl; cout << "Gracias por utilizar: EPI Crypter 1.0" << endl; getchar(); break; case 'N': cout << endl; cout << "Gracias por utilizar: EPI Crypter 1.0" << endl; getchar(); break; default: MessageBoxA(0, "Su opción no es válida","Error",MB_ICONERROR); system("CLS"); descifrar(); break; } } int main() { using namespace std; //Para que nuestro programa se adapte al español locale::global(locale("spanish")); //Creamos un char, para preguntar que queremos hacer char pregunta1; cout << "¿Qué deseas hacer? Para cifrar pulse: a; para descifrar (ficheros cifrados en ROT13) pulse: b; para salir pulse: c:" << endl; cin >> pregunta1; //Con la función switch(), decidimos que hacer switch(pregunta1) { case 'a': system("CLS"); cifrar(); break; case 'A': system("CLS"); cifrar(); break; case 'b': system("CLS"); descifrar(); break; case 'B': system("CLS"); descifrar(); break; case 'c': cout << endl; cout << "Gracias por utilizar: EPI Crypter 1.0" << endl; getchar(); return 0; break; case 'C': cout << endl; cout << "Gracias por utilizar: EPI Crypter 1.0" << endl; getchar(); return 0; break; default: MessageBoxA(0, "Su opción no es válida","Error",MB_ICONERROR); system("CLS"); main(); break; } }
Para la 2.0
He hecho este crypter muy rápido porqué estoy estudiando mucho para la 2.0 y, seguramente tendrá de nuevo:
- GUI (con Qt).
- Algoritomos de cifrado variados y más potentes (base64, XOR, ...).
- cifrado de exe's (estructura PE).
Bueno, eso es todo. Espero que les guste.
PD: dedico este humilde trabajo a Hacker_Zero y Karcrack por su paciencia conmigo.