Empêcher d'utiliser le logiciel DeDe pour décompiler les programmes Delphi
Voici un article pour éviter d'utiliser le logiciel DeDe pour décompiler les programmes Delphi ~
Celles entre "" sont mes annotations, et le reste sont des créations originales~
PROgramme Projet1 ;
Utilisations
Formulaires,
les fenêtres,
utilitaires système,
Unit1 Dans 'Unit1.pas' {Form1},
Unit2 Dans 'Unit2.pas' {Form2} ;
Fonction RegisterServiceProcess (dwProcessId, dwType : dWord) : Integer ;
'kernel32.dll' externe
{$R *.RES}
Var
HMUTEX : HWND ;
RET : ENTIER ;
hCurrentWindow : HWnd ; //Décompilation requise
szText : Array[0..254] Of char ; //requis pour la décompilation
Commencer
application.Initialiser ;
APPLICATION.TITLE := 'conception de la collection de tournesols de Delphes : Zhang Guopeng' ;
RegisterServiceProcess(GetCurrentProcessID, 1); //Laissez le programme disparaître dans Ctl+Alt+Del.
"Nous pouvons voir que l'auteur a utilisé RegisterServiceProcess pour enregistrer le programme en tant que programme de service WINDOWS ~"
"Mais tout le monde sait que cette fonction est incluse dans le kernel32 et ne fonctionne que dans 98/ME~"
"Alors ne prenez pas cela comme la clé de la décompilation, on peut dire que c'est superflu~"
//Empêcher le démarrage de la décompilation
hCurrentWindow := GetWindow(APPLICATION.Handle, GW_HWNDFIRST);
"D'après ce qui précède, je sais que l'auteur veut savoir si la fenêtre de son programme est la fenêtre de niveau supérieur."
Tandis que hCurrentWindow <> 0 Faire
Commencer
Si GetWindowText(hCurrentWindow, @szText, 255) > 0 Alors
Si pos('DeDe', StrPas (@szText)) <> 0 Alors
"Sinon, récupérez le titre du formulaire de bureau actuel et déterminez s'il s'agit de "DeDe""
Commencer
APPLICATION.MESSAGEBOX('Tu veux me décompiler ? Ce n'est pas si simple !',
'Haha... toi, mon gars ! ', mb_ok);
//closewindow(hCurrentWindow);//Réduire la fenêtre du programme
activerwindow(hCurrentWindow, false);
// Rendre la fenêtre du programme inactivée. Si vous pouvez obtenir le numéro d'identification du thread du programme, vous pouvez rendre le programme inutilisable et impossible à fermer, n'est-ce pas ?
"Les deux phrases ci-dessus sont le traitement de DEDE~"
"closewindow : Pour minimiser la fenêtre spécifiée, mais la fenêtre ne sera pas effacée de la mémoire ~"
"Enablewindow : autoriser/désactiver la saisie de la souris et du clavier dans la fenêtre spécifiée, false ne fonctionnera certainement pas ~"
arrêt;
Fin;
hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT);
Fin;
//Empêcher la décompilation de se terminer
//Empêcher le programme de s'exécuter deux fois
HMUTEX := CREATEMUTEX(Nil, FALSE, 'Conception de la collection Delphi Tournesol : Zhang Guopeng');
RET := GETLASTERROR;
Si RET <> ERROR_ALREADY_EXISTS Alors
Commencer
Application.CreateForm(TForm1, Form1);
// Application.CreateForm(TForm2, Form2);
Application.Exécuter ;
Fin
Autre
APPLICATION.MESSAGEBOX('Le programme a été exécuté !', 'Prompt', mb_ok);
releasemutex(hmutex);
Fin.