Программное средство для аудита паролей в информационных системах

Разработка программного средства для анализа значений хэш-функций с целью формальной оценки стойкости пароля. Проблема слабых паролей. Оценка ущерба, возникающего вследствие атаки на защищаемый объект. Метод поиска по словарям и "радужным таблицам".

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 10.06.2013
Размер файла 1022,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

find_Layout->addWidget(find_PushButton);

QVBoxLayout *main_Layout=new QVBoxLayout();

main_Layout->addWidget(table_task_status);

main_Layout->addLayout(add_task_Layout);

main_Layout->addWidget(table_hash_password);

main_Layout->addLayout(find_Layout);

QWidget *main_Widget=new QWidget(this);

main_Widget->setLayout(main_Layout);

setCentralWidget(main_Widget);

setWindowTitle(tr("Аудит паролей"));

//setMinimumWidth(1000);

// центрирование главного окна

main_window_Rect=new QRect();

add_task_window_Rect=new QRect();

*main_window_Rect=frameGeometry();

main_window_Rect->moveCenter(QDesktopWidget().availableGeometry().center());

move(main_window_Rect->topLeft());

// класс для работы с хэшами

thread_hash=new Hash();

connect(thread_hash,SIGNAL(complete()),this,SLOT(show_result()));

connect(thread_hash,SIGNAL(find_hash(QString,QString)),this,SLOT(show_find_password(QString,QString)));

connect(thread_hash,SIGNAL(message(QString)),this,SLOT(show_message(QString)));

connect(thread_hash,SIGNAL(start_timer()),timer,SLOT(start()));

// класс для окна "Добавить задачу"

window_add_task=new add_task_window(this);

connect(window_add_task,SIGNAL(ok()),this,SLOT(add_task()));

connect(window_add_task,SIGNAL(cansel()),this,SLOT(hide_add_task_window()));

}

void MainWindow::show_progress()

{

time_from_start++;

timer->start();

quint64 copy_current=thread_hash->current;

if (copy_current>0)

{

status->showMessage(tr("Прошло ")+word.setNum(time_from_start,10)+tr(" c. ")+

tr("Проверено ")+word1.setNum(copy_current,10)+tr(" шт. ")+

tr("Скорость ")+word2.setNum(copy_current-previous_current,10)+tr(" шт/с."));

previous_current=copy_current;

}

}

void MainWindow::show_result()

{

timer->stop();

status->showMessage(tr("Завершено за ")+word.setNum(time_from_start,10)+tr(" c. ")+

tr("Проверено вариантов ")+word1.setNum(thread_hash->current,10)+tr(" шт."));

unlock_button();

}

void MainWindow::show_find_password(const QString &password,const QString &hash)

{

if ((algorithm==type_linux_md5) || (algorithm==type_linux_sha256) || (algorithm==type_linux_sha512) || (algorithm==type_windows_NTLM))

{

for(quint8 i=0;i<table_hash_password->rowCount();i++)

if (table_hash_password->item(i,1)->text()==hash)

{

if (password.isEmpty())

{

QTableWidgetItem *newItem=new QTableWidgetItem(tr("%1").arg(tr("Пароль не установлен")));

newItem->setTextAlignment(Qt::AlignCenter);

newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_hash_password->setItem(i,3,newItem);

}

else

{

QTableWidgetItem *newItem=new QTableWidgetItem(tr("%1").arg(password));

newItem->setTextAlignment(Qt::AlignCenter);

newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_hash_password->setItem(i,3,newItem);

}

}

}

else if (algorithm==type_windows_LM)

{

// если пароль не установлен

if (hash=="aad3b435b51404eeaad3b435b51404ee")

{

for(quint8 i=0;i<table_hash_password->rowCount();i++)

if (table_hash_password->item(i,1)->text()==hash)

{

word=tr("Пароль не установлен");

QTableWidgetItem *newItem=new QTableWidgetItem(tr("%1").arg(word));

newItem->setTextAlignment(Qt::AlignCenter);

newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_hash_password->setItem(i,3,newItem);

}

return ;

}

else

{

// ищем по левым половинкам

for(quint8 i=0;i<table_hash_password->rowCount();i++)

if (table_hash_password->item(i,1)->text().left(16)==hash)

{

QString password_from_table=table_hash_password->item(i,3)->text();

QString hash_from_table=table_hash_password->item(i,1)->text();

// если правая еще не найдена

if (password_from_table.isEmpty())

{

if (hash_from_table.right(16)=="aad3b435b51404ee")

word=password;

else

word=password+"*******";

}

// если правая уже найдена

else

word=password_from_table.replace("*******",password);

QTableWidgetItem *newItem=new QTableWidgetItem(tr("%1").arg(word));

newItem->setTextAlignment(Qt::AlignCenter);

newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_hash_password->setItem(i,3,newItem);

return ;

}

// ищем по правым половинкам

for(quint8 i=0;i<table_hash_password->rowCount();i++)

if (table_hash_password->item(i,1)->text().right(16)==hash)

{

QString password_from_table=table_hash_password->item(i,3)->text();

if (password_from_table.isEmpty())

word="*******"+password;

else

word=password_from_table.replace("*******",password);

QTableWidgetItem *newItem=new QTableWidgetItem(tr("%1").arg(word));

newItem->setTextAlignment(Qt::AlignCenter);

newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_hash_password->setItem(i,3,newItem);

return ;

}

}

}

}

void MainWindow::show_message(const QString &message)

{

QTableWidgetItem *newItem=new QTableWidgetItem(tr("%1").arg(message));

newItem->setTextAlignment(Qt::AlignCenter);

newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_task_status->setItem(number_task,1,newItem);

if (message!=tr("В процессе"))

number_task++;

}

void MainWindow::go()

{

if (table_hash_password->rowCount()!=0)

{

if (table_task_status->rowCount()!=0)

{

clear_tables();

clear_parametrs();

thread_hash->clear_parametrs();

quint8 i=0;

while(i!=table_task_status->rowCount())

{

thread_hash->tasks->append(table_task_status->item(i,2)->text());

i++;

}

i=0;

while(i!=table_hash_password->rowCount())

{

thread_hash->before_hash_vector->append(table_hash_password->item(i,1)->text().toAscii().data());

thread_hash->before_salt_vector->append(table_hash_password->item(i,2)->text().toAscii().data());

thread_hash->login_vector->append(table_hash_password->item(i,0)->text().toAscii().data());

i++;

}

thread_hash->type=algorithm;

thread_hash->start(QThread::TimeCriticalPriority);

lock_button();

}

}

}

void MainWindow::stop()

{

thread_hash->stopped=true;

thread_hash->wait();

}

void MainWindow::closeEvent(QCloseEvent *event)

{

thread_hash->stopped=true;

thread_hash->wait();

event->accept();

}

void MainWindow::clear_parametrs()

{

previous_current=0;

time_from_start=0;

number_task=0;

status->showMessage("");

}

void MainWindow::add_task()

{

QString task;

QString table_task_status_task;

task.clear();

table_task_status_task.clear();

bool yes_or_no=false;

switch(window_add_task->tab->currentIndex())

{

case 0:

if ((!window_add_task->brute_force_alpha_LineEdit->text().isEmpty()) &&

(window_add_task->brute_force_min_length_SpinBox->value()<=window_add_task->brute_force_max_length_SpinBox->value()))

{

task.append("0");

task.append("arg1");

task.append(window_add_task->brute_force_alpha_LineEdit->text());

task.append("arg2");

task.append(word1.setNum(window_add_task->brute_force_min_length_SpinBox->value(),10));

task.append("arg3");

task.append(word1.setNum(window_add_task->brute_force_max_length_SpinBox->value(),10));

task.append("arg4");

table_task_status_task.append(tr("Полный перебор на алфавите \""));

table_task_status_task.append(window_add_task->brute_force_alpha_LineEdit->text());

table_task_status_task.append(tr("\" с длиной пароля от "));

table_task_status_task.append(word1.setNum(window_add_task->brute_force_min_length_SpinBox->value(),10));

table_task_status_task.append(tr(" до "));

table_task_status_task.append(word1.setNum(window_add_task->brute_force_max_length_SpinBox->value(),10));

table_task_status_task.append(tr(" символов"));

yes_or_no=true;

}

break;

case 1:

if ((!window_add_task->brute_force_on_mask_alpha_LineEdit->text().isEmpty()) &&

(!window_add_task->brute_force_on_mask_mask_LineEdit->text().isEmpty()) &&

(window_add_task->brute_force_on_mask_min_on_left_length_SpinBox->value()<=window_add_task->brute_force_on_mask_max_on_left_length_SpinBox->value()) &&

(window_add_task->brute_force_on_mask_min_on_right_length_SpinBox->value()<=window_add_task->brute_force_on_mask_max_on_right_length_SpinBox->value()))

{

task.append("1");

task.append("arg1");

task.append(window_add_task->brute_force_on_mask_alpha_LineEdit->text());

task.append("arg2");

task.append(window_add_task->brute_force_on_mask_mask_LineEdit->text());

task.append("arg3");

task.append(word1.setNum(window_add_task->brute_force_on_mask_min_on_left_length_SpinBox->value(),10));

task.append("arg4");

task.append(word1.setNum(window_add_task->brute_force_on_mask_max_on_left_length_SpinBox->value(),10));

task.append("arg5");

task.append(word1.setNum(window_add_task->brute_force_on_mask_min_on_right_length_SpinBox->value(),10));

task.append("arg6");

task.append(word1.setNum(window_add_task->brute_force_on_mask_max_on_right_length_SpinBox->value(),10));

task.append("arg7");

table_task_status_task.append(tr("Поиск по маске на алфавите \""));

table_task_status_task.append(window_add_task->brute_force_on_mask_alpha_LineEdit->text());

table_task_status_task.append(tr("\" с маской \""));

table_task_status_task.append(window_add_task->brute_force_on_mask_mask_LineEdit->text());

table_task_status_task.append(tr("\", количеством символов слева от маски от "));

table_task_status_task.append(word1.setNum(window_add_task->brute_force_on_mask_min_on_left_length_SpinBox->value(),10));

table_task_status_task.append(tr(" до "));

table_task_status_task.append(word1.setNum(window_add_task->brute_force_on_mask_max_on_left_length_SpinBox->value(),10));

table_task_status_task.append(tr(", количеством символов справа от маски от "));

table_task_status_task.append(word1.setNum(window_add_task->brute_force_on_mask_min_on_right_length_SpinBox->value(),10));

table_task_status_task.append(tr(" до "));

table_task_status_task.append(word1.setNum(window_add_task->brute_force_on_mask_max_on_right_length_SpinBox->value(),10));

yes_or_no=true;

}

break;

case 2:

if (!window_add_task->brute_force_on_dictionary_filename_LineEdit->text().isEmpty())

{

task.append("2");

task.append("arg1");

task.append(window_add_task->brute_force_on_dictionary_filename_LineEdit->text());

task.append("arg2");

table_task_status_task.append(tr("Поиск по словарю \""));

table_task_status_task.append(window_add_task->brute_force_on_dictionary_filename_LineEdit->text());

table_task_status_task.append(tr("\""));

yes_or_no=true;

}

break;

case 3:

if ((!window_add_task->brute_force_on_dictionaries_filename1_LineEdit->text().isEmpty()) &&

(!window_add_task->brute_force_on_dictionaries_filename2_LineEdit->text().isEmpty()))

{

task.append("3");

task.append("arg1");

task.append(window_add_task->brute_force_on_dictionaries_filename1_LineEdit->text());

task.append("arg2");

task.append(window_add_task->brute_force_on_dictionaries_filename2_LineEdit->text());

task.append("arg3");

table_task_status_task.append(tr("Комбинированный поиск по словарям \""));

table_task_status_task.append(window_add_task->brute_force_on_dictionaries_filename1_LineEdit->text());

table_task_status_task.append(tr("\" и \""));

table_task_status_task.append(window_add_task->brute_force_on_dictionaries_filename2_LineEdit->text());

table_task_status_task.append(tr("\" с конкатенацией исходных вариантов пароля"));

yes_or_no=true;

}

break;

case 4:

if (!window_add_task->brute_force_on_dictionary_gybrid_filename_LineEdit->text().isEmpty())

{

task.append("4");

task.append("arg1");

task.append(window_add_task->brute_force_on_dictionary_gybrid_filename_LineEdit->text());

task.append("arg2");

table_task_status_task.append(tr("Гибридный поиск по словарю \""));

table_task_status_task.append(window_add_task->brute_force_on_dictionary_gybrid_filename_LineEdit->text());

table_task_status_task.append(tr("\""));

yes_or_no=true;

}

break;

case 5:

if ((!window_add_task->brute_force_on_dictionaries_gybrid_filename1_LineEdit->text().isEmpty()) &&

(!window_add_task->brute_force_on_dictionaries_gybrid_filename2_LineEdit->text().isEmpty()))

{

task.append("5");

task.append("arg1");

task.append(window_add_task->brute_force_on_dictionaries_gybrid_filename1_LineEdit->text());

task.append("arg2");

task.append(window_add_task->brute_force_on_dictionaries_gybrid_filename2_LineEdit->text());

task.append("arg3");

table_task_status_task.append(tr("Гибридный поиск по словарям \""));

table_task_status_task.append(window_add_task->brute_force_on_dictionaries_filename1_LineEdit->text());

table_task_status_task.append(tr("\" и \""));

table_task_status_task.append(window_add_task->brute_force_on_dictionaries_filename2_LineEdit->text());

table_task_status_task.append(tr("\" с конкатенацией исходных вариантов пароля"));

yes_or_no=true;

}

break;

}

if (yes_or_no)

{

table_task_status->insertRow(table_task_status->rowCount());

QTableWidgetItem *newItem=new QTableWidgetItem(tr("%1").arg(table_task_status_task));

newItem->setTextAlignment(Qt::AlignCenter);

newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_task_status->setItem(table_task_status->rowCount()-1,0,newItem);

QTableWidgetItem *newItem1=new QTableWidgetItem(tr("%1").arg(""));

newItem1->setTextAlignment(Qt::AlignCenter);

newItem1->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_task_status->setItem(table_task_status->rowCount()-1,1,newItem1);

QTableWidgetItem *newItem2=new QTableWidgetItem(tr("%1").arg(task));

table_task_status->setItem(table_task_status->rowCount()-1,2,newItem2);

table_task_status->resizeRowsToContents();

hide_add_task_window();

}

}

void MainWindow::del_task()

{

quint8 i=0;

while(i<table_task_status->rowCount())

{

if (table_task_status->isItemSelected(table_task_status->item(i,0)))

{

table_task_status->removeRow(i);

i=0;

continue;

}

i++;

}

}

void MainWindow::lock_button()

{

go_PushButton->setEnabled(false);

add_task_PushButton->setEnabled(false);

del_task_PushButton->setEnabled(false);

change_path_PushButton->setEnabled(false);

find_PushButton->setEnabled(false);

stop_PushButton->setEnabled(true);

}

void MainWindow::unlock_button()

{

go_PushButton->setEnabled(true);

add_task_PushButton->setEnabled(true);

del_task_PushButton->setEnabled(true);

change_path_PushButton->setEnabled(true);

find_PushButton->setEnabled(true);

stop_PushButton->setEnabled(false);

}

void MainWindow::clear_tables()

{

quint8 i=0;

while(i!=table_task_status->rowCount())

{

QTableWidgetItem *newItem=new QTableWidgetItem(tr("%1").arg(""));

newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_task_status->setItem(i,1,newItem);

i++;

}

i=0;

while(i!=table_hash_password->rowCount())

{

QTableWidgetItem *newItem=new QTableWidgetItem(tr("%1").arg(""));

newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_hash_password->setItem(i,3,newItem);

i++;

}

}

void MainWindow::change_path()

{

if (!path_LineEdit->text().isEmpty())

{

if ((path=QFileDialog::getExistingDirectory(this,tr("Открыть директорию")))!=NULL)

path_LineEdit->setText(path);

}

}

void MainWindow::find_system()

{

status->showMessage("");

algorithm=100;

// удаляем старые записи в таблицах

while(table_hash_password->rowCount())

table_hash_password->removeRow(0);

while(table_task_status->rowCount())

table_task_status->removeRow(0);

if (!path_LineEdit->text().isEmpty())

{

path=path_LineEdit->text();

if (QFile(path+"etc/passwd").exists())

{

get_info_from_linux();

// определяем алгоритм хэширования

if (table_hash_password->item(0,2)->text().left(2)=="$1")

algorithm=type_linux_md5;

else if (table_hash_password->item(0,2)->text().left(2)=="$5")

algorithm=type_linux_sha256;

else if (table_hash_password->item(0,2)->text().left(2)=="$6")

algorithm=type_linux_sha512;

auto_task();

// забиваем пароли пустыми ячейками

for(quint8 i=0;i<table_hash_password->rowCount();i++)

{

QTableWidgetItem *newItem=new QTableWidgetItem(tr("%1").arg(""));

newItem->setTextAlignment(Qt::AlignCenter);

newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_hash_password->setItem(i,3,newItem);

}

add_task_PushButton->setEnabled(true);

del_task_PushButton->setEnabled(true);

go_PushButton->setEnabled(true);

}

else if (QFile(path+"/WINDOWS/").exists())

{

get_info_from_windows();

auto_task();

for(quint8 i=0;i<table_hash_password->rowCount();i++)

{

QTableWidgetItem *newItem=new QTableWidgetItem(tr("%1").arg(""));

newItem->setTextAlignment(Qt::AlignCenter);

newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_hash_password->setItem(i,3,newItem);

}

add_task_PushButton->setEnabled(true);

del_task_PushButton->setEnabled(true);

go_PushButton->setEnabled(true);

}

else

status->showMessage(tr("Информационная система не найдена"));

}

// выводим в статусную строку информацию о найденной информационной системе

if (algorithm==type_linux_md5)

status->showMessage(tr("Тип хэш-функции - md5(Unix)"));

else if (algorithm==type_linux_sha256)

status->showMessage(tr("Тип хэш-функции - sha256(Unix)"));

else if (algorithm==type_linux_sha512)

status->showMessage(tr("Тип хэш-функции - sha512(Unix)"));

else if (algorithm==type_windows_LM)

status->showMessage(tr("Тип хэш-функции - LM"));

else if (algorithm==type_windows_NTLM)

status->showMessage(tr("Тип хэш-функции - NTLM"));

}

void MainWindow::get_info_from_linux()

{

QFile file(path+"etc/passwd");

// открываем файл /etc/passwd

if (!file.open(QIODevice::ReadOnly | QIODevice::Text))

{

status->showMessage(tr("Не хватает прав доступа для файла ")+path+tr("etc/passwd"));

return ;

}

else

{

char buf[1024];

qint8 lineLength_from_passwd;

qint8 lineLength_from_shadow;

// считываем построчно из файла /etc/passwd

while((lineLength_from_passwd=file.readLine(buf,sizeof(buf)))!=-1)

{

// проверяем используется ли теневое хранение паролей

QString line_from_passwd=QByteArray(buf,lineLength_from_passwd).simplified();

reg.setPattern(":.*:");

line_from_passwd.indexOf(reg);

QString hash_from_passwd=reg.capturedTexts().at(0);

hash_from_passwd.remove(0,1);

hash_from_passwd.chop(1);

QString login_from_passwd=line_from_passwd.left(line_from_passwd.indexOf(":"));

// если используется теневое хранение

if (hash_from_passwd=="x")

{

// открываем файл /etc/shadow

QFile file1(path+"etc/shadow");

if (!file1.open(QIODevice::ReadOnly | QIODevice::Text))

status->showMessage(tr("Не хватает прав доступа для файла ")+path+tr("etc/shadow"));

else

{

// считываем из файла /etc/shadow

while((lineLength_from_shadow=file1.readLine(buf,sizeof(buf)))!=-1)

{

QString line_from_shadow=QByteArray(buf,lineLength_from_shadow).simplified();

QString login_from_shadow=line_from_shadow.left(line_from_shadow.indexOf(":"));

// если имена совпали

if (login_from_passwd==login_from_shadow)

{

reg.setPattern(":.*:");

line_from_shadow.indexOf(reg);

QString hash_from_shadow=reg.capturedTexts().at(0);

hash_from_shadow.remove(0,1);

hash_from_shadow.chop(1);

// если учетка не отключена и не заблокирована, пароль задан

if ((hash_from_shadow!="*") && (hash_from_shadow!="!") && (hash_from_shadow!="NP") && (hash_from_shadow!="LK") && (hash_from_shadow!="!!"))

{

table_hash_password->insertRow(table_hash_password->rowCount());

QTableWidgetItem *newItem=new QTableWidgetItem(tr("%1").arg(login_from_shadow));

newItem->setTextAlignment(Qt::AlignCenter);

newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_hash_password->setItem(table_hash_password->rowCount()-1,0,newItem);

QTableWidgetItem *newItem1=new QTableWidgetItem(tr("%1").arg(hash_from_shadow));

newItem1->setTextAlignment(Qt::AlignCenter);

newItem1->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_hash_password->setItem(table_hash_password->rowCount()-1,1,newItem1);

QTableWidgetItem *newItem2=new QTableWidgetItem(tr("%1").arg(find_salt(hash_from_shadow)));

newItem2->setTextAlignment(Qt::AlignCenter);

newItem2->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_hash_password->setItem(table_hash_password->rowCount()-1,2,newItem2);

}

break;

}

}

file1.close();

}

}

// иначе если учетка не отключена

else if ((hash_from_passwd!="*") && (hash_from_passwd!="!") && (hash_from_passwd!="NP") && (hash_from_passwd!="LK") && (hash_from_passwd!="!!"))

{

table_hash_password->insertRow(table_hash_password->rowCount());

QTableWidgetItem *newItem=new QTableWidgetItem(tr("%1").arg(login_from_passwd));

newItem->setTextAlignment(Qt::AlignCenter);

newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_hash_password->setItem(table_hash_password->rowCount()-1,0,newItem);

QTableWidgetItem *newItem1=new QTableWidgetItem(tr("%1").arg(hash_from_passwd));

newItem1->setTextAlignment(Qt::AlignCenter);

newItem1->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_hash_password->setItem(table_hash_password->rowCount()-1,1,newItem1);

QTableWidgetItem *newItem2=new QTableWidgetItem(tr("%1").arg(hash_from_passwd));

newItem2->setTextAlignment(Qt::AlignCenter);

newItem2->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_hash_password->setItem(table_hash_password->rowCount()-1,2,newItem2);

}

}

file.close();

}

}

void MainWindow::get_info_from_windows()

{

QProcess *script=new QProcess(this);

QString program="/usr/bin/bkhive";

QStringList arguments;

arguments<<path+"/WINDOWS/system32/config/system"<<QDir::current().path()+"/test.txt";

script->start(program,arguments);

script->waitForFinished();

if (script->exitStatus()==QProcess::NormalExit)

{

arguments.clear();

script->close();

program="/usr/bin/samdump2";

arguments<<path+"/WINDOWS/system32/config/SAM"<<QDir::current().path()+"/test.txt";

script->start(program,arguments);

script->waitForFinished();

QFile(QDir::current().path()+"/test.txt").remove();

if (script->exitStatus()==QProcess::NormalExit)

{

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("windows1251"));

QString info_from_SAM=script->readAllStandardOutput().simplified();

QList<QString> tags=info_from_SAM.split(':');

QString tag;

bool use_LM=true;

// проверяем используются ли LM хэши

for(quint16 i=0;i<tags.count()-1;i+=6)

{

if ((tags.at(i+2).isEmpty()) || (tags.at(i+2)=="aad3b435b51404eeaad3b435b51404ee"))

{

use_LM=false;

break;

}

}

if (use_LM)

algorithm=type_windows_LM;

else

algorithm=type_windows_NTLM;

//use_LM=true; // убрать

//algorithm=type_windows_LM;

for(quint16 i=0;i<tags.count()-1;i+=6)

{

table_hash_password->insertRow(table_hash_password->rowCount());

tag=tags.at(i);

QTableWidgetItem *newItem=new QTableWidgetItem(tr("%1").arg(tag));

newItem->setTextAlignment(Qt::AlignCenter);

//newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_hash_password->setItem(table_hash_password->rowCount()-1,0,newItem);

if (use_LM)

tag=tags.at(i+2);

else

tag=tags.at(i+3);

QTableWidgetItem *newItem1=new QTableWidgetItem(tr("%1").arg(tag));

newItem1->setTextAlignment(Qt::AlignCenter);

//newItem1->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_hash_password->setItem(table_hash_password->rowCount()-1,1,newItem1);

if (use_LM)

tag=tags.at(i+3);

else

tag=tags.at(i+2);

QTableWidgetItem *newItem2=new QTableWidgetItem(tr("%1").arg(tag));

newItem2->setTextAlignment(Qt::AlignCenter);

//newItem2->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_hash_password->setItem(table_hash_password->rowCount()-1,2,newItem2);

}

}

else

status->showMessage(tr("Ошибка при получении bootkey"));

}

else

status->showMessage(tr("Ошибка при получении хэшей"));

}

QString MainWindow::find_salt(const QString &hash)

{

reg.setPattern("\\$.*\\$");

hash.indexOf(reg);

QString type_alg;

type_alg=reg.capturedTexts().at(0);

if ((type_alg=="$1$") || (type_alg=="$5$") || (type_alg=="$6$"))

return hash.left(hash.lastIndexOf("$")+1);

else

return "";

}

void MainWindow::add_task_linux_md5()

{

QString task;

QString table_task_status_task;

task.clear();

table_task_status_task.clear();

/*

*/

QTableWidgetItem *newItem=new QTableWidgetItem(tr("%1").arg(table_task_status_task));

newItem->setTextAlignment(Qt::AlignCenter);

newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_task_status->setItem(table_task_status->rowCount()-1,0,newItem);

QTableWidgetItem *newItem1=new QTableWidgetItem(tr("%1").arg(""));

newItem1->setTextAlignment(Qt::AlignCenter);

newItem1->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_task_status->setItem(table_task_status->rowCount()-1,1,newItem1);

QTableWidgetItem *newItem2=new QTableWidgetItem(tr("%1").arg(task));

table_task_status->setItem(table_task_status->rowCount()-1,2,newItem2);

table_task_status->resizeRowsToContents();

}

void MainWindow::add_task_linux_sha256()

{

QString task;

QString table_task_status_task;

task.clear();

table_task_status_task.clear();

/*

*/

QTableWidgetItem *newItem=new QTableWidgetItem(tr("%1").arg(table_task_status_task));

newItem->setTextAlignment(Qt::AlignCenter);

newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_task_status->setItem(table_task_status->rowCount()-1,0,newItem);

QTableWidgetItem *newItem1=new QTableWidgetItem(tr("%1").arg(""));

newItem1->setTextAlignment(Qt::AlignCenter);

newItem1->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_task_status->setItem(table_task_status->rowCount()-1,1,newItem1);

QTableWidgetItem *newItem2=new QTableWidgetItem(tr("%1").arg(task));

table_task_status->setItem(table_task_status->rowCount()-1,2,newItem2);

table_task_status->resizeRowsToContents();

}

void MainWindow::add_task_linux_sha512()

{

QString task;

QString table_task_status_task;

task.clear();

table_task_status_task.clear();

/*

*/

QTableWidgetItem *newItem=new QTableWidgetItem(tr("%1").arg(table_task_status_task));

newItem->setTextAlignment(Qt::AlignCenter);

newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_task_status->setItem(table_task_status->rowCount()-1,0,newItem);

QTableWidgetItem *newItem1=new QTableWidgetItem(tr("%1").arg(""));

newItem1->setTextAlignment(Qt::AlignCenter);

newItem1->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_task_status->setItem(table_task_status->rowCount()-1,1,newItem1);

QTableWidgetItem *newItem2=new QTableWidgetItem(tr("%1").arg(task));

table_task_status->setItem(table_task_status->rowCount()-1,2,newItem2);

table_task_status->resizeRowsToContents();

}

void MainWindow::add_task_windows_LM()

{

QString task;

QString table_task_status_task;

task.clear();

table_task_status_task.clear();

// предварительный анализ

task.append("6");

table_task_status_task.append(tr("Предварительный анализ"));

table_task_status->insertRow(table_task_status->rowCount());

QTableWidgetItem *newItem=new QTableWidgetItem(tr("%1").arg(table_task_status_task));

newItem->setTextAlignment(Qt::AlignCenter);

newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_task_status->setItem(table_task_status->rowCount()-1,0,newItem);

QTableWidgetItem *newItem1=new QTableWidgetItem(tr("%1").arg(""));

newItem1->setTextAlignment(Qt::AlignCenter);

newItem1->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_task_status->setItem(table_task_status->rowCount()-1,1,newItem1);

QTableWidgetItem *newItem2=new QTableWidgetItem(tr("%1").arg(task));

table_task_status->setItem(table_task_status->rowCount()-1,2,newItem2);

table_task_status->resizeRowsToContents();

}

void MainWindow::add_task_windows_NTLM()

{

QString task;

QString table_task_status_task;

task.clear();

table_task_status_task.clear();

// предварительный анализ

task.append("6");

table_task_status_task.append(tr("Предварительный анализ"));

table_task_status->insertRow(table_task_status->rowCount());

QTableWidgetItem *newItem=new QTableWidgetItem(tr("%1").arg(table_task_status_task));

newItem->setTextAlignment(Qt::AlignCenter);

newItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_task_status->setItem(table_task_status->rowCount()-1,0,newItem);

QTableWidgetItem *newItem1=new QTableWidgetItem(tr("%1").arg(""));

newItem1->setTextAlignment(Qt::AlignCenter);

newItem1->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_task_status->setItem(table_task_status->rowCount()-1,1,newItem1);

QTableWidgetItem *newItem2=new QTableWidgetItem(tr("%1").arg(task));

table_task_status->setItem(table_task_status->rowCount()-1,2,newItem2);

task.clear();

table_task_status_task.clear();

// перебор на 0-9

task.append("0");

task.append("arg1");

task.append("0123456789");

task.append("arg2");

task.append(word1.setNum(1,10));

task.append("arg3");

task.append(word1.setNum(8,10));

task.append("arg4");

table_task_status_task.append(tr("Полный перебор на алфавите \""));

table_task_status_task.append("0123456789");

table_task_status_task.append(tr("\" с длиной пароля от "));

table_task_status_task.append(word1.setNum(1,10));

table_task_status_task.append(tr(" до "));

table_task_status_task.append(word1.setNum(8,10));

table_task_status_task.append(tr(" символов"));

table_task_status->insertRow(table_task_status->rowCount());

QTableWidgetItem *newItem3=new QTableWidgetItem(tr("%1").arg(table_task_status_task));

newItem3->setTextAlignment(Qt::AlignCenter);

newItem3->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_task_status->setItem(table_task_status->rowCount()-1,0,newItem3);

QTableWidgetItem *newItem4=new QTableWidgetItem(tr("%1").arg(""));

newItem4->setTextAlignment(Qt::AlignCenter);

newItem4->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);

table_task_status->setItem(table_task_status->rowCount()-1,1,newItem4);

QTableWidgetItem *newItem5=new QTableWidgetItem(tr("%1").arg(task));

table_task_status->setItem(table_task_status->rowCount()-1,2,newItem5);

table_task_status->resizeRowsToContents();

}

void MainWindow::auto_task()

{

switch(algorithm)

{

case type_linux_md5:

add_task_linux_md5();

break;

case type_windows_LM:

add_task_windows_LM();

break;

case type_windows_NTLM:

add_task_windows_NTLM();

break;

case type_linux_sha256:

add_task_linux_sha256();

break;

case type_linux_sha512:

add_task_linux_sha512();

break;

}

}

void MainWindow::show_add_task_window()

{

window_add_task->show();

}

void MainWindow::hide_add_task_window()

{

window_add_task->hide();

}

add_task_window.h

#ifndef ADD_TASK_WINDOW_H

#define ADD_TASK_WINDOW_H

#include <QDialog>

QT_BEGIN_NAMESPACE

class QGroupBox;

class QLabel;

class QLineEdit;

class QSpinBox;

class QTabWidget;

QT_END_NAMESPACE

class add_task_window : public QDialog

{

Q_OBJECT

public:

add_task_window(QWidget *parent=0);

QTabWidget *tab;

QGroupBox *brute_force_GroupBox;

QLineEdit *brute_force_alpha_LineEdit;

QSpinBox *brute_force_min_length_SpinBox,

*brute_force_max_length_SpinBox;

QPushButton *brute_force_add_PushButton;

QLabel *label1,*label3,*label4;

QGroupBox *brute_force_on_mask_GroupBox;

QLineEdit *brute_force_on_mask_alpha_LineEdit,

*brute_force_on_mask_mask_LineEdit;

QSpinBox *brute_force_on_mask_min_on_left_length_SpinBox,

*brute_force_on_mask_max_on_left_length_SpinBox,

*brute_force_on_mask_min_on_right_length_SpinBox,

*brute_force_on_mask_max_on_right_length_SpinBox;

QPushButton *brute_force_on_mask_add_PushButton;

QLabel *label5,*label7,*label8,*label9,*label10,*label11;

QGroupBox *brute_force_on_dictionary_GroupBox;

QLineEdit *brute_force_on_dictionary_filename_LineEdit;

QPushButton *brute_force_on_dictionary_filename_PushButton;

QLabel *label12;

QGroupBox *brute_force_on_dictionaries_GroupBox;

QLineEdit *brute_force_on_dictionaries_filename1_LineEdit,

*brute_force_on_dictionaries_filename2_LineEdit;

QPushButton *brute_force_on_dictionaries_filename1_PushButton,

*brute_force_on_dictionaries_filename2_PushButton;

QLabel *label14,*label15;

QGroupBox *brute_force_on_dictionary_gybrid_GroupBox;

QLineEdit *brute_force_on_dictionary_gybrid_filename_LineEdit;

QPushButton *brute_force_on_dictionary_gybrid_filename_PushButton;

QLabel *label17;

QGroupBox *brute_force_on_dictionaries_gybrid_GroupBox;

QLineEdit *brute_force_on_dictionaries_gybrid_filename1_LineEdit,

*brute_force_on_dictionaries_gybrid_filename2_LineEdit;

QPushButton *brute_force_on_dictionaries_gybrid_filename1_PushButton,

*brute_force_on_dictionaries_gybrid_filename2_PushButton;

QLabel *label19,*label20;

signals:

void ok();

void cansel();

private slots:

void add_file_1();

void add_file_2();

void add_file_3();

void add_file_4();

void add_file_5();

void add_file_6();

void add_file();

private:

QPushButton *ok_PushButton,

*cansel_PushButton;

};

#endif

add_task_window.cpp

#include <QtGui>

#include "add_task_window.h"

add_task_window::add_task_window(QWidget *parent):QDialog(parent)

{

ok_PushButton=new QPushButton(this);

ok_PushButton->setText(tr("Добавить"));

connect(ok_PushButton,SIGNAL(clicked()),this,SIGNAL(ok()));

cansel_PushButton=new QPushButton(this);

cansel_PushButton->setText(tr("Отменить"));

connect(cansel_PushButton,SIGNAL(clicked()),this,SIGNAL(cansel()));

brute_force_GroupBox=new QGroupBox(this);

brute_force_alpha_LineEdit=new QLineEdit(this);

brute_force_alpha_LineEdit->setAlignment(Qt::AlignRight);

brute_force_alpha_LineEdit->setText("abcdefghijklmnopqrstuvwxyz0123456789");

brute_force_min_length_SpinBox=new QSpinBox(this);

brute_force_min_length_SpinBox->setMinimum(1);

brute_force_max_length_SpinBox=new QSpinBox(this);

brute_force_max_length_SpinBox->setMinimum(1);

brute_force_max_length_SpinBox->setValue(5);

label1=new QLabel(this);

label1->setText(tr("Алфавит"));

label3=new QLabel(this);

label3->setText(tr("Минимальная длина пароля"));

label4=new QLabel(this);

label4->setText(tr("Максимальная длина пароля"));

QHBoxLayout *brute_force_alpha_Layout=new QHBoxLayout();

brute_force_alpha_Layout->addWidget(label1);

brute_force_alpha_Layout->addWidget(brute_force_alpha_LineEdit);

QHBoxLayout *brute_force_min_length_Layout=new QHBoxLayout();

brute_force_min_length_Layout->addWidget(label3);

brute_force_min_length_Layout->addStretch();

brute_force_min_length_Layout->addWidget(brute_force_min_length_SpinBox);

QHBoxLayout *brute_force_max_length_Layout=new QHBoxLayout();

brute_force_max_length_Layout->addWidget(label4);

brute_force_max_length_Layout->addStretch();

brute_force_max_length_Layout->addWidget(brute_force_max_length_SpinBox);

QVBoxLayout *brute_force_Layout=new QVBoxLayout();

brute_force_Layout->addLayout(brute_force_alpha_Layout);

brute_force_Layout->addLayout(brute_force_min_length_Layout);

brute_force_Layout->addLayout(brute_force_max_length_Layout);

brute_force_Layout->addStretch();

brute_force_GroupBox->setLayout(brute_force_Layout);

brute_force_on_mask_GroupBox=new QGroupBox(this);

brute_force_on_mask_alpha_LineEdit=new QLineEdit(this);

brute_force_on_mask_alpha_LineEdit->setAlignment(Qt::AlignRight);

brute_force_on_mask_mask_LineEdit=new QLineEdit(this);

brute_force_on_mask_mask_LineEdit->setAlignment(Qt::AlignRight);

brute_force_on_mask_min_on_left_length_SpinBox=new QSpinBox(this);

brute_force_on_mask_min_on_left_length_SpinBox->setMinimum(0);

brute_force_on_mask_max_on_left_length_SpinBox=new QSpinBox(this);

brute_force_on_mask_max_on_left_length_SpinBox->setMinimum(0);

brute_force_on_mask_min_on_right_length_SpinBox=new QSpinBox(this);

brute_force_on_mask_min_on_right_length_SpinBox->setMinimum(0);

brute_force_on_mask_max_on_right_length_SpinBox=new QSpinBox(this);

brute_force_on_mask_max_on_right_length_SpinBox->setMinimum(0);

label5=new QLabel(this);

label5->setText(tr("Алфавит"));

label7=new QLabel(this);

label7->setText(tr("Маска"));

label8=new QLabel(this);

label8->setText(tr("Минимальный набор символов слева"));

label9=new QLabel(this);

label9->setText(tr("Максимальный набор символов слева"));

label10=new QLabel(this);

label10->setText(tr("Минимальный набор символов справа"));

label11=new QLabel(this);

label11->setText(tr("Максимальный набор символов справа"));

QHBoxLayout *brute_force_on_mask_alpha_Layout=new QHBoxLayout();

brute_force_on_mask_alpha_Layout->addWidget(label5);

brute_force_on_mask_alpha_Layout->addWidget(brute_force_on_mask_alpha_LineEdit);

QHBoxLayout *brute_force_on_mask_mask_Layout=new QHBoxLayout();

brute_force_on_mask_mask_Layout->addWidget(label7);

brute_force_on_mask_mask_Layout->addWidget(brute_force_on_mask_mask_LineEdit);

QHBoxLayout *brute_force_on_mask_min_on_left_length_Layout=new QHBoxLayout();

brute_force_on_mask_min_on_left_length_Layout->addWidget(label8);

brute_force_on_mask_min_on_left_length_Layout->addStretch();

brute_force_on_mask_min_on_left_length_Layout->addWidget(brute_force_on_mask_min_on_left_length_SpinBox);

QHBoxLayout *brute_force_on_mask_max_on_left_length_Layout=new QHBoxLayout();

brute_force_on_mask_max_on_left_length_Layout->addWidget(label9);

brute_force_on_mask_max_on_left_length_Layout->addStretch();

brute_force_on_mask_max_on_left_length_Layout->addWidget(brute_force_on_mask_max_on_left_length_SpinBox);

QHBoxLayout *brute_force_on_mask_min_on_right_length_Layout=new QHBoxLayout();

brute_force_on_mask_min_on_right_length_Layout->addWidget(label10);

brute_force_on_mask_min_on_right_length_Layout->addStretch();

brute_force_on_mask_min_on_right_length_Layout->addWidget(brute_force_on_mask_min_on_right_length_SpinBox);

QHBoxLayout *brute_force_on_mask_max_on_right_length_Layout=new QHBoxLayout();

brute_force_on_mask_max_on_right_length_Layout->addWidget(label11);

brute_force_on_mask_max_on_right_length_Layout->addStretch();

brute_force_on_mask_max_on_right_length_Layout->addWidget(brute_force_on_mask_max_on_right_length_SpinBox);

QVBoxLayout *brute_force_on_mask_Layout=new QVBoxLayout();

brute_force_on_mask_Layout->addLayout(brute_force_on_mask_alpha_Layout);

brute_force_on_mask_Layout->addLayout(brute_force_on_mask_mask_Layout);

brute_force_on_mask_Layout->addLayout(brute_force_on_mask_min_on_left_length_Layout);

brute_force_on_mask_Layout->addLayout(brute_force_on_mask_max_on_left_length_Layout);

brute_force_on_mask_Layout->addLayout(brute_force_on_mask_min_on_right_length_Layout);

brute_force_on_mask_Layout->addLayout(brute_force_on_mask_max_on_right_length_Layout);

brute_force_on_mask_Layout->addStretch();

brute_force_on_mask_GroupBox->setLayout(brute_force_on_mask_Layout);

brute_force_on_dictionary_GroupBox=new QGroupBox(this);

brute_force_on_dictionary_filename_LineEdit=new QLineEdit(this);

brute_force_on_dictionary_filename_LineEdit->setAlignment(Qt::AlignRight);

brute_force_on_dictionary_filename_PushButton=new QPushButton(this);

brute_force_on_dictionary_filename_PushButton->setText(tr("Обзор"));

connect(brute_force_on_dictionary_filename_PushButton,SIGNAL(clicked()),this,SLOT(add_file_1()));

label12=new QLabel(this);

label12->setText(tr("Файл словаря"));

QHBoxLayout *brute_force_on_dictionary_filename_Layout=new QHBoxLayout();

brute_force_on_dictionary_filename_Layout->addWidget(label12);

brute_force_on_dictionary_filename_Layout->addWidget(brute_force_on_dictionary_filename_LineEdit);

brute_force_on_dictionary_filename_Layout->addWidget(brute_force_on_dictionary_filename_PushButton);

QVBoxLayout *brute_force_on_dictionary_Layout=new QVBoxLayout();

brute_force_on_dictionary_Layout->addLayout(brute_force_on_dictionary_filename_Layout);

brute_force_on_dictionary_Layout->addStretch();

brute_force_on_dictionary_GroupBox->setLayout(brute_force_on_dictionary_Layout);

brute_force_on_dictionaries_GroupBox=new QGroupBox(this);

brute_force_on_dictionaries_filename1_LineEdit=new QLineEdit(this);

brute_force_on_dictionaries_filename1_LineEdit->setAlignment(Qt::AlignRight);

brute_force_on_dictionaries_filename2_LineEdit=new QLineEdit(this);

brute_force_on_dictionaries_filename2_LineEdit->setAlignment(Qt::AlignRight);

brute_force_on_dictionaries_filename1_PushButton=new QPushButton(this);

brute_force_on_dictionaries_filename1_PushButton->setText(tr("Обзор"));

connect(brute_force_on_dictionaries_filename1_PushButton,SIGNAL(clicked()),this,SLOT(add_file_2()));

brute_force_on_dictionaries_filename2_PushButton=new QPushButton(this);

brute_force_on_dictionaries_filename2_PushButton->setText(tr("Обзор"));

connect(brute_force_on_dictionaries_filename2_PushButton,SIGNAL(clicked()),this,SLOT(add_file_3()));

label14=new QLabel(this);

label14->setText(tr("Файл словаря"));

label15=new QLabel(this);

label15->setText(tr("Файл словаря"));

QHBoxLayout *brute_force_on_dictionaries_filename1_Layout=new QHBoxLayout();

brute_force_on_dictionaries_filename1_Layout->addWidget(label14);

brute_force_on_dictionaries_filename1_Layout->addWidget(brute_force_on_dictionaries_filename1_LineEdit);

brute_force_on_dictionaries_filename1_Layout->addWidget(brute_force_on_dictionaries_filename1_PushButton);

QHBoxLayout *brute_force_on_dictionaries_filename2_Layout=new QHBoxLayout();

brute_force_on_dictionaries_filename2_Layout->addWidget(label15);

brute_force_on_dictionaries_filename2_Layout->addWidget(brute_force_on_dictionaries_filename2_LineEdit);

brute_force_on_dictionaries_filename2_Layout->addWidget(brute_force_on_dictionaries_filename2_PushButton);

QVBoxLayout *brute_force_on_dictionaries_Layout=new QVBoxLayout();

brute_force_on_dictionaries_Layout->addLayout(brute_force_on_dictionaries_filename1_Layout);

brute_force_on_dictionaries_Layout->addLayout(brute_force_on_dictionaries_filename2_Layout);

brute_force_on_dictionaries_Layout->addStretch();

brute_force_on_dictionaries_GroupBox->setLayout(brute_force_on_dictionaries_Layout);

brute_force_on_dictionary_gybrid_GroupBox=new QGroupBox(this);

brute_force_on_dictionary_gybrid_filename_LineEdit=new QLineEdit(this);

brute_force_on_dictionary_gybrid_filename_LineEdit->setAlignment(Qt::AlignRight);

brute_force_on_dictionary_gybrid_filename_PushButton=new QPushButton(this);

brute_force_on_dictionary_gybrid_filename_PushButton->setText(tr("Обзор"));

connect(brute_force_on_dictionary_gybrid_filename_PushButton,SIGNAL(clicked()),this,SLOT(add_file_4()));

label17=new QLabel(this);

label17->setText(tr("Файл словаря"));

QHBoxLayout *brute_force_on_dictionary_gybrid_filename_Layout=new QHBoxLayout();

brute_force_on_dictionary_gybrid_filename_Layout->addWidget(label17);

brute_force_on_dictionary_gybrid_filename_Layout->addWidget(brute_force_on_dictionary_gybrid_filename_LineEdit);

brute_force_on_dictionary_gybrid_filename_Layout->addWidget(brute_force_on_dictionary_gybrid_filename_PushButton);

QVBoxLayout *brute_force_on_dictionary_gybrid_Layout=new QVBoxLayout();

brute_force_on_dictionary_gybrid_Layout->addLayout(brute_force_on_dictionary_gybrid_filename_Layout);

brute_force_on_dictionary_gybrid_Layout->addStretch();

brute_force_on_dictionary_gybrid_GroupBox->setLayout(brute_force_on_dictionary_gybrid_Layout);

brute_force_on_dictionaries_gybrid_GroupBox=new QGroupBox(this);

brute_force_on_dictionaries_gybrid_filename1_LineEdit=new QLineEdit(this);

brute_force_on_dictionaries_gybrid_filename1_LineEdit->setAlignment(Qt::AlignRight);

brute_force_on_dictionaries_gybrid_filename2_LineEdit=new QLineEdit(this);

brute_force_on_dictionaries_gybrid_filename2_LineEdit->setAlignment(Qt::AlignRight);

brute_force_on_dictionaries_gybrid_filename1_PushButton=new QPushButton(this);

brute_force_on_dictionaries_gybrid_filename1_PushButton->setText(tr("Обзор"));

connect(brute_force_on_dictionaries_gybrid_filename1_PushButton,SIGNAL(clicked()),this,SLOT(add_file_5()));

brute_force_on_dictionaries_gybrid_filename2_PushButton=new QPushButton(this);

brute_force_on_dictionaries_gybrid_filename2_PushButton->setText(tr("Обзор"));

connect(brute_force_on_dictionaries_gybrid_filename2_PushButton,SIGNAL(clicked()),this,SLOT(add_file_6()));

label19=new QLabel(this);

label19->setText(tr("Файл словаря"));

label20=new QLabel(this);

label20->setText(tr("Файл словаря"));

QHBoxLayout *brute_force_on_dictionaries_gybrid_filename1_Layout=new QHBoxLayout();

brute_force_on_dictionaries_gybrid_filename1_Layout->addWidget(label19);

brute_force_on_dictionaries_gybrid_filename1_Layout->addWidget(brute_force_on_dictionaries_gybrid_filename1_LineEdit);

brute_force_on_dictionaries_gybrid_filename1_Layout->addWidget(brute_force_on_dictionaries_gybrid_filename1_PushButton);

QHBoxLayout *brute_force_on_dictionaries_gybrid_filename2_Layout=new QHBoxLayout();

brute_force_on_dictionaries_gybrid_filename2_Layout->addWidget(label20);

brute_force_on_dictionaries_gybrid_filename2_Layout->addWidget(brute_force_on_dictionaries_gybrid_filename2_LineEdit);

brute_force_on_dictionaries_gybrid_filename2_Layout->addWidget(brute_force_on_dictionaries_gybrid_filename2_PushButton);

QVBoxLayout *brute_force_on_dictionaries_gybrid_Layout=new QVBoxLayout();

brute_force_on_dictionaries_gybrid_Layout->addLayout(brute_force_on_dictionaries_gybrid_filename1_Layout);

brute_force_on_dictionaries_gybrid_Layout->addLayout(brute_force_on_dictionaries_gybrid_filename2_Layout);

brute_force_on_dictionaries_gybrid_Layout->addStretch();

brute_force_on_dictionaries_gybrid_GroupBox->setLayout(brute_force_on_dictionaries_gybrid_Layout);

tab=new QTabWidget(this);

tab->insertTab(0,brute_force_GroupBox,tr("Полный перебор"));

tab->insertTab(1,brute_force_on_mask_GroupBox,tr("Поиск по маске"));

tab->insertTab(2,brute_force_on_dictionary_GroupBox,tr("Поиск по словарю"));

tab->insertTab(3,brute_force_on_dictionaries_GroupBox,tr("Комбинированный поиск по словарям"));

tab->insertTab(4,brute_force_on_dictionary_gybrid_GroupBox,tr("Гибридный поиск по словарю"));

tab->insertTab(5,brute_force_on_dictionaries_gybrid_GroupBox,tr("Гибридный поиск по словарям"));

QHBoxLayout *bottom_Layout=new QHBoxLayout();

bottom_Layout->addStretch();

bottom_Layout->addWidget(ok_PushButton);

bottom_Layout->addWidget(cansel_PushButton);

QVBoxLayout *main_Layout=new QVBoxLayout();

main_Layout->addWidget(tab);

main_Layout->addLayout(bottom_Layout);

// добавляем компоновку окну поиска

setLayout(main_Layout);

//setFixedWidth(800);

setWindowTitle(tr("Добавить задачу"));

}

void add_task_window::add_file_1()

{

QString filename;

if ((filename=QFileDialog::getOpenFileName(this,tr("Открыть словарь")))!=NULL)

brute_force_on_dictionary_filename_LineEdit->setText(filename);

}

void add_task_window::add_file_2()

{

QString filename;

if ((filename=QFileDialog::getOpenFileName(this,tr("Открыть словарь")))!=NULL)

brute_force_on_dictionaries_filename1_LineEdit->setText(filename);

}

void add_task_window::add_file_3()

{

QString filename;

if ((filename=QFileDialog::getOpenFileName(this,tr("Открыть словарь")))!=NULL)

brute_force_on_dictionaries_filename2_LineEdit->setText(filename);

}

void add_task_window::add_file_4()

{

QString filename;

if ((filename=QFileDialog::getOpenFileName(this,tr("Открыть словарь")))!=NULL)

brute_force_on_dictionary_gybrid_filename_LineEdit->setText(filename);

}

void add_task_window::add_file_5()

{

QString filename;

if ((filename=QFileDialog::getOpenFileName(this,tr("Открыть словарь")))!=NULL)

brute_force_on_dictionaries_gybrid_filename1_LineEdit->setText(filename);

}

void add_task_window::add_file_6()

{

QString filename;

if ((filename=QFileDialog::getOpenFileName(this,tr("Открыть словарь")))!=NULL)

brute_force_on_dictionaries_gybrid_filename2_LineEdit->setText(filename);

}

void add_task_window::add_file()

{

}

hash.h

#ifndef HASH_H

#define HASH_H

#include <QThread>

#include <QtCrypto>

#include <math.h>

QT_BEGIN_NAMESPACE

class QCryptographicHash;

QT_END_NAMESPACE

class Hash : public QThread

{

Q_OBJECT

public:

Hash();

volatile bool stopped;

volatile quint64 current,total;

quint8 type;

QVector<QByteArray> *before_hash_vector,

*before_salt_vector,

*login_vector;

QVector<unsigned int> *NTLM1;

QVector<unsigned int> *NTLM2;

QVector<unsigned int> *NTLM3;

QVector<unsigned int> *NTLM4;

QVector<QByteArray> *left_half_LM_password;

QVector<QByteArray> *right_half_LM_password;

quint8 count_hash;

QStringList *tasks;

QCA::Cipher *algorithm_DES;

bool check_hash(const char *);

bool variant_for_before_check(char *);

bool variant_for_hybrid(char *);

char* LM_hash(const char *);

unsigned int* NTLM_hash(const char *);

bool brute_force(const char *,const quint8 &,const quint8 &);

bool brute_force_on_mask(const char *,const char *,const quint8 &,const quint8 &,const quint8 &,const quint8 &);

bool brute_force_on_dictionary(const QString &);

bool brute_force_on_dictionaries(const QString &,const QString &);

bool brute_force_on_dictionary_gybrid(const QString &);

bool brute_force_on_dictionaries_gybrid(const QString &,const QString &);

bool before_check();

void clear_parametrs();

signals:

void complete();

void find_hash(const QString &,const QString &);

void message(const QString &);

void start_timer();

void comlete_task();

protected:

void run();

};

#endif

hash.cpp

#include <QtCore>

#include <QtCrypto>

#include <unistd.h>

#include "hash.h"

// NTLM константы

#define INIT_A 0x67452301

#define INIT_B 0xefcdab89

#define INIT_C 0x98badcfe

#define INIT_D 0x10325476

#define SQRT_2 0x5a827999

#define SQRT_3 0x6ed9eba1

// LM константы

#define LINE "KGS!@#$%"

// DES константы

enum algorithm

{

type_linux_md5=3,

type_windows_LM=4,

type_windows_NTLM=5,

type_linux_sha256=6,

type_linux_sha512=7,

};

enum help

{

buffer_size=128,

};

Hash::Hash()

{

// вектор хэшей

before_hash_vector=new QVector<QByteArray>();

before_hash_vector->clear();

// вектор солей

before_salt_vector=new QVector<QByteArray>();

before_salt_vector->clear();

// логины пользователей

login_vector=new QVector<QByteArray>();

login_vector->clear();

// задачи

tasks=new QStringList();

tasks->clear();

// NTLM

NTLM1=new QVector<unsigned int>();

NTLM1->clear();

NTLM2=new QVector<unsigned int>();

NTLM2->clear();

NTLM3=new QVector<unsigned int>();

NTLM3->clear();

NTLM4=new QVector<unsigned int>();

NTLM4->clear();

// LM

left_half_LM_password=new QVector<QByteArray>();

left_half_LM_password->clear();

right_half_LM_password=new QVector<QByteArray>();

right_half_LM_password->clear();

// алгоритм DES

algorithm_DES=new QCA::Cipher(QString("des"),QCA::Cipher::ECB,QCA::Cipher::NoPadding,QCA::Encode,QByteArray("qwerty"));

}

void Hash::run()

{

emit start_timer();

if (type==type_windows_NTLM)

{

// преобразуем NTLM

for(quint8 i=0;i<before_hash_vector->size();i++)

{

QByteArray hash=before_hash_vector->at(i);

for(quint8 j=0;j<4;j++)

{

unsigned int summ=0;

bool ok;

summ+=hash.mid(0+8*j,2).toUInt(&ok,16);

summ+=hash.mid(2+8*j,2).toUInt(&ok,16)*256;

summ+=hash.mid(4+8*j,2).toUInt(&ok,16)*256*256;

summ+=hash.mid(6+8*j,2).toUInt(&ok,16)*256*256*256;

if (j==0)

NTLM1->append(summ);

else if (j==1)

NTLM2->append(summ);

else if (j==2)

NTLM3->append(summ);

else

NTLM4->append(summ);

}

count_hash++;

}

}

else if (type==type_windows_LM)


Подобные документы

  • Определение энтропии как меры стойкости паролей, способ противодействия их взлому. Вычисление веса и информационной емкости пароля с помощью SeaMonkey, Password Strength Tester. Алгоритм работы дежурного и вспомогательного анализаторов от Microsoft.

    курсовая работа [632,8 K], добавлен 18.06.2011

  • Проблемы использования паролей на предприятии. Общие понятия и технологии идентификации и аутентификации. Принцип работы и структура программного средства SecureLogin от компании ActiveIdentity. Автоматическая генерация пароля, фишинг и фарминг.

    курсовая работа [2,5 M], добавлен 22.01.2015

  • Значение WEB-браузеров для организации доступа к Интернет-ресурсам, для просмотра страниц, видео, управления/администрирование ресурсов. Механизмы хранения паролей современных web-браузеров. Особенности применения функций дешифровки имени и пароля.

    лабораторная работа [408,4 K], добавлен 04.12.2014

  • Обзор основных используемых языков программирования (С++, Java, Pascal). Анализ существующих методов шифрования паролей. Основные понятия объектно-ориентированного программирования. Реализация приложения для генерирования паролей на языке Object Pascal.

    курсовая работа [822,4 K], добавлен 07.07.2012

  • Программа, которая будет выполнять записи в log-файл действий, идентифицированных как попытки атаки на защищаемый объект. Язык программирования PHP. Описание таблиц СУБД MySQL. Алгоритм работы программы. Вывод результата запроса через вложенный цикл.

    курсовая работа [2,0 M], добавлен 26.07.2015

  • Определение и анализ сущности брутфорса – одного из популярных методов взлома паролей на серверах и в различных программах. Характеристика клавиатурного шпиона на базе драйвера. Рассмотрение основных программ для поиска и удаления клавиатурных шпионов.

    курсовая работа [100,9 K], добавлен 03.08.2017

  • Количественная оценка стойкости пароля. Создание программы на базе разработанного алгоритма. Экспериментальная проверка количественных оценок стойкости пароля. Понятие и назначение интерфейса. Методы защиты от несанкционированного доступа к информации.

    курсовая работа [22,8 K], добавлен 13.11.2009

  • Понятие и принципы организации Web-браузеров как систем, использующихся для доступа к интернет-ресурсам для просмотра страниц, видео, управления / администрирование неких ресурсов. Механизм хранения паролей в браузерах и оценка его эффективности.

    лабораторная работа [579,9 K], добавлен 04.12.2014

  • Методика исследования и анализа средств аудита системы Windows с целью обнаружения несанкционированного доступа программного обеспечения к ресурсам вычислительных машин. Анализ угрозы информационной безопасности. Алгоритм работы программного средства.

    дипломная работа [2,9 M], добавлен 28.06.2011

  • Разработка исследовательского комплекса, решающего задачу формирования минимального полинома Жегалкина по вектору значений булевой функции методом частных полиномиальных нормальных форм. Сравнение сред программирования. Макет программного продукта.

    дипломная работа [1,3 M], добавлен 29.05.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.