More info on the ARJ format with international (i.e. extremely weak) encryption can be found here at cpsr.org:
A = password
B = compressed text to be encrypted
A' = permuted password
B' = encrypted compressed text
C = constant
^ = XOR
A' = A ^ C
B' = B ^ A'
This is performed character by character.
So if you know the constant (from the application code) and the input and output character then you've got just one variable left: A
, the password character:
A = B ^ B' ^ C.
However, the header contains at least 3 static bytes: the header ID and the archiver version number. So for these bytes / characters you don't need to test anything.
There are many other semi known values in the header, but you will need some additional information such as the length of the password to use them to crask the password.