IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Problème sur fichier compilé en .exe


Sujet :

Delphi

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Problème sur fichier compilé en .exe
    Bonjour,

    J'ai un fichier en .exe créé sous delphi qui a planté. L'erreur vient du fait que l'adresse IP vers laquelle j'envoyais les données a changé.
    Or c'est mon prédécesseur sur ce poste qui a créé cet exécutable et il s'est barré sans me donner le code source.
    N'y connaissant strictement rien, j'aimerais savoir comment décompiler, modifier cette fichue adresse IP et recompiler le tout.
    J'ai vu sur d'autres post que l'on parlait d'un certain fichier "Dede".

    Pouvez vous m'aider?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    DeDe est un décompilateur ; utilité dans ton cas ?

    par contre, pê serait-t-il plus facile de mapper l'IP vers la nouvelle au niveau du routeur ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Euh... si tu le dis peut être... J'avoue que je n'y connais rien. Et les informaticiens de ma boîte ne maîtrisent pas delphi.

    Pour Dede, il décompile, mais est ce qu'il peut recompiler? J'ai de gros doutes quand je vois les sujets sur les différents forums

    Sinon, est-il possible de créer une autre application qui modifie l'adresse ip qui est dans le fichier en .exe?


    PS : en fait le programme pompe les données sur un serveur dont l'adresse IP a changé.

    Merci d'avance pour vos réponses

  4. #4
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    si tu veux remplacer l'ip dans l'exe, plusieurs cas sont possibles:
    - l'ip est mise en dure dans un composant: tu peux la remplacer dans le directement dans le dfm (ouvre l'exe avec XNResourceEditor par exemple, et recherche dans les RCDATA une resource qui contient l'ip)
    - l'ip est mise en constante dans les sources. Dans ce cas la, tu peux rechercher mais c'est pas infaillible. J'ai fait un petit exe qui te permet de la remplacer, a condition que l'ip soit codé avec 4 bytes successifs (ce qui parait etre le moyen le plus logique de coder une ip). voici le source, et je met le projet + exe en PJ.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
     
    unit FRemplacerIp;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ShellApi, Math, CheckLst;
     
    type
      TIP = record
        case integer of
          0 : (ip: array[0..3] of byte);
          1 : (byte1, byte2, byte3, byte4: byte)
      end;
     
      TForm2 = class(TForm)
        btnRechercher: TButton;
        OpenDialog1: TOpenDialog;
        Edit1: TEdit;
        clbPositions: TCheckListBox;
        btnRemplacer: TButton;
        procedure btnRechercherClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure btnRemplacerClick(Sender: TObject);
      private
        { Déclarations privées }
        procedure RemplacerLesIps;
        procedure SetEditIp(const AIp: TIP);
      public
        { Déclarations publiques }
      end;
     
     
    var
      Form2: TForm2;
     
    const
      //les constantes a rechercher
      SeekIp : TIP = (ip:(192,168,1,1));
      NewIp  : TIP = (ip:(1,2,3,4));
     
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm2.btnRechercherClick(Sender: TObject);
    const
      BUFFSIZE = 100;
    var
      fs: TFileStream;
      buff: array[0..BUFFSIZE-1] of byte;
      i, cnt: integer;
    begin
      //Principe: on lit le fichier, et on recherche si on trouve l'ip.
      // Quand on arrive a la fin du buffer lu, on recule la position dans le stream
      // pour traiter les bytes qui ne forment pas un ip complete
     
      clbPositions.Items.Clear;
     
      if not OpenDialog1.Execute then
        exit;
     
      clbPositions.Items.BeginUpdate;
     
      fs := TFileStream.Create(OpenDialog1.FileName, fmOpenRead or fmShareDenyWrite);
      fs.Position := 0;
      repeat
        cnt := fs.Read(buff, BUFFSIZE);
     
        //on compare jusqu'a ce qu'on ai plus assez de byte pour faire un TIP
        for i := 0 to cnt-sizeof(TIP) do
        begin
          if CompareMem(@buff[i], @SeekIp, sizeOf(TIP)) then
          begin //on a trouve l'ip
            clbPositions.Items.Add(IntToStr(fs.Position-cnt+i));
            clbPositions.Checked[clbPositions.Count-1] := true;
          end;
        end;
        //si on est pas a la fin, on recule la position pour traiter les byte lus qui ne tiennent pas dans un TIP
        if fs.Position < fs.Size-1 then
        begin
          fs.Position := fs.Position - sizeOf(TIP)+1;
        end;
      until cnt = 0;
      fs.Free;
     
      clbPositions.Items.EndUpdate;
     
      MessageDlg('Recherche terminée', mtInformation, [mbOK], 0);
    end;
     
    procedure TForm2.FormCreate(Sender: TObject);
    begin
      OpenDialog1.FileName := Application.ExeName;
      SetEditIp(SeekIp);
    end;
     
    procedure TForm2.RemplacerLesIps;
    var
      i: integer;
      p: int64;
      fs: TFileStream;
      newName: string;
    begin
      //Remplace les adresse cochees dans la listbox par la NewIp
      newName := ChangeFileExt(OpenDialog1.FileName, '.newip.exe');
      if CopyFile(PChar(OpenDialog1.FileName), PChar(newName), false) then
      begin
        fs := TFileStream.Create(newName, fmOpenReadWrite or fmShareExclusive);
        for i := 0 to clbPositions.Count-1 do
        begin
          if clbPositions.Checked[i] then
          begin
            p := StrToInt64(clbPositions.Items[i]);
            fs.Position := p;
            fs.Write(newIp, SizeOf(TIP));
          end;
        end;
        fs.Free;
        ShellExecute(0, 'open', PChar(newName), nil, nil, SW_SHOW);
      end
      else
        showmessage('erreur creation exe');
    end;
     
     
    procedure TForm2.btnRemplacerClick(Sender: TObject);
    begin
      RemplacerLesIps;
    end;
     
    procedure TForm2.SetEditIp(const AIp: TIP);
    begin
      Edit1.Text := Inttostr(AIp.ip[0]) +'.'+ Inttostr(AIp.ip[1]) +'.'+ Inttostr(AIp.ip[2]) +'.'+ Inttostr(AIp.ip[3]);
    end;
     
    end.
    Fichiers attachés Fichiers attachés

  5. #5
    Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Je ne dirai qu'une seule chose guillemouze : MERCI !!

    L'IP était en dure, donc j'ai pu faire la modif facilement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème sur fichier macro pour changer des éléments
    Par Dayo18 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/06/2015, 08h26
  2. Problème sur fichier AVI
    Par stefdevidau dans le forum OpenCV
    Réponses: 0
    Dernier message: 09/01/2014, 11h59
  3. [Compiler] Fonction mapleinit non utilisable sur fichier compilé
    Par Ocarlo dans le forum MATLAB
    Réponses: 1
    Dernier message: 25/05/2010, 10h13
  4. Problème sur fichier xsd
    Par soso78 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 31/03/2009, 09h32
  5. Réponses: 9
    Dernier message: 16/05/2006, 15h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo