Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с UnRAR.dll 
:(
    Опции темы
geek2600
Дата 9.6.2008, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 19.11.2006

Репутация: нет
Всего: 1



Здравствуйте.
Недавно я столкнулся с проблемой реализации подбора паролей к RAR f\архивам.
Соответсвенно вопрос:работал ли кто нибудь с UnRAR.DLL?
Вот я достал код , но на DELPHI:
{$APPTYPE CONSOLE}

type
  tArchiveData=record
     ArcName:pchar;
     OpenMode:cardinal;
     OpenResult:cardinal;
     CmtBuf:pchar;
     CmtBufSize:cardinal;
     CmtSize:cardinal;
     CmtState:cardinal;
  end;
  pArchiveData=^tArchiveData;
  tHeaderData=record
     ArcName:array [1..260] of char;
     FileName:array [1..260] of char;
     Flags:cardinal;
     PackSize:cardinal;
     UnpSize:cardinal;
     HostOS:cardinal;
     FileCRC:cardinal;
     FileTime:cardinal;
     UnpVer:cardinal;
     Method:cardinal;
     FileAttr:cardinal;
     CmtBuf:pchar;
     CmtBufSize:cardinal;
     CmtSize:cardinal;
     CmtState:cardinal;
 end;
 pHeaderData=^tHeaderData;

function RARGetDllVersion:integer;stdcall;external 'unrar.dll';
function RAROpenArchive(ArchiveData:pArchiveData):THandle;stdcall;external 'unrar.dll';
function RARCloseArchive(hArcData:THandle):integer;stdcall;external 'unrar.dll';
procedure RARSetPassword(hArcData:THandle;Password:pchar);stdcall;external 'unrar.dll';
function RARReadHeader(hArcData:THandle;HeaderData:pHeaderData):Integer;stdcall;external 'unrar.dll';
function RARProcessFile(hArcData:THandle;Operation:integer;DestPath:pchar;
                       DestName:pchar):integer;stdcall;external 'unrar.dll';

var RAR_DLL_VERSION:integer;
   RAR_ARCHIVE_DATA:tArchiveData;
   RAR_HEADER_DATA:tHeaderData;
   RAR_ARCHIVE_HANDLE:THandle;
   PACKAGE_NAME:string;
   FROM_PWD,TO_PWD:cardinal;

procedure DoError(ErrMessage:string);
begin
  writeln(ErrMessage);
  halt;
end;

function TryPassword(pwd:string):boolean;
begin
  pwd:=pwd+#0;
  RAR_ARCHIVE_HANDLE:=RAROpenArchive(@RAR_ARCHIVE_DATA);
  RARSetPassword(RAR_ARCHIVE_HANDLE,@pwd[1]);
  RARReadHeader(RAR_ARCHIVE_HANDLE,@RAR_HEADER_DATA);
  TryPassword:=(RARProcessFile(RAR_ARCHIVE_HANDLE,1,nil,nil)=0);
  RARCloseArchive(RAR_ARCHIVE_HANDLE);
end;

procedure Init;
var lpwd:longint;
   spwd:string;
   z:boolean;
begin
  with RAR_ARCHIVE_DATA do begin
      ArcName:=@PACKAGE_NAME[1];
      OpenMode:=1;
      CmtBuf:=NIL;
      CmtBufSize:=0;
      CmtSize:=0;
  end;
  RAR_DLL_VERSION:=RARGetDllVersion;
  writeln('Version of "unrar.dll" is ',RAR_DLL_VERSION,'.');
  write('Press any key to begin...');
  readln;
  //begin of cracking algoritm
  writeln('---> Cracking...');
  for lpwd:=FROM_PWD to TO_PWD do begin
     str(lpwd,spwd);
     write('Trying "'+spwd+'"...');
     z:=TryPassword(spwd);
     writeln(z);
     if z then break;
  end;
  //end of cracking algoritm
  if z then writeln('---> CRACKED!!! PASSWORD="'+spwd+'".')
       else writeln('---> Password not found.');
end;

procedure Main;
var ECode:integer;
begin
  writeln('RAR cracker, coded by xz249.');
  if paramcount<3 then DoError('Usage: RC.EXE <filename> <from pwd> <to pwd>.');
  PACKAGE_NAME:=paramstr(1)+#0;
  val(paramstr(2),FROM_PWD,ECode);
  if ECode<>0 then DoError('Usage: RC.EXE <filename> <from pwd> <to pwd>.');
  val(paramstr(3),TO_PWD,ECode);
  if ECode<>0 then DoError('Usage: RC.EXE <filename> <from pwd> <to pwd>.');
  Init;
end;

begin
  Main;
end.

Если кто может помогите с реализацией этого кода на C++.
Заранее благодарен.
С уважением geek2600.
PM MAIL   Вверх
bsa
Дата 10.6.2008, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



PM   Вверх
jonie
Дата 10.6.2008, 21:58 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



geek2600 рекомендую перед тем как что-то писать взять ручку, бумагу, и прикинуть временные затраты на это... прочитайте про алгоритм, там чет около 250 тыс AES256 подряд примененных (если я не путаю с чем)..... в общем 50 паролей в секунду на современных машинах это "круто" ....


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0514 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.