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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
clark17
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 23 sept. 2011 02:12
Status : Hors ligne

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

#1

Message 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?
Modifié en dernier par clark17 le ven. 15 févr. 2013 13:33, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#2

Message 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)
 
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
clark17
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 23 sept. 2011 02:12
Status : Hors ligne

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

#3

Message 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?
Modifié en dernier par clark17 le lun. 04 févr. 2013 21:43, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#4

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
clark17
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 23 sept. 2011 02:12
Status : Hors ligne

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

#5

Message 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.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#6

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
clark17
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 23 sept. 2011 02:12
Status : Hors ligne

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

#7

Message 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!
clark17
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 23 sept. 2011 02:12
Status : Hors ligne

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

#8

Message par clark17 »

Sujet résolu.
Répondre