Automatisierter und beinahe sicherer Zugang zum Internet-Banking

  • Hallo,
    hier mal ein Versuch, das Internetbanking zu automatisieren und ein wenig "abhörsicherer" zu machen.
    Alle relevanten Erläuterungen sind im Script als Komentare eingefügt.

    Spoiler anzeigen
    [autoit]


    ; ----------------------------------------------------------------------------
    ;
    ; call Banks
    ; Michael Pusch Programs 2011-2012
    ; tested and compiled May, 19., 2012
    ;
    ; ----------------------------------------------------------------------------
    ; Beschreibung:
    ; Dieses Script wurde erstellt, um Internetbanking zu automatisieren und sicherer zu machen,
    ; da keine Benutzernamen und Bank-ID's über die Tastatur eingegeben werden müssen (Key-Logger!!!)
    ; Die notwendigen Angaben werden aus einer kleinen vorab angelegten externen Textdatei (auf Floppy, CD, Stick ...) via
    ; copy & paste an den entsprechenden Stellen im IE eingegeben.
    ; Nach Beendigung des INet-Bankings wird die Textdatei automatisch geschlossen und zum Entfernen
    ; des externen Datenträgers aufgefordert.
    ; Dieses Script ist zum Aufruf von 3 verschiedenen Geldinstituten gedacht, kann aber mit etwas Aufwand
    ; auf beliebig viele Aufrufe geändert werden.
    ;
    ;============================================================================================
    ; Dieses Script ist so nicht lauffähig!
    ; Es muß vorher an den mit ";<--- Muss angepasst werden" Stellen vom Benutzer angepasst werden
    ;=============================================================================================
    ;
    #NoTrayIcon
    ; benötigte Bibliotheken integrieren
    #include <IE.au3>
    #include <GUIConstantsEx.au3>
    #include <ButtonConstants.au3>
    AutoItSetOption("MustDeclareVars", 1)
    ;
    call(doMiPsBankCalls())
    ;
    Func doMiPsBankCalls()
    ; Definition Variable
    Global $runAppl_1, $runAppl_2, $dlgName, $dlgText, $dlg, $lwFloppy, $ieFenstername, $urlBank, $inFensterNamen_1, $inFensterNamen_2, $inFensterNamen_3
    Global $radioCN_1,$radioCN_2, $radioCN_3, $oButton_1, $oButton_2, $iPath, $i_1, $i_2, $i_3
    ;
    $dlgName = "Bankaufruf"
    $dlgText = "!! ACHTUNG !! ---- !! ACHTUNG !! ---- !! ACHTUNG !!" & chr(13) & _
    "================================" & chr(13) & chr(13) & _
    "Datenträger mit Zugangsdaten eingelegt ?" & chr(13) & chr(13)
    $dlg = MsgBox(33, $dlgName, $dlgText)
    ; Wenn ja, dann Aufruf benutzerdefinierter Dialog zur Auswahl des Geldinstitutes
    ; Die Koordinaten bzw. Abmessungen der Dialogfeldelemente müssen ggf. angepasst werden.
    If $dlg = 1 then
    $lwFloppy = "[Laufwerk, ext. Datenträger]:\" ;<--- Muss angepasst werden
    If DriveStatus($lwFloppy) = "READY" Then
    ; $iPath = "[Laufwerk:\Pfad\" <--- Falls im Dialogfeld Icons verwendet werden sollen ;<--- Muss angepasst werden
    ; $i_1 = "Icon1.ico" <--- Falls im Dialogfeld Icons verwendet werden sollen ;<--- Muss angepasst werden
    ; $i_2 = "Icon2.ico" <--- Falls im Dialogfeld Icons verwendet werden sollen ;<--- Muss angepasst werden
    ; $i_3 = "Icon3.ico" <--- Falls im Dialogfeld Icons verwendet werden sollen ;<--- Muss angepasst werden
    GUICreate("Auswahl Kreditinstitute",270,195)
    GUICtrlCreateGroup("Bitte Bank auswählen:", 10, 10, 250, 145)
    ; GUICtrlCreateIcon($iPath & $i_1,-1,20,30,32,32) <--- Falls im Dialogfeld Icons verwendet werden sollen ;<--- Muss angepasst werden
    ; GUICtrlCreateIcon($iPath & $i_2,-1,20,70,32,32) <--- Falls im Dialogfeld Icons verwendet werden sollen ;<--- Muss angepasst werden
    ; GUICtrlCreateIcon($iPath & $i_3,-1,20,110,32,32) <--- Falls im Dialogfeld Icons verwendet werden sollen ;<--- Muss angepasst werden
    $radioCN_1 = GUICtrlCreateRadio("[Name Geldinstitut_1]", 70, 36, 170, 20) ;<--- Muss angepasst werden
    $radioCN_2 = GUICtrlCreateRadio("[Name Geldinstitut_2]", 70, 77, 170, 20) ;<--- Muss angepasst werden
    $radioCN_3 = GUICtrlCreateRadio("[Name Geldinstitut_3]", 70, 118, 170, 20) ;<--- Muss angepasst werden
    GUICtrlSetState($radioCN_1, $GUI_CHECKED)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $oButton_1 = GUICtrlCreateButton("OK",20,165,80,20)
    $oButton_2 = GUICtrlCreateButton("Cancel",170,165,80,20)
    GUICtrlSetState($oButton_1, $GUI_FOCUS)
    GUISetState(@SW_SHOW)
    While 1
    $dlg = GUIGetMsg()
    If $dlg = $GUI_EVENT_CLOSE Then
    Exit
    ElseIf $dlg = $oButton_1 Then
    GUISetState(@SW_HIDE)
    ExitLoop
    ElseIf $dlg = $oButton_2 Then
    Exit
    EndIf
    WEnd
    ; Die nachfolgenden $inFensterNamen_x - Variablen sind notwending, um alle im IE-Fenster
    ; möglichen Varianten des Banknamens in der später folgenden StringInStr()-Funktion
    ; abfangen zu können. (Beruht auf meinen Erfahrungswerten.)
    if GUICtrlRead($radioCN_1) = 1 Then
    $urlBank = "https://[Loggin Geldinstitut_1]" ;<--- Muss angepasst werden
    $inFensterNamen_1 = "Bank1" ;<--- eindeutiger Teil aus dem Fensternamen, ;<--- Muss angepasst werden
    $inFensterNamen_2 = "bank1" ;<--- eindeutiger Teil aus dem Fensternamen, ;<--- Muss angepasst werden
    $inFensterNamen_3 = StringUpper($inFensterNamen_2)
    EndIf
    If GUICtrlRead($radioCN_2) = 1 Then
    $urlBank = "https://[Loggin Geldinstitut_2]" ;<--- Muss angepasst werden
    $inFensterNamen_1 = "Bank2" ;<--- eindeutiger Teil aus dem Fensternamen, ;<--- Muss angepasst werden
    $inFensterNamen_2 = "bank1" ;<--- eindeutiger Teil aus dem Fensternamen, ;<--- Muss angepasst werden
    $inFensterNamen_3 = StringUpper($inFensterNamen_2)
    EndIf
    If GUICtrlRead($radioCN_3) = 1 Then
    $urlBank = "https://[Loggin Geldinstitut_3]" ;<--- Muss angepasst werden
    $inFensterNamen_1 = "Bank3" ;<--- eindeutiger Teil aus dem Fensternamen, ;<--- Muss angepasst werden
    $inFensterNamen_2 = "bank3" ;<--- eindeutiger Teil aus dem Fensternamen, ;<--- Muss angepasst werden
    $inFensterNamen_3 = StringUpper($inFensterNamen_2)
    EndIf
    $runAppl_1 = "C:\windows\system32\notepad.exe " & "[Laufwerk]:\Zugang.txt" ;<--- Muss angepasst werden
    ; Notepad mit der Zugangs.txt wird gestartet
    Run($runAppl_1, "A:\", @SW_RESTORE)
    ; IE mit "blanken" Fenster wird gestartet. Dies ist notwending, da die IE.au3 die direkte Eingabe
    ; von "https://" nicht unterstützt.
    $dlg = _IECreate("about:blank")
    _IELoadWait($dlg)
    ; ich mag's im Vollbild, daher nachfolgende Send() - Funktion
    send("!{SPACE}x")
    ; jetzt wird das eigentliche Bank-Login an den IE gesendet
    $dlg = _IENavigate($dlg, $urlBank)
    _IELoadWait($dlg)
    AutoItSetOption("WinTitleMatchMode",2)
    ; Die beiden folgenden "While - Wend" - Schleifen ermöglichen im Zusammenhang mit den weiter oben
    ; definierten $inFensterNamen_x - Variablen, dass das Script auf jeden Fall pausiert, solange das
    ; IE-Bank-Fenster geöffnet ist.
    While StringInStr(StringUpper(WinGetTitle($inFensterNamen_1,"")),$inFensterNamen_3) > 0
    WEnd
    While StringInStr(StringUpper(WinGetTitle($inFensterNamen_2,"")),$inFensterNamen_3) > 0
    WEnd
    ; Wenn das IE-Bank-Fenster geschlossen wird .....
    ; Notepad wird aktiviert, dann geschlossen
    $dlg = WinActivate("Zugang.txt - Editor", "")
    $dlg = WinClose("Zugang.txt - Editor", "")
    ; Abfrage, ob noch eine weiteres Geldinstitut besucht werden soll ...
    $dlgText = "Soll ein weiter Bankaufruf getätigt Werden?"
    $dlg = MsgBox(36, $dlgName, $dlgText)
    if $dlg = 6 Then
    ; ...wenn ja, alle Variablen auf "" und erneuter Func - Aufruf
    Call(SetVarOnNothing())
    Call(doMiPsBankCalls())
    EndIf
    ; ... wenn nein, Prüfunf auf Vorhandensein des externen Datenträgers und
    ; ggf. Aufforderung zum Entfernen.
    while DriveStatus($lwFloppy) = "READY"
    $dlgText = "Nicht vergessen:" & chr(13) & "EXTERNEN DATENTRÄGER ENTFERNEN !!"
    $dlg = MsgBox(65, $dlgName, $dlgText)
    If $dlg = 2 Then
    Call(SetVarOnNothing())
    Exit
    EndIf
    WEnd
    ;
    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ; Starten des "CCleaners" zum entfernen der temp. INet-Dateien
    ; Dies ist ein optionaler Programmteil
    If $dlg = 1 Then
    $runAppl_2 = "[Install-LW:\Install-Pfad\]CCleaner.exe /Auto" ;<--- Muss angepasst werden
    Run($runAppl_2, "", @SW_HIDE)
    EndIf
    ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ;
    ; Wenn bei Start des Scripts der erwartete externe Datenträger nicht verfügbar ist...
    ; Abfrage, ob Vorgang wiederholt werden soll. Alle Variablen werden auf "" gesetzt und
    ; die Func erneut aufgerufen (oder beendet).
    ElseIf DriveStatus($lwFloppy) = "NOTREADY" Then
    $dlgText = "Datenträger mit Zugangsdaten ist nicht eingelegt!" & chr(13) & _
    "Soll der Vorgang wiederholt werden?"
    $dlg = MsgBox(52, $dlgName, $dlgText)
    If $dlg = 6 then
    Call(SetVarOnNothing())
    Call(doMiPsBankCalls())
    EndIf
    EndIf
    EndIf
    ;
    Call(SetVarOnNothing())
    ;
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func SetVarOnNothing()
    $runAppl_1 = ""
    $runAppl_2 = ""
    $dlg = ""
    $dlgName = ""
    $dlgText = ""
    $lwFloppy = ""
    $urlBank = ""
    $inFensterNamen_1 = ""
    $inFensterNamen_2 = ""
    $inFensterNamen_3 = ""
    $radioCN_1 = ""
    $radioCN_2 = ""
    $radioCN_3 = ""
    $oButton_1 = ""
    $oButton_2 = ""
    $iPath = ""
    $i_1 = ""
    $i_2 = ""
    $i_3 = ""
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    Viel Spass beim Ausprobieren ... Für Anregungen, Verbesserungen, Kritik usw. bin ich dankbar.

    MfG.,
    HalleMike

  • Aha 8|
    ...
    Dann ist es also sicherer meine kompletten Bankdaten in einer unverschlüsselten Textdatei zu speichern??? ?(

    8o:D:D:D:D:D:rofl:

    Okay jetzt mal im Ernst:
    Wenn man sein System nicht 'sauber' halten kann oder auch wenn man 'etwas' zu viel Angst vor Übergriffen hat, dann schnappt man sich eben ne Linux-Live-CD und betreibt sein Onlinebanking ober diese... Aber ein Autoit-Script das die Daten unverschlüsselt in einer Textdatei ablegt und sie dann per copy und paste im IE?!!? einfügt... 8|

    LG
    Christoph :)

  • Hallo an alle, die sich bislang die Zeit genommen haben und danke für die Kritiken und das EINE! Verständnis.

    Zu "Christoph54" und "chip": Ja, es ist sicherer!
    1. Es erfolgt keine Tastatureingabe der sicherheitsrelevanten Daten
    2. Die txt-Datei ist nur solange erreichbar, wie der externe Datenträger erreichbar ist.
    3. Eine ABSOLUTE Sicherheit gibt's eh nicht.
    4. Ich wollte mit diesem Script keinen Preis gewinnen!

    Zu "name22":
    Warum nicht call()? Was ist daran falsch? Immerhin ist, wie mir hier ja schon ein-eindeutig zu verstehen gegeben worden ist, dass das Script durchaus ausbaufähig ist und man kann eventuell den Rückgabewert der Funktion zum Abfangen von Fehlern benutzen....

    Last but not liest zu "Alizame":
    Wenn auch noch jung an Jahren, bist Du derjenige mit dem meisten Verständnis, dem gebotenen Respekt und scheinbar ohne Arroganz.
    Denn: Richtig erkannt - ich bin neu auf diesem Gebiet und wollte eigentlich nur zur Diskussion anregen, aus der sich letztendlich mein Wissenstand vergrößern und natürlich dann auch die Programmierung professioneller werden soll.

    An alle vorher erwähnten und eventuell noch folgende Kommentarschreiber:
    Wenn man hier nur "absolut einmaliges" und "sensationelles" veröffentlichen kann, bin ich tatsächlich verkehrt!
    Und: An die "Profis" - Ihr habt auch alle mal klein angefangen.
    Also: Wer mir bei der Verbesserung des Scripts konstruktiv helfen möchte - Kommentar gerne! An alle anderen - laßt's bleiben!

    MfG., HalleMike

  • Dir ist schon bewusst, das die generation der Trojaner welcher um Bankdaten zu klauen einen simplen Keylogger verwenden schon mehr als lange vorbei sind. Dein Tool ist nicht sicherer als es direkt im Browser einzugeben bzw. noch unsicherer als das.

    Und zu deinem call empfehle ich dir dringenst mal die Grundlagen von Autoit dir anzueignen dazu hilft das http://wiki.autoit.de/wiki/index.php/Tutorial und das hier: https://autoit.de/index.php?page=Thread&amp;threadID=11898

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Ich habe ihn verstanden und darum den Hinweis auf das Tutorial und das Buch. Wenn aber bewusst nichts dazu lernen willst kann man dir auch nicht helfen.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Zu "Christoph54" und "chip": Ja, es ist sicherer!
    1. Es erfolgt keine Tastatureingabe der sicherheitsrelevanten Daten
    2. Die txt-Datei ist nur solange erreichbar, wie der externe Datenträger erreichbar ist.!

    Dein Verfahren macht es imho unsicherer, da der Datenträger in einem unbeobachteten Moment kopiert werden kann. Die einzig sichere Methode ist mit einer garantiert Schadware freien Live-CD zu booten und Passwörter niemals im Klartext irgendwo abspeichern,

    mfg autoBert


  • Zu "Christoph54" und "chip": Ja, es ist sicherer!
    1. Es erfolgt keine Tastatureingabe der sicherheitsrelevanten Daten
    2. Die txt-Datei ist nur solange erreichbar, wie der externe Datenträger erreichbar ist.
    3. Eine ABSOLUTE Sicherheit gibt's eh nicht.
    4. Ich wollte mit diesem Script keinen Preis gewinnen!


    dein Programm erzeugt eine instanz des Internetexplorer in einer GUI
    die meisten Leute verwenden einen anderen Browser als IE und haben dadurch noch nie ein Update für den IE gezogen
    und was soll daran sicher sein, wenn man sich bei der Bank einloggt mit dem Internet Explorer 6/7 ?

    ich kenne sogar Internetseiten die verweigern den login und zwingen ein erst ein update zu ziehen ;)
    und da zitiere ich mal einen lustigen spurch den ich mal fand... und indem ein fünkchen wahrheit steckt :)
    "Internet Explorer is the best browser to download a better browser."

    und zweitens, es gibt genug Viren die nicht die user eingabe abgreifen sondern die anfrage die an den Server gesendet wird
    selbst mit SSL verschlüsseltes könnte man noch easy abfangen

    mfg

  • Hey HalleMike,
    mit meinem Beitrag wollte ich nicht respektlos oä. wirken! Aber mich dann sofort als arrogant abzustempeln finde ich auch nicht okay! Okay das wollte ich nur mal gesagt haben, aber jetzt wieder zum eigentlichen Thema: Deinem Script. Was die sicherheitstechnischen Bedenken von mir und einigen Anderen angeht bleibe ich bei meiner Meinung. Da du die in deinem Script verwirklichte Methode für sicherer empfindest, als eben die 'manuelle' Eingabe/die Verwendung eines Live-Systems, ist das ja okay. Aber auch wenn das Script später wahrscheinlich nur sehr wenige effektiv nutzen werden, hat es dir natürlich einiges gebracht denn es geht ja darum Übung im Umgang mit Autoit zu sammeln und die hast du bestimmt durch dieses Projekt bekommen... 150 Zeilen auch funktionierenden Code zu schreiben ist gerade für einen Anfänger eine ordentliche Leistung! Wenn ich an meine Anfänge denke.... Ohje :D Naja und um dein Script noch zu erweitern/verbessern könntest du dir als nächstes ja mal dem Thema Verschlüsselung widmen... ;)

    LG
    Christoph :)

  • Ich verstehe nicht ganz was du hast Mike... Chip hat nach einer Erklärung bezüglich deiner Aussage "sicherer Zugang" gefragt, ich hab mich gewundert warum du Call() verwendest um jegliche Funktionen aufzurufen, obwohl "Funktionsname(Parameter)" den selben Effekt hat und sogar schneller ist. Call benutzt man für gewöhnlich nur um den Funktionsaufruf variabler und nach dem compilen veränderbar zu gestalten. Zu dem Zeitpunkt hat dich noch keiner in irgendeiner Form kritisiert..
    Wenn du dein Programm als sicher bezeichnest und es ist alles andere as sicher, aus der Sicht eines erfahreneren Programmierers, dann brauchst du dich doch nicht wundern wenn du darauf hingewiesen wirst. Schließlich stellen die meisten ihre Skripte im Forum "Skripte" vor um Rückmeldungen/Kritik zu erhalten. Das du ein Anfänger bist ist allen klar die deinen Code sehen (das soll jetzt nicht herablassend klingen), also weisen wir dich auf Fehler u.Ä. hin.
    Und Chips Vorschlag ein Tutorial und die Hilfe zu konsultieren stimme ich zu, immerhin sollte man schon wissen wie ein klassischer Funktionsaufruf evtl. mit Parametern aussieht. Das ist nun mal Grundwissen und für fortgeschrittene Programme essenziell.

  • Wenn man hier nur "absolut einmaliges" und "sensationelles" veröffentlichen kann, bin ich tatsächlich verkehrt!


    Du darfst hier alles veröffentlichen (solange es nicht gegen die Forenregeln verstößt). Aber wenn man etwas veröffentlicht, dann sollte man auch ehrlich zu sich selbst sein. Und ich denke mal du weißt selbst, dass dein Script keinerlei Sicherheit bringt, ja sogar ein Sicherheitsrisiko birgt. Warum schreibst du das dann in den Startpost? Wie wäre es mit einem einfachen "Ich möchte euch mein Script zeigen, welches Internetbanking automatisiert."?
    Aber du wolltst ja Verbesserungsvorschläge: Schau dir mal die Funktionen der crypt.au3 an. Und - wie name schon sagte - ist es total unnötig, Funktionen per Call aufzurufen.

    MfG

  • Das return xyz kann man auch mit einfachem aufruf abfangen :)
    Desweiteren empfehle auch ich dir die crypg.au3 :)

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

    • Offizieller Beitrag

    HalleMike
    Als erstes Herzlich Willkommen im Forum ( du bist übrigens ca. 80 km Luftlinie von mir entfernt ;) )
    Sei bitte nicht zu dünnhäutig. Niemand will dich hier von oben abbügeln oder Ähnliches. Wärs dir lieber, wenn man die vorhandenen Kritikpunkte ( die du ja einforderst ) in einem Zuckerteig einbackt, damit es süß zu verdauen ist. :whistling:
    Wir sind direkt, ehrlich und bis auf seltene Ausahmen korrekt im Ton. ( Wenn sich da jemand stark daneben benimmt, greifen wir auch ein )
    Wer hier postet, läßt i.A. etwas aus seinem Wissensstand und seinen Erfahrungen einfließen. Das macht die Arbeit eines Forums aus - es entsteht eine Art kollektives Wissen ( aber wir sind keine Borg :rofl: )
    Also greife Hinweise ruhig auf und versuche daraus für deine Projekte einen Gewinn zu erzielen.

    Viel Spaß noch bei uns im Forum.

  • Ist ja alles sicher gut, richtig und schön, wie hier reagiert wurde. Aber keiner, auch nicht einer, hat gesagt: Pass auf und versuch doch mal so.... (gefolgt von 'nem bischen Script)
    Also doch bloß Arroganz°! Das hat nichts mit Dünnhäutigkeit meinerseits zu tun.

    Hilfe bekommt man hier nicht.

    HalleMike