Spam Emails hacken

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Peter329.

    Spam Emails hacken

    Hi,

    ich habe ein etwas ungewöhnliches Anliegen:

    Spam E-Mails erhalten wir alle. Und natürlich öffne ich so einen Quatsch nicht ... Aber ich bin neugierig und würde gern wissen, wohin mich die Leute gern locken wollen.

    Den Html Source Code einer solchen Spam e-Mail kann man sich gefahrlos herunter laden und anschauen ... dann sieht man meist recht schnell, auf welche Links die Leute einen gern schicken möchten und welche Images sie dazu anzeigen. Das ist ebenso plump wie blöde ... und damit nicht der Rede wert. :)

    Aber manchmal erhalte ich auch e-Mails, die ihren Text irgendwie verbergen. z.B. so etwas:

    HTML-Quellcode

    1. <span
    2. style="color: rgb(255,0,0);">
    3. =F0=9D=97=94=F0=9D=97=B8=F0=9D=98=81=F0=9D=98=82=F0=9D
    4. ...
    5. </span>


    Klar, da werden zum Befüllen der "span" irgendwelche HexZeichen verwendet ... die der Browswer dann auflöst. Nur ... will ich aus verständlichen Gründen meinen Browser nicht mit dieser HTML befüttern ...

    Was ist denn das für eine Codierung ? Ich hab mal versucht =F0 ... einfach durch die entsprechende Hex-Interpretation zu ersetzen ... das hilft aber nicht weiter ... (s.Anhang)

    Kann mir jemand sagen, wie ich so etwas in lesbaren Text umwandeln kann ? Ist das UTF-8? Oder ist das ausführbarer Code?

    LG
    Peter
    Bilder
    • s 2020-12-08 17-01-562.jpg

      32,28 kB, 612×397, 101 mal angesehen
    @Peter329 Entweder Du suchst ein geeignetes Encoding und siehst mal, was da rauskommt (ststt Encoding.Default mal ein paar andere probieren):
    Dim text = System.Text.Encoding.Default.GetString(BYTE_ARRAY)
    oder
    Du löschst für alle das MSB: Dim byte = BYTE_ARRAY(i) And &h7F
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich hab das mal auf die Schnelle versucht umzusetzen ...

    VB.NET-Quellcode

    1. Dim myHex = {"F0", "9D", "97", "AA", "F0", "9D", "97", "B6",
    2. "F0", "9D", "97", "BF", "F0", "9D", "97", "B5",
    3. "F0", "9D", "97", "AE", "F0", "9D", "97", "AF",
    4. "F0", "9D", "97", "B2", "F0", "9D", "97", "BB"}
    5. Dim myBytes(32) As Byte
    6. Dim myInteger(32) As Integer
    7. For i = 0 To 31
    8. myInteger(i) = Convert.ToInt32(myHex(i), 16)
    9. myBytes(i) = Convert.ToByte(myInteger(i))
    10. Next
    11. Dim myText = System.Text.Encoding.Default.GetString(myBytes)
    12. Debug.Print(myText)


    Das sieht aber irgendwie noch nicht gut aus ... :(

    Und diese Sache

    VB.NET-Quellcode

    1. myBytes(i) = myBytes(i) And &H7F


    lässt Option Strict On nicht zu.

    Peter329 schrieb:

    lässt Option Strict On nicht zu.
    Da musst Du das Ergebnis explizit nach Byte casten, da das Resultat ein Integer ist:

    VB.NET-Quellcode

    1. myBytes(i) = CByte(myBytes(i) And &H7F)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Peter329 Dann probier mal verschiedene Encodings:

    VB.NET-Quellcode

    1. Dim enc = Encoding.GetEncoding(LÄNDERCODE) ' da einfach mal den LÄNDERCODE laufen lassen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich bin jetzt ein bissl weiter gekommen.

    Das ist schon so wie @Marcus Gräfe schreibt: mit dem Gleichheitszeichen werden die Daten als Hexadezimale Eingabe entgegen genommen ... also aus =F0 wird x'F0. Das ist offensichtlich eine Funktion des Mail Browsers und NICHT der HTML Auflösung.

    Ich habe jetzt in einer VM die e-Mail doch einmal anzeigt. Eine nette Phishing e-Mail gemäß PST Timestamp vermutlich von den Philippinen. :) (s. Anhang)

    Den Text kann man markieren und ins Clipboard nehmen. Wenn man diesen Inhalt in eine stinknormale TEXTBOX einfügt, erhält man einen formattierten Text ! Ich hab gar nicht gewusst, dass eine TextBox so etwas kann ! Wohlgemerkt, das ist KEINE RichTextbox ! (s. Anhang)

    Mit meinem HexEditor habe ich mir dann den Inhalt der Textbox angezeigt. Wie schon vermerkt jede eingabe der Form =AB wurde in ein Byte als x'AB übernommen. Der Text enthält Vorschubzeichen (x'0A, x'0D) .... und normale Zeichen werden auch normal angezeigt ((etwa x'31 wird als "1" angezeigt.). Und offensichtlich sind auch Steuerzeichen für die Textgröße und Textform (italic, bold, etc.) enthalten.

    Was um alles in der Welt ist das denn für eine Text Darstellung. Mir scheint das irgend etwas wie UTF-8 im Hex Format zu sein ????

    Kann mir jemand jetzt sagen, wie ich so eine Eingabe =F0=9D=97=94... als Text String ausgeben kann. Das müsste dann wohl ein UTF-8 Displayer sein ?

    LG
    Peter
    Bilder
    • Text im HexEditor.jpg

      91,52 kB, 891×328, 72 mal angesehen
    • Text im Editor.jpg

      25,88 kB, 832×230, 71 mal angesehen
    • Original Display.jpg

      37,15 kB, 535×377, 79 mal angesehen
    @Takafusa: Natürlich hab ich mir das HTML vorher genau angeschaut ... und das sollte auch jeder tun, der so eine e-Mail öffnet.

    Aber erstens habe ich einen Skript Blocker und lade insbesondere nichts nach ... zweitens renne ich in einer Sandbox ... und drittens enthält das Ding nix weiter als Text, ein geklautes Amzon Logo (das ich NICHT lade!) und einen Button, der gern zu einem Link der "besonderen Art" führen würde. Ohne die Hex-Eingabe wäre das Ding nicht der Rede wert. :)

    Aber trotzdem Danke für deinen Hinweis.

    LG
    Peter
    Nichts ist ungefährlich in der EDV ... :)

    Aber ich würde jetzt doch gern vorerst mein Ziel im Auge behalten. Ich habe versucht einen vernünftigen Test Fall aufzubereiten.

    Dazu habe ich einen "Test Input.txt" erstellt mit der - nennen wir sie - hexadecimal Byte Codierung. (s. Anhang)

    Die erwartete Ausgabe seht ihr im zweiten Anhang.

    Ich habe das mit der folgenden Routine zu konvertieren versucht:

    Visual Basic-Quellcode

    1. Private Sub cmdTranslateEqu_Click(sender As Object, e As EventArgs) Handles cmdTranslateEqu.Click
    2. 'Get input from file
    3. Dim filename = "C:\Users\......\Downloads\Test Input.txt"
    4. txtInput.Text = My.Computer.FileSystem.ReadAllText(filename)
    5. 'Translate encoded data to display format
    6. Dim strOut = ""
    7. For i = 0 To txtInput.Text.Length - 1
    8. strOut &= GetEQXX(i, txtInput.Text)
    9. Next
    10. txtOutput.Text = strOut
    11. End Sub
    12. Private Function GetEQXX(i As Integer, strInput As String) As String
    13. If i > strInput.Length - 3 Then Return ""
    14. Dim digit = strInput.Substring(i, 1)
    15. If digit <> "=" Then Return ""
    16. Dim EQXX1 = strInput.Substring(i + 1, 1).ToUpper
    17. Dim EQXX2 = strInput.Substring(i + 2, 1).ToUpper
    18. Dim valDigits = "0123456789ABCDEF"
    19. If Not valDigits.Contains(EQXX1) Then Return ""
    20. If Not valDigits.Contains(EQXX2) Then Return ""
    21. Dim XValue As Integer = Convert.ToInt32(EQXX1 & EQXX2, 16) 'This does not work correctly
    22. Return Convert.ToChar(XValue) 'This does not work correctly
    23. End Function


    Das Ergebnis seht ihr im Result.jpg ... und offensichtlich ist das nicht das, was ich gern hätte. :)

    Meine Konvertierung ist also nicht Ordnung ... ich denke das mit dem .ToInt32 und .ToChar passt nicht.

    Habt ihr eine Idee, wie das Aussehen müsste ?

    LG
    Peter
    Bilder
    • Result.jpg

      53,47 kB, 784×392, 73 mal angesehen
    Dateien
    • Test Input.txt

      (501 Byte, 46 mal heruntergeladen, zuletzt: )
    • Desired Output.txt

      (167 Byte, 65 mal heruntergeladen, zuletzt: )
    Ich habs:

    VB.NET-Quellcode

    1. Dim input As String = IO.File.ReadAllText("test input.txt")
    2. Dim output As New List(Of Byte)
    3. Dim hex() As String = input.Split("=")
    4. For i = 1 To hex.Length - 1 'start at 1 because the string starts with =, so the first index is a empty string;
    5. output.Add(Convert.ToByte(hex(i), 16))
    6. Next
    7. IO.File.WriteAllBytes("res.txt", output.ToArray())


    Edit @Peter329
    Encoding = Encoding.UTF8

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Takafusa“ ()

    Erst mal vielen Dank für deinen Lösungsvorschlag.

    Allerdings mit dem WriteAllBytes umgehst du mein Problem. Du generierst aus der encodierten Eingabe einen Array mit den hexadezimalen Werten und schreibst das so wie es ist in einen File. Wenn man den einliest und in eine Textbox stellt, dann erfolgt dabei die Konvertierung in etwas lesbares.

    Aber ich will keinen Ausgabefile schreiben ... ich möchte die Ausgabe in einer Textbox stehen haben ...! Denn ich möchte ja nur den encodierten Inhalt der e-Mail am Bildschirm lesbar anzeigen.

    Natürlich könnte ich den Ausgabefile schreiben, dann mit ReadAllText einlesen und den String der Textbox zuweisen. Aber das wäre wohl ein bissl "durchs Knie in die Brust" ... :)

    Das müsste doch auch ohne den Umweg über einen File gehen ...

    LG
    Peter

    Takafusa schrieb:

    VB.NET-Quellcode

    1. IO.File.WriteAllBytes("res.txt", output.ToArray())
    Statt hier das Byte-Array auf die Platte zu schreiben kannst Du es doch behandeln wie immer Du es benötigst, z.B. in einen String konvertieren und anzeigen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Jetzt hat's geschnackelt:

    VB.NET-Quellcode

    1. Dim arr = output.ToArray()
    2. txtOutput.Text = System.Text.Encoding.UTF8.GetString(arr)


    Ich hatte das Zauberwort "UTF8" vergessen. :)

    Jetzt verstehe ich auch, was die Leute da treiben ! Die e-Mail enthält lauter 4-stellige UTF8-Codes.

    Quellcode

    1. =F0=9D=97=94 A
    2. =F0=9D=97=B8 k
    3. =F0=9D=98=81 t
    4. =F0=9D=98=82 u
    5. =F0=9D=97=AE a
    6. ...


    UTF8 kann auch normale Zeichen (ein Byte lange Zeichen aus dem Bereich von 0 - 127) enthalten, die werden nicht verkettet und dann als "normale" ASCII Zeichen interpretiert. Deshalb kann die e-Mail auch Vorschubzeichen und Klartext (z.B. Leerzeichen) enthalten.

    Die 4-Byte langen Zeichenketten sind dann Darstellungen mit Formattierung (Also Größe, italic, bold, ... etc.) Die endlosen "Language Plains" des UTF machen das wohl möglich. Und damit schreiben die Spammer sich einen kleinen Konvertierer, der ihren Text in eine "hexadezimale Byte Codierung" verwandelt und so vor den Blicken neugieriger Menschen verbirgt ... die sollten gefälligst die e-Mail öffnen und irgendwo drauf klicken. :)

    Ok ... meine Display Routine funktioniert ... ich habe viel gelernt dabei. Und noch besser finde ich, dass ich jetzt diese blöden Spams angucken kann ohne sie zu öffnen ...

    Vielen Dank an die Ratgeber ... und einen schönen Tag !

    LG
    Peter