PDA

View Full Version : |Source| Criptografia XOR



Ravoc
18/03/2019, 12:15 AM
Olá, venho disponibilizar este codigo soucer que eu achei por ai, e coloquei em meu projeto e funcionou
criptografia usada em varios exploits


#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>

using namespace std;
char xorcrypt(char ch, long key) //Função para retornar um caractere XOR'ed por uma chave longa
{
return ch ^ key; //retorno ch XOR'ed pela chave
}
void error(void)
{
cout << endl << "Fatal Error, tente uma chave diferente para este arquivo." << endl;
exit(EXIT_FAILURE);
}
int main(int argc, char *argv[])
{
ifstream inf; //variável do arquivo de entrada
ofstream outf; //variável do arquivo de saída
unsigned loc; //localização em string utilizada para pesquisa
string fn; //string para arquivo
long key; //armazena a chave para o programa
char tmp; //variável para armazenar caracteres lidos do arquivo de entrada

if(argc == 3) //se dois argumentos de linha de comando foram passados
{
fn = argv[1]; //analisar o elemento da primeira linha de comando como nome do arquivo original
key = strtol(argv[2],NULL,0); //analisar o elemento da segunda linha de comando como a chave longa
inf.open(fn.c_str()); //arquivo de entrada aberto
}
else
{
cout << endl << "Por favor Entre com chave de criptografia: "; //prompt do usuário para a chave de criptografia
cin >> key; //obter a chave de cin
}


while(!inf.is_open()) //enquanto um dos arquivos não está devidamente aberto
{
cout << endl << "Por favor, Digite nome de arquivo válido para xor-Crypt: "; //prompt do usuário para um nome de arquivo
cin >> fn; //tomar fn_orig de cin
inf.open(fn.c_str()); //arquivo de entrada aberto
}

loc = fn.find(".enc"); //Verificar se o arquivo já contém extensão. enc
if(loc != string::npos) //se o arquivo for encontrado -
{
fn.replace(loc,4,".orig"); // - substitui último enc com orig..
}
else
{
fn += ".enc"; //nome criptografado é o mesmo que o original. enc
}
outf.open(fn.c_str()); //arquivo de saída aberta

while(inf) //enquanto arquivo de entrada não chega EOF
{
inf.get(tmp); //começar o próximo caractere
if(inf) //se o arquivo ainda não estiver em EOF
{
if(xorcrypt(tmp,key) != EOF) //enquanto o caractere criptografado pela chave não é ilegal
{
outf.put(xorcrypt(tmp,key)); //caractere criptografado em arquivo de saída
}
else
{
inf.close(); //arquivo de entrada
outf.close(); //arquivo de saída
fn = "del " + fn; //adiciona "del" para o inicio do nome do aruivo atual
system(fn.c_str()); //executa comando delete
error(); //informar o erro ao sair
}
}
}

inf.close(); //arquivo de entrada
outf.close(); //arquivo de saída

return 0;
}