Recherche Binaire ou Comment rechercher une image dans un *.exe

Soyez le premier à donner votre avis sur cette source.

Vue 3 546 fois - Téléchargée 1 118 fois

Description

Beaucoup d'entres-vous sont persuadés qu'on ne peut que rechercher du texte
avec les fonctions de recherches classiques (Pos & PosEx ...)

Eh ben .... c'est totalement faux !!!
en effet il suffit de charger, correctement, les données(Binaires) à rechercher
dans une chaine de caractères et faire de même avec le fichier(binaire) servant
à la recherche.

Pour preuve, ci-joint le code qui recherche une Image dans une Application ou
un Fichier Dfm en Binaire le tout utilisant au choix :
PosEx (version ASM)
ou
BMHPascalNatifEx (une version du Boyer-Moore en pure pascal)

en ce qui concerne la, soit disant, limite de recherche de la table de saut
du Boyer-Moore à 256 caractères ...
Ici l'image recherchée fait 144 507 Octets
Donc bien au-dessus des 256 caractères

Le code compile aussi avec les versions Unicode de Delphi
Bien sur il y a des warnings (conversion implicite de AnsiString en string)
c'est normal et la correction est simple si on devait en avoir besoin ...

Mais le but ici était juste de prouver que l'on peut rechercher du binaire
avec des fonctions, prévues de base, pour les chaines de caractères ;)

Pour bien comprendre le code ...
Il faut faire abstraction du fait que string = chaine de caractères et basta !
Il faut voir le type string comme un conteneur multi-formats
et en respectant une règle simple :
Initialiser la taille de la string avant d'y copier des données

en respectant cela on peut y stocker tout et n'importe quoi

Mais quel est l'intérêt ? me direz-vous !
Il faut allouer l'espace nescessaire par un SetLength
tout comme les Pointeurs avec un GetMem mais contrairement à ces derniers
pas besoin de libérer les string alloués ... Delphi s'en charge
(autant de risque de fuite de mémoire en moins)

On peut utiliser toutes les fonctions prévues pour les string (recherche, copie ... )
Bien sur il est inutile d'essayer de les afficher dans un TMemo ou autre ^^

La flexibilitée de cette méthode est un atout non négligeable
surtout pour stocker et relire des données de formats différents
le tout dans un seul et même fichier

Et bien sur, les données sont toujours utilisables. Il y a 2 exemples dans le Zip
Une image chargé dans une string pour la démo de recherche
- chargement des données dans une string
- j'ai changé le mode d'affectation (MoveMemory) l'ancien code est en commentaire
- on effectue une recherche avec des fonctions standards pour string
- si trouvé on recopie les données trouvées avec la fonction copie
- et on affiche l'image trouvée à l'écran avec StrToImage (preuve du fonctionnement) ^^
- StrToImage ne sert qu'à afficher une image Jpeg contenue dans une string
Et pour varier un peu 2 sons au format wav
- chargement des données dans une string
- et utilisation direct des deux string pour jouer les sons avec PlaySound



@+ Cirec

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Bonjour,

Vu la prouesse : chapeau
J'ai bien noté "Mais le but ici était juste de prouver que l'on peut rechercher du binaire avec des fonctions, prévues de base, pour les chaines de caractères".
Par contre pour la recherche d'une image dans une collection de fichiers-image le problème risque d'être plus coton si la collection contient l'image-recherchée mais dont on a pu modifier la couleur d'au moins un Pixel.
Mais bon c'est un autre sujet.

Cordialement, et à +.
Cirec
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 septembre 2019
34 > ggolggol -
par contre c'est pas utile de changer de pseudo(3) ^^
ça ne fait qu'embrouiller les discussions. enfin c'est mon avis.


j'avais reconnu ta façon d'écrire avant de vérifier ;) ^^

comment je dois t'appeler moi ???
bref c'est toi qui vois

Cordialement,
@+ Cirec
Cirec
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 septembre 2019
34 -
Bonjour,

merci pour l'appréciation ... ça fait toujours plaisir ;)

Alors effectivement si l'image recherchée a été modifiée, ne serait-ce que d'un pixel, la recherche échouera !!!
Mais ceci est tout aussi valable pour un texte ... si un seul caractère a été modifié la recherche échouera également.

Dans ce cas il faudrait écrire une fonction de recherche adaptée au problème, mais comme tu le dis ... c'est un autre sujet ... et beaucoup plus complexe ^^

rien que si on prend une image et on l'enregistre en JPeg dans deux fichiers avec 2 niveaux de compressions différents ... l'image contenue dans ces deux fichiers est la même pourtant une recherche te dira que non.
Alors que les pixels sont identiques, on en a changé aucun !!!
Et c'est que le haut de l'iceberg ^^

Cordialement,
@+ Cirec
Caribensila
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13 > Cirec
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 septembre 2019
-
Messieurs, bonsoir,

Ca fait plaisir de voir que Cirec est toujours au top (et que Delphi tient la route face à l'ASM !) ^^

Cirec a dit :
«Dans ce cas il faudrait écrire une fonction de recherche adaptée au problème, mais comme tu le dis ... c'est un autre sujet ... et beaucoup plus complexe »

Oui, mais un autre sujet que notre ami FOREMAN a commencé à traiter ici :

http://codes-sources.commentcamarche.net/source/39168-comparaison-intelligente-et-moteur-de-recherche


Houlala! Y'a du taf, mais que c'est intéressant tout ça !
Cirec
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 septembre 2019
34 -
Hello,

moi aussi je suis très content et surpris à la fois, que tu sois également présent sur CS ... si tout le monde attend, tapis dans l'ombre, que l'un ou l'autre des anciens se manifeste ... on est pas prêt de redémarrer la machine ^^

Sinon t'as pas un peu mollit toi ? :p
C'est bien Foreman qui est l'auteur de source de comparaisons intelligentes ... Mais c'est pas la bonne pour ce sujet ... Le lien que tu nous donnes est spécifique à la recherche par mot plus ou moins approchant de l'original ... Mais nous souhaitons comparer des Images qui ont quelques pixels qui diffèrent ou une teinte/taille différente ... ce qui ne semble pas correspondre ici.

Donc je pense qu'il est préférable de se tourner vers cette autre source du Grand Foreman Recherche / suppression d'images en double (basée sur une comparaison "intelligente")

Mais merci de m'avoir rafraichi la mémoire :$
j'avais complètement oublié ces excellentes contributions ... honte à moi ^^

En tout cas j'espère que l'on se croisera un peu plus souvent maintenant qu'on a repris contact ;)

Amicalement,
@+ Cirec

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.