I've begun a course in crypto on coursera and the first homework was writing a vigenere(xor) cracker. It works, which was a rush :) but it makes one core assumption, one has encrypted a natural language text that the script can use frequency analysis on. Therefore doesn't work if one encrypted an image or a compressed file. How does one do it if frequency analysis isn't an option?
AFAIK vigenere cipher is a plain subsitution algorithm with arbitrary key length, destroying statistical patterns (f.e. of natural languages) but not conducting any transposition.
Btw. a classic approach to crack a vigenere cipher is the Kasiki-Test (https://en.wikipedia.org/wiki/Kasiski_examination) which might give you information reagrding the key length.
If you try to decrypt a file format (jpeg, gif, zip etc.) you actually know at least the first bytes (fileheader) as they are defined by convention: f.e. a zip file always starts with 0x04034b50 (https://en.wikipedia.org/wiki/Zip_%28file_format%29) which gives you the first 4 bytes for your decryption table.