#include #include int main(int argc,char* argv[]) { FILE* f,*o; char fname[100]; int fnum=0; int i,j,flag,count; i=0; int in[4]; int pos; f = fopen(argv[1],"r"); pos=0; while(!feof(f)) { for(pos=0;pos<4;pos++) in[pos] = fgetc(f); for(i=0;i<4;i++) if(in[i]==0xFF) break; if(in[i]==0xFF) { //in[0]=0xFF; for(pos=i,i=0;pos<4;pos++) in[i++]=in[pos]; for(;i<4;i++) in[i]=fgetc(f); //printf("0xFF"); if(in[1]==0xD8) {//printf("0xD8"); if(in[2]==0xFF) {//printf("0xFF"); if(in[3]==0xE1 || in[3]==0xE0) { printf("JPEG Header\n"); snprintf(fname,100,"recovered_%04d.jpg",fnum++); o = fopen(fname,"w"); for(i=0;i<4;i++) fputc(in[i],o); flag=0; count=0; while(!feof(f)) { if(!flag) in[0] = fgetc(f); else flag=0; in[1] = fgetc(f); if(in[0]==0xFF && in[1]==0xD9) count++; if(count==2) break; if(in[1]==0xFF) { flag=1; fputc(in[0],o); in[0]=in[1]; } else { fputc(in[0],o); fputc(in[1],o); } }; fputc(in[0],o); fputc(in[1],o); printf("End of jpeg\n"); close(o); fname[0]++; }}} } } return 0; }