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.

Documents pareils