Я делал по среднеквадратичному отклонению вероятностей значений байта.
Это только звучит заумно, а на самом деле элементарно. Сначала готовим эталонные таблицы вероятностей.
1. Берем любой текстовый файл (англ\рус) — считаем для него вероятности появления всех значений (0..255).
2. В бинарном файле появление всех значений равновероятно (т.е. == 1/256).
3. Теперь, имея 2 таких таблички, читаем проверяемый файл (можно и не весь, а только часть или, как я — кусок в начале, в середине и в конце), подсчитываем как и выше вероятности появления значений байта.
4. Смотрим на какую эталонную таблицу больше будет похоже то, что мы насчитали (считаем среднеквадратичное отклонение: чем оно меньше, тем больше схожесть).
5. Делаем вывод о том, на что больше похож наш файл: на текст или на бинарник.
6. Думаем, что мы молодцы, потому как у меня все работало на ура.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>