Utilitário de cracking para DOS - word:
ATENÇÃO: O CÓDIGO DESTE PROGRAMA NÃO É PORTÁVEL PARA SISTEMAS LINUX!!!!
Como já disse num artigo anterior, no número anterior da .pt zine no que
trata a cracking, é na minha opinião, uma perda de tempo orientar esforços,
em termos de programação, para a construção de um cracker! A não ser que se
trabalhe directamente em assembly, dificilmente se obterá, com as ferramentas
mais usuais, uma melhoria significativa, em termos de velocidade.
Como toda a gente sabe um cracker, apenas encripta possiveis passwords,
e compara o resultado final com a entrada da password encriptada,...se
coincidirem...Bingo!
Podem então ver que realmente é uma perda de tempo estar a tentar
desenvolver ferramentas, neste sentido, e será mais práctico investir tempo
e
esforço, em aplicações que produzam as tais possiveis e provaveis passwords!
Existem já muitas aplicações, incluindo crackers, que criam as próprias
wordlists, baseados, por exemplo, nas entradas gecos.
A dificuldade porem e arranjar uma aplicação, que reuna uma quantidade
razoavel de critérios de origem e alteração, de possiveis passwords!!!
Foi então que num flash, que me surgiu a ideia de criar uma aplicação que a
partir de um ficheiro passwd, criasse uma wordlist, cujas strings fossem
"retiradas", da entrada username, e gecos e dessas entradas gerar um número
razoável de variações dessas entradas!!!(Pois são a partir destas entradas,
que os utilizadores criam as suas passwords!! Apesar dos muitos apelos, dos
SysAdm, a teoria de usar por exemplo o username invertido, ou o nome proprio,
como passwords continua a ser o pão nosso de cada dia, nos sistemas
informaticos multi-user!). Mas o grande objectivo desta aplicação, é
tentar reunir
o máximo de critérios possiveis e imaginários, e ir adicionando ao código uns
novos,...para que seja possivel testar o máximo número possivel de variantes
de uma string.
O que esta aplição faz é o seguinte:
A estas novas strings adiciona a entrada username.
- Depois estas strings serão sujeitas a um "tratamento", em que serão
criadas novas strings...,tais como a inversao,a concatenação, e alguns
mais conhecidos,...e outros menos usados mas que tambem produzem resultados
positivos, tais como o acrescento do ano corrente etc...
Por exemplo, a entrada dum ficheiro passwd:
Username:e4\3dkr.4aqCO:502:100:Maior Lame Imaginario:/home/lame:shell
Criará as seguintes passwords:
Ou seja, os critérios que para já estão definidos no programa são:
Como se pode ver a partir das strings "Username", "Maior", "Lame",
"Imaginario", foram criadas 19 novas strings, possiveis passwords!
Strings com menos de três letras serão ignoradas, porem isto pode ser
alterado,....basta alterar o valor de PASS_MIN_LEN.
No final, o programa dará informações, no que toca ao número de entradas,
passwords geradas, contas desactivadas e sem password.
AVISO: O CÓDIGO DESTE PROGRAMA PODERÁ (AFINAL ESSE É O OBJECTIVO) SER
ALTERADO, DESDE QUE A ALTERAÇÃO SEJA PARA ACRESCENTAR MAIS CRITÉRIOS, E
NUNCA PARA O TORNAR MENOS COMPLETO...AGRADECIA QUE SEMPRE QUE
ALTERASSEM O CÓDIGO, OU TIVESSEM SUGESTÕES ME ENVIASSEM UM MAIL PARA:
elektro@kaotik.complex-x.net
Junto vai o binário deste utilitario para quem nao possui um compilador
de C para ms-dos.
----------------------------- CORTE POR AQUI --------------------------------
-----------------------------------------------
by Elektro
FOI 100% DESENVOLVIDO EM SISTEMA MS-DOS (TURBO C), E OCORRERÃO
ERROS DE EXECUÇÃO, QUANDO EXECUTADO NOUTROS SISTEMAS (LINUX)!
Logo daqui se pode criar uma máxima: No que toca a password cracking em
linux, o que interessa é ter uma boa wordlist!!
Username
USERNAME
username
emanresU
UsernameUsername
Username97
Maior
MAIOR
maior
Mai0r
roiaM
Maior97
Lame
LAME
lame
emaL
Lame97
Imaginario
IMAGINARIO
imaginario
Imaginari0
oiranigamI
Imaginario97
19 passwords geradas a partir de 1 entradas.
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <time.h>
#define SIM 1
#define NAO 0
#define PASS_MIN_LEN 3
char matriz[15][20];
struct passwd{
char pw_name[10];
char pw_passwd[14];
int pw_uid;
int pw_gid;
char pw_gecos[40];
char pw_dir[40];
char pw_shell[20];
};
struct passwd *getpwent(char *fn);
char *minus_maiusc(char *passwd);
char *maiusc_minus(char *passwd);
char *o_0(char *passwd);
int testa_o_0(char *passwd);
int testa_minus_maius(char *passwd);
char *maius_minus_todo(char *passwd);
char *inverte(char *passwd);
char *concatena(char *passwd);
void sinal(void);
/* COMECO DA FUNCAO MAIN */
void main(int argc, char *argv[]){
int entradas=0,
contas_desactivadas=0;
unsigned int passwds=0;
short int i,
numero,
login_sem_passwd=0;
struct passwd *p;
struct tm *tempo;
time_t *apontador;
if( argc!=2 ){
printf("Uso: %s