Распознавание форматов файлов из двоичного кода (C++)
Я начинающий программист C++.
Я написал простую программу, которая создает массив символов (размер по выбору пользователя) и читает информацию, которая была в нем ранее. Часто вы можете найти что-то, что имеет смысл (я всегда нахожу алфавит?), Но в большинстве случаев это просто странные символы. Я сделал это вывод в двоичный файл.
Тем не менее, как я могу:
Распознать разные порции данных
Распознать, что такое чанки, какой формат файла (т. Е. Какой чанк это изображение, аудио, текст и т. Д.)
Мой код:
// main.cpp
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main() {
int memory_size = 4000;
string data = "";
bool inFile = false;
cout << "How many bytes do you want to retrieve? (-1 to exit)\n";
cin >> memory_size;
string y_n;
cout << "Would you like to write output into a file? (Y/N)\n";
cin >> y_n;
if (y_n.compare("Y") == 0 || y_n.compare("y") == 0)
inFile = true;
else
inFile = false;
char memory_chunk[memory_size];
for (int i=0;i<memory_size;i++) {
cout << memory_chunk[i] << "";
data += memory_chunk[i] + "";
}
if (inFile) {
ofstream file("output.binary", ios::out | ios::binary);
file.write(memory_chunk, sizeof memory_chunk);
file.close();
}
cin >> data;
return 0;
}
Пример извлеченных данных: (это НАМНОГО меньше того, что обычно можно извлечь)
dû( L) àýtú( ¯1Œw ÐýDú( @ú( Lú( dû( ¼û( L) º
‰v8û( 7Œw û( ú( 0ý( k7Œwdû( @ 5 À ü( ¨›w ó˜wÞ¯ › Ø› 0ý( Hû( À › `› À Dû( LŒw › @› `› › lû( ÷Œw › › ˜› › û( 3YŒw › ~Œw › €› › à› Dü( › €› Dü( ßWŒwXŒwDÞ¯ › › €› ˆ› À › ¦› › !› : À › `› À ü( › ˆ› V €›
Œw ˆ› ¬û( Äÿ( ‘Q‡w€ôçþÿÿÿXŒwµTŒw ‚› xü( È6‹w › À×F fÍñt"ãŠvEA @ÒF ¸ü(
þÿÿÿ@ÒF Ã~“v Øü( O¯‰vØÞ¯øü( œ›‰v › ˆý( ‡ÌE @ÒF
8|“v ý( ‰v@M“v,ý( wî‰v hý( ¬_‘v8|“v˜_‘vݧY‘ ÀwF
<ý( Äÿ( e‹vàçþÿÿÿ˜_‘v"A
8|“v@ÒF ÀwF ïÀE ÕF ”› ÓºA ”› ÕF lF €F F 2 àýàý( ð @
1 ответ
Некоторые форматы файлов начинаются с магических чисел, которые помогают их идентифицировать, хотя это не всегда так. В Википедии есть некоторые здесь: http://en.wikipedia.org/wiki/List_of_file_signatures. Команда unix 'file' пытается угадать форматы файлов на основе магических чисел в данных. Исходный код к этому наиболее вероятно доступен где-нибудь. (источники Apple Дарвин, если больше нигде).