From c6ad9068b3a0f8092927678ada9f2012900ad2a2 Mon Sep 17 00:00:00 2001 From: Christophe Grenier Date: Sun, 21 Feb 2016 10:39:08 +0100 Subject: PhotoRec: recover Symantec encrypted xml files --- src/file_xml.c | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 src/file_xml.c (limited to 'src/file_xml.c') diff --git a/src/file_xml.c b/src/file_xml.c new file mode 100644 index 00000000..62fd28ff --- /dev/null +++ b/src/file_xml.c @@ -0,0 +1,113 @@ +/* + + File: file_xml.c + + Copyright (C) 2016 Christophe GRENIER + + This software is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write the Free Software Foundation, Inc., 51 + Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#ifdef HAVE_STRING_H +#include +#endif +#include +#include "types.h" +#include "filegen.h" +#include "log.h" + +static void register_header_check_xml(file_stat_t *file_stat); + +const file_hint_t file_hint_xml= { + .extension="xml", + .description="Symantec encrypted xml files", + .max_filesize=PHOTOREC_MAX_FILE_SIZE, + .recover=1, + .enable_by_default=1, + .register_header_check=®ister_header_check_xml +}; + +static void file_rename_xml(file_recovery_t *file_recovery) +{ + static const char fn[]="<\0f\0i\0l\0e\0n\0a\0m\0e\0>\0"; + FILE *file; + char buffer[4096]; + size_t lu; + unsigned int i; + if((file=fopen(file_recovery->filename, "rb"))==NULL) + return; + if((lu=fread(&buffer, 1, sizeof(buffer)-1, file)) <= 0) + { + fclose(file); + return ; + } + fclose(file); + buffer[lu]='\0'; + buffer[lu+1]='\0'; + buffer[4096-21]='\0'; + buffer[4096-20]='\0'; + for(i=0; i+20extension=file_hint_xml.extension; + file_recovery_new->min_filesize=512; + file_recovery_new->file_rename=&file_rename_xml; + return 1; +} + +static void register_header_check_xml(file_stat_t *file_stat) +{ + static const unsigned char xml_header[142]= { + 0x3c, 0x00, 0x3f, 0x00, 'x' , 0x00, 'm' , 0x00, + 'l' , 0x00, ' ' , 0x00, 'v' , 0x00, 'e' , 0x00, + 'r' , 0x00, 's' , 0x00, 'i' , 0x00, 'o' , 0x00, + 'n' , 0x00, 0x3d, 0x00, 0x22, 0x00, '1' , 0x00, + '.' , 0x00, '0' , 0x00, 0x22, 0x00, ' ' , 0x00, + 'e' , 0x00, 'n' , 0x00, 'c' , 0x00, 'o' , 0x00, + 'd' , 0x00, 'i' , 0x00, 'n' , 0x00, 'g' , 0x00, + 0x3d, 0x00, 0x22, 0x00, 'U' , 0x00, 'T' , 0x00, + 'F' , 0x00, 0x2d, 0x00, '1' , 0x00, '6' , 0x00, + 0x22, 0x00, 0x3f, 0x00, 0x3e, 0x00, 0x3c, 0x00, + 0x21, 0x00, 0x2d, 0x00, 0x2d, 0x00, 'G' , 0x00, + 'E' , 0x00, 'T' , 0x00, 'R' , 0x00, 'S' , 0x00, + 'F' , 0x00, 'i' , 0x00, 'l' , 0x00, 'e' , 0x00, + 'H' , 0x00, 'e' , 0x00, 'a' , 0x00, 'd' , 0x00, + 'e' , 0x00, 'r' , 0x00, 'S' , 0x00, 'i' , 0x00, + 'z' , 0x00, 'e' , 0x00, 0x3d, 0x00, '0' , 0x00, + 'x' , 0x00, '0' , 0x00, '0' , 0x00, '0' , 0x00, + '0' , 0x00, '0' , 0x00, '8' , 0x00 + }; + register_header_check(0, xml_header, sizeof(xml_header), &header_check_xml, file_stat); +} -- cgit