Verificador de phishing. Phishing é uma forma de roubo de identidade em que, em um e-mail, um remetente se pass por uma fonte confiável para tentar adquirir informações particulares, como nomes de usuário, senhas, números de cartão de crédito e número de CPF. E-mails de phishing com mensagens que declaram ser de bancos conhecidos, empresas de cartão de crédito, sites de leilão, redes sociais e serviços de pagamento on-line podem parecer legítimos. Essas mensagens fraudulentas normalmente oferecem links para sites falsos, onde é solicitado

que você digite informações confidenciais. Visite a McAfee, Security Extra, e outros sites para encontrar listas dos principais e-mails de phishing. Também verifique o Anti-Phishing Working Group e o site Cyber Investigations do FBI, onde você encontrará informações sobre as fraudes mais recentes e como se proteger delas. Crie uma lista de 30 palavras, frases e nomes de empresa normalmente encontrados nas mensagens de phishing.

Atribua um valor em pontos para cada um, com base na estimativa de probabilidade de estar em uma mensagem de phishing (por exemplo, um ponto se for pouco provável, dois pontos se for moderadamente provável ou três pontos se for altamente provável). Escreva um programa que varra um arquivo de texto para esses termos e frases. Para cada ocorrência de uma palavra-chave ou frase dentro do arquivo de texto, inclua o valor em pontos atribuído ao total de pontos para essa palavra ou frase. Para cada palavra-chave ou frase encontrada, exiba uma linha com a palavra ou frase, o número de ocorrências e o total de pontos. Depois, mostre o

total de pontos da mensagem inteira. Seu programa atribui um total alto de pontos para alguns e-mails de phishing reais que você tenha recebido? Ele atribui um total alto de pontos

para alguns e-mails legítimos que você tenha recebido?

Passo 1

Vamos criar um programa que usa um conjunto de palavras com valores correspondentes que definem suas possibilidades de aparecer em e-mails de phishing para avaliar um documento de e-mail.

Para fazer isso, reunimos 30 palavras, frases e nomes de empresas comuns que aparecem em e-mails de phishing e os colocamos em um arquivo chamado database.txt. Usaremos esses valores para comparar com as palavras (linhas) do e-mail.

Passo 2

Cabeçalho do arquivo

Para começar, vamos incluir todas as bibliotecas necessárias que usaremos, junto com algumas definições de constantes:

#include stdio.h>

#include string.h>

#include ctype.h>

#define MAX_WORD_SIZE 30

#define MAX_LINE_SIZE 200

#define MAX_DIGIT_SIZE 5

#define DATABASE "database.txt"

Desativando a distinção entre maiúsculas e minúsculas

para tornar as linhas (palavras) insensíveis a maiúsculas e minúsculas, o que significa que vamos ignorar o caso dos caracteres, utilizaremos a função tolower() que converte um único caractere em um caractere minúsculo correspondente

char* lowerCase(char* str)

{

int i = 0;

while (str[i] != '\0')

{

str[i] = tolower(str[i]);

i++;

}

return str;

}

Abrindo os arquivos

declare as variáveis necessárias (FILE* para variáveis de fluxo de arquivo)

deixe o usuário inserir o nome do arquivo de e-mail

abra arquivos usando a função fopen(), passando o modo "r" (leitura)

int main()

{

FILE* database;

FILE* email;

char fileName[MAX_WORD_SIZE];

int counter = 0;

printf("Enter email file name: ");

scanf("%29s", fileName);

if ((database = fopen(DATABASE, "r")) != NULL)

{

if ((email = fopen(fileName, "r")) != NULL)

{

...

}

}

...

}

Ler linhas de e-mail

usando fgets(), podemos ler uma linha inteira com um tamanho de buffer limitado

como a função fgets() lê o caractere de nova linha, use a função strcspn() para encontrar o índice da primeira aparição do caractere de nova linha para substituí-lo pelo caractere nulo

int main()

{

...

if ((database = fopen(DATABASE, "r")) != NULL)

{

if ((email = fopen(fileName, "r")) != NULL)

{

char line[MAX_LINE_SIZE];

while (fgets(line, MAX_LINE_SIZE, email)

!= NULL)

{

line[strcspn(line, "\n")] = '\0';

...

}

}

}

...

}

Passo 3

Use o arquivo de banco de dados

use a função fseek() com os argumentos usados para definir o ponteiro do arquivo para o início do arquivo, pois queremos verificar todas as palavras

leia até que o arquivo chegue ao final do arquivo utilizando a função feof()

use a função clearerr() para remover o sinalizador eof/fail do fluxo de arquivo do banco de dados (ele o obtém cada vez que atinge o final do arquivo)

int main()

{

...

if ((database = fopen(DATABASE, "r")) != NULL)

{

if ((email = fopen(fileName, "r")) != NULL)

{

char line[MAX_LINE_SIZE];

while (fgets(line, MAX_LINE_SIZE, email)

!= NULL)

{

...

fseek(database, 0, SEEK_SET);

while (!feof(database))

{

...

}

clearerr(database);

}

}

}

...

}

Compare as linhas com as palavras-chave

leia as palavras-chave dependendo do formato em que estão (no nosso caso é "palavra-chave", sendo 1 um valor numérico de exemplo) use a função atoi() para analisar o inteiro de uma stringuse a função strstr() para verificar se uma string (primeiro argumento) contém uma substring (segundo argumento) atualize o contador de acordo

int main()

{

...

if ((database = fopen(DATABASE, "r")) != NULL)

{

if ((email = fopen(fileName, "r")) != NULL)

{

char line[MAX_LINE_SIZE];

while (fgets(line, MAX_LINE_SIZE, email)

!= NULL)

{

...

while (!feof(database))

{

char key[MAX_LINE_SIZE],

buffer[MAX_DIGIT_SIZE];

int value;

fgets(key, MAX_LINE_SIZE, database);

key[strcspn(key, "\n")] = '\0';

fgets(buffer, MAX_DIGIT_SIZE, database);

value = atoi(buffer);

if (strstr(lowerCase(line),

lowerCase(key)) == 0)

{

counter += value;

break;

}

}

...

}

}

}

...

}

Mensagens de saída, mensagens de erro sobre exceções, mensagem de resultado

int main()

{

...

if ((database = fopen(DATABASE, "r")) != NULL)

{

if ((email = fopen(fileName, "r")) != NULL)

{

...

}

else

{

printf("Unable to open email file\n");

}

}

else

{

printf("Unable to open database\n");

}

printf("The point total: %d\n", counter);

return 0;

}

Resposta

Ver o desenvolvimento.