To compress two "mostly identical" sources, in theory you need
H(X,Y) = H(X) + H(Y) - I(X;Y)
where H is Shannon entropy (sizes of separate archives) and I is
mutal information - capacity you could safe thanks to their similarity.
So you could encode one of them, then encode the "difference between them", which in the simplest case (no synchronization errors) is just XOR of two sources (mostly zeros - can be well compressed).
However, there probably are synchronization errors in your case, so you need a smarter way for find and represent the difference between these two files: something like "delete block from a to b, insert block '...' in position c" etc.
In above case the encoder would need to have both files.
It turns out that theoretically we could get the same capacity if encoders of both files cannot communicate (no way to find "the difference") - it is so called
distributed source coding problem, like Slepian-Wolf or Wyner-Ziv.
However, it becomes more complicated and costly ... and adding synchronization errors would make it a nightmare ...