Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Вниз

Как разархивировать RAR архив с паралем?   Найти похожие ветки 

 
NikNet ©   (2005-05-20 00:42) [0]

Могу без пароля но с паролем не могу Помогите кому не лень
что бы не было легче выкладывую все исходники ПЛИЗ ПОМОГИТЕ?

unit Lenin_Unrar;

{$A-,H-}
{$ALIGN OFF}
{$MINENUMSIZE 4}

interface

uses
Windows;

const
ERAR_END_ARCHIVE    = 10;
ERAR_NO_MEMORY      = 11;
ERAR_BAD_DATA       = 12;
ERAR_BAD_ARCHIVE    = 13;
ERAR_UNKNOWN_FORMAT = 14;
ERAR_EOPEN          = 15;
ERAR_ECREATE        = 16;
ERAR_ECLOSE         = 17;
ERAR_EREAD          = 18;
ERAR_EWRITE         = 19;
ERAR_SMALL_BUF      = 20;

RAR_OM_LIST         =  0;
RAR_OM_EXTRACT      =  1;

RAR_SKIP            =  0;
RAR_TEST            =  1;
RAR_EXTRACT         =  2;

RAR_VOL_ASK         =  0;
RAR_VOL_NOTIFY      =  1;

type
RARHeaderData = record
 ArcName  :array [0..259] of char;
 FileName :array [0..259] of char;
 Flags, PackSize, UnpSize, HostOS, FileCRC,
 FileTime, UnpVer, Method, FileAttr: UINT;
 CmtBuf: PChar;
 CmtBufSize, CmtSize, CmtState: UINT;
end;

RAROpenArchiveData = record
 ArcName   :PChar;
 OpenMode  :UINT;
 OpenResult:UINT ;
 CmtBuf    :PChar;
 CmtBufSize:UINT;
 CmtSize   :UINT;
 CmtState  :UINT;
end;

TChangeVolProc = function(ArcName: PChar; Mode: integer): integer cdecl export;
TProcessDataProc = function(Addr: PUCHAR; Size: integer): integer cdecl export;

function RAROpenArchive(var ArchiveDate: RAROpenArchiveData): THandle; stdcall; external "unrar.dll";
function RARCloseArchive(hArcData: THandle): integer; stdcall; external "unrar.dll";
function RARReadHeader(hArcData: THandle; var HeaderData: RARHeaderData): integer; stdcall; external "unrar.dll";
function RARProcessFile(hArcData: THandle; Operation: integer; DestPath, DestName: PChar): integer; stdcall; external "unrar.dll";
procedure RARSetChangeVolProc(hArcData: THandle; ChangeVolProc: TChangeVolProc); stdcall; external "unrar.dll";
procedure RARSetProcessDataProc(hArcData: THandle; ProcessDataProc: TProcessDataProc); stdcall; external "unrar.dll";
procedure RARSetPassword(hArcData: THandle; Password: PChar); stdcall; external "unrar.dll";

implementation

end.

program sample;

uses
Windows, Messages,
Lenin_UnRAR in "Lenin_UnRAR.pas",
Lenin_SysUtils in "..\..\Lenin_SysUtils.pas",
Lenin_Controls in "..\..\Lenin_Controls.pas";

{$R dialog.res} //Подключаем ресурс диалогового окна

procedure UnRAR_EctractFiles(hListBox: HWND; ArcName, Path: Pchar);
var
Err: string;
OperBegin, OperEnd: TTimeStamp;
hArcData: THandle;
RHCode: Integer;
CmtBuf: array [0..16384] of char;
HeaderData: RARHeaderData;
OpenArchiveData: RAROpenArchiveData;
begin
OpenArchiveData.ArcName := ArcName;
OpenArchiveData.CmtBuf := CmtBuf;
OpenArchiveData.CmtBufSize := SizeOf(CmtBuf);
OpenArchiveData.OpenMode := RAR_OM_EXTRACT;

hArcData := RAROpenArchive(OpenArchiveData);
OperBegin := DateTimeToTimeStamp(Now);
RHCode := 0;
 while RHCode = 0 do begin
  RARProcessFile(hArcData, RAR_EXTRACT, Path, nil);
  RHCode := RARReadHeader(hArcData, HeaderData);
   if Pos("\", HeaderData.FileName) > 0 then begin
    ListBox_AddItem(hListBox, "Extract: " + HeaderData.FileName);
    ListBox_SelectedItem(hListBox, ListBox_GetItemCount(hListBox) - 1);
   end;
  OperEnd := DateTimeToTimeStamp(Now);
  ProcessMessages;
 end;
  Str(RHCode, Err);
   if RhCode <> 10 then
    MessageBox(GetActiveWindow, PChar("Ошибка Извлечения!" + #13 + "Код: "
     + Err + #13 + "Файл: " + ArcName), "Ошибка...", MB_OK);
RARCloseArchive(hArcData);
end;

//Функция, обрабатывающая все команды от элементов управления окна
function DlgProc(hWin: HWND; uMsg: UINT; wp: WPARAM; lp: LPARAM): bool; stdcall;
begin
Result := False;
 case uMsg of
  WM_INITDIALOG:
   begin
   end;
  WM_COMMAND:
    case LoWord(wp) of
     //При нажатии на кнопку с идентификатором 4 распаковываем архив
     4:
      begin
       if FileExists(GetCurDir + "sample.rar") then begin
        ListBox_ClearItems(GetDlgItem(hWin, 30));
        UnRAR_EctractFiles(GetDlgItem(hWin, 30), //Хендл ListBox
         PChar(GetCurDir + "sample.rar"), //Имя архива
         PChar(GetCurDir)); //Куда распаковываем архив? GetCurDir - Текущий каталог.
       end;
      end;
     1: EndDialog(hWin, 0); //Заркываем программу
    end;
  //При нажатии на кнопку "Х" в шапке программы закрываем приложение
  WM_DESTROY, WM_CLOSE: PostQuitMessage(0);
end;
end;

begin
//Открываем диалоговое окно MAIN_WINDOW (достаем окно из ресурсов)
DialogBox(hInstance, "MAIN_WINDOW", 0, @DlgProc);

end.


 
VMcL ©   (2005-05-20 11:19) [1]

Искать по фразе "Brute Force"


 
VMcL ©   (2005-05-20 11:20) [2]

P.S. Уже есть готовое решение: cRARk. Но если пароль длинный и никаких подробностей о нём не известно, но можно годы подбирать...


 
NikNet ©   (2005-05-20 17:01) [3]

Да зачем мне подбирать Я ФАЙЛОВЫЙ МЕНЕДЖЕР ДЕЛАЮ :~|

Помогите разорхивировать с  паролем ...


 
alpet ©   (2005-05-20 17:10) [4]

Проблем нет - документация по модулю рулит. Причем здесь WinAPI или  должна быть какая то функция (NtSetUnrarPassword :) ) что позволит этой библиотеке распаковывать с паролем ?


 
Marser ©   (2005-05-20 18:49) [5]

См. ShellExecute и хелп по WinRAR, там работа с командной строкой остаточно подробно описана.


 
NikNet ©   (2005-05-21 12:24) [6]

Тоже мне наговорили всякие левые ф-ций ну все равно спосибо...

Я уже нашол.


 
KilkennyCat ©   (2005-05-21 13:40) [7]


> что бы не было легче выкладывую все исходники



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.037 c
4-1116308473
Jungle Forever!
2005-05-17 09:41
2005.07.18
Програмный набор номера модемом


4-1116328694
Квас
2005-05-17 15:18
2005.07.18
Производитель CD


9-1112693249
MaxAir
2005-04-05 13:27
2005.07.18
Помогите запустить паровозик по синусоиде :)


4-1116386312
Владимир_К
2005-05-18 07:18
2005.07.18
как вызвать окно выбора папки?


1-1119854690
$HiC0
2005-06-27 10:44
2005.07.18
Wizard-like application





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский