AnaXyd Skrevet 17. juni 2007 Skrevet 17. juni 2007 Hei! Skal nå gjenoppta et gammelt prosjekt jeg drev med for noen år siden.. Nemlig et antispyware program! Grunnen til at jeg stoppet med det, var at jeg ikke klarte å mekke noen søkefunksjon som søkte etter virus og spyware... Og uten det, er det jo ingenting! Planen er at den skal lese fra en slags database, etter hva spywaren heter og hva filen pleier å hete, slik at den veit hva den skal søke etter. Også helst noe som er effektivt, og ikke treigt.. Jeg er også såklart åpen for forslag fra dere når det gjelder dette! Håper på at noen kan gi meg litt hjelp!
Frysning Skrevet 17. juni 2007 Skrevet 17. juni 2007 Du må lete i registeret, eventuelt kan du lage et program som bruker definisjonene til Search & Destroy.
AnaXyd Skrevet 17. juni 2007 Forfatter Skrevet 17. juni 2007 Må jeg la den kun lete i registeret? Den må vel kunne lete på selve harddisken etter snusk også vel? En S&D sine definisjoner "free to use"?
aadnk Skrevet 17. juni 2007 Skrevet 17. juni 2007 (endret) Å slette gitte nøkler i registeret burde ikke by på store problemer: Public Delegate Function IsDanger(ByVal Key As String, ByVal Type As Integer) As Boolean Public Sub ProcessRegistry(ByVal StartKey As Microsoft.Win32.RegistryKey, ByVal Dangerous As IsDanger) ' Gå gjennom alle verdier For Each Value As String In StartKey.GetValueNames If Dangerous(Value, 2) Then StartKey.DeleteValue(Value) End If Next ' Gå gjennom alle undernøkler For Each SubKey As String In StartKey.GetSubKeyNames ' Se om vi skal slette eller beholde nøkkelen If Dangerous(SubKey, 1) Then StartKey.DeleteSubKeyTree(SubKey) Else ' Åpne denne nøkkelen Dim Key As Microsoft.Win32.RegistryKey = StartKey.OpenSubKey(SubKey) ' Sjekk undermapper og verdier her ProcessRegistry(Key, Dangerous) ' Kan godt droppes Key.Close() End If Next End Sub Public Function IsRegistryDanger(ByVal Key As String, ByVal Type As Integer) As Boolean ' Implementer din funksjon her Return False End Function Endret 17. juni 2007 av aadnk
AnaXyd Skrevet 17. juni 2007 Forfatter Skrevet 17. juni 2007 Hvordan skal jeg legge inn de forskjellige navnene på nøklene som er ondsinnede her da? Eller eventuelt la den lese av fra en database..? Takk forresten!
aadnk Skrevet 17. juni 2007 Skrevet 17. juni 2007 Hvordan skal jeg legge inn de forskjellige navnene på nøklene som er ondsinnede her da? Eller eventuelt la den lese av fra en database..? Det raskeste her blir nok å benytte en HashTable: ' De ulike farlige verdiene må legges inn i disse objekter. Nei, jeg vet ikke' hvor du kan skaffe deg dem. Public DangerKeys As New Hashtable Public DangerValues As New Hashtable Public Function IsRegistryDanger(ByVal Key As String, ByVal Type As Integer) As Boolean ' Se hva vi er gitt If Type = 1 Then ' Nøkler Return DangerKeys.ContainsKey(Key) ElseIf Type = 2 Then ' Verdier Return DangerValues.ContainsKey(Key) Else Throw New Exception("Unknown type.") End If End Function
AnaXyd Skrevet 17. juni 2007 Forfatter Skrevet 17. juni 2007 Hvilke verdier er det jeg skal bytte ut her da? Beklager, men er lenge siden jeg har drevet på med dette..
aadnk Skrevet 17. juni 2007 Skrevet 17. juni 2007 Du legger inn verdier ved å kalle Add: DangerKeys.Add("[farlig nøkkel her]", "")DangerValues.Add("FarligVerdinavnHer", "") Nei, jeg vet ikke nøyaktig hva som skal legges inn. Du må nesten skaffe deg en liste over spyware-nøkler (blant annet - registeret er ikke det eneste stedet slike uhumskheter kan forekomme), eksempelvis ved å benytte Search and Destroy-listene.
AnaXyd Skrevet 17. juni 2007 Forfatter Skrevet 17. juni 2007 Whew.. Nå ble det litt rotete for meg.. Kunne du ha satt sammen hele koden du har oppgitt her til meg, til en som starter ved en Button_Click? Takk igjen!
Frysning Skrevet 17. juni 2007 Skrevet 17. juni 2007 Jeg får en følelse av at du ikke kan noe som helst? Hvis du ikke engang klarer å copy&paste sammen noe du har fått i fanget så tror du pent kan gi opp nå!
AnaXyd Skrevet 17. juni 2007 Forfatter Skrevet 17. juni 2007 (endret) Takk for at du er så snill å hjelper meg! *kremt* Jeg skjønner ikke, folk som prøver noe nytt og som spør om hjelp får som oftest tilbakemeldinger som virker negativt inn. Dette syntes jeg er svært dårlig gjort! Det finnes faktisk noen som ikke kan like mye som andre, og det gjelder også i denne situasjonen her! Beklager at jeg ikke er like flink som deg! Sorry! Men det kan jeg ikke bli hvis jeg ikke spør om hjelp. Sånn er det bare... Grunnen til at jeg spurte om det, var at jeg ville ha en helt ren kode, som er riktig oppsatt. Jeg kunne ha pastet det feil, og dermed ville kanskje noe ikke funket. Kan ikke du heller bare lime det sammen til en bit da, istedet for å klage på andre? Jeg foreslår at du lar din aggresjon, eller hva det nå er kan gå utover noe annet enn andre uskyldige... Gå ut i en skog og brøl alt du kan e.l. Pleier å hjelpe! Endret 17. juni 2007 av AnaXyd
aadnk Skrevet 17. juni 2007 Skrevet 17. juni 2007 Jeg kan godt forenkle koden en smule: Klikk for å se/fjerne innholdet nedenfor Public Class Form1 Public DangerKeys As New Hashtable Public DangerValues As New Hashtable Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' *Initialisering* (bør dog lastes inn fra eksterne kilder) DangerKeys.Add("[farlig nøkkel her]", "") DangerValues.Add("FarligVerdinavnHer", "") End Sub Private Sub btnFixRegistry_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFixRegistry.Click ' Start prosessen for alle toppregisternivå ProcessRegistry(Microsoft.Win32.Registry.ClassesRoot) ProcessRegistry(Microsoft.Win32.Registry.LocalMachine) ProcessRegistry(Microsoft.Win32.Registry.Users) ProcessRegistry(Microsoft.Win32.Registry.CurrentConfig) ' Mulig disse ProcessRegistry(Microsoft.Win32.Registry.CurrentUser) ' ikke er nødvendige End Sub Public Sub ProcessRegistry(ByVal StartKey As Microsoft.Win32.RegistryKey) ' Gå gjennom alle verdier For Each Value As String In StartKey.GetValueNames If DangerValues.Contains(Value) Then StartKey.DeleteValue(Value) End If Next ' Gå gjennom alle undernøkler For Each SubKey As String In StartKey.GetSubKeyNames ' Se om vi skal slette eller beholde nøkkelen If DangerKeys.Contains(SubKey) Then StartKey.DeleteSubKeyTree(SubKey) Else ' Åpne denne nøkkelen Dim Key As Microsoft.Win32.RegistryKey = StartKey.OpenSubKey(SubKey) ' Sjekk undermapper og verdier her ProcessRegistry(Key) ' Kan godt droppes Key.Close() End If Next End Sub End Class
AnaXyd Skrevet 17. juni 2007 Forfatter Skrevet 17. juni 2007 Wow! Takk! Denne skal testes nå med det samme!
AnaXyd Skrevet 20. juni 2007 Forfatter Skrevet 20. juni 2007 (endret) For å være på den sikre siden... Denne kan på ingen måte slette noe annet i registeret? Er dumt å.. Ja... Og: Denne: DangerKeys.Add("[farlig nøkkel her]", "") Jeg skal ikke ha med klammene [ og ] ikkesant? Hvis nøkkelen i registeret som er farlig, f.eks heter dorull så skal det være slik som dette?: DangerKeys.Add("dorull", "") Og enda en ting: Vet du hvordan jeg får åpnet Search & Destroy spyware filene? Det er filtyper som .sbi og .sbs. Har lastet ned de ja... Og jeg har også søkt google rundt for å finne noe som kunne konvertere dette til noe annet... ENDA en ting: Har nå testet funksjonen, men det kom opp en error: Hva som står i erroren: See the end of this message for details on invoking just-in-time (JIT) debugging instead of this dialog box. ************** Exception Text ************** System.Security.SecurityException: Requested registry access is not allowed. at System.ThrowHelper.ThrowSecurityException(ExceptionResource resource) at Microsoft.Win32.RegistryKey.OpenSubKey(String name, Boolean writable) at Microsoft.Win32.RegistryKey.OpenSubKey(String name) at **fjernet**AntispywareBeta1.regsch.ProcessRegistry(RegistryKey StartKey) in C:\Documents and Settings\**fjernet**\Mine dokumenter\Visual Studio 2005\Projects\**fjernet** Antispyware Beta 1\**fjernet** Antispyware Beta 1\regsch.vb:line 43 at **fjernet**AntispywareBeta1.regsch.ProcessRegistry(RegistryKey StartKey) in C:\Documents and Settings\**fjernet**\Mine dokumenter\Visual Studio 2005\Projects\**fjernet** Antispyware Beta 1\**fjernet** Antispyware Beta 1\regsch.vb:line 46 at **fjernet**AntispywareBeta1.regsch.btnFixRegistry_Click(Object sender, EventArgs e) in C:\Documents and Settings\**fjernet**\Mine dokumenter\Visual Studio 2005\Projects\**fjernet*** Antispyware Beta 1\***fjernet*** Antispyware Beta 1\regsch.vb:line 18 at System.Windows.Forms.Control.OnClick(EventArgs e) at System.Windows.Forms.Button.OnClick(EventArgs e) at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ButtonBase.WndProc(Message& m) at System.Windows.Forms.Button.WndProc(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) The Zone of the assembly that failed was: MyComputer ************** Loaded Assemblies ************** mscorlib Assembly Version: 2.0.0.0 Win32 Version: 2.0.50727.42 (RTM.050727-4200) CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll ---------------------------------------- **fjernet*** Antispyware Beta 1 Assembly Version: 1.0.0.0 Win32 Version: 1.0.0.0 CodeBase: file:///C:/Documents%20and%20Settings/***fjernet****/Mine%20dokumenter/Visual%20Studio%202005/Projects/**fjernet***%20Antispyware%20Beta%201/***fjernet**%20Antispyware%20Beta%201/bin/Release/***fjernet***%20Antispyware%20Beta%201.exe ---------------------------------------- Microsoft.VisualBasic Assembly Version: 8.0.0.0 Win32 Version: 8.0.50727.42 (RTM.050727-4200) CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/Microsoft.VisualBasic/8.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll ---------------------------------------- System Assembly Version: 2.0.0.0 Win32 Version: 2.0.50727.42 (RTM.050727-4200) CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll ---------------------------------------- System.Windows.Forms Assembly Version: 2.0.0.0 Win32 Version: 2.0.50727.42 (RTM.050727-4200) CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll ---------------------------------------- System.Drawing Assembly Version: 2.0.0.0 Win32 Version: 2.0.50727.42 (RTM.050727-4200) CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll ---------------------------------------- System.Configuration Assembly Version: 2.0.0.0 Win32 Version: 2.0.50727.42 (RTM.050727-4200) CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll ---------------------------------------- System.Xml Assembly Version: 2.0.0.0 Win32 Version: 2.0.50727.42 (RTM.050727-4200) CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll ---------------------------------------- System.Runtime.Remoting Assembly Version: 2.0.0.0 Win32 Version: 2.0.50727.42 (RTM.050727-4200) CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Runtime.Remoting/2.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll ---------------------------------------- ************** JIT Debugging ************** To enable just-in-time (JIT) debugging, the .config file for this application or computer (machine.config) must have the jitDebugging value set in the system.windows.forms section. The application must also be compiled with debugging enabled. For example: <configuration> <system.windows.forms jitDebugging="true" /> </configuration> When JIT debugging is enabled, any unhandled exception will be sent to the JIT debugger registered on the computer rather than be handled by this dialog box. Hva er galt? Trenger jeg å gi programmet tilgang til noe? Endret 20. juni 2007 av AnaXyd
aadnk Skrevet 20. juni 2007 Skrevet 20. juni 2007 (endret) Hva er galt? Trenger jeg å gi programmet tilgang til noe? 8906746[/snapback] Du finner en del løsninger (blant annet ved å gi .NET-accounts leseprivilegier) når du Googler feilmeldingen "System.Security.SecurityException: Requested registry access is not allowed.", men den letteste løsningen blir nok å simpelthen ignorere feilmeldingen. Det er neppe en fullgod løsning, men det burde i det minste fungere. Helst bør du nok finne svar på det egentlige problemet (for lite privilegier). Evt. kan du jo unngå å lese de områder du ser du ikke har rettigheter til. Klikk for å se/fjerne innholdet nedenfor Public Sub ProcessRegistry(ByVal StartKey As Microsoft.Win32.RegistryKey) Dim Key As Microsoft.Win32.RegistryKey ' Gå gjennom alle verdier For Each Value As String In StartKey.GetValueNames If DangerValues.Contains(Value) Then StartKey.DeleteValue(Value) End If Next ' Gå gjennom alle undernøkler For Each SubKey As String In StartKey.GetSubKeyNames ' Se om vi skal slette eller beholde nøkkelen If DangerKeys.Contains(SubKey) Then StartKey.DeleteSubKeyTree(SubKey) Else ' Forsøk å åpne denne nøkkelen Try Key = Nothing Key = StartKey.OpenSubKey(SubKey) Catch ex As System.Security.SecurityException ' Ignorer dette (ikke fordelaktig, men tydeligvis nødvendig) End Try If Key IsNot Nothing Then ' Sjekk undermapper og verdier her ProcessRegistry(Key) ' Kan godt droppes Key.Close() End If End If Next End Sub Endret 20. juni 2007 av aadnk
AnaXyd Skrevet 20. juni 2007 Forfatter Skrevet 20. juni 2007 Først av alt, jeg setter virkelig pris på at du gidder å hjelpe meg med dette! Tusen takk! Jeg får en liten feil etter den siste koden din nå:
AnaXyd Skrevet 20. juni 2007 Forfatter Skrevet 20. juni 2007 Først av alt, jeg setter virkelig pris på at du gidder å hjelpe meg med dette! Tusen hjertelig takk! Jeg får en liten feil etter den siste koden din nå: Er det noe feil, eller kan jeg ignorere denne?
aadnk Skrevet 20. juni 2007 Skrevet 20. juni 2007 Er det noe feil, eller kan jeg ignorere denne? 8908004[/snapback] Nei, det er ikke en feil, det er en advarsel. I dette tilfellet bemerker den, rent uvitende, at Key-variabelen KAN føre til en feilmelding ved kjøretid - noe jeg kan betrygge deg med er umulig, da IF-setningen tester variabelen for nettopp dette. Koden vil ikke bli kjørt om den er satt til Nothing. Ganske tåpelig at IDE'en ikke tar hensyn til såpass simple ting som kondisjonerte kodeblokker ...
AnaXyd Skrevet 21. juni 2007 Forfatter Skrevet 21. juni 2007 (endret) Okay! Jeg testet igjen nå, men det kom en error igjen: Er det noe jeg har gjort galt, eller er det noe vi må tilføye i koden? Endret 21. juni 2007 av AnaXyd
AnaXyd Skrevet 3. juli 2007 Forfatter Skrevet 3. juli 2007 Bumper litt her jeg. Har fremdeles samme problem som i posten over, og har ikke funnet ut av det. Er også ute etter en søkefunksjon som søker etter gitte filer også.
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå