I looked at this.
If you can find just *one* colliding pair that does not contain a
few select bytes like 0x22 (quote), 0x5c (backslash) and
perhaps 0x0a then it is trivial to make a colliding pair of
C programs.
Call the initial pair (A,B) and make the programs
/* Common prefix that happens to have integer block size
ending just before the A below. */
const char junk[] = "AB";
/* "AA" in program 1, "AB" in program 2. */
...
int
main ()
{
int hsize = sizeof (junk) / 2;
if (memcmp (junk, junk + hsize, hsize))
return do_program_2 ();
else
return do_program_1 ();
}