Gå til innhold

Anbefalte innlegg

Skrevet

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! :)

Videoannonse
Annonse
Skrevet

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"?

Skrevet (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 av aadnk
Skrevet

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! :)

Skrevet
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

Skrevet

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.

Skrevet

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! :)

Skrevet

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å!

Skrevet (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 av AnaXyd
Skrevet

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

Skrevet (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:

post-91181-1182364141_thumb.jpg

 

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 av AnaXyd
Skrevet (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 av aadnk
Skrevet

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å:

Skrevet

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å:

post-91181-1182370817_thumb.jpg

 

 

Er det noe feil, eller kan jeg ignorere denne?

Skrevet
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 ...

Skrevet (endret)

Okay! :)

 

Jeg testet igjen nå, men det kom en error igjen:

post-91181-1182438924_thumb.jpg

 

Er det noe jeg har gjort galt, eller er det noe vi må tilføye i koden?

Endret av AnaXyd
  • 2 uker senere...
Skrevet

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å.

 

:)

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...