elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 03:05  


Tema destacado: Suscripción al boletín mensual de elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  [SRC][C++] EPI Crypter 1.0
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [SRC][C++] EPI Crypter 1.0  (Leído 3,184 veces)
E.P.I.


Desconectado Desconectado

Mensajes: 346


elprogramadorinformatico [E.P.I.]


Ver Perfil WWW
[SRC][C++] EPI Crypter 1.0
« en: 3 Enero 2010, 18:35 »

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.


« Última modificación: 24 Abril 2010, 21:31 por E.P.I. » En línea

La verdad nos hará libres
Kasswed
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.202


Andalucía


Ver Perfil
Re: [C++] EPI Crypter 1.0
« Respuesta #1 en: 4 Enero 2010, 01:10 »

Hola.

Demasiados inconvenientes ¿no? jeje.

Cuando se encriptan archivos da igual que sean de texto, imágenes etc. los archivos se abren en modo binario y se encriptan a nivel binario (dependiendo del algoritmo se puede hacer por bloques o bit a bit). Por lo tanto no importa de qué tipo sean o qué cabecera tengan.

Lo de la GUI no debería ser importante, intenta cuidar la eficacia en los algoritmos y no te vayas por las ramas.

En cuando a lo de los bucles infinitos: es inaceptable. Deberías corregirlo.


En línea

"He who allows himself to be insulted, deserves to be."

Repórtame cualquier falta a las normas del foro por mensaje privado.
Saint Iker

Desconectado Desconectado

Mensajes: 19



Ver Perfil WWW
Re: [C++] EPI Crypter 1.0
« Respuesta #2 en: 4 Enero 2010, 01:56 »

Si el tio implementa ROT13 de manera correcta( que no e visto el code ); supone el no manejar datos diferentes a las letras, por lo que no se aconseja en absoluto para datos binarios.

Salu2.

Att: Iker
En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.710


Nie Dam Sie


Ver Perfil WWW
Re: [C++] EPI Crypter 1.0
« Respuesta #3 en: 4 Enero 2010, 02:10 »

No he visto el codigo pero:


Citar
- No tiene GUI.

No te preocupes por eso, mas adelante podras hacerla pero primero logra que el codigo funcione correctamente.

Citar
- Sólo puede cifrar ficheros de texto (.doc, .txt, ...).

Si eso esta claro si solo usas ROT13. En todo caso para otro tipos de ficheros tendras que utilizar otro metodo de encriptacion. Ten en cuenta que el ROT13 no proporciona seguridad criptografica alguna.

Citar
- 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í.

Eso seguramente sea muy facil de solucionar. No he visto como lees la ruta pero seguramente sea un error muy simple. Postea esa parte en caso que no puedas solucionarlo.

Citar
- Bucles infinitos.

Deberia ser tu prioridad numero a la hora de arreglar el codigo. Un codigo que tiene bucles infinitos no es una version 1.0  ;D.

Si el tio implementa ROT13 de manera correcta( que no e visto el code ); supone el no manejar datos diferentes a las letras, por lo que no se aconseja en absoluto para datos binarios.

Salu2.

Att: Iker

Claro. Precisamente se trata de sustituir cada letra por la que este 13 posiciones adelante, y en caso de llegar a la ultima posible volver a comenzar desde el principio.

Un saludo!
« Última modificación: 4 Enero 2010, 02:12 por Littlehorse » En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
E.P.I.


Desconectado Desconectado

Mensajes: 346


elprogramadorinformatico [E.P.I.]


Ver Perfil WWW
Re: [C++] EPI Crypter 1.0
« Respuesta #4 en: 4 Enero 2010, 14:00 »

Por ejemplo un switch(), a ver cómo resolver el bucle infinito:

Código
switch(pregunta1) {
case 1:
system("CLS");
cifrar();
break;
case 2:
system("CLS");
descifrar();
break;
case 3:
printf("\n");
printf("Gracias por utilizar: EPI Crypter 1.0\n");
getchar();
return 0;
break;
default:
MessageBoxA(0, "Su opción no es válida","Error",MB_ICONERROR);
system("CLS");
main();
break;
}
 

¿Cómo resolver el bucle infinito?
« Última modificación: 4 Enero 2010, 14:03 por E.P.I » En línea

La verdad nos hará libres
O-LLOS-O


Desconectado Desconectado

Mensajes: 324


tengo 14 invitaciones para locker-z enviar mp


Ver Perfil
Re: [C++] EPI Crypter 1.0
« Respuesta #5 en: 4 Enero 2010, 14:21 »

Por ejemplo un switch(), a ver cómo resolver el bucle infinito:

Código
switch(pregunta1) {
case 1:
system("CLS");
cifrar();
break;
case 2:
system("CLS");
descifrar();
break;
case 3:
printf("\n");
printf("Gracias por utilizar: EPI Crypter 1.0\n");
getchar();
return 0;
break;
default:
MessageBoxA(0, "Su opción no es válida","Error",MB_ICONERROR);
system("CLS");
main();
break;
}
 

¿Cómo resolver el bucle infinito?

mmmm haber tu que quieres que simplemente se pueda elegir una opcion o que despues de elegir una y hacer lo que se tenga que hacer poder volver a elegir??

Weno, ya diras pero que pinta el getchar del case 3?si el tio quiere salir y ya ha apretado la letra de salir no tiene que apretar otra tecla para volver a salir y el return 0 yo tambien lo quitaria pq total en esta version a no ser que haya un whole por alguna parte solo puedes meter un numero y  ara lo que tenga que hacer y se acabara. El defaul deberia funcionar... lo que yo nunca he llamado al main asi que no se pero eso no creo que sea un problema

No se lo que podia provocar un bucle es el getchar pero no infinito... como minimo hasta que apretes otra letra
« Última modificación: 4 Enero 2010, 14:25 por O-LLOS-O » En línea

E.P.I.


Desconectado Desconectado

Mensajes: 346


elprogramadorinformatico [E.P.I.]


Ver Perfil WWW
Re: [C++] EPI Crypter 1.0
« Respuesta #6 en: 4 Enero 2010, 14:24 »

Descargate el código y pulsa una letra y saldrá el MessageBox, cuando pulses aceptar volverá a salir y así infinitamente.
En línea

La verdad nos hará libres
‭‭‭‭jackl007


Desconectado Desconectado

Mensajes: 1.381


[UserRPL]


Ver Perfil WWW
Re: [C++] EPI Crypter 1.0
« Respuesta #7 en: 4 Enero 2010, 14:26 »

puedes usar el api getshortpath para obtener la ruta corta (sin espacios) y evitar el inconveniente de que el programa no funcione correctamente cuando hay espacios en la ruta...
Visita este enlace: http://msdn.microsoft.com/en-us/library/aa364989%28VS.85%29.aspx

Por la GUI ni te preocupes, es lo de menos
En línea

E.P.I.


Desconectado Desconectado

Mensajes: 346


elprogramadorinformatico [E.P.I.]


Ver Perfil WWW
Re: [C++] EPI Crypter 1.0
« Respuesta #8 en: 4 Enero 2010, 14:32 »

puedes usar el api getshortpath para obtener la ruta corta (sin espacios) y evitar el inconveniente de que el programa no funcione correctamente cuando hay espacios en la ruta...
Visita este enlace: http://msdn.microsoft.com/en-us/library/aa364989%28VS.85%29.aspx

Por la GUI ni te preocupes, es lo de menos
Ok! Voy a ver y gracias.
En línea

La verdad nos hará libres
O-LLOS-O


Desconectado Desconectado

Mensajes: 324


tengo 14 invitaciones para locker-z enviar mp


Ver Perfil
Re: [C++] EPI Crypter 1.0
« Respuesta #9 en: 4 Enero 2010, 14:33 »

esto que tal?

Código
cout << "introduce 1,2,3 para hcer lo que sea" << endl;
while(cin >> pregunta and pregunta != 3) {
   switch(pregunta1) {
case 1:
system("CLS");
cifrar();
break;
case 2:
system("CLS");
descifrar();
break;
default:
MessageBoxA(0, "Su opción no es válida","Error",MB_ICONERROR);
system("CLS");
                       cout << "introduce 1,2,3 para hcer lo que sea" << endl;
//si lo que quieres sacar es muy largo para no repetirlo dos veces escribelo en una funcion de
// sacar_menu() o algo asi
break;
}
 
}
printf("\n");
printf("Gracias por utilizar: EPI Crypter 1.0\n");

con esto no creo que pase eso pero espera que con el tema de los textoes hay un problema xdxd que estoy haciendo otra cosa y no me he dado cuenta pero la idea seria esta

PD solucionado
« Última modificación: 4 Enero 2010, 14:36 por O-LLOS-O » En línea

E.P.I.


Desconectado Desconectado

Mensajes: 346


elprogramadorinformatico [E.P.I.]


Ver Perfil WWW
Re: [C++] EPI Crypter 1.0
« Respuesta #10 en: 4 Enero 2010, 14:42 »

esto que tal?

Código
cout << "introduce 1,2,3 para hcer lo que sea" << endl;
while(cin >> pregunta and pregunta != 3) {
   switch(pregunta1) {
case 1:
system("CLS");
cifrar();
break;
case 2:
system("CLS");
descifrar();
break;
default:
MessageBoxA(0, "Su opción no es válida","Error",MB_ICONERROR);
system("CLS");
                       cout << "introduce 1,2,3 para hcer lo que sea" << endl;
//si lo que quieres sacar es muy largo para no repetirlo dos veces escribelo en una funcion de
// sacar_menu() o algo asi
break;
}
 
}
printf("\n");
printf("Gracias por utilizar: EPI Crypter 1.0\n");

con esto no creo que pase eso pero espera que con el tema de los textoes hay un problema xdxd que estoy haciendo otra cosa y no me he dado cuenta pero la idea seria esta

PD solucionado
En teoría esto está solucionado, pero en el default, quiero que cuando sea error, te vuelva al menú, y si pongo menu(), luego es bucle infinito en caso que pulses una letra.
En línea

La verdad nos hará libres
O-LLOS-O


Desconectado Desconectado

Mensajes: 324


tengo 14 invitaciones para locker-z enviar mp


Ver Perfil
Re: [C++] EPI Crypter 1.0
« Respuesta #11 en: 4 Enero 2010, 14:56 »

no se pq pero por lo que veo en tu main no se aleja mucho del mio en los sitios que pongo mi cout pont tu printf y ya esta, no entiendo a que te refieres si aprietas una letra con el printf no se pero con el cin... si espera un entero i aprietas una a el programa peta i si acaba no se queda en bucle infinito... ni dea !!!! xdxd pero el programa esta bien yo no he hecho nada asi le pegare una ojeada
En línea

E.P.I.


Desconectado Desconectado

Mensajes: 346


elprogramadorinformatico [E.P.I.]


Ver Perfil WWW
Re: [C++] EPI Crypter 1.0
« Respuesta #12 en: 4 Enero 2010, 15:09 »

Ok! Lo intento con cin, pero en el while(), de dónde sale el: pregunta and pregunta. ¿Qué es pregunta?
En línea

La verdad nos hará libres
O-LLOS-O


Desconectado Desconectado

Mensajes: 324


tengo 14 invitaciones para locker-z enviar mp


Ver Perfil
Re: [C++] EPI Crypter 1.0
« Respuesta #13 en: 4 Enero 2010, 15:18 »

perdon esque no lo e copiado igual pregunta es tu pregunta1, que me he dejado el 1, i el while basicamente lo que hae es mientras que metas un entero y ese entero sea diferente de 3 hacer.... que es lo qu creo que quieres tu
En línea

E.P.I.


Desconectado Desconectado

Mensajes: 346


elprogramadorinformatico [E.P.I.]


Ver Perfil WWW
Re: [C++] EPI Crypter 1.0
« Respuesta #14 en: 4 Enero 2010, 15:30 »

Bueno, es igual... eso no es lo que quiero, pero gracias.

A ver si me entiendes ahora:
tengo el menú con la función switch(): si pulsas 1, se va a cifrar(), si pulsas 2, se va a descifrar(), si pulsas 3 te sale del programa, luego tengo un default que dice que si pulsas un número diferente de 1, 2, 3 te salga un MessageBox. Hasta ahí bien... pero si pulsas una letra, sale el MessageBox, infinitamente (o sea, que si pulsas aceptar, te sale otro...).

Lo que quiero, es que aunque pulses una letra (imaginemos, por equivocación), te salga el MessageBox 1 VEZ, Y LUEGO VAYA AL PROGRAMA SIN QUE PETE (o sea, que el MessageBox NO te salga INFINITAMENTE).
En línea

La verdad nos hará libres
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Crypter en vb6
Hacking Básico
CAR3S? 7 2,026 Último mensaje 14 Febrero 2011, 17:57
por Garfield07
Crypter - Cifrador de Archivos - Universal
Programación General
traviatØ 5 1,825 Último mensaje 28 Julio 2011, 01:41
por [Case]
Crear un crypter 100% indetectable
Análisis y Diseño de Malware
zerut 13 5,224 Último mensaje 22 Octubre 2011, 16:15
por xivan25
Crypter que no rompa el DarkComet 4.2??
Análisis y Diseño de Malware
Putero69 0 664 Último mensaje 21 Octubre 2011, 20:53
por Putero69
¿Crypter en C o C++?
Análisis y Diseño de Malware
Shamaroot 10 1,491 Último mensaje 29 Octubre 2011, 19:40
por Shamaroot
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines