• Offizieller Beitrag

    Hi,
    so ziemlich jeder nimmt am Electronic-Banking teil. Leider hat sich noch nicht bei allen Banken der HBCI-Standard durchgesetzt.
    Für all jene, die noch mit TAN/PIN arbeiten (müssen) ist dieses Tool gedacht.
    Einige Bankingprogramme bieten ja schon die Speicherung der TAN an. Aber das geschieht entweder im Klartext, oder die ganze Liste wird im Moment des Zugangs zum Programm entschlüsselt. Seeeehr sinnvoll. :D
    (Vielleicht gibt es auch Programme, die es anders machen. Aber die mir bekannten sind nicht so toll.)

    In meiner TAN-Verwaltung sind die TAN einmalig, während sie erfaßt werden, in einer Liste unverschlüsselt sichtbar. Sie können dann noch vom User bearbeitet werden (z.B. Schreibfehler korrigieren).
    Anschließend wird ein Paßwort angefordert und damit werden die TAN verschlüsselt in einer Datei abgespeichert.
    Wenn der User eine TAN verwenden möchte, doppelklickt er darauf in der Liste, gibt den Verwendungszweck ein, anschließend das Paßwort.
    Jetzt wird diese eine TAN entschlüsselt und an die Zwischenablage übergeben.
    Datum und Verwendungszweck werden anschließend in der Datei gespeichert und die Liste wird aktualisiert.

    Spoiler anzeigen
    [autoit]

    #include <file.au3>
    #include <array.au3>
    #include <String.au3>
    #include <GUIConstants.au3>
    #Include <GuiList.au3>
    Opt("GUIOnEventMode", 1)
    Global Const $WM_COMMAND = 0x0111
    Global Const $WM_NOTIFY = 0x004E
    Global Const $NM_FIRST = 0
    Global Const $NM_LAST = (-99)
    Global Const $NM_CLICK = ($NM_FIRST - 2)
    Global Const $NM_DBLCLK = ($NM_FIRST - 3)
    Global Const $NM_RCLICK = ($NM_FIRST - 5)
    Global Const $NM_RDBLCLK = ($NM_FIRST - 6)
    Dim $listPath = 'trans_list.txt', $arTAN, $arErfass[1]
    Dim $neu = 0, $Salmon = 0xFA8072, $PaleGreen = 0x98FB98

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

    ; TAN-Erfassung GUI
    $TanErfass = GUICreate("TAN - Liste erfassen", 257, 424, -1, -1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "TanErfassClose")
    $Label1 = GUICtrlCreateLabel("TAN - Listen - Nr.:", 16, 16, 89, 17)
    $inListNr = GUICtrlCreateInput("", 109, 13, 121, 21, BitOR($ES_RIGHT,$ES_AUTOHSCROLL))
    $Group1 = GUICtrlCreateGroup(" TAN ", 16, 44, 217, 329)
    $lstTAN = GUICtrlCreateList('0', 25, 59, 200, 305, BitOR($WS_VSCROLL,$WS_BORDER))
    $mnu = GUICtrlCreateContextMenu($lstTAN)
    $itemChange = GUICtrlCreateMenuItem('Ändern', $mnu)
    GUICtrlSetOnEvent(-1, 'changeTAN')
    $itemDelete = GUICtrlCreateMenuItem('Löschen', $mnu)
    GUICtrlSetOnEvent(-1, 'deleteTAN')
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $bSave = GUICtrlCreateButton("Verschlüsseln && Speichern", 16, 390, 217, 22, 0)
    GUICtrlSetOnEvent(-1, 'bSaveClick')
    ; /TAN-Erfassung GUI
    ; Main GUI
    $Form1 = GUICreate("TAN - Verwaltung", 667, 363, -1, -1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "AForm1Close")
    $ListView1 = GUICtrlCreateListView("lfd. Nr.|TAN|Datum|Verwendungszweck", 16, 34, 636, 289, $LVS_NOSORTHEADER, _
    BitOR($LVS_EX_GRIDLINES,$LVS_EX_FULLROWSELECT))
    _GUICtrlListViewSetColumnWidth(-1, 0, 50)
    _GUICtrlListViewSetColumnWidth(-1, 1, 190)
    _GUICtrlListViewSetColumnWidth(-1, 2, 100)
    _GUICtrlListViewSetColumnWidth(-1, 3, 290)
    _GUICtrlListViewJustifyColumn(-1, 0, 1)
    _GUICtrlListViewJustifyColumn(-1, 1, 2)
    _GUICtrlListViewJustifyColumn(-1, 2, 2)
    _GUICtrlListViewJustifyColumn(-1, 3, 0)
    $Label1 = GUICtrlCreateLabel("TAN - Listen - Nr.:", 220, 9, 89, 17)
    $ListenNr = GUICtrlCreateInput("", 316, 6, 129, 21, BitOR($ES_RIGHT,$ES_AUTOHSCROLL,$ES_READONLY))
    $Label2 = GUICtrlCreateLabel("Anzahl freier TAN:", 16, 9, 90, 17)
    $freeTAN = GUICtrlCreateInput("", 110, 6, 33, 21, BitOR($ES_RIGHT,$ES_AUTOHSCROLL,$ES_READONLY))
    $bTANneu = GUICtrlCreateButton('TAN - Liste erfassen', 502, 6, 150, 21)
    GUICtrlSetOnEvent(-1, "bTANneuClick")
    $Label3 = GUICtrlCreateLabel("TAN auswählen mit Doppelklick - Dechiffrierung und Übergabe an Zwischenablage nach Paßwort-Abfrage", 16, 336, 636, 17, $SS_CENTER)
    ; /Main GUI

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

    If _FileReadToArray($listPath, $arTAN) = 0 Then
    If MsgBox(262180, 'FEHLER!', 'TAN - Liste konnte nicht geladen werden.' & @LF & 'Datei: ' & $listPath & ' nicht gefunden.' & @LF & _
    'Wenn die TAN - Liste bereits angelegt wurde,' & @LF & _
    'muß die Datei sich im selben Verzeichnis,' & @LF & _
    'wie dieses Programm befinden.' & @LF & @LF & _
    'Wollen Sie jetzt eine TAN - Liste erfassen?') = 6 Then
    bTANneuClick()
    $neu = 1
    Else
    Exit
    EndIf
    EndIf

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

    If $neu = 0 Then
    _ArrayDelete($arTAN, 0)
    GUISetState(@SW_SHOW, $Form1)
    _writeListView()
    EndIf
    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
    GUIRegisterMsg($WM_NOTIFY, "WM_Notify_Events")

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

    While 1
    Sleep(100)
    WEnd

    Func AForm1Close()
    Exit
    EndFunc

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

    Func TanErfassClose()
    If (Not FileExists($listPath)) Then
    MsgBox(0, 'FEHLER!', 'Es wurde noch keine TAN-Liste angelegt!' & @LF & 'Das Programm wird beendet.')
    Exit
    EndIf
    GUISetState(@SW_SHOW, $Form1)
    GUISetState(@SW_HIDE, $TanErfass)
    EndFunc

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

    Func ListViewDoubleClick()
    $idx = _GUICtrlListViewGetSelectedIndices($ListView1)
    If String(_GUICtrlListViewGetItemText($ListView1, $idx, 2)) <> '0' Then
    MsgBox(0, 'ACHTUNG!', 'Diese TAN wurde bereits verwendet.')
    Return
    EndIf
    If MsgBox(262180, 'TAN abrufen', 'Wollen Sie die TAN mit der' & @LF & 'lfd. Nr.: ' & $idx+1 & @LF & 'jetzt verwenden ?') = 7 Then Return
    Local $arReplace[4]=[3,_GUICtrlListViewGetItemText($ListView1, $idx, 1), @MDAY&'.'&@MON&'.'&@YEAR, _
    InputBox('Verwendungszweck', 'Bitte geben Sie den Verwendungszweck ein')]
    $arTAN[$idx+2] = $arReplace
    _writeFromArrayTAN()
    ClipPut( _StringEncrypt(0, _GUICtrlListViewGetItemText($ListView1, $idx, 1), _
    InputBox('Paßwort Entschlüsselung', 'Bitte jetzt das Paßwort zur Entschlüsselung eingeben.', '', '•')))
    MsgBox(0, 'Zwischenablage', 'Die TAN wurde in die Zwischenablage eingefügt.')
    _GUICtrlListViewDeleteAllItems($ListView1)
    _FileReadToArray($listPath, $arTAN)
    _ArrayDelete($arTAN, 0)
    _writeListView()
    EndFunc

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

    Func _writeFromArrayTAN()
    Local $arTmp[UBound($arTAN)]
    $arTmp[0] = $arTAN[0]
    $arTmp[1] = $arTAN[1]
    For $i = 2 To UBound($arTAN)-1
    $arTmp[$i] = _SubArrayGetEntry($arTAN, 1, $i) & ';' & _
    _SubArrayGetEntry($arTAN, 2, $i) & ';' & _
    _SubArrayGetEntry($arTAN, 3, $i)
    Next
    If FileExists($listPath) Then FileMove($listPath, $listPath & '.BAK')
    _FileWriteFromArray($listPath, $arTmp)
    EndFunc

    Func bTANneuClick()
    If FileExists($listPath) Then MsgBox(0, 'HINWEIS', 'Nach dem Erfassen einer neuen TAN - Liste' & @LF & _
    'kann auf die bisherige Liste nicht mehr zugegriffen werden.' & @LF & _
    'Sie wird unter dem Namen: ' & $listPath & '.BAK im Programmverzeichnis abgelegt.')
    GUISetState(@SW_HIDE, $Form1)
    GUISetState(@SW_SHOW, $TanErfass)
    SplashTextOn('TAN - Nummern eingeben', @LF & ' Um die Erfassung der TAN - Nummern zu aktivieren,' & @LF & _
    ' bitte einen Doppelklick in die Liste ausführen' & @LF & _
    ' Um das Eingabefenster zu schließen, bei leerem Eingabefeld OK klicken.' & @LF & _
    ' Per Rechtsklick auf einen markierten Eintrag kann dieser:' & @LF & _
    ' - geändert oder' & @LF & _
    ' - gelöscht werden.', 550, 150, -1, -1, 4)
    Sleep(12000)
    SplashOff()
    EndFunc

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

    Func _writeListView()
    Local $free = 0, $arLV[UBound($arTAN)-2]
    GUICtrlSetData($ListenNr, $arTAN[0])
    For $i = 2 To UBound($arTAN)-1
    $arTAN[$i] = StringSplit($arTAN[$i], ';')
    $arLV[$i-2] = GUICtrlCreateListViewItem($i-1 & '|' & _SubArrayGetEntry($arTAN, 1, $i) _
    & '|' & _SubArrayGetEntry($arTAN, 2, $i) _
    & '|' & _SubArrayGetEntry($arTAN, 3, $i), $ListView1)
    If _SubArrayGetEntry($arTAN, 2, $i) = 0 Then
    $free += 1
    GUICtrlSetBkColor($arLV[$i-2], $PaleGreen)
    Else
    GUICtrlSetBkColor($arLV[$i-2], $Salmon)
    EndIf
    Next
    GUICtrlSetData($freeTAN, $free)
    EndFunc

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

    Func List_DoubleClick()
    $TAN = InputBox('TAN - Erfassung', 'Bitte hier die TAN eingeben')
    If $TAN <> '' Then
    _GUICtrlListAddItem($lstTAN, $TAN)
    _GUICtrlListReplaceString($lstTAN, 0, String(_GUICtrlListCount($lstTAN)-1))
    Else
    Return
    EndIf
    List_DoubleClick()
    EndFunc

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

    Func changeTAN()
    $idx = _GUICtrlListGetCaretIndex($lstTAN)
    $new = InputBox('TAN - Erfassung', 'Bitte korrigieren', _GUICtrlListGetText($lstTAN, $idx))
    If $new <> '' Then _GUICtrlListReplaceString($lstTAN, $idx, String($new))
    EndFunc

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

    Func deleteTAN()
    $idx = _GUICtrlListGetCaretIndex($lstTAN)
    If MsgBox(262180, 'Löschen', 'Soll:' & @LF & _GUICtrlListGetText($lstTAN, $idx) & @LF & 'wirklich gelöscht werden?') = 6 Then
    _GUICtrlListDeleteItem($lstTAN, $idx)
    _GUICtrlListReplaceString($lstTAN, 0, String(_GUICtrlListCount($lstTAN)-1))
    EndIf
    EndFunc

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

    Func bSaveClick()
    $listNr = GUICtrlRead($inListNr)
    If $listNr = '' Then
    MsgBox(0, '', 'Listen-Nr. wurde nicht erfaßt!')
    Return
    EndIf
    $anz = _GUICtrlListCount($lstTAN)
    If $anz < 2 Then
    MsgBox(0, '', 'Keine TAN-Nr. erfaßt!')
    Return
    EndIf
    ReDim $arErfass[$anz+1]
    $arErfass[0] = $listNr
    $arErfass[1] = $anz
    $KEY = InputBox('Paßwort Verschlüsselung', 'Bitte jetzt das Paßwort zur Verschlüsselung eingeben.', '', '•')
    For $i = 1 To $anz-1
    $arErfass[$i+1] = _StringEncrypt(1, _GUICtrlListGetText($lstTAN, $i), $KEY) & ';0;'
    Next
    If FileExists($listPath) Then FileMove($listPath, $listPath & '.BAK', 1)
    _FileWriteFromArray($listPath, $arErfass)
    _GUICtrlListViewDeleteAllItems($ListView1)
    _FileReadToArray($listPath, $arTAN)
    _ArrayDelete($arTAN, 0)
    TanErfassClose()
    _writeListView()
    EndFunc

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

    Func _SubArrayGetEntry($ARRAY, $SubIdx, $iDim1, $iDim2=-1)
    If (Not IsArray($ARRAY)) Then
    SetError(1)
    Return 0
    EndIf
    If ($iDim1 < 0) Or ($iDim1 > UBound($ARRAY)-1) Then
    SetError(2)
    Return 0
    EndIf
    Local $UbSecond = UBound($ARRAY, 2)
    If @error Then
    If $iDim2 <> -1 Then
    SetError(3)
    Return 0
    EndIf
    ElseIf ($iDim2 < -1) Or ($iDim2 > $UbSecond-1) Then
    SetError(2)
    Return 0
    EndIf
    Local $sub
    Switch $iDim2
    Case -1
    $arSub = $ARRAY[$iDim1]
    Case Else
    $arSub = $ARRAY[$iDim1][$iDim2]
    EndSwitch
    If ($SubIdx < 0) Or ($SubIdx > UBound($arSub)-1) Then
    SetError(4)
    Return 0
    Else
    Return $arSub[$SubIdx]
    EndIf
    EndFunc

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

    Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    Local $nNotifyCode = BitShift($wParam, 16)
    Local $nID = BitAND($wParam, 0xFFFF)
    Local $hCtrl = $lParam
    Local Const $LBN_ERRSPACE = (-2);
    Local Const $LBN_SELCHANGE = 1;
    Local Const $LBN_DBLCLK = 2;
    Local Const $LBN_SELCANCEL = 3;
    Local Const $LBN_SETFOCUS = 4;
    Local Const $LBN_KILLFOCUS = 5;

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

    Switch $nID
    Case $lstTAN
    Switch $nNotifyCode
    Case $LBN_ERRSPACE
    ;~ _DebugPrint("$LBN_ERRSPACE")
    Case $LBN_SELCHANGE
    ;~ _DebugPrint("$LBN_SELCHANGE")
    Case $LBN_SELCANCEL
    ;~ _DebugPrint("$LBN_SELCANCEL")
    Case $LBN_SETFOCUS
    ;~ _DebugPrint("$LBN_SETFOCUS")
    Case $LBN_KILLFOCUS
    ;~ _DebugPrint("$LBN_KILLFOCUS")
    Case $LBN_DBLCLK
    List_DoubleClick()
    EndSwitch
    EndSwitch
    ; Proceed the default Autoit3 internal message commands.
    ; You also can complete let the line out.
    ; !!! But only 'Return' (without any value) will not proceed
    ; the default Autoit3-message in the future !!!
    Return $GUI_RUNDEFMSG
    EndFunc ;==>MY_WM_COMMAND

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

    Func WM_Notify_Events($hWndGUI, $MsgID, $wParam, $lParam)
    ;#forceref $hWndGUI, $MsgID, $wParam
    Local $tagNMHDR, $event, $hwndFrom, $code
    $tagNMHDR = DllStructCreate("int;int;int", $lParam);NMHDR (hwndFrom, idFrom, code)
    If @error Then Return
    $event = DllStructGetData($tagNMHDR, 3)
    Select
    Case $wParam = $ListView1
    Select
    Case $event = $NM_CLICK
    ;~ ListView_Click ()
    Case $event = $NM_DBLCLK
    ListViewDoubleClick()
    Case $event = $NM_RCLICK
    ;~ ListView_RightClick ()
    Case $event = $NM_RDBLCLK
    ;~ ListView_RightDblClick ()
    EndSelect
    EndSelect
    $tagNMHDR = 0
    $event = 0
    $lParam = 0
    EndFunc ;==>WM_Notify_Events

    [/autoit]

    Und so sieht es aus:

    http://img-up.net/?up=TANjh6.png

  • Könntest du das Tool noma bitte für ganz dumme erklären. Ich verstehe dein Tool nämlich grad nicht so ganz^^ Ich hab meine Tan-Liste auf einem Blatt Papier mit nem Datumsfeld und nem Verwebdungszweck, das wars :X

  • hier hsat du die tans eben nicht auf papier, sondern virtuell :P

    Und du behälst leicht den überblick =D

  • Würde aber heißen, dass cih sie erste komplett in die Liste eintragen muss, oder?

  • Ich sehe hier vor allem den Vorteil bei Nutzung verschiedener Rechner zum Online-Banking. Wer immer noch mit einer TAN-Liste hantieren muß ist ja leider gestraft genug. So kann man aber die TAN-Liste (mit Programm) auf z. Bsp. einem USB-Stick immer mit sich führen.

    (Natürlich sollte frau/man seine Bankgeschäfte nun tunlichst nicht in einem Internet-Cafe oder ähnlich unsicheren Orten durchführen...)

    • Offizieller Beitrag

    Also ich hab von meiner Bank auch ne TAN Liste. Bei Überweisung wird dann immer eine spezielle TAN angefordert. Dabei vermeide ich es ganz massiv auf freunden Rechner Online Banking zu machen. Wenn ich im I-Net Cafe sitze muss es halt reichen bis ich bei Freunden oder am Besten zu Hause bin.
    Tolle Idee, aber für mich geht Sicherheit vor Bequemlichkeit.

  • Zitat

    Original von Xenobiologist
    *hust* ich äh arbeite in einem Rechenzentrum für Banken. Welche Bank nutzt denn noch TAN auf Papier?

    Die Stadtsparkase -.-*. Ich habe auch so ne tolle Liste die ich andauernd verlege.....
    Also ich werds mal testen. Thnx Bugfix


    MfG

    akira2012

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***

  • bugfix, warst du ncith mal der der mir eine predigt gehalten das tans niiiiiiiiiiie gespechert werden solten? :D

    • Offizieller Beitrag

    Also warum das überhaupt?
    Ich selbst nutze HBCI mit Chipkarte. Bei der Bank meiner Frau war dies bisher nicht möglich und da ich einfach keine Lust habe immer nach dem blöden Zettel mit der TAN-Liste zu suchen um eine Rechnung meiner Frau zu begleichen, habe ich dieses Tool geschrieben.

    @derda: Dazu steh ich nach wie vor :D. Im Klartext sollte man die TAN nicht auf dem PC speichern. Aber in chiffrierter Form mit dem Paßwort im Kopf halte ich es für ausreichend sicher. Zumal eh keiner Zugang auf den PC hat. Außerdem hab ich das alles auf 'nem alten USB-Stick, den ich dann nur bei Bedarf anstecke.

    @Sn0opy: Ja, die TAN-Liste mußt du schon im PC erfassen. Das ist auch das Erste was beim Programmstart passiert - Aufforderung eine TAN-Liste zu erfassen.

  • Hi,

    bei mir zeigt er mir diese Fehler an wenn ich es ausführen möchte.

    bei euch auch?

  • Zitat

    Original von peethebee
    Aktuelle AutoIt-Version installiert?

    man man man....was würde man ohne euch machen?

    vielen dank!;)

  • ||

    An sich find ich die Idee gut. Man kann auch später noch überblicken für was man die Tans verwendet hat und vor allen Dingen ist dann die benutzte gekennzeichnet.

    Allerdings die Tan's einpflegen und dann die physischen wegschmeißen, wäre sehr kritisch. Besonders wenn Fehler unterlaufen sind.

    Ganz ehrlich. Ich kenn aus Erfahrung gar kein anderes Verfahren als TAN-Listen. Find die aber nich wirklich schlimm.

    BugFix

    Find es nicht unbedingt notwendig alle Tan's anzuzeigen. Dazu folgende Anregung. Man fragt eine Nummer ab und fühlt die restlichen Dialogfelder auf => submit und die Tan wird als genutzt markiert. Angezeigt wird der Verwendungszweck für jede Tan, nur halt die TAN nich. Höchstens per Anfrage (Button etc.).

    Cool wäre auch eine Warnung wenn nur noch zehn oder fünf TANs übrig sind. Damit man eine Übersicht hat.

    ||

    • Offizieller Beitrag
    Zitat

    Cool wäre auch eine Warnung wenn nur noch zehn oder fünf TANs übrig sind. Damit man eine Übersicht hat.


    Da reicht doch schon, wenn man lesen kann :D
    Oberste Anzeigezeile in der GUI: "Anzahl freier TAN"

    Zitat

    Allerdings die Tan's einpflegen und dann die physischen wegschmeißen, wäre sehr kritisch. Besonders wenn Fehler unterlaufen sind.


    Ich betrachte dieses Verfahren eh als Auslaufmodell. Insofern werde ich da keine großen Anstrengungen weiter machen. Ansonsten könnte man sich hier an einem OCR-Verfahren zum Einlesen versuchen :rolleyes:
    Wenn du Lust dazu hast...

  • ||

    Ja gut da bin ich wohl zu hastig rübergeflogen. An OCR hab ich auch schon gedacht, aber ist die Mühe nicht wert. Trotz alle dem keine schlechte Idee.

    ||

  • Hallo BugFix,

    kannst Du bitte das Tan-Tool für die autoit-Version 3.2.10.0 anpassen? Zur Zeit habe ich bei der 3.2.10.0 Version stehts eine Fehlermeldung.
    Vielen Dank in voraus.