{ > 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.