Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Prüfen, ob RegistryKey vorhanden ist? (https://www.delphipraxis.net/150947-pruefen-ob-registrykey-vorhanden-ist.html)

Andreas L. 1. Mai 2010 11:13

Re: Prüfen, ob RegistryKey vorhanden ist?
 
Schon klar das in Name der Name der Form drinsteht. Ist schließlich nichts anderes wie Self.Name und Self ist eben die Form. Wo hast du x denn definiert? Global?

Jamah 1. Mai 2010 11:24

Re: Prüfen, ob RegistryKey vorhanden ist?
 
Warum denn?
Steht doch drin: Name:= ('HKEY_Current_User.......');

Ja x ist global definiert.

lbccaleb 1. Mai 2010 11:43

Re: Prüfen, ob RegistryKey vorhanden ist?
 
Zitat:

Zitat von Jamah
Warum denn?
Steht doch drin: Name:= ('HKEY_Current_User.......');

Ja x ist global definiert.

Er wollte dir damit sagen, dass du mit dem oben geposteten nicht den Reg.Name änderst, sondern den der Form..

Wenn du es soc machen willst, musst du mit
Delphi-Quellcode:
with reg do begin
  //...
end;
arbeiten.

Jamah 1. Mai 2010 11:49

Re: Prüfen, ob RegistryKey vorhanden ist?
 
Ok. funktioniert jetzt beides.
Letztes Manko:
Wenn ich den Schlüssel mit dem Value: KeyName in HKEY_Current_User hab, gehts, und er liefert den richtigen Wert zurück.
Wenn ich den Schlüssel aber in HKEY_Local_Machine (also ein x-wert 1 rauskommen müsste,) kommt nix raus. Findet entweder den Value nicht oder geht garnicht erst in die Schleife.
Das verstehe ich nicht.

lbccaleb 1. Mai 2010 11:51

Re: Prüfen, ob RegistryKey vorhanden ist?
 
Existiert er dort denn??

DeddyH 1. Mai 2010 12:31

Re: Prüfen, ob RegistryKey vorhanden ist?
 
Kann es sein, dass die ganzen Ratschläge von oben wieder über Bord geworfen wurden? Ich versuch es mal aus der hohlen Hand:
Delphi-Quellcode:
function RegCheck():Boolean;
begin
  result:= false;
  reg:= TRegistry.Create(KEY_READ); //nur zum Lesen öffnen <-- fehlte
  try
    reg.RootKey:= HKEY_Local_Machine;
    if reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\',false) then
      try
        if reg.ValueExists('KeyName') then
          begin
            Name:= ('HKEY_Local_Machine\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KeyName');
            result:= True;
            x:= 1;
          end;
      finally
        Reg.CloseKey; //das hab ich in den oberen Codes komplett vermisst
      end;
    reg.RootKey:= HKEY_Current_User;
    if reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\', False) then
     try
       if reg.ValueExists('KeyName') then
          begin
            Name:= ('HKEY_Current_User\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KeyName');
            result:= True;
            x:= 2;
          end;
     finally
       Reg.CloseKey; //s.o.
     end;
  finally
     reg.Free;
  end;
end;
Außerdem würde ich nicht auf globale Variablen zugreifen wollen, sondern x und Name eher als var-Parameter übergeben.

Jamah 1. Mai 2010 19:12

Re: Prüfen, ob RegistryKey vorhanden ist?
 
100%ig.
Der ist da. Aber irgendwie bekomme ich die Rückgabe: Alles in Ordnung.
Soll eigentlich eine Art Removal Tool für einen bestimmten Virus werden. Einen Trojaner, der sich an einer Stelle mit einem bestimmten Value in die Registry schreibt, nämlich entweder in HKEY_Current_User oder in den Local_Machine. Pfad ist der Selbe.
Ich will nur den Key abfragen und dann in einem 2. Schritt bei existenz löschen.

DeddyH 1. Mai 2010 19:15

Re: Prüfen, ob RegistryKey vorhanden ist?
 
Zitat:

Zitat von Jamah
Soll eigentlich eine Art Removal Tool für einen bestimmten Virus werden. Einen Trojaner, der sich an einer Stelle mit einem bestimmten Value in die Registry schreibt, nämlich entweder in HKEY_Current_User oder in den Local_Machine. Pfad ist der Selbe.
Ich will nur den Key abfragen und dann in einem 2. Schritt bei existenz löschen.

Ist das Dein Ernst? :shock: Wenn ich mir einen Virus/Trojaner einfange, verlasse ich mich nicht darauf, dass nach dem Löschen div. Registrykeys alles wieder in Butter ist.

lbccaleb 1. Mai 2010 19:39

Re: Prüfen, ob RegistryKey vorhanden ist?
 
Die Arbeit würd ich auch den Antiviren Tools überlassen ;)

Glaub mir das ist sicherer ;)

Jamah 1. Mai 2010 19:46

Re: Prüfen, ob RegistryKey vorhanden ist?
 
Ob sowas sicher ist oder nicht lasst lieber meine Sorge sein. Ich bin mir sicher, dass es 100% funktionieren wird, da das Ding einfach schlecht programmiert ist und zumindest das letzte offizielle Build immer die gleichen Sachen benutzt. Dependencies löschen geht schon, die .exe an sich mit Taskkill und on Reboot auch. Einziges Problem ist, dass ich dne Registry-Eintrag beseitigt haben will, damit ich wirklich 100% sicher sein kann.

Ich glaube, dass wir hier nicht über den Sinn diskutieren sollten. Tatsache ist:
- Der Key ist existent (hat nix drinstehen nur den Value 'KeyName'
- Wenn der in CurrentUser abgelegt ist kann der gefunden und gelöscht werden, nur in HKEY_LOCAL_MACHINE findet der den nicht
- x: Integer und reg: TRegistry sind global definiert.


nochmal der aktuelle Code:
Delphi-Quellcode:
function RegCheck():Boolean;
begin
  result:= false;
  reg:= TRegistry.Create;
  try
    reg.RootKey:= HKEY_LOCAL_MACHINE;
    if reg.KeyExists('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\') then
      begin
        if reg.ValueExists('KeyName') then
          begin
            Names:= ('HKEY_Local_Machine\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KeyName');
            result:= True;
            x:= 1;
          end;
      end;
    reg.RootKey:= HKEY_Current_User;
    if reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\', False) then
    begin
      if reg.ValueExists('KeyName') then
          begin
            Names:= ('HKEY_Current_User\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\KeyName');
            result:= True;
            x:= 2;
          end;
    end;
  finally
     reg.Free;
  end;
end;
Leider funktioniert dieser Code auch nicht, ich denke es ist der selbe Fehler, dieser Code sollte den Key löschen aber anscheinend geht er nicht in die Schleife ich weiß nicht warum. Dort steht dann nur Starting removal dependencies... und die procedure ist beendet.
Delphi-Quellcode:
  if Res1 = True then
      begin
        sMemo1.Lines.Add('Starting removal dependencies...');
        if x = 1 then
          begin
            reg:= Tregistry.Create;
            try
               reg.RootKey:= HKEY_Local_Machine;
               if reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\', False) then
                 begin
                    sMemo1.Lines.Add('');
                    sMemo1.Lines.Add('Getting values...');
                    sMemo1.Lines.Add('Deleting trojan from registry...');
                    reg.DeleteValue('KeyName');
                    if reg.ValueExists('KeyName') then
                      begin
                        sMemo1.Lines.Add('');
                        sMemo1.Lines.Add('Failed to delete.');
                        sMemo1.Lines.Add('Maybe you have no admin rights?');
                        sMemo1.Lines.Add('You can also delete it manually using the ''''regedit''''command');
                        sMemo1.Lines.Add('');
                      end;
                 end;
              finally
               reg.Free;
            end;
      if x = 2 then
          begin
            reg:= Tregistry.Create;
            try
               reg.RootKey:= HKEY_Current_User;
               if reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\', False) then
                 begin
                    sMemo1.Lines.Add('');
                    sMemo1.Lines.Add('Getting values...');
                    sMemo1.Lines.Add('Deleting trojan from registry...');
                    reg.DeleteValue('KeyName');
                    if reg.ValueExists('KeyName') then
                      begin
                        sMemo1.Lines.Add('');
                        sMemo1.Lines.Add('Failed to delete.');
                        sMemo1.Lines.Add('Maybe you have no admin rights?');
                        sMemo1.Lines.Add('You can also delete it manually using the ''''regedit''''command');
                        sMemo1.Lines.Add('');
                      end;
                 end;
            finally
              reg.Free;
            end;
          end;
Danke für euer Verständnis und eure Hilfe


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:28 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz