Implémentation de la surveillance du registre à l'aide de Delphi5.0Zhu Hongtao, Centre d'information, Deuxième hôpital Xiangya, Université Central South Avec la popularité croissante d’Internet, la sécurité des réseaux attire de plus en plus d’attention. En plus des virus informatiques, divers logiciels de piratage, logiciels de contrôle à distance, etc. apparaissent constamment sur Internet, ce qui inquiète de plus en plus les gens pour leurs machines. La diversité et les mises à jour constantes de ce type de logiciels rendent impossible la protection complète de votre machine en s'appuyant uniquement sur certains logiciels antivirus. |
Existe-t-il un bon moyen d’empêcher l’installation de logiciels provenant de sources inconnues sur ma machine ? La réponse est de prêter une attention particulière aux modifications apportées aux fichiers clés du système. Comme nous le savons tous, si un programme souhaite s’exécuter automatiquement au démarrage de Windows, il existe généralement trois méthodes : |
1. Ajouter un raccourci au groupe [Démarrage] du menu Démarrer |
2. Ajouter des éléments associés à Win.ini |
3. Ajoutez une valeur de clé pointant vers vous-même sous la clé primaire HKEY_Local_Machine/SoftWare/Microsoft/Windows/CurrentVersion/Run dans le registre. |
La première méthode est trop évidente et facile à repérer. Par conséquent, les programmes de piratage généralistes utilisent ces deux dernières méthodes pour se lancer. L'auteur présente ici un simple moniteur de registre écrit par moi-même, qui est utilisé pour surveiller les modifications des valeurs clés dans le registre en temps réel afin de découvrir des programmes d'origine inconnue. Les lecteurs intéressés peuvent encore s’améliorer sur cette base. |
Idées de programmation |
Ce programme est développé en utilisant Delphi5.0. Delphi est un outil de développement de programmes Windows visuel rapide produit par Borland Company. Il est puissant et facile à utiliser. Le programme utilise une minuterie pour comparer le registre à intervalles réguliers. Lorsque le programme démarre, il conserve une sauvegarde des données des valeurs de clé de registre d'origine, puis la compare régulièrement avec les valeurs de clé actuelles. Si des modifications sont détectées, l'utilisateur est invité à vérifier. |
Mise en œuvre du programme |
1. Créez un nouveau PRoject dans Delphi et renommez Form1 en FormMain |
2. Placez un contrôle de minuterie TTimer sur FormMain et enregistrez le projet sous PiRegWatch.Dpr |
3. Modifiez le code dans PiRegWatch.Dpr : |
application.Initialiser ; |
Application.CreateForm(TFormMain, FormMain); |
//Ne pas afficher la fenêtre principale au démarrage |
Application.ShowMainForm:=False ; |
Application.Exécuter ; |
Ajoutez plusieurs objets à FormMain. |
ObjetTypeDescription |
RegTregistry est utilisé pour accéder au registre |
IniFileTiniFile est utilisé pour enregistrer les données de registre d'origine |
LogTstringListJournal utilisé pour enregistrer les modifications |
RegKeysTstringList est utilisé pour stocker le nom de la clé primaire sous la branche Exécuter |
4. Conservez les données de registre d'origine dans l'événement FormMain:OnCreate. Le code principal est le suivant : |
… |
self.Reg:=TRegistry.Create; |
avec soi-même.Reg do |
commencer |
RootKey :=HKEY_Local_Machine ; |
Si OpenKey('Software/Microsoft/Windows/CurrentVersion/Run',false) |
alors |
commencer |
RegKeys :=TStringList.Create ; |
GetValueNames(RegKeys); //Obtenir tous les noms de clés primaires sous Exécuter |
sinon self.IniFile.SectionExists('RunList') then //Si aucune donnée n'a été enregistrée |
commencer |
pour i:=0 à Regkeys.Count-1 do //Enregistrer les données d'origine |
si (self.Reg.GetDataType(RegKeys.Strings[i])=rdString) |
ou(self.Reg.GetDataType(RegKeys.Strings[i])=rdExpandString) |
alors commence |
value:=self.Reg.ReadString(RegKeys.Strings[i]); |
self.IniFile.WriteString('RunList',RegKeys.Strings[i],value); |
fin; |
fin; |
fin; |
fin; |
… |
5. Ajoutez le code pour comparer le registre dans l'événement TTimer1.OnTmer. Le code principal est le suivant : |
procédure TFormMain.Timer1Timer(Expéditeur : TObject); |
var je:entier; |
RegVal,IniVal:chaîne; |
commencer |
self.Timer1.Enabled:=False; |
self.Reg.GetValueNames(RegKeys); |
pour i:=0 à RegKeys.Count-1 do //Vérifier les valeurs clés nouvellement ajoutées et modifiées |
si (self.Reg.GetDataType(RegKeys.Strings[i])=rdString) |
ou (self.Reg.GetDataType(RegKeys.Strings[i])=rdExpandString) |
alors commence |
RegVal:=self.Reg.ReadString(RegKeys.Strings[i]); |
IniVal:=self.IniFile.ReadString('RunList',RegKeys.Strings[i],''); |
si RegVal<>IniVal alors |
commencer |
self.LogMsg('Item Add:'+RegKeys.Strings[i]+'='+RegVal); |
self.IniFile.WriteString('RunList',RegKeys.Strings[i],RegVal); |
essayer |
//invite l'utilisateur |
SendMsg('ABC','','Le registre a été modifié : nouveaux éléments'+RegKeys.Strings[i]+'='+RegVal); |
enfin |
fin; |
fin; |
fin; |
self.IniFile.ReadSection('RunList',RegKeys); |
pour i:=0 à RegKeys.Count-1 do //Vérifiez les valeurs des clés supprimées |
commencer |
IniVal:=self.IniFile.ReadString('RunList',RegKeys.Strings[i],''); |
si self.Reg.ValueExists(RegKeys.Strings[i]) et |
((self.Reg.GetDataType(RegKeys.Strings[i])=rdString) |
ou (self.Reg.GetDataType(RegKeys.Strings[i])=rdExpandString) ) |
alors |
RegVal:=self.Reg.ReadString(RegKeys.Strings[i]) |
autre |
RegVal:=''; |
si (IniVal<>'') et (RegVal='') alors |
commencer |
self.LogMsg('Item Del:'+RegKeys.Strings[i]+'='+IniVal); |
self.IniFile.DeleteKey('RunList',RegKeys.Strings[i]); |
essayer |
SendMsg('ABC','','Registre modifié : élément supprimé'+RegKeys.Strings[i]+'='+IniVal); |
enfin |
fin; |
fin; |
fin; |
self.IniFile.UpdateFile; |
self.Timer1.Enabled:=True; |
fin; |
6. Effectuez la libération de l'objet et le travail de nettoyage nécessaire dans l'événement FormMain:OnClose |
procédure TFormMain.FormClose(Sender: TObject; var Action:TCloseAction); |
commencer |
si assigné (self.Reg) alors self.Reg.Free ; |
si assigné (self.IniFile) alors self.IniFile.Free ; |
si assigné (self.LogFile) alors self.LogFile.Free ; |
si assigné (self.RegKeys) alors self.RegKeys.Free ; |
fin; |
Après fonctionnement effectif, ce programme peut en effet jouer un certain rôle dans la découverte de programmes d'origine inconnue. Bien entendu, sa fonction est également très unique. Si elle doit être encore améliorée et que les modifications apportées à d'autres fichiers clés du système de surveillance sont ajoutées, l'effet sera meilleur. J'espère communiquer avec les lecteurs intéressés. |