Форум: "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.038 c