Nimm dies, Sobic F Wurm, du Elender!

Aus, vorbei! No more Mr. Niceguy! Jetzt ist Schluss! Ich hab diesen unseligen, nervenden, grau-en-haf-ten "Sobig.F-Wurm" (oder was immer es ist) satt, satt, satt. Stündlich dutzende Emails ohne Sinn und Verstand mit PIF-Anhang in meiner Outlook Inbox. Wenn das die Zukunft der Email ist, dann sag ich mal gute Nacht.

Aber nun ist´s vorbei damit! Ha! In einem Anfall von völliger Angenervtheit habe ich einen Sobig-Interceptor gebastelt. Und er funktioniert. Zumindest für meine Zwecke :-)

Mein Problem war, dass mein POP3-Server sehr simpel ausgestattet ist und nicht selbst den Wurm aus der eingehenden Post aussondert, bevor ich sie mit Outlook abhole. In Outlook hatte ich zwar eine simple Regel, die das nachholte, aber das war eben recht spät, wenn die hunderte Emails schon auf meinen Rechner gelangt waren.

Der Sobig-Interceptor (s.u. den Code) setzt nun früher an. Er prüft periodisch selbst mein POP3-Postfach und entfernt schon dort die Wurm-Emails, so dass ich sie erst gar nicht mehr heruntergeladen werden.

Der Algorithmus ist denkbar simpel: Mit einer POP3-Komponente hole ich die Betreffzeilen der Emails in meinem POP3-Postfach und entscheide danach, welche Emails zu löschen sind. Die Wurm-Emails zeichnen sich ja zum Glück durch charakteristische Betreff-Inhalte wie "Wicked Screensaver" aus. Der Interceptor ist als regelbasiert. Und die Regel ist eine Prüfung nur der Betreffzeilen darauf, ob einer von mehreren Strings in ihnen vorkommen. Aber warum auch komplizierter, wenn es auch so einfach geht?

Das unten stehende Modul ist eine vollständige Console Application. Nach dem Start ruft sie periodisch über einen Timer die Methode KillWorm() auf, die das Postfach prüft.

Über ein Mini-UI kann man aber auch die Überprüfung jederzeit erzwingen bzw. das Programm beenden.

Ich lasse es immer im Hintergrund minimiert laufen. Mit mehr Perfektionsdrang könnte ich sicher daran noch einiges tun (z.B. in den System Tray einbauen, Windows Service draus machen, mehrere Email-Accounts unterstützen, RegEx-Regeln usw.) - aber das alles war mir grad nicht wichtig. Es ging allein um die Bekämpfung dieses unseligen Wurms. Und die ist auch mit der jetzigen Ausbaustufe und dem hingerotzten Code effektiv.

Das Programm arbeitet mit einer frei erhältlichen POP3-Komponente. Download unter http://www.codeproject.com/csharp/pop3client.asp. Einfach den Code herunterladen, die Solution öffnen, eine Console Application hinzufügen, das unten stehende Modul einsetzen und die POP3-Komponente referenzieren. Fertig.

Würd mich freuen, wenn es anderen Wurm-gebeutelten dort draußen ein wenig hülfe!

 

Module Module1

    dim traits() as String = new String() _
        { "re: that movie", _
          "re: my details", _
          "thank you!", _
          "re: details", _
          "re: your application", _
          "re: wicked screensaver", _
          "re: approved", _
          "your details", _
          "report to sender", _
          "failure notice", _
          "worldsecure", _
          "mail system error", _
          "returned mail", _
          "returned to sender", _
          "security issue" }


    Sub Main()
        dim t as New Threading.Timer(new Threading.TimerCallback(AddressOf KillWorm), nothing, 0, 60000)
        console.WriteLine("Killing...")
        while true
            console.WriteLine("F(orce interception now, eX(it: ")
            dim cmd as String = console.ReadLine
            select case cmd
                case "f", "F"
                    t.Change(0, 60000)
                case "x", "X"
                    exit While
            End Select
        end while
    End Sub


    sub KillWorm(state as Object)
        dim p as New pop3.Mail.Pop.Pop3
        p.Username = "..."
        p.Password = "..."
        p.Host = "..."

        p.Connect
        p.Login
        try
            p.GetAccountStat
            console.WriteLine(p.MessageCount)

            dim ms as New ArrayList
            dim m as pop3.Mail.Pop.Pop3Message
           
            for i as Integer = 1 to p.MessageCount
                m = p.GetMessageHeader(i)
                ms.Add(m)
            Next

            dim log as New IO.StreamWriter("log.txt" , True)
            log.WriteLine(now)

            dim nDel as integer
            for i as Integer = 0 to ms.Count - 1
                m = ms(i)
                console.Write(m.Subject)
                for each trait as String in traits
                    if m.Subject.ToLower.IndexOf(trait) >= 0 then
                        console.Write(" ---")
                        log.WriteLine("-" & m.Subject)
                        p.DeleteMessage(i+1)
                        nDel += 1
                        exit For
                    End If
                Next
                console.WriteLine
            Next
           
            log.WriteLine(now & ": " & ms.Count & " message(s), " & nDel & " deleted")
            log.Close

            console.WriteLine(now & ": " & ms.Count & " message(s), " & nDel & " deleted", MsgBoxStyle.Information)
        catch ex as Exception
            console.WriteLine("*** " & ex.Message)
        finally
            p.Close
        end try
    End Sub
End Module


PS: Die Liste der verräterischen Phrasen enthält solche für unzustellbare Emails, weil der Wurm mit meinem Absender (auch wenn er nie auf meinem Rechner gelaufen ist) auf anderen Rechnern Emails an nicht existente Empfänger geschickt hat.

Wenn gewünscht kann die Liste der Phrasen natürlich auch um Begriffe erweitert werden, mit denen sich Spam sehr leicht schon an der Betreffzeile erkennen lässt.

PPS: Um die Arbeit des Interceptors über längere Zeit verfolgen zu können, schreibt er auch eine kleine Log-Datei.

2 Comments

Comments have been disabled for this content.