Contributor: JON ZARATE
{> Do somebody have a ARJ 2.41 Password finder, because I have packed> some of my pascal codes and grabled it with password and now .... hmmmm> I can't extract the ARJ file with the password. I must have typed a> different password when I pascked those files.
In my next two messages is ARJCRACK.PAS. It's a program that may
help you find that password. It's EXTREMELY slow, but if you are
really really really (did i say really? :)) ) desperate about it
you might want to give it a try.
You will need to place this in a FAST machine (one you won't need
for a LONG while) along with ARJ.EXE and the password-encrypted
archive on the same drive & directory.
Tips to speed it up:
 + Using "ARJ v archive," pick the smallest file you can find (but not
 less than about 10 bytes), that was archived using the store method
 (no compression)
 + Move ARJ.EXE, ARJCRACK.EXE and the archive in a ram drive.
 + Remove some characters in PassSet that you think you never used
 as the password (maybe ~ ` ^ etc..)
 + Run it in plain old DOS *NOT* under Windows or DESQview or OS2.
 + Start off the [last_password] parameter with "a" x minimum-password-
 length-that-you-normaly-use. Something like:
 arjcrack sources small.pas aaaa
 ^^^^
 if you're sure that you never use passwords that are less
 than 4 characters
jon.zarate@vidgame.com
}
{$M 8192, 0, 0}
{$V-}{$S-}{$G+}{$X+}{$R-}
uses
 Crt, Dos;
const
 PassSet : String =
 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' +
 '0123456789`=\[];'',./~!@#$%^&*()_{}:';
var
 Pw : String;
 Arc : String;
 Fn : String;
 Prev: String;
procedure Sounder(R : Integer);
var
 N : Integer;
begin
 N:=2000;
 repeat
 Sound(N);
 N:=N + R;
 if (N < 50) then N:=2000 else if (N> 2000) then N:=50;
 Delay(2);
 until (KeyPressed);
 NoSound;
end;
procedure Crack;
var
 I : Word;
 Pw: String[40];
 J : Word;
 X : Word;
 Y : Word;
 Z : array[1..41] of Byte;
 C : Word;
begin
 FillChar(Z, SizeOf(Z), 0);
 if (Prev  '') then
 begin
 for I:=1 to Length(Prev) do
 begin
 Z[I]:=Pos(Prev[I], PassSet);
 if (Z[I] = 0) then
 begin
 writeln('Invalid character in [last_password]');
 Halt;
 end;
 end;
 Pw:=Prev;
 X:=Length(Pw);
 J:=X;
 end else
 begin
 Pw:=PassSet[1];
 Z[1]:=1;
 X:=1;
 J:=1;
 end;
 repeat
 Pw[1]:=PassSet[Z[1]];
 writeln;
 writeln;
 writeln('////////////////////////////////////////////////////////////');
 writeln('ARJ t ', Arc, ' ', Fn, ' -g', Pw);
 writeln;
 SwapVectors;
 Exec('ARJ.EXE', 't ' + Arc + ' ' + Fn + ' -g' + Pw);
 SwapVectors;
 writeln('////////////////////////////////////////////////////////////');
 C:=DosExitCode;
 if ((C = 0) and (DosError = 0)) then
 begin
 writeln;
 writeln;
 writeln('Hey I found it!!');
 writeln('The password is -- ', Pw);
 writeln;
 Sounder(10);
 Halt
 end;
 if ((C  3) or (DosError  0)) then
 begin
 writeln;
 writeln('Duhh... What happened?? Why did I get an EXITCODE of ',
 C, ' and a DOSERROR of ', DosError, '??');
 Sounder(-30);
 Halt
 end;
 if (KeyPressed) then
 begin
 writeln('ARJCRACK aborted.');
 writeln('Last password used was --> ', Pw, ' <--'); Halt; end; inc(Z[1]); for I:=1 to X do begin if (Z[I]> Length(PassSet)) then
 begin
 Z[I]:=1;
 inc(Z[I + 1]);
 if (I = J) then
 begin
 inc(J);
 inc(X);
 Pw[0]:=Chr(X);
 Pw[X]:=PassSet[1];
 end;
 end;
 Pw[I]:=PassSet[Z[I]];
 end;
 until (X> Length(Pw));
 writeln('Sorry, I can''t find the password!!');
 Sounder(-2);
end;
begin
 writeln;
 writeln;
 writeln('ARJ Password Cracker Version 0.10');
 writeln('by Jonathan Zarate');
 writeln;
 writeln('Password character set: ', PassSet);
 writeln;
 if ((ParamCount < 2) or (ParamCount> 3)) then
 begin
 writeln('Usage: ARJCRACK   [last_password]');
 Halt;
 end;
 Arc:=ParamStr(1);
 Fn:=ParamStr(2);
 Prev:=ParamStr(3);
 Crack;
end.


AltStyle によって変換されたページ (->オリジナル) /