Ajouter un nouveau type de fichier

Comment utiliser TestDisk pour récupérer une partition perdue
Locked
Message
Author
dch59
Posts: 2
Joined: 12 Jan 2013, 17:06

Ajouter un nouveau type de fichier

#1 Post by dch59 »

Bonjour,
Tout d'abord, un grand merci pour les développeures de Testdisk et photorec, qui m'ont permis de retrouver un certain nombre de donnée après une migration problématique vers Windows 8.

Je souhaite récupérer des fichiers non reconnus par Photorec. Il s'agit en l'occurence de fichiers MS Money Sunset (Photorec reconnait bien les fichiers de sauvegarde, mais pas les fichiers de travail). J'ai trouvé une signature, puisque le fichier .MNY commence systématiquement par la séquence :

"....MSISAM Database"

Je me suis donc attaqué au sujet en suivant le tutoriel décrit sur le site
1- Modification du fichier file_list.c
J'ai ajouté les ligne suivantes aux endroits indiqués

Code: Select all

extern const file_hint_t file_hint_zip;
extern const file_hint_t file_hint_mny;

file_enable_t list_file_enable[]=
et

Code: Select all

  { .enable=0, .file_hint=&file_hint_mny  },
  { .enable=0, .file_hint=NULL }
};
(dans ce dernier cas, la syntaxe semble différente de celle mentionnée sur le site. J'ai pris le modèle inclus dans le fichier).

2- J'ai modifié makefile.am pour ajouter la ligne

Code: Select all

			  file_xz.c \
			  file_zip.c \
			  file_mny.c
3. J'ai créé un fichier file_mny.c avec le contenu suivant :

Code: Select all

/*

    File: file_mny.c

    Copyright (C) YEAR Christophe GRENIER <grenier@cgsecurity.org>
  
    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 <config.h>
#endif
#ifdef HAVE_STRING_H
#include <string.h>
#endif
#include <stdio.h>
#include "types.h"
#include "filegen.h"

static void register_header_check_mny(file_stat_t *file_stat);

const file_hint_t file_hint_mny= {
  .extension="mny",
  .description="Money Sunset File",
  .min_header_distance=0,
  .max_filesize=PHOTOREC_MAX_FILE_SIZE,
  .recover=1,
  .enable_by_default=1,
  .register_header_check=&register_header_check_mny
};

static const unsigned char mny_header[10]=  {
  0x00, 0x01, 0x00, 0x00, 0x4D, 0x53, 0x49, 0x53, 0x41, 0x4D
};

static int header_check_mny(const unsigned char *buffer, const unsigned int buffer_size, const unsigned int safe_header_only, const file_recovery_t *file_recovery, file_recovery_t *file_recovery_new)
{
  if(memcmp(&buffer[HEADER_LOC], mny_header, sizeof(mny_header))==0)
  {
    reset_file_recovery(file_recovery_new);
    file_recovery_new->extension=file_hint_mny.extension;
    file_recovery_new->file_check=&file_check_mny;
    return 1;
  }
  return 0;
}

static void register_header_check_mny(file_stat_t *file_stat)
{
  register_header_check(HEADER_LOC, mny_header, sizeof(mny_header), &header_check_mny, file_stat);
}
Tous ces fichiers sont sur mon disque dans un dossier D:\TestDisk_dev\testdisk-6.14-WIP\src

Il me semble que l'étape suivant est la compilation du projet, mais je bute sur la procédure, n'étant pas du tout familier avec C++

Visual studio ne semble pas reconnaitre le projet
J'ai chargé cygwin, mais bloque sur les lignes de commande.

Pouvez vous me donner quelques indications sur la procédure ?

merci de votre aide

dch59
Posts: 2
Joined: 12 Jan 2013, 17:06

Re: Ajouter un nouveau type de fichier

#2 Post by dch59 »

J'ai chargé l'environnement de développement C++, ce que je n'avais pas fait auparavant.

Je peut maintenant lancer la configuration avec ./configure, mais la commande suivante make se plante, du semble t-il a un problème de configuration :

Code: Select all

make  all-recursive
make[1] : on entre dans le répertoire « /cygdrive/d/TestDisk_dev/testdisk-6.14-W                          IP »
Making all in src
make[2] : on entre dans le répertoire « /cygdrive/d/TestDisk_dev/testdisk-6.14-W                          IP/src »
 cd .. && /bin/sh /cygdrive/d/TestDisk_dev/testdisk-6.14-WIP/config/missing --ru                          n automake-1.11 --gnits src/Makefile
aclocal.m4:17: warning: this file was generated for autoconf 2.68.
You have another version of autoconf.  It may work, but is not guaranteed to.
If you have problems, you may need to regenerate the build system entirely.
To do so, use the procedure documented by the package, typically `autoreconf'.
 cd .. && /bin/sh ./config.status src/Makefile depfiles
config.status: creating src/Makefile
config.status: executing depfiles commands
make[2] : on quitte le répertoire « /cygdrive/d/TestDisk_dev/testdisk-6.14-WIP/s                          rc »
make[2] : on entre dans le répertoire « /cygdrive/d/TestDisk_dev/testdisk-6.14-W                          IP/src »
Makefile:1770: *** séparateur manquant . Arrêt.
make[2] : on quitte le répertoire « /cygdrive/d/TestDisk_dev/testdisk-6.14-WIP/s                          rc »
Makefile:418: recipe for target `all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1] : on quitte le répertoire « /cygdrive/d/TestDisk_dev/testdisk-6.14-WIP »
Makefile:307: recipe for target `all' failed
make: *** [all] Error 2
Que puis je faire pour lancer cette commande ?

Merci

User avatar
cgrenier
Site Admin
Posts: 5432
Joined: 18 Feb 2012, 15:08
Location: Le Perreux Sur Marne, France
Contact:

Re: Ajouter un nouveau type de fichier

#3 Post by cgrenier »

Essayer "autoreconf" mais sinon il serait plus simple de passer par un fichier de signature
http://www.cgsecurity.org/wiki/Add_your ... o_PhotoRec

Locked