Page 1 sur 1

[R] Utiliser Autoit pour modifier un binaire en Hexa?

Posté : lun. 04 févr. 2013 18:28
par clark17
Bonjour à tous,

Je me demandais si avec autoit il est possible de modifier un fichier binaire en l'éditant en hexadécimal?
Par exemple avec un fichier comme celui-ci que j'ouvre avec un éditeur hexa:
Image

Lui dire de modifier l'offsset 886 par une autre valeur hexa?

Re: [..] Utiliser Autoit pour modifier un binaire en Hexa?

Posté : lun. 04 févr. 2013 19:29
par mikell
Oui c'est possible, mais avec juste une image du code ça va être dur pour tester :mrgreen:
En gros, tu lis dans une array, tu modifies l'array, et tu réécris
Tu devrais aussi (je crois...) pouvoir le faire à la volée en utilisant FileSetPos()
Par exemple (pour lecture et réécriture en passant par une array) :

Code : Tout sélectionner

#Include <Array.au3>
$file_in = "77162099.png" 
$file_out = "test.png" 

$file = FileOpen($file_in, 16)
$caract = StringRegExp(FileRead($file), '[[:xdigit:]]{2}', 3)
FileClose($file)

_arraydisplay($caract, "fichier")

$txt = ""
For $i = 0 to UBound($caract)-1
  $txt &= $caract[$i]
Next
$file2 = FileOpen($file_out, 17)
FileWrite($file2, "0x" & $txt)
FileClose($file2)
 

Re: [..] Utiliser Autoit pour modifier un binaire en Hexa?

Posté : lun. 04 févr. 2013 20:48
par clark17
Mon post de départ n'est effectivement pas très clair!
En fait c'est pour un jeux de gestion (CapitalismLab), dans un des fichiers du jeux se trouvent coder en dur le nom des entreprises concurrente qu'on va affronter. Mon but c'est de pouvoir modifier ces noms pour mettre les noms de véritables entreprises pour plus de réalisme.

Voici le lien pour le fichier en question.

La finalité serait de créer un programme en ligne de commande où avec un fichier csv en entrée il me "patch" le fichier binaire avec les nouveaux noms.

Visiblement c'est jouable d'après ce que tu me dis?

Re: [..] Utiliser Autoit pour modifier un binaire en Hexa?

Posté : lun. 04 févr. 2013 22:01
par mikell
Ton post était très clair, c'est juste que j'ai pris comme exemple le png que tu as posté :mrgreen:
Voilà comment on peut lire ton fichier en binaire et s'y repérer, pour écrire ya qu'à faire l'inverse
► Afficher le texte
Il n'y a que les 65531 premiers caractères affichés mais c'est une limitation de la listview pas de l'array

Re: [..] Utiliser Autoit pour modifier un binaire en Hexa?

Posté : lun. 04 févr. 2013 22:12
par clark17
Ton code marche au poil :lol: mais j'ai du mal à voir une vue d'ensemble. Il faut que je charge entièrement le fichier dans un tableaux, je modifie des valeurs puis je réécris le fichier c'est ça? Parce que charger entièrement le fichier est plutôt long en fait. je voyais plus quelque chose comme un pointeur avec une adresse puis modification des valeurs.

Re: [..] Utiliser Autoit pour modifier un binaire en Hexa?

Posté : lun. 04 févr. 2013 23:27
par mikell
Roo mais non, ce qui est long c'est l'affichage, mais tu n'en as pas besoin ça sert juste pour visualiser le truc
La construction de l'array est très rapide :

Code : Tout sélectionner

#Include <Array.au3>
$file_in = "1STD.SET" 
$file = FileOpen($file_in, 16)
$caract = StringRegExp(FileRead($file), '[[:xdigit:]]{2}', 3)
FileClose($file)
$txt = "offset 67422 à 67435 :" &@crlf&@crlf
For $i = 67422 to 67435
  $txt &= Chr("0x" & $caract[$i])
Next
msgbox(0,"", $txt)
 
Ton éditeur hexa te donne l'offset du caractère à changer, et offset = index dans l'array :wink:

Edit
On modifie le nom à l'offset 67422
► Afficher le texte

Re: [..] Utiliser Autoit pour modifier un binaire en Hexa?

Posté : mar. 12 févr. 2013 17:10
par clark17
Bon en ce moment pas trop le temps de réaliser mon mini projet, mais j'ai avancé un peu quand même.
J'ai fait la première partie qui me permet d'exporter au format csv le FULLNAME, SHORTNAME et COLOR_ID.
Voici le code:

Code : Tout sélectionner

#Include <Array.au3>
#include<File.au3>
;Ouverture du fichier et mise dans un tableau
$fichier_a_ouvrir = "1STD.SET"
$fichier = FileOpen($fichier_a_ouvrir, 16)
$tableau_fichier = StringRegExp(FileRead($fichier), '[[:xdigit:]]{2}', 3)
FileClose($fichier)

;Declaration des varaibles
$debut_nom = 17712
$longueur_fullname = 38
$longueur_shortname = 14
Dim $csv[36] = ["FULL NAME (max 38 characters);SHORT NAME (max 14 characters);COLOR ID (1 character)"]

;Assignation de $i au début des noms d'entreprises
$i = $debut_nom

For $y = 1 to 35
    $ligne = ""
    ;Récupération du FULLNAME
    For $i = $i to $i + $longueur_fullname
        $ligne &= Chr("0x" & $tableau_fichier[$i])
    Next
    $i = $i + 1
    $ligne &= ";"
    ;Récupération du SHORTNAME
    For $i = $i to $i + $longueur_shortname
        $ligne &= Chr("0x" & $tableau_fichier[$i])
    Next
    $i = $i + 1
    $ligne &= ";"
    ;Récupération du Color_ID
    $ligne &= Chr("0x" & $tableau_fichier[$i])
    $i = $i + 11

    ;Assignation du mot dans un tableau pour export en csv
    $csv[$y] = $ligne
Next

;Affichage du tableau
_FileWriteFromArray("test.csv", $csv)
_arraydisplay($csv, "fichier")
 
Mon seul problème c'est avec les espaces en trop. Je ne vois pas trop comment les supprimer, si quelqu'un à une piste je suis preneur!

Re: [..] Utiliser Autoit pour modifier un binaire en Hexa?

Posté : ven. 15 févr. 2013 13:32
par clark17
Sujet résolu.