Modification chaine dans exe

Signaler
Messages postés
4
Date d'inscription
dimanche 17 juillet 2005
Statut
Membre
Dernière intervention
28 août 2005
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Salut à tous !





Voila mon problème. J'ai une appli qui affiche un ShowMessage : "Salut
toi". A partir d'une autre appli j'aimerais modifier ce message pour
qu'il devienne genre "Salut moi".





Donc j'ai ouvert mon premier exe dans un editeur hexa pour récuperer l'offset du message : 0x000016C4





Voici ensuite ma fonction :





//////////////////////////////////////////////////////////////////////


void Modifier()


{


DWORD c, val;


char *Path = Chemin.c_str();


char *Txt = (Form1->Edit1->Text).c_str();


int Taille = StrLen(Txt);








FILE *MonExe;


MonExe = fopen(Path, "r+");


fseek(MonExe,0x000016C4,0);





for (int i=1;i!=Taille;i++)


{


c=Txt[i];


fwrite((const void*)c,sizeof(c),NULL,MonExe);


}





fclose(MonExe);


}


//////////////////////////////////////////////////////////////////////





J'ai des problèmes au niveau de l'écriture dans l'exe, ca ne fonctionne
pas. Vous pouvez me dire ce qui va pas ? (tout commentaire accepté )

7 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Une question: sizeof(c) fait combien en taille ???
Regarde si no prob avec cette taille dans le fwrite.

for (int i=1;i!=Taille;i++)
C'est dangereux une boucle avec de telles conditions, ça pourrait tourner longtemps, imagine que Taille vaille 0.

ciao...
BruNews, MVP VC++
Messages postés
257
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
29 septembre 2010
3
Fais gaf un exe qui sais faitécrire desus de fonctionne pas toujours (CRC)
Messages postés
4
Date d'inscription
dimanche 17 juillet 2005
Statut
Membre
Dernière intervention
28 août 2005

En mettant par exemple :



/////////////////////////////////////////////////////////

void Modifier()

{

DWORD c, val;

char *Path = Chemin.c_str();

char *Txt = (Form1->Edit1->Text).c_str();



FILE *MonExe;

MonExe = fopen(Path, "r+");

fseek(MonExe,0x000016C4,0);



for (int i=1;i!=20;i++)

{

if (c>sizeof(Txt)) {c=0;}

else {c=Txt[i];}

fwrite((const void*)c,sizeof(c),NULL,MonExe);

}



fclose(MonExe);

}

/////////////////////////////////////////////////////////

Pour ecrire par exemple sur 20 octets, effectivement sizeof(c) vaut "0" 2 fois sur 3... :/



On m'a parlé de valeur ordinale pour c, vous pouvez m'éclaircir la dessus ?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
c est déclaré en DWORD qui est 'unsigned int' donc sizeof(c) vaut 4 octets sur système 32 bits.

ciao...
BruNews, MVP VC++
Messages postés
4
Date d'inscription
dimanche 17 juillet 2005
Statut
Membre
Dernière intervention
28 août 2005

ok je vais utiliser BYTE alors, sinon t'aurais pas un exemple concret ?
Messages postés
4
Date d'inscription
dimanche 17 juillet 2005
Statut
Membre
Dernière intervention
28 août 2005

J'ai trouvé cette source en delphi qui fonctionne :



////////////////////////

Procedure KWrite(kfil:string;koff:LongInt;kdat:string;klen:LongInt);



var



f : File of Byte;



i : LongInt;



c : Byte;



begin



AssignFile(f,kfil);



Reset(f);



Seek(f,koff);



for i:=1 to klen do begin



if i>length(kdat)



then c:=0



else c:=ord(kdat[i]);



Write(f,c);



end;



CloseFile(f);



end;


///////////////////////////////////

kfill est le nom de l'exe, koff est l'offset, kdat est le nouveau message et klen est le nombre d'octets a modifier



ca a l'air tout simple en delphi, pourqui ca fonctionne pas en C++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
REMPLACE OCTET DE FICHIER (WIN32)
http://www.cppfrance.com/code.aspx?id=18924

ciao...
BruNews, MVP VC++