Gå til innhold

Søkefunksjon, trenger hjelp til å lage!


Anbefalte innlegg

Heisann!

Jeg er ganske fersk når det gjelder programering, men har da drivi litt med det. Det jeg begynte med var Visual Basic 6, og programmerte noen Msn botter, og lagde en morsom "trojaner" som fikk cd stasjon til å gå ut og inn +++.

Så har jeg fått tak i Visual Studio 2005, som er mer avansert, og enklere på mange vis.

Det jeg programerer nå for tiden, er et anti spyware program. Begynte for leeenge sida med Beta versionen av Visual Studio, og tenkte å fyre opp prosjektet igjen.

Jeg trenger mye hjelp med dette programmet, som skal ha mange fiffige og avanserte funksjoner. Som jeg ikke klarer uten hjelp! :)

 

Så, mitt spørsmål til nå, er hvordan lage en søkefunksjon som søker etter spywaren?

I første omgang trenger det jo bare å være enkelt, et vindu som har en tekstboks som man velger hvilken mappe man skal søke i, og en *start search* knapp.

Det som jeg tenkte, var å ha en fil, en .txt eller noe ana med hele spyware databasen, og hvor spywaren legger seg, sånn at man bare trenger å oppdatere den ene "definisjons" fila som jeg kaller den. (som er databasen for all spywaren)

 

Dette er kanskje sinnsykt avansert å lage, eller kjempe lett?

Noen som kan hjelpe meg med å knekke denne nøtta?

Hadde vært kjempefint med hjelp! :):love::thumbup:

Lenke til kommentar
Videoannonse
Annonse

Jeg ville begynt slik:

 

1. Les "databasen" inn i en liste

2. Begynn å lese første fil som skal scannes

3. Sjekk første byte mot første byte i alle innslagene i "databasen"

4. "Fjern" de innslagene som ikke slår til.

5. Sjekk neste byte mote byte 2 i de gjenværende innslagene.

6. Gå til 4 inntill du enten har et fullstendig treff eller alle innslagene er fjernet.

7. Les byte 2 fra fil og sjekk mot første byte i alle innslagene i "databasen" igjen

8. Fortsett til treff eller filen er godkjent.

 

Tror ikke denne metoden er den mest effektive da man stadig "går tilbake" for neste runde. Det er mulig at databasen må struktureres på en helt annen måte for å gjøre dette effektivt.

 

Metoden som ville vært best tror jeg ville være å lese første byte i fil, sjekke mot første byte i alle innslag, deretter lese neste byte i fil, sjekke mot første byte i alle innslag i tillegg til andre byte i de innslagene som klarte seg gjennom byte 1 testen.

Deretter leses byte 3. Da sjekkes denne mot første byte i alle innslagene + 3dje byte i de innslagene som har klart seg fra byte 1 testen og 2ndre byte i de innslagene som har klart seg fra byte 2 testen.

 

osv osv...

 

På denne måten går man ikke frem og tilbake.

 

Det finnes sikkert avanserte algoritmer på nettet som du kan bruke, men det jeg beskrev er slik jeg ville tatt tak i det om jeg bare skulle satt i gang uten større planlegging.

Lenke til kommentar

Hehe.. er nok en helv**** jobb ja... Og du aner ikke hvor lenge jeg har søkt etter den kildekoden! Har vært på andre forums... Men de gav ikke stor hjelp...

Uansett, hvis du gjorde det, så hadde ditt navn fått en stoor plass et synlig sted i programmet! ;)

Lenke til kommentar

Vi får se. Men tror ikke det skjer med det første. Har selv hatt behov for en slik søkealgoritme eller noe tilsvarende for raskt å f.eks raskt finne ut om et lite bilde finnes i et større bilde. F.eks lete etter en OK knapp i et grafisk grensesnitt om jeg har en liten skjermkopi av OK knappen.

 

Noenlunde det samme bortsett fra at det blir litt mer kompleks. Finne en matrise i en matrise løsning istedet for en streng i en streng.

Lenke til kommentar

For en tid tilbake, drev jeg å spurte i forums etter denne funksjonen. Jeg fikk svar med fikk det ikke til. Så jeg poster kildekoden her nå, så kan du se på dem om det er noe feil! Her er jo basisen for hele greia (tror jeg)

 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       '        String [] pictureFiles = new String[200];
       Dim fileNameToFind As String
       fileNameToFind = "previous.bmp"
       Dim currentDirectory As String
       Dim strVector() As String
       Dim fileName As String

       Try
           currentDirectory = System.IO.Directory.GetCurrentDirectory()

           ' Let's see the directory we are searching
           MessageBox.Show(currentDirectory)
           If (System.IO.Directory.Exists(currentDirectory)) Then
               ' Get all the files in the directory
               strVector = System.IO.Directory.GetFiles(currentDirectory)
               Dim i As Int16
               Do
                   ' Cut down the file to only it's name (eliminate the path)
                   fileName = strVector(i).Substring(strVector(i).LastIndexOf("\") + 1)
                   ' Does the name match with the one we are looking for?
                   If (fileName.Equals(fileNameToFind)) Then
                       MessageBox.Show(fileNameToFind + " was found at position " + i.ToString() + " in " + currentDirectory)
                   End If
                   i = i + 1
               Loop Until (i >= strVector.Length)

           End If

       Catch ex As Exception
           MessageBox.Show(ex.ToString())


       End Try

   End Sub

Lenke til kommentar

For søking etter tekststrenger i tekstfiler (.txt, .htm, .html, .php, .vbs etc.) så gjør dette jobben (vb 6 program som kan konverteres til vb.net etc.) :

 

http://www.veign.com/vrc_codeview.asp?type=app&id=72

 

Programmet kan lett tilpasses om man har peiling på vb.

 

Imidlertid, skal man søke etter ascii og hex data innen spyware-programmer, vil det si at man også bør søke i exe-filer og da kan en hex editor være et greit utgangspunkt for det videre arbeid med denne sak (hex editorer finnes på internett). ;)

Lenke til kommentar

Vel, lett var det ikke å konvertere dette... For det første, hater jeg å konvertere slike ting til .net, og for det andre kan jeg det ikke... :blush:

 

Så vel, jeg skrev koden til en .txt fil og lagret den som .vb. Jeg sjekket den, og noen feil kom. Vel, hvordan gjør jeg dette riktig?

Lenke til kommentar

Start et nytt vb.net prosjekt. Lim så koden rett inn i form1.vb nedenfor Windows Form Designer code, og sørg for at du for FindInFile funksjonen har:

 

Public Function FindInFile(ByVal strToFind As String, ByVal strFileName As String) As Long

 

Så setter du opp tre tekstbokser, en for strToFind, en for strFileName og en for resultatet, og til sist en button. Hos meg ser det slik ut:

 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox3.Text = FindInFile(TextBox2.Text, TextBox1.Text)

End Sub

;)

Lenke til kommentar

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å
×
×
  • Opprett ny...