Pashkela
19.05.2010, 18:19
Только начал изучать С под Linux, просьба отнестись с пониманием)
Вот у меня такой код, для брута паролей по набору символов:
#include <stdio.h>
// Сам брут
int go(int ii,char *def_pass,int def_len,char *nabor,int len,char *current){
unsigned int i=0;
while (i < len) {
current[ii-1] = nabor[i]; // добавляем новый символ
printf("%s\r",current);// Выводим текущую комбинацию
if (ii >1 ){
go(ii-1,def_pass,def_len,nabor,len,current);// Рекурсивно вызываем сами себя для заполнения всех позиций
}else{
char *check=current; // Проверяем текущую комбинацию
if (strncmp(check,def_pass,def_len) == 0){ // Если совпало
printf("[+]Password found! => %s\n",check);
exit(1);
}
check="";// Очищаем переменную с текущим паролем
}
i++;
}
}
int main (int argc, char *argv[])
{
char *def_pass="013283";// Пароль, который надо найти
unsigned int def_len = strlen(def_pass);// Длина пароля
char *nabor="0123456789";// Набор символов, из которых будем генерить пароль
unsigned int len = strlen(nabor); // Длина набора
unsigned int i=1;// Минимальная длина пароля
char *buf;
while(i <= len){
printf("[-]Pass length:%d\n",i);
buf=calloc(sizeof(char),i+1); // Заполняем нулями по длине текущего пароля
go(i,def_pass,def_len,nabor,len,buf); // Отправляем на брут
i++;
}
}
Все работает, но очень медленно. Натолкнулся на такую статью:
http://www.xakep.ru/post/22587/default.asp
но там пример на С++, внимание вопрос:
как внедрить данную идею - "Циклический инкремент паролей" - в код выше. Просто раньше с ассемблерными вставками и вообще программированием на С под никсами не сталкивался. В идеале готовый пример. Спасибо.
Вот у меня такой код, для брута паролей по набору символов:
#include <stdio.h>
// Сам брут
int go(int ii,char *def_pass,int def_len,char *nabor,int len,char *current){
unsigned int i=0;
while (i < len) {
current[ii-1] = nabor[i]; // добавляем новый символ
printf("%s\r",current);// Выводим текущую комбинацию
if (ii >1 ){
go(ii-1,def_pass,def_len,nabor,len,current);// Рекурсивно вызываем сами себя для заполнения всех позиций
}else{
char *check=current; // Проверяем текущую комбинацию
if (strncmp(check,def_pass,def_len) == 0){ // Если совпало
printf("[+]Password found! => %s\n",check);
exit(1);
}
check="";// Очищаем переменную с текущим паролем
}
i++;
}
}
int main (int argc, char *argv[])
{
char *def_pass="013283";// Пароль, который надо найти
unsigned int def_len = strlen(def_pass);// Длина пароля
char *nabor="0123456789";// Набор символов, из которых будем генерить пароль
unsigned int len = strlen(nabor); // Длина набора
unsigned int i=1;// Минимальная длина пароля
char *buf;
while(i <= len){
printf("[-]Pass length:%d\n",i);
buf=calloc(sizeof(char),i+1); // Заполняем нулями по длине текущего пароля
go(i,def_pass,def_len,nabor,len,buf); // Отправляем на брут
i++;
}
}
Все работает, но очень медленно. Натолкнулся на такую статью:
http://www.xakep.ru/post/22587/default.asp
но там пример на С++, внимание вопрос:
как внедрить данную идею - "Циклический инкремент паролей" - в код выше. Просто раньше с ассемблерными вставками и вообще программированием на С под никсами не сталкивался. В идеале готовый пример. Спасибо.