Enviado em 22/05/2013 - 18:16h
Bom, não estou fazendo nenhum tipo de curso técnico, quanto mais faculdade. Resolvi abrir um livro de C e estudar. Meu primeiro programa, está sendo esse gerador de wordlists pra quem gosta de brincar com o aircrack, hydra e outras coisas mais e precisam de uma lista de senhas.
/* Opções do programa:
wlfilter <wordlist.txt> [opções]
-min valor
-max valor
-f --format
-w --write saída.txt
-h --help
Programa: wlfilter.c
Escrito por: Renan Novaes - zerotres.br@gmail.com
Data: 11/05/2013 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include <ctype.h>
#include <wchar.h>
#include <wctype.h>
#define VERSAO "0.2"
struct indice {
unsigned int tamanhoDaPalavra;
unsigned int posicaoNoArquivo;
unsigned int elementoCompativel;
} *indice;
const unsigned int COMPRIMENTO_MINIMO = 1;
const unsigned int COMPRIMENTO_MAXIMO = 128;
unsigned int min, max;
int obter_palavra(FILE *fp, wchar_t *string) {
/* Percorre o arquivo a procura da primeira palavra */
while (!iswgraph(*string = fgetwc(fp)))
if (feof(fp)) return EOF; /* Atingiu o fim do arquivo */
/* Grava a palavra na string passada por
referência até encontrar um caractere de espaço */
while (iswgraph(*string)) {
*(++string) = fgetwc(fp);
}
*string = '{TEXTO}'; /* Troquem por barra zero se o viva o linux trocar por {TEXT} */
return wcslen(string);
}
int gerar_senhas(FILE *fp) {
wchar_t string[COMPRIMENTO_MAXIMO];
wchar_t strBase[COMPRIMENTO_MAXIMO];
wchar_t strSenha[COMPRIMENTO_MAXIMO]; /* Contém o resultado de cada mixagem */
fprintf(stderr, "Gerando senhas\n");
int contador = 0;
while (obter_palavra(fp, strBase) != EOF) {
contador = ftell(fp);
if ((wcslen(strBase) >= min) && (wcslen(strBase) <= max))
fwprintf(stdout, L"%ls\n", strBase); /* Imprime o cabeçalho */
wcscpy(strSenha, strBase);
rewind(fp);
while (obter_palavra(fp, string) != EOF) {
wcscat(strSenha, string);
if ((wcslen(strSenha) >= min) && (wcslen(strSenha) <= max))
fwprintf(stdout, L"%ls\n", strSenha); /* Imprime a senha mixada */
wcscpy(strSenha, strBase);
}
fseek(fp, contador, SEEK_SET);
}
return 0;
}
/* Extensão da função qsort em stdlib.h */
static int cmpfunc(const void *p1, const void *p2)
{
size_t tamanhoDaPalavra1 = ((const struct indice *)p1)->tamanhoDaPalavra;
size_t tamanhoDaPalavra2 = ((const struct indice *)p2)->tamanhoDaPalavra;
if (tamanhoDaPalavra1 <= tamanhoDaPalavra2)
return -1;
else if (tamanhoDaPalavra1 >= tamanhoDaPalavra2)
return 1;
}
/* Em fase de implementação */
int gerar_indice(FILE *fp) {
wchar_t string[COMPRIMENTO_MAXIMO]; /* Conterá palavras do arquivo de entrada mas não será efetivamente usado nessa função */
int numeroDePalavras = 0; /* armazena o número de palavras contidas no arquivo de entrada *fp */
int contador; /* contador de uso geral */
fprintf(stderr, "Gerando índices\n");
/* Obtem a quantidade de palavras no arquivo de entrada */
while (obter_palavra(fp, string) != EOF)
if (wcslen(string) <= max) ++numeroDePalavras;
rewind(fp); /* rebobina o arquivo */
/* Armazena memória para criar o índice */
if ((indice = (struct indice *)calloc(numeroDePalavras, sizeof(struct indice))) == NULL) {
fprintf(stderr, "Não foi possível gerar um índice. Ausência de memória.\n");
exit(EXIT_FAILURE);
}
/* Armazena as informações do indice (cria o índice) */
contador = 0;
while (obter_palavra(fp, string) != EOF)
if (wcslen(string) <= max) {
indice[contador].tamanhoDaPalavra = wcslen(string);
indice[contador].posicaoNoArquivo = ftell(fp) - indice[contador].tamanhoDaPalavra;
++contador;
}
qsort(indice, numeroDePalavras, sizeof(struct indice), cmpfunc);
/*for (contador = 0; contador < numeroDePalavras; contador++)
fprintf(stdout, "Palavra %d: Tamanho %d, Posição: %d\n", contador + 1, indice[contador].tamanhoDaPalavra, indice[contador].posicaoNoArquivo);*/
rewind(fp); /* rebobina o arquivo */
return 0;
}
int main(int argc, char *argv[]) {
FILE *fpEntrada;
int contador;
if (setlocale(LC_ALL, "") == NULL) {
printf("locale error\n");
exit(EXIT_FAILURE);
}
/* Verifica se o programa foi chamado corretamente */
if (argc < 2) {
fprintf(stdout, "Ausência de argumento\n");
exit(EXIT_FAILURE);
}
/* Verifica se o primeiro argumento é uma solicitação da versão */
if (strncmp(argv[1], "-v", 2) == 0) {
fprintf(stderr, "Wordlist Filter Versão: %s\n", VERSAO);
return 0;
}
/* Verifica se o arquivo especificado pode ser aberto para leitura */
if ((fpEntrada = fopen(argv[1], "r")) == NULL) {
fprintf(stderr, "Não foi possível ler o arquivo %s\n", argv[1]);
exit(EXIT_FAILURE);
}
/* Processamento da linha de comando começa aqui */
min = COMPRIMENTO_MINIMO;
max = COMPRIMENTO_MAXIMO;
for (contador = 2; contador < argc; contador += 2) {
/* Processando a opção -min */
if (strncmp(argv[contador], "-min", 4) == 0) {
/* Verifica se há ausencia de argumento em -min */
if (argv[contador + 1] == NULL) {
fprintf(stderr, "Ausência de argumento na opção -min\n");
exit(EXIT_FAILURE);
}
min = (int)atoi(argv[contador + 1]); /* Converte o argumento de -min para um número inteiro (int) */
if (min < COMPRIMENTO_MINIMO) {
fprintf(stderr, "Necessário um valor acima de %d para -min\n", COMPRIMENTO_MINIMO - 1);
exit(EXIT_FAILURE);
}
} /* Processamento de -min termina aqui */
/* Processando a opção -max */
if (strncmp(argv[contador], "-max", 4) == 0) {
/* Verifica se há ausencia de argumento em -max */
if (argv[contador + 1] == NULL) {
fprintf(stderr, "Ausência de argumento na opção -max\n");
exit(EXIT_FAILURE);
}
max = (int)atoi(argv[contador + 1]); /* Converte o argumento de -max para um número inteiro (int) */
if (max > COMPRIMENTO_MAXIMO) {
fprintf(stderr, "Necessário um valor abaixo de %d para -max\n", COMPRIMENTO_MAXIMO + 1);
exit(EXIT_FAILURE);
}
} /* Processamento de -max termina aqui */
/* Verifica se o argumento de -min é maior que o argumento de -max */
if (min > max) {
fprintf(stderr, "Necessário que o argumento de -min seja igual ou menor que o argumento de -max\n");
exit(EXIT_FAILURE);
}
/* Funções ainda não implementadas */
if (strncmp(argv[contador], "-f", 2) == 0) {
fprintf(stderr, "-f ainda não foi implementado\n");
}
if (strncmp(argv[contador], "-w", 2) == 0) {
fprintf(stderr, "-w ainda não foi implementado\n");
}
} /* Termina o processamento da linha de comando */
//gerar_indice(fpEntrada); /* Em fase de implementação */
gerar_senhas(fpEntrada);
free(indice);
fclose(fpEntrada);
/* Finaliza o programa com sucesso */
return 0;
}
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Quero saber sobre os melhores aplicativos de office para usar em 2024 ... (2)
Queria saber se existe alguma forma de desistalar programa no ubuntu s... (3)
Toda vez que tento atualizar o clamav me deparo com erros ao atualizar... (0)