I'm having trouble reproducing the length XOR decode. My understanding from crax0r's breakdown is: you concat the length bits in this order:
....
a python (2.7) script for you (not the prettiest but it works):
#!/usr/bin/python
def splitString(s, size):
return [s[i:i+size] for i in range(0, len(s), size)]
bac = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_______________________________________________________";
# 12345678901234567890123456
inner_short_long = ('0110110110100010110110110011','110111110110110111110010','100011100010110111110111110111110','0111001101101')
outer_short_long = ('001101100111001101','001111000101','0011111011010001','01101101')
(it_l2r, ir_t2b, ib_r2l, il_b2t) = inner_short_long
(ot_l2r, or_t2b, ob_r2l, ol_b2t) = outer_short_long
ib_l2r = ib_r2l[::-1]
il_t2b = il_b2t[::-1]
it_r2l = it_l2r[::-1]
ot_r2l = ot_l2r[::-1]
ob_l2r = ob_r2l[::-1]
rbn_l2r = '011010'
encrypted_track = "".join([ib_l2r, il_t2b, ir_t2b, it_r2l, ot_r2l, ob_l2r]);
print 'encrypted_track = ', encrypted_track
xor = (rbn_l2r * 22) [:-1]
print 'xor = ', xor
decrypted_track = ("{0:b}").format(int(encrypted_track, 2) ^ int(xor, 2))
print 'decrypted_track = ', decrypted_track
indexed_track = (decrypted_track*5)[::5]
print 'indexed_track = ', indexed_track
splited_track = splitString(indexed_track,5)
print 'splited_trak = ' , splited_track
print 'decoded bacon = ' , [ bac[int(x,2)] for x in splited_track]
output:
encrypted_track = 011111011111011111011010001110001101101100111011011111011011011111001011001101101101000101101101101011001110011011001000101101111100
xor = 01101001101001101001101001101001101001101001101001101001101001101001101001101001101001101001101001101001101001101001101001101001101
decrypted_track = 10010010010010010010111000011000000100001110110010010010110010010000110000000100000001000100000100110000011010110000101100000110001
indexed_track = 10011001110010000101011001101000000101001000101000100100101000100110000010101000010110010010001000000000001001000101100000000011101
splited_trak = ['10011', '00111', '00100', '00101', '01100', '11010', '00000', '10100', '10001', '01000', '10010', '01010', '00100', '11000', '00101', '01000', '01011', '00100', '10001', '00000', '00000', '01001', '00010', '11000', '00000', '01110', '1']
decoded bacon = ['T', 'H', 'E', 'F', 'M', '_', 'A', 'U', 'R', 'I', 'S', 'K', 'E', 'Y', 'F', 'I', 'L', 'E', 'R', 'A', 'A', 'J', 'C', 'Y', 'A', 'O', 'B']
@RealOnTheMF - I'm impressed!