Le prgramme que j'utilise lis le checksum sur l'offset 0x0000FED8
J'utilise un programme pour calculer ce CheckSum dont voici les derniers CheckSum Calculer par ce programme pour mieux comprendre le type de CheckSum genérer :
Ancien Checksum : BF 96 AF 63 79 B3 D4 52
Aprés Calcul : 85 CA 8F 67 41 44 3F B7
On remarquera que sauf les 2 BYTES ont été changés a partir de la gauche
Et les 2 BYTES de la droite : D0 80 et 66 le réste n'a pas changé !
J'arrive pas a comprendre cet algorythm , j'utilise plusieurs sources d'algo CRC
CRC32 , CRC 8, CRC 64 mais je souhaite comprendre l'algo utilisé pour commencer a créer un projet pour calculer un checksum de mon fichier binaire
En fait, si je comprends bien, tu t'attendais a un changement des octets de droite, au lieu de ceux de gauche.
Ce probleme n'a rien a voir avec le checksum, il a à voir avec un codage intra-processeur, appelé little endian ou big endian.
la "logique" veut qu'on raisonne en big endian, c'est a dire que quand tu fais un int (4 octets) et que tu le mets a 1, son codage est :
00 00 00 01
Et bien cela n'est pas valable sur les processeurs intel : pour des raisons d'optimisation de calcul, les octets sont inversés. Ainsi : un int de 1 est codé ainsi :
01 00 00 00
(en fait tu lis les octets de droite a gauche)
le nombre 0x2CA sera : CA 02 00 00
le nombre 0x6ABC7B40 sera : 40 7B BC 6A
Cela expliquerait peut etre ton probleme de checksum.
Dans ton exemple, tu lis :
BF 96 AF 63
--> le nombre est donc 63AF96BF
J'espere avoir pu te débloquer si ton probleme venait bien de la
Merci pour ta réponse et l'intéret que tu portes a mon probléme , c'est trés sympa , ce que tu as éxpliqué c'est exactement ce que j'ai analyser quand le checksum est generér , actuellement je souhaite créer un programme qui lira a a partir de l'offSet 0x0000FED0 c'est la ou se trouve le checksum du fichier binaire , donc le programme lis le checksum sur cette offset ,ensuite si y'as modification le programme calculera et trouvera le bon checksum au fichier binaire .Avant de commencer a faire quoique ce soit je souhaite savoir si c'est un checksum 32 ou 64 avant de commencer mon projet .
j'ai regardé un peu ton screenshot, disons que ça ne creve pas les yeux. Il est clair que la derniere ligne de données n'est pas un float, ni un double (j'ai vérifié)
Non , analyser un fichier binaire compilé ,le programme que je suhaite créer devra lire le Checksum a partir de l'offset 0x0000FED0 !
Si je modifie le fichier binaire il faut que le programme que je créer arrive a corrigé le checksum , mais d'abord il faut comprendre le type de checksum genérer
Fvirtman .
Le checksum de mes fichiers binaires sont a la fin du fichier a l'offset 0x0000FED0 , lr programme que doit faire dois LIRE a aprtir de cet Offset et afficher a l'écran le checksum actuel exemple !
Checksum du fichier binaire avant modification.
D2 E0 3F 11 03 11 81 05
Checksum calculé par le programme que je souhaite créer .
AD 95 30 1E 09 14 F4 75
Il faut que le programme commence a lire le checksum de cet offset et corrige le checksum si y'a eu modification .
oui, je comprends bien le soucis
Au boulot, je fais beaucoup de lecture/ecriture de fichiers binaires,
et j'avais modifié chez moi récemment un fichier de sauvegarde de "secret of mana" sur l'ému Snes, il y avait un checksum a corriger [...]
Pour trouver les regles du checksum, j'avais sauvé ma partie une fois, puis ensuite, j'avais fait une modif mineure dans le jeu, puis resauvé, puis encore une modif mineure et resauvé, etc :
J'avais ainsi des fichiers très voisins, et je voyais comment le checksum bougeait, j'avais fini par trouver la regle, qui était juste un checksum simple, mais avec une constante de départ.
Dans ton cas, tu modifies le fichier binaire d'un programme comme tu dis (c'est vague : c'est un EXE ? (dans ce cas, il y a de la doc sur le net) ou alors un fichier de données de format propriétaire ?) : essaie de voir si, d'une maniere ou d'une autre, tu peux faire des versions tres voisines, ce qui t'aiderait, pour voir comment le checksum réagit.
Sinon, si tu ne peux pas, ce sera en effet plus complexe.
Bon courage.
Au fait c'est assez simple que tu le penses , je créer une fenétre le fichier binaire sera chargé mais il faut que le programme commence a lire a partir de l'offset 0x0000FFED0 ,le CRC comme t'as pu le constater c'est un 9 Bytes
avec 18 (Charachters) en anglais 0x123456789101112131415161718
9Bytes c'est pas du CRC32 fvirtMan
On va faire simple on va créer une fenétre et se chargera de lire a partir de l'offset 0x0000FFED0 .
Ensuite elle affihera a l'écran le CRC actuel .
Je sais aps si tu me suit ?
Bonsoir FVirtualMan ,
On va faire simple on va créer une fenétre et se chargera de lire a partir de l'offset 0x0000FFED0 .
Ensuite elle affihera a l'écran le CRC actuel .
Pour faire ça, c'est tres simple : un coup de fopen en mode "rb", un fseek et un fread, et un printf avec %x
si tu preferes le C++ : un ifstream en ios::binary, un seek, un read et un cout ....
C'est au niveau codage en C/C++ que ça te pose probleme ? (car ce n'est pas probleme ça !)
J'utilise un programme qui génere un checksum pour mon fichier binaire et le calcul est bon , mais le programme que j'ai créer ne génere pas le méme checksum
avec le programme que j'essaye de créer j'ai ce checksum aprés calcul
62 06 A2 EB FC CB 39 A1 (pas bon )
avec le logiciel officiel de caclul de checksum j'ai ce checksum
03 18 00 30 31 94 0D 1E
Le probléme est au niveau du HASH aprés le calcul du CRC
C'est le méme type de CRC mais le HASH genérer est différent , il faut chnager le une ou deux lignes dans mon code pour que le programme officiel et le miens genére le méme résultat de checksum .
Désolé de ne pas avoir répondu, les idées me manquent pour ton soucis, je voulais répondre, mais j'ai laissé passer en me disant que j'aurais une idée plus tard, idée que je n'ai pas eu...
J'attendais de voir si quelqu'un avait d'autres idées de façon a relancer le topic.
Désolé.
Type de CheckSum CRC 32, CRC8 , CRC 64 dans un fichier binaire
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html