Modification chaine dans exe

nohva Messages postés 4 Date d'inscription dimanche 17 juillet 2005 Statut Membre Dernière intervention 28 août 2005 - 28 août 2005 à 07:49
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 28 août 2005 à 20:36
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 août 2005 à 09:11
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++
0
vinc1008881 Messages postés 257 Date d'inscription dimanche 22 août 2004 Statut Membre Dernière intervention 29 septembre 2010 3
28 août 2005 à 11:04
Fais gaf un exe qui sais faitécrire desus de fonctionne pas toujours (CRC)
0
nohva Messages postés 4 Date d'inscription dimanche 17 juillet 2005 Statut Membre Dernière intervention 28 août 2005
28 août 2005 à 17:14
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 ?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 août 2005 à 17:29
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++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nohva Messages postés 4 Date d'inscription dimanche 17 juillet 2005 Statut Membre Dernière intervention 28 août 2005
28 août 2005 à 20:09
ok je vais utiliser BYTE alors, sinon t'aurais pas un exemple concret ?
0
nohva Messages postés 4 Date d'inscription dimanche 17 juillet 2005 Statut Membre Dernière intervention 28 août 2005
28 août 2005 à 20:14
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++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 août 2005 à 20:36
REMPLACE OCTET DE FICHIER (WIN32)
http://www.cppfrance.com/code.aspx?id=18924

ciao...
BruNews, MVP VC++
0
Rejoignez-nous