Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

raised exception class std::bad_alloc with message "Exception raised" с WinRar

8.8K
31 июля 2009 года
opex
71 / / 17.01.2007
Привет!
Код:
int brute(char *Name,char *pwd)
{

HANDLE arc;
char CmtBuf[16384];
int OpenResult, ProcessResult, HeaderResult,res=0;

struct RAROpenArchiveData Archive;
memset(&Archive,0,sizeof(Archive));
Archive.ArcName=Name;
Archive.CmtBuf=CmtBuf;
Archive.CmtBufSize=sizeof(CmtBuf);
Archive.OpenMode=RAR_OM_EXTRACT;
struct RARHeaderData HeaderData;

arc=RAROpenArchive(&Archive);
OpenResult=Archive.OpenResult;

if(OpenResult!=0)
{
  OutOpenArchiveError(OpenResult,Archive.ArcName);
  return -1;

}
else {

RARSetPassword(arc,pwd);
HeaderData.CmtBuf=NULL;
HeaderResult=RARReadHeader(arc,&HeaderData);
  if(HeaderResult==0)
  {
    int proc=RARProcessFile(arc,RAR_EXTRACT,"C:\\",NULL);
    if(proc==0)
    {
    res=1;
    ShowMessage("Success");
    }
    else return 0;

  }
  else  return 0;
RARCloseArchive(arc);
};

return res;
};

for(int j=1;j<=kolvo;j++)
    {
     pas=takeword(K,P,j,mas); // получаем сформированный пароль
     res=brute(name,pas);
     if((res==-1)||(res==1)) break;
    };


Функция brute() на входе получает имя архива WinRar и пароль, затем распаковывает его.
Если в цикле for(int j=1;j<=kolvo;j++) проходит до 300 итераций, то программа спокойно работает. От 300 и выше обращений подряд к функции brute() (при очередной попытке открытия архива arc=RAROpenArchive(&Archive)) возникает ошибка raised exception class std::bad_alloc with message "Exception raised"...
Ваше мнение?
288
01 августа 2009 года
nikitozz
1.2K / / 09.03.2007
Ну судя по Exception либо какая-то из функций пытается выделить слишком много динамической памяти, либо (что скорее всего) прото ее не освобождает. Посмотрите сколько оперативной памяти "кушает" ваша программа после проведения 300 итераций.
8.8K
01 августа 2009 года
opex
71 / / 17.01.2007
nikitozz, спасибо! С вашей подачи узрел глупую ошибку. Если посмотреть на мой код, то можно увидеть, что динамическая память освобождалась функцией RarCloseArchive() не во всех случаях. Добавил там, где не хватало этой функции и стало намного лучше. Правда, прога все равно вешает комп, поэтому буд смотреть еще.
8.8K
04 августа 2009 года
opex
71 / / 17.01.2007
К сожалению, проблемы с производительностью мне не удалось решить. Даже если делать около 30 итераций функции Brute(), процессор загружается до 50%. Может кто-нибудь работал с бибилиотекой unrar.dll, либо может посоветовать что-нибудь исходя из моего кода(в 1 посте)???
11
04 августа 2009 года
oxotnik333
2.9K / / 03.08.2007
Цитата: opex
К сожалению, проблемы с производительностью мне не удалось решить. Даже если делать около 30 итераций функции Brute(), процессор загружается до 50%. Может кто-нибудь работал с бибилиотекой unrar.dll, либо может посоветовать что-нибудь исходя из моего кода(в 1 посте)???


распакуй в ручную подряд 30 архивов и посмотри на загрузку проца... если такая же будет - дело в библиотеке

8.8K
04 августа 2009 года
opex
71 / / 17.01.2007
Цитата: oxotnik333
распакуй в ручную подряд 30 архивов и посмотри на загрузку проца... если такая же будет - дело в библиотеке



В ручную все работает быстро, загрузка цп до 20%.
Дело в том, что у меня в программе через функцию brute() идет обращение к одному архиву, то есть перебо пароля. Но как видно из кода, архив каждую итерацию открывается заново, то есть это все равно, что обратиться к 30 архивам подряд. Дело наверняка в коде.

11
04 августа 2009 года
oxotnik333
2.9K / / 03.08.2007
саму библиотеку не знаю, но могу предположить что для проверки пароля не обязательно использовать флаг[FONT=monospace] [/FONT]RAR_OM_EXTRACT, если есть чего попроще типа ([FONT=monospace][/FONT]RAR_OM_VIEW / [FONT=monospace][/FONT]RAR_OM_OPEN / [FONT=monospace][/FONT]RAR_OM_CHECK и т.п.), то можно попытаться его просто открыть, и в случае успеха - открывать на распаковку.
14
04 августа 2009 года
Phodopus
3.3K / / 19.06.2008
Библиотека суть кусок WinRAR-а так что делайте выводы. Кстати не вижу проблемы в загрузке процессора. Почему ее не должно быть-то?
8.8K
05 августа 2009 года
opex
71 / / 17.01.2007
Цитата: Phodopus
Библиотека суть кусок WinRAR-а так что делайте выводы. Кстати не вижу проблемы в загрузке процессора. Почему ее не должно быть-то?



Вы имеет ввиду, что разработчики winrar сознательно ограничили возможность перебора???

Загрузка процессора достигает 50% и окно программы виснет так, что его нельзя двинуть. Я предполагал, что 30 обращений подряд к библиотеке winrar не должно вызывать такой загруженности?!

14
05 августа 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: opex
Вы имеет ввиду, что разработчики winrar сознательно ограничили возможность перебора???


Вообще я имел ввиду делать выводы о качестве того кода, но раз уж разговор зашел о ограничениях, то как бэ да, ограничили, но не кодом а алгоритмом.

Цитата: opex

Я предполагал, что 30 обращений подряд к библиотеке winrar не должно вызывать такой загруженности?!


Я чего-то не понял, вы как считаете, бибилиотека делом занимается? Вроде делом. Так какого, извините, рожна, она должна делать его не в полную силу? Вставьте Sleep() между вызовами библиотеки и будет у вас скачкообразная загрузка. Вам как бэ шашечки, или ехать?
Наперед говорю, идея перебора пароля rar архива в таком виде задача безрезультатная.

11
05 августа 2009 года
oxotnik333
2.9K / / 03.08.2007
TApplication::ProcessMessage() чтоб не висело GUI
8.8K
13 августа 2009 года
opex
71 / / 17.01.2007
Цитата: Phodopus

Наперед говорю, идея перебора пароля rar архива в таком виде задача безрезультатная.



Прошу прощения, что долго собирался с мыслями, но хотелось бы узнать, что к чему. Собственно, в каком виде перебор rar пароля будет эффективным?

11
13 августа 2009 года
oxotnik333
2.9K / / 03.08.2007
Цитата: opex
Прошу прощения, что долго собирался с мыслями, но хотелось бы узнать, что к чему. Собственно, в каком виде перебор rar пароля будет эффективным?


а зачем его перебирать то? корректный нет возможности ввести?

8.8K
13 августа 2009 года
opex
71 / / 17.01.2007
Цитата: oxotnik333
а зачем его перебирать то? корректный нет возможности ввести?


Я бы не сказал, что это не актуальная задача.
Как-то раз забыл пароль к архиву, содержащему ключи от моего веб мани, тогда и зародилась мысль создать собственный брутфорс. А почему бы не создать собственный брутфорс? тем более мне, как неопытному программисту, нужно набивать себе моск и руку

11
13 августа 2009 года
oxotnik333
2.9K / / 03.08.2007
а теперь представь сколько вариантов может содержать в себе хотя бы 4-х символьный пароль .
14
13 августа 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: opex
Прошу прощения, что долго собирался с мыслями, но хотелось бы узнать, что к чему. Собственно, в каком виде перебор rar пароля будет эффективным?


Насколько я знаю всю эту тему (не сильно), эффективным будет решение системы уранений в полях Галуа. И где-то тут же рядом и квантовый компьютер обитает.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог