Meu primeiro programa

1. Meu primeiro programa

Renan Novaes
zerotres

(usa Outra)

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.
Se alguém conhece esses programas, gostaria que avaliassem o simples resultado e o código. Oque mudariam, oque está errado. Meu primeiro programa tosco e ainda não está acabado claro:


/* 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;
}

Esse programa trabalha com arquivos contendo uma lista de palavras, tal como um dicionário. Digamos que contenha duas palavras nesse arquivo:
echo dia azul > wordlist.txt
./wlfilter wordlist.txt resulta em:
diadia diaazul azuldia azulazul

O interessante é que você pode jogar esse resultado pra outro arquivo tal como
./wlfilter wordlist.txt > wordlist2.txt
./wlfilter wordlist2.txt > wordlist3.txt etc...
Aceita caracteres em qualquer idioma.


  


2. Re: Meu primeiro programa

???
gokernel

(usa Linux Mint)

Enviado em 22/05/2013 - 20:45h

Bom, passei aqui só para desejar felicidades para vc no seu aprendizado ...

Para falar a verdade estou irado neste momento por perder o meu chip no tablet de minha sobrinha que ganhou na escola ... é um da positivo e isso aumentou mais o meu desprezo pela marca ... aahzhaah RIR PARA NÃO CHORAR. ;)

INFO: o chip ficou perdido/solto dentro da "maconha".


3. Re: Meu primeiro programa

Renan Novaes
zerotres

(usa Outra)

Enviado em 22/05/2013 - 20:57h

gokernel escreveu:

Bom, passei aqui só para desejar felicidades para vc no seu aprendizado ...

Para falar a verdade estou irado neste momento por perder o meu chip no tablet de minha sobrinha que ganhou na escola ... é um da positivo e isso aumentou mais o meu desprezo pela marca ... aahzhaah RIR PARA NÃO CHORAR. ;)

INFO: o chip ficou perdido/solto dentro da "maconha".


MEU!!! KASODKASODkosa... vc colocou o chip e ele se escondeu dentro do aparelho?? Pânico pela marca. Trabalhei na produção da linha de notebooks da Samsung e cara, é grotesco a forma como os computadores vão pra caixa. Direto eu encontrava fitas e alguns cabos pra fora do computador e com uma chave de fenda, a gente jogava pra dentro de qualquer jeito, fechava e mandava pra venda.


4. Re: Meu primeiro programa

???
gokernel

(usa Linux Mint)

Enviado em 22/05/2013 - 23:42h

@zerotres:
"vc colocou o chip e ele se escondeu dentro do aparelho ??"

Ele ficou solto/jogado dentro do tablet e lógico sem reconhecer o chip.

Ainda tentei retirar balancando mas não consegui ... estou mais acalmado agora pois os meus contatos ficaram gravado no smart pois pensei que ficavam no chip.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts