1: 2: { Tutorial de création de patch en delphi 3
Transcription
1: 2: { Tutorial de création de patch en delphi 3
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: { Tutorial de création de patch en delphi --> Dans cet exemple nous allons patcher le célèbre programme CloneDVD --> dans sa version 2.9.2.2 Attention : --> Ce n'est pas un tutorial sur le cracking. Les moyens utilisés pour --> trouver les adresses hexadécimales a patchées ne seront pas détaillés Auteur : --> KARTONO Loic } unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Registry, XPMan; type TForm1 = class(TForm) Patch: TButton; RegisterName: TEdit; XPManifest1: TXPManifest; procedure PatchClick(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.dfm} // ***************************************************************************** // Code du bouton "Patch" procedure TForm1.PatchClick(Sender: TObject); : File; var F // Va cibler le fichier a patcher : CloneDVD2.exe Ch : Char; // Contiendra l'offset a patcher Path : String; // Répertoire courant de notre patch Reg : TRegistry; // Pour écrire dans le registre Windows Keyname : String; // Contient notre clé registre begin // On récupere le répertoire courant de notre patch que l'on stock dans Path Path := ExtractFilePath(Application.ExeName); // On vérifie si notre patch est dans le meme répertoire que CloneDVD2.exe // S'il n'existe pas, on affiche un message d'erreur if not FileExists(Path+'CloneDVD2.exe') then Application.MessageBox('Copiez le patch dans le répertoire de CloneDVD', 'CloneDVD2.exe', MB_OK+MB_ICONINFORMATION); // S'il existe... if FileExists(Path+'CloneDVD2.exe') then begin // On créer une copie de CloneDVD2.exe au cas ou le patch merderai CopyFile(PChar(Path+'CloneDVD2.exe'),PChar(Path+'CloneDVD2.exe.bak'),false); // On assigne le fichier a patcher a la variable F AssignFile(F,'CloneDVD2.exe'); // Les directives {$I-} et {$I+} permettent de gérer les erreurs {$I-} Reset(F,1); {$I+} // On test la taille de notre fichier pour être sur de patcher la bonne version if FileSize(F) <> 4967592 then Application.MessageBox('Mauvaise version', 'Erreur', MB_OK+MB_ICONWARNING) else begin // On se positionne à l'offset que l'on doit patcher 75: Seek(F,$211ACB); 76: // On récupere le caractere a modifier 77: Ch := Char ($75); 78: // Et on l'écrit 79: BlockWrite(F,Ch,1); 80: // On ferme notre fichier en mémoire 81: CloseFile(F); 82: end; 83: end; 84: 85: // Nous allons maintenant écrire notre nom d'enregistrement dans le Registre 86: // On créer une instance de notre registre 87: Reg := TRegistry.Create; 88: // On se positionne sur la bonne arborescence 89: Reg.RootKey := HKEY_LOCAL_MACHINE; 90: // On Précise Keyname 91: Keyname := 'SOFTWARE\Elaborate Bytes\CloneDVD2\CDKey'; 92: // Si Keyname n'existe pas, on la crée : mettre true dans les param 93: Reg.OpenKey(Keyname, True); 94: // Et on écrit les valeurs dans le registre 95: Reg.WriteString('Name',RegisterName.Text); 96: Reg.WriteString('Serial','1234-1234-1234-1234'); 97: Reg.WriteString('Company',''); 98: // On referme la clé 99: Reg.CloseKey; 100: // Et on ferme le registre 101: Reg.Free; 102: 103: // Et on affiche un petit message de réussite 104: Application.MessageBox('Patch réussi avec succès', 'Patch', MB_OK+MB_ICONINFORMATION); 105: end; 106: // ***************************************************************************** 107: 108: end.