raised exception class std::bad_alloc with message "Exception raised" с WinRar
{
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"...
Ваше мнение?
распакуй в ручную подряд 30 архивов и посмотри на загрузку проца... если такая же будет - дело в библиотеке
В ручную все работает быстро, загрузка цп до 20%.
Дело в том, что у меня в программе через функцию brute() идет обращение к одному архиву, то есть перебо пароля. Но как видно из кода, архив каждую итерацию открывается заново, то есть это все равно, что обратиться к 30 архивам подряд. Дело наверняка в коде.
Вы имеет ввиду, что разработчики winrar сознательно ограничили возможность перебора???
Загрузка процессора достигает 50% и окно программы виснет так, что его нельзя двинуть. Я предполагал, что 30 обращений подряд к библиотеке winrar не должно вызывать такой загруженности?!
Вообще я имел ввиду делать выводы о качестве того кода, но раз уж разговор зашел о ограничениях, то как бэ да, ограничили, но не кодом а алгоритмом.
Я предполагал, что 30 обращений подряд к библиотеке winrar не должно вызывать такой загруженности?!
Я чего-то не понял, вы как считаете, бибилиотека делом занимается? Вроде делом. Так какого, извините, рожна, она должна делать его не в полную силу? Вставьте Sleep() между вызовами библиотеки и будет у вас скачкообразная загрузка. Вам как бэ шашечки, или ехать?
Наперед говорю, идея перебора пароля rar архива в таком виде задача безрезультатная.
Наперед говорю, идея перебора пароля rar архива в таком виде задача безрезультатная.
Прошу прощения, что долго собирался с мыслями, но хотелось бы узнать, что к чему. Собственно, в каком виде перебор rar пароля будет эффективным?
а зачем его перебирать то? корректный нет возможности ввести?
Я бы не сказал, что это не актуальная задача.
Как-то раз забыл пароль к архиву, содержащему ключи от моего веб мани, тогда и зародилась мысль создать собственный брутфорс. А почему бы не создать собственный брутфорс? тем более мне, как неопытному программисту, нужно набивать себе моск и руку
Насколько я знаю всю эту тему (не сильно), эффективным будет решение системы уранений в полях Галуа. И где-то тут же рядом и квантовый компьютер обитает.