Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Rechercher une chaîne dans un fichier binaire

56 réponses
Avatar
Patrick Stadelmann
Hello,

Je cherche un outil (ou les paramètres appropriés à passer à un outil
standard) qui puisse me donner la position de toutes les occurrences
d'une chaîne dans un fichier (le fichier fait 50 Go en fait un "dump"
d'un disque crashé obtenu avec dd).

J'ai essayé "grep -b" mais il n'aime pas trop les parties binaires. Mon
autre option est de passer par "hexdump -C" d'abord, mais comme là ma
chaîne risque d'être à cheval sur deux lignes...

Une idée ?

Merci,

Patrick
--
Patrick Stadelmann <Patrick.Stadelmann@unine.ch>

10 réponses

1 2 3 4 5
Avatar
patpro ~ Patrick Proniewski
In article ,
Patrick Stadelmann wrote:

Hello,

Je cherche un outil (ou les paramètres appropriés à passer à un outil
standard) qui puisse me donner la position de toutes les occurrences
d'une chaîne dans un fichier (le fichier fait 50 Go en fait un "dump"
d'un disque crashé obtenu avec dd).

J'ai essayé "grep -b" mais il n'aime pas trop les parties binaires. Mon
autre option est de passer par "hexdump -C" d'abord, mais comme là ma
chaîne risque d'être à cheval sur deux lignes...

Une idée ?



pas pour ton grep, mais ca vaudrait pas le coup de tenter de rebalancer
ton dump sur un disque neuf ?

patpro

Avatar
Patrick Stadelmann
In article ,
patpro ~ Patrick Proniewski wrote:

pas pour ton grep, mais ca vaudrait pas le coup de tenter de rebalancer
ton dump sur un disque neuf ?


Pour l'instant je l'ai balancé (via dd à nouveau) dans une image disque,
que je peux accéder comme un device (attaché avec hdid).

Patrick
--
Patrick Stadelmann

Avatar
flipouk
Patrick Stadelmann wrote:
In article ,
patpro ~ Patrick Proniewski wrote:


pas pour ton grep, mais ca vaudrait pas le coup de tenter de rebalancer
ton dump sur un disque neuf ?



Pour l'instant je l'ai balancé (via dd à nouveau) dans une image disque,
que je peux accéder comme un device (attaché avec hdid).

Patrick
Essaye la commande 'strings' :

Par ex., pour savoir si la chaine 'xyz' est présente dans le fichier
binaire 'fichier.bin' :
$ strings fichier.bin | grep xyz
'strings' liste toutes les chaines de caractères présentes dans un binaire.
A+
F.
--
,_,
(O,O) Plus je connais les hommes,
( ) Plus j'aime ma machine
-"-"----------------------------------------------
Flipouk. GNU/Linux, MacOSX et Java : même combat !
--------------------------------------------------


Avatar
Patrick Stadelmann
In article <42d3c920$0$8698$,
flipouk wrote:

Essaye la commande 'strings' :
Par ex., pour savoir si la chaine 'xyz' est présente dans le fichier
binaire 'fichier.bin' :
$ strings fichier.bin | grep xyz
'strings' liste toutes les chaines de caractères présentes dans un binaire.


Je connaissais la commande, mais je croyais qu'elle ne pouvait
s'utiliser que sur des exécutables. J'ai fait un petit test, ça a l'air
de marcher.

Merci !

Patrick
--
Patrick Stadelmann

Avatar
patpro ~ Patrick Proniewski
In article ,
Patrick Stadelmann wrote:

In article <42d3c920$0$8698$,
flipouk wrote:

Essaye la commande 'strings' :
Par ex., pour savoir si la chaine 'xyz' est présente dans le fichier
binaire 'fichier.bin' :
$ strings fichier.bin | grep xyz
'strings' liste toutes les chaines de caractères présentes dans un binaire.


Je connaissais la commande, mais je croyais qu'elle ne pouvait
s'utiliser que sur des exécutables. J'ai fait un petit test, ça a l'air
de marcher.


note que contrairement a grep ca ne t'aidera pas à connaitre
l'emplacement de la chaine dans ton fichier car strings fait une ligne
par chaine trouvée, et non pas une ligne par ligne analysée.

patpro


Avatar
Paul Gaborit
À (at) Tue, 12 Jul 2005 14:44:06 +0100,
flipouk écrivait (wrote):
Par ex., pour savoir si la chaine 'xyz' est présente dans le fichier
binaire 'fichier.bin' :
$ strings fichier.bin | grep xyz
'strings' liste toutes les chaines de caractères présentes dans un binaire.


J'imagine que dans le cas d'un dd de 50Go, le PO est sûr que la chaîne
est bien présente. Par contre, ce qui l'intéresse doit être l'endroit
(l'offset) où elle apparaît. Donc :

$ strings -o fichier.bin | grep xyz

Remarque: 'strings' ne considère que les chaînes purement ASCII.

Par ailleurs, cette méthode risque d'être lente sur un fichier de
50Go.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>

Avatar
Patrick Stadelmann
In article ,
patpro ~ Patrick Proniewski wrote:

note que contrairement a grep ca ne t'aidera pas à connaitre
l'emplacement de la chaine dans ton fichier car strings fait une ligne
par chaine trouvée, et non pas une ligne par ligne analysée.


En effet. En plus, ça semble en rater pas mal car j'ai beaucoup moins de
match qu'en passant par hexdump.

Patrick
--
Patrick Stadelmann

Avatar
Patrick Stadelmann
In article ,
Patrick Stadelmann wrote:

In article ,
patpro ~ Patrick Proniewski wrote:

note que contrairement a grep ca ne t'aidera pas à connaitre
l'emplacement de la chaine dans ton fichier car strings fait une ligne
par chaine trouvée, et non pas une ligne par ligne analysée.


En effet. En plus, ça semble en rater pas mal car j'ai beaucoup moins de
match qu'en passant par hexdump.


OK, c'est bon j'ai une solution. Ma chaîne étant de 6 caractères et
hexdump -C affichant par ligne de 16 caractère, si je lance l'opération
une fois en partant de 0 et une fois en partant de 8, je trouverai
toutes les occurrences.

Merci à tous pour vos suggestions,

Patrick
--
Patrick Stadelmann


Avatar
Saïd
Patrick Stadelmann :
Hello,

Je cherche un outil (ou les paramètres appropriés à passer à un outil
standard) qui puisse me donner la position de toutes les occurrences
d'une chaîne dans un fichier (le fichier fait 50 Go en fait un "dump"
d'un disque crashé obtenu avec dd).

J'ai essayé "grep -b" mais il n'aime pas trop les parties binaires. Mon
autre option est de passer par "hexdump -C" d'abord, mais comme là ma
chaîne risque d'être à cheval sur deux lignes...

Une idée ?

Merci,

Patrick


Si ta chaine ne contient aucune repetition, le programme C pour la detecter
en ne faisant qu'une passe sur chaque caractere est trivial a ecrire. Sinon
il faut reflechir et ca fait mal a la tete.


--
Saïd.
C programmers never die - they're just cast into void.

Avatar
nospam
Patrick Stadelmann wrote:

Une idée ?


Essaye strings.

% pwd
/Applications/Mail.app/Contents/MacOS
% strings Mail|more
__dyld_mod_term_funcs
__dyld_make_delayed_module_initializer_calls
__dyld_image_count
__dyld_get_image_name
__dyld_get_image_header
__dyld_NSLookupSymbolInImage
__dyld_NSAddressOfSymbol
libobjc
__objcInit
The kernel support for the dynamic linker is not present to run this
program.
YES_BUTTON
Alerts
NO_BUTTON
MAILBOX_DISPLAY_STRING_FORMAT
%@ in %@
MAILBOX_ACCOUNT_DISABLED_MESSAGE_FORMAT
The mailbox "%@" is not available because its account is disabled.
Do you want to choose a different mailbox?
ACCOUNT_DOESNT_EXIST_MESSAGE_FORMAT
The mailbox at path %@ is not available because it has no account.
Do you want to choose a different mailbox?
MAILBOX_DOESNT_EXIST_TITLE
Mailbox Does Not Exist
CHOOSE_MAILBOX_BUTTON
Choose Mailbox
CANCEL_BUTTON
Cancel
SelectMailboxPanel
LARGE_MESSAGE_TITLE
Confirm Message Download
DOWNLOAD_BUTTON
Download
SKIP_BUTTON
Skip
DELETE_BUTTON
Delete
com.apple.iCal
MFUserAgent
MailApp
/System/Library/Frameworks/Message.framework/PrivateHeaders/NSRangeUtils

...
--
Jacques

1 2 3 4 5