1. A method for extracting features from programs comprising: (1) providing a processor and a receiving device; (2) receiving a pair of programs in said processor from said receiving device; (3) using said processor to extract one or more tokens from each said program; and (4) using said processor to extract one or more features for each said program based on said extracted tokens, wherein said extracted features are constructed so that two sequences of successive n tokens are considered the same feature if they are permutations of the same n tokens; using said processor to declare as the closest match between said unknown program and one or more of said collection programs the pairing of programs that yields the highest similarity score; and using said processor to classify said unknown program in the same class as the program that was the said closest match; and using said processor to generate a graph using said similarity score, said graph comprising a phylogeny tree.