Patcheur ou modificateur d'octet

Soyez le premier à donner votre avis sur cette source.

Vue 7 641 fois - Téléchargée 627 fois

Description

Bonjour

Un modificateur d'octet comme celui la il y en à pas beaucoup, il ne peut servir de patcheur a proprement parler mais je pence que l'on pourrais facilement l'intégré dans un éditeur hexadécimal ou autre type de programme de même similitude car le principe et de faire tout de l'interface

Voila un grand merci à dbnnet qui ma fortement aider pour finir.

Ps je démarre dans la programmation ainsi que dans Delphi donc TOUT LES COMMENTAIRE SONT LES BIEN VENU si sa m'explique les erreurs etc. Si c pour me dire (sa sert a rien) ce type de réponse bête et stupide pas la peine de vous donner du mal merci

Source / Exemple :


apres plusieur essayer voici une modification complete du code source .
j'ais laisser les 2 pour que l'on puisse me dire se que vous en pencer .

code modifier:
==========

unit Code;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ShellApi, ExtCtrls, math, strutils, Menus;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    OpenDialog1: TOpenDialog;
    Button1: TButton;
    Button2: TButton;
    Edit3: TEdit;
    Label1: TLabel;
    Edit4: TEdit;
    Label2: TLabel;
    Label4: TLabel;
    Edit2: TEdit;
    Edit6: TEdit;
    Bevel1: TBevel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);

  private
    { Private declarations }

  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function strtohex (chaine : string)  : string;
    var
    longueur : integer;
    pos : integer ;
    digit : string;
     a : integer ;
     b : longint ;
     i : integer ;
    begin
      longueur := length (chaine);
      pos := 0 ;
      b := 0;
      for i:=1 to longueur do
          begin
            digit := midstr (chaine,longueur - pos, 1);

            if digit='0' then a := 0;
            if digit='1' then a := 1;
            if digit='2' then a := 2;
            if digit='3' then a := 3;
            if digit='4' then a := 4;
            if digit='5' then a := 5;
            if digit='6' then a := 6;
            if digit='7' then a := 7;
            if digit='8' then a := 8;
            if digit='9' then a := 9;
            if digit='A' then a := 10;
            if digit='B' then a := 11;
            if digit='C' then a := 12;
            if digit='D' then a := 13;
            if digit='E' then a := 14;
            if digit='F' then a := 15;
            b:= b + a * round (power (16 , pos));
            pos := pos + 1;
          end;
        Result := inttostr(b);
    end;

function strtochar (chaine : string; pos :integer)  : char;
    var
    longueur : integer;
    digit : string;
     a : integer ;
     b : longint ;
     i : integer ;
     j : integer ;
     p : integer ;
     d : integer ;

    begin
      b := 0;
      d := 1;
      p := 0 ;
      for i:=1 to 2 do
          begin
            digit := midstr (chaine,pos + d ,1);

            if digit='0' then a := 0;
            if digit='1' then a := 1;
            if digit='2' then a := 2;
            if digit='3' then a := 3;
            if digit='4' then a := 4;
            if digit='5' then a := 5;
            if digit='6' then a := 6;
            if digit='7' then a := 7;
            if digit='8' then a := 8;
            if digit='9' then a := 9;
            if digit='A' then a := 10;
            if digit='B' then a := 11;
            if digit='C' then a := 12;
            if digit='D' then a := 13;
            if digit='E' then a := 14;
            if digit='F' then a := 15;
            b:= b + a * round (power (16 , p));
            pos := pos + 1;
            d:=-1;
            p:= 1;
          end;
       Result :=  char (b);
    end;

procedure TForm1.Button1Click(Sender: TObject);
var
fichier :file;
begin
  if opendialog1.Execute = false then exit;
  edit1.Text := opendialog1.FileName;
  AssignFile (fichier,opendialog1.FileName);
  Reset(fichier,1);
  edit2.Text := inttostr(Filesize (fichier));

end;

procedure TForm1.Button2Click(Sender: TObject);
Var
  E4    : File;
  E3    : char;
  I     : LongInt;
  Files : LongInt;
  longueur : integer;
  octet : string;
  pos : integer;

begin
   Files := strtoint(edit2.text);
  AssignFile(E4, OpenDialog1.filename);
  Reset(E4,1);
  If FileSize(E4)<>Files then
     begin
     MessageDlg('Taille ou format du fichier incorrect',mtError,[mbOK],0);
     halt(1)
     end;

  edit6.Text := strtohex (edit4.Text);
  Seek(E4,strtoint(edit6.Text));
  longueur := length (edit3.text);
  if longueur / 2 <> round ( longueur / 2 )then
      begin
      longueur := longueur + 1;
      edit3.TEXT := '0' + edit3.text;
      end;
      pos := 1 ;

      for I:=1 to round ( longueur / 2 ) do
      begin
        octet:=midstr(edit3.Text,pos,2);
        E3 := strtochar (edit3.Text,pos );
        Blockwrite(E4,E3,1);
        pos:=pos+2;
      end;

  MessageDlg('Fichier patcher avec succéer',mtCustom,[mbOK],0);
end;

end.

======================================================================================================================================================================================================

ancien code :
=========

unit Code;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ShellApi, ExtCtrls, math, strutils, Menus, WinSkinData;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    OpenDialog1: TOpenDialog;
    Button1: TButton;
    Button2: TButton;
    Edit3: TEdit;
    Label1: TLabel;
    Edit4: TEdit;
    Label2: TLabel;
    Label4: TLabel;
    Edit2: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Label3: TLabel;
    Label5: TLabel;
    MainMenu1: TMainMenu;
    Quitter1: TMenuItem;
    About1: TMenuItem;
    Bevel1: TBevel;
    Bevel2: TBevel;
    SkinData1: TSkinData;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Quitter1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure About1Click(Sender: TObject);

private
    { Private declarations }
public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

uses about;

{$R *.dfm}

function strtohex (chaine : string)  : string;
var
    longueur : integer;
    pos : integer ;
    digit : string;
    a : integer ;
    b : longint ;
    i : integer ;

begin
      longueur := length (chaine);
      pos := 0 ;
      b := 0;
      for i:=1 to longueur do
          begin
            digit := midstr (chaine,longueur - pos, 1);

            if digit='0' then a := 0;
            if digit='1' then a := 1;
            if digit='2' then a := 2;
            if digit='3' then a := 3;
            if digit='4' then a := 4;
            if digit='5' then a := 5;
            if digit='6' then a := 6;
            if digit='7' then a := 7;
            if digit='8' then a := 8;
            if digit='9' then a := 9;
            if digit='A' then a := 10;
            if digit='B' then a := 11;
            if digit='C' then a := 12;
            if digit='D' then a := 13;
            if digit='E' then a := 14;
            if digit='F' then a := 15;
            b:= b + a * round (power (16 , pos));
            pos := pos + 1;
          end;
        Result := inttostr(b);
    end;

procedure TForm1.Button1Click(Sender: TObject);
var
fichier :file;
begin
  if opendialog1.Execute = false then exit;
  edit1.Text := opendialog1.FileName;
  AssignFile (fichier,opendialog1.FileName);
  Reset(fichier,1);
  edit2.Text := inttostr(Filesize (fichier));

end;

procedure TForm1.Button2Click(Sender: TObject);
Const
    FileN         : String  = 'Prog.exe';
    BytesToChange : Integer = 2;

Var
  E4    : File;
  E3    : Char;
  I     : LongInt;
  Files : LongInt;
begin
   Files := strtoint(edit2.text);
  AssignFile(E4, OpenDialog1.filename);
  Reset(E4,1);
  If FileSize(E4)<>Files then
     begin
     MessageDlg('Taille ou format du fichier incorrect',mtError,[mbOK],0);
     halt(1)
end
     else
     begin
end;
     edit6.Text := strtohex (edit4.Text);
     Seek(E4,strtoint(edit6.Text));
     edit6.Text := strtohex (edit3.Text );
     E3:=char(strtoint(edit6.Text));
     Blockwrite(E4,E3,1);

  MessageDlg('Fichier patcher avec succéer',mtCustom,[mbOK],0);
end;

procedure TForm1.Quitter1Click(Sender: TObject);
begin
Application.Terminate;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Form2:=TForm2.Create(Form1);
end;

procedure TForm1.About1Click(Sender: TObject);
begin
Form2.show;
end;

end.

Conclusion :


derniere expliquation

dans octet à modifier il faut mettre les valeurs que vous voulez

exemple si vous voulez modifier un 745521 en 840021 il faut mettre 840021 et non 745521 je souligne cette option pour les tres debutants.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
26
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
18 juin 2008

Bon voila je me suis excusé auprès de MAURICO pour avoir mal parler et surtout pour avoir pris c commentaire au premier degré

Voila sa réponse

Ok, y pas de problème ...
On est comme une grande famille sur ce site.
Quand qu’un dit: "Tu m’as fait rire..." c’est pour ce marrer et non pas pour se foutre de la gueule de personne. Vu que je ne te connais pas, je n’aurais pas dû écrire cela, mais c’était juste un moyen de sympathiser si tu vois ce que je veux dire ...
Aller, oublions tout cela, mais j’aurais préféré que tu laisses un commentaire sur ta source pour que tout le monde voit que ça s’est bien terminé.
A+ et bonn' prog' comme on dit sur ce site :)

Histoire classer
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
Désolé que tu le prennes comme ça pucenet21!
D' ailleurs, tu peux chercher, mais je n' ai jamais dis que ta source n' etait pas instructive...
Pour le petit 2 et 3: je voulais dire que, même si tu donnes l' adresse, pourquoi je change à cette position? Un editeur hexadecimal te montre au moins la valeur que tu choisis de changer. Alors que là, bem tu changes à l' aveuglette si tu vois ce que je veux dire.
Et enfin, si! je fais bocou de fote d' or tôt gras ffee ....
Ce n' etait pas pour que tu le prennes serieusement! Et donc, je te demande pardon. Mais vu que tu prends tout au 1er degrè, c' est regrettable. Tu t'es surtout interessé dans mon commentaire à ce qui t' arrange et tu ne réponds pas à ma question.

Mais en fait, c' est comme tu le dis si bien: "il en fallait un est c sur toi que c tombé mais ça ne m'étonne pas
". D' ailleurs, je ne te permets pas de me traiter de stupide, et si ça t' etonne pas c' est parce que tu me connais? non? alors calme toi et médite aussi ...
Messages postés
26
Date d'inscription
lundi 21 février 2005
Statut
Membre
Dernière intervention
18 juin 2008

Pour MAURICIO

Voila encore un bon exemple de stupidité avancé excuse moi mais il en fallait un est c sur toi que c tombé mais ça ne m'étonne pas

Alors pour ta première question : ça apporte que pour des débutants le code reste assez logique et basique et donc très facile à comprendre pour des débutants.

Petit 2 : je sais pas comment tu interprètes la lecture des codes mais moi qui suis débutant je m'aperçoit que l'on peut dans le code mis à jour donc le premier qui apparaît que l'on peut modifier une chaîne complète ou plusieurs instructions si tu préfères le terme. De plus on peut choisir l'adresse donc on modifie pas n'importe où comme tu à l'air de le prétendre.

Petit 3: le code ci-dessus comporte des fonctions créées de toute pièce et donc pour un débutant ça reste intéressant pour étudier de plus je ne me sert pas de tableau comme beaucoup de personne font pour monter ce genre de prog.

Et pour finir si tu n'as jamais fait de faute de frappe je te tire mon chapeau mais pour moi voila encore un joli exemple de programmeur qui à la tête comme un choux fleur et perso c’est pas avec des commentaires comme les tiens que l’on fera avancer les choses.

Je t'ais peut-être fait rire mais au moins moi je ne me fou pas de la gueule des gens quand ils font des erreurs

À méditer....
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
Bizarre comme code ...
Qu' est-ce que ça apporte de mieux que l' editeur hexadecimal déposé par je sais plus qui et je sais plus quand mais ça fait pas longtemps?
Parce que là, on va changer un octet mais lequel? quelle est la finalité?
En tout cas, tu m' as bien fait rire avec:
'Fichier patcher avec succéer' -> Fichier patché avec succès !
Messages postés
374
Date d'inscription
vendredi 20 octobre 2000
Statut
Modérateur
Dernière intervention
15 janvier 2021

Gordo Cabron, dans ma version courte ca donne :

function strtohex (chaine : string) : string;
var
Code : integer;
Valeur : Int64;
begin
Val('$'+chaine,Valeur,Code);
if code=0 then
Result:=IntTostr(Valeur);
else
Result:='Error';
end;

Le code est plus propre, pas besoin de try....

Bon Coding...

ManChesTer.
Afficher les 11 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.