faiteanu / hibiscus.docmanager

DocManager plugin for Jameica/Hibiscus
Other
6 stars 0 forks source link

Abrufen mit chipTAN nicht möglich: Startcode für manuelle Eingabe für den TAN-Generator wird nicht angezeigt, was bei Kreditkartenumsatzabfrage allerdings funktioniert. #3

Open dreirund opened 3 years ago

dreirund commented 3 years ago

Wenn ich für die DKB abrufen will, dann soll ich eine generierte TAN eingeben, ohne dass mir der Flickercode oder Start-Code zur manuellen Eingabe in den TAN-Generator angezeigt wird. Damit komme ich natürlich nicht weiter.

Mein Zugang ist per "chipTAN" abgesichert, ich nutze kein SMS-TAN. mobile TAN oder so.

Kreditkartenabfragen mit hibiscus-mashup funktionieren alle per ChipTAN mit manueller Start-Code-Eingabe. (Und die HBCI-Girokontofunktionen funktionieren sogar mit Flickercode).

Anbei Screenshot der Stelle, wo ich mangels Input in den TAN-Generator nicht mehr weierkomme. (Bei den im Screenshot sichtbaren Scrollleisten lässt sich auch nichts scrollen.)


TAN-Eingabe ohne chipTAN-Input


dreirund commented 3 years ago

.. und hier ein Screenshot, wie es beim Kreditkartenabruf aussieht:


hibiscus-mashup Kreditkaren-Abruf ChipTAN-Dialog


faiteanu commented 3 years ago

Der Login inklusive der entsprechenden Dialoge wird von finance.websync bzw. hibiscus.mashup durchgeführt, wie auch in #2. Letztlich fehlte dort im Code nach meiner Analyse lediglich eine einzige Zeile in einer Bedingung. Der Autor hat sich jedoch strikt geweigert, andersjemandem zuliebe den Code zu reparieren, wie man im Forum nachlesen kann. Zudem möchte er seinen Code nicht öffentlich verfügbar machen und droht sogar mit Klagen. Insofern sehe ich leider nicht, wie das Problem im Rahmen des DocManagers behoben werden könnte.

dreirund commented 3 years ago

Letztlich fehlte dort im Code nach meiner Analyse lediglich eine einzige Zeile in einer Bedingung. Der Autor hat sich jedoch strikt geweigert, andersjemandem zuliebe den Code zu reparieren, wie man im Forum nachlesen kann.

Das ist ja sehr schade. Habe jedoch auf die Schnelle die entsprechende Stelle im Forum nicht gefunden.

In #2 geht es ja speziell um den Flickercode, hier bezieht es sich darauf dass unabhängig vom Flickercode auch beim manuellen Verfahren der Start-Code nicht durchgereicht wird. Magst Du die Stelle nennen, woraus hervorgeht, dass es hier um das allgemeine Probem geht? Dann kann ich ggf. im Forum auch nochmal nachhaken, wenn das Interesse größer wird kommt vllt. irgendwann doch was in Bewegung.

Zudem möchte er seinen Code nicht öffentlich verfügbar machen und droht sogar mit Klagen.

Das hibiscus-mashup-Projekt steht unter Creative Common-Lizenz CC BY-NC-ND 4.0. Damit darf das Material selber öffentlich verbreitet werden. Aber wenn bearbeitet, dann darf die Bearbeitung nicht weiter verbreitet werden .. :-(. Schade, so lebt und stirbt das Projekt mit dem Autor und es wird eine aktive Weiterverwendung guter Ideen verhindert, wenn forks ausgeschlossen werden.

Man könnte also einen patcher verbreiten, der das Material lokal abändert (also z.B. ein Buildskript, was das offizielle hibiscus-mashup runterlädt, und lokal daraus eine modifizierte Variante baut). Denn nach deutschem Recht darf ich Material, was ich selber habe, zum Eigengebrauch beliebig verändern.

Insofern sehe ich leider nicht, wie das Problem im Rahmen des DocManagers behoben werden könnte.

Man müsste also selber das "screen scrapen" neu implementieren. Was ein Aufwand ist, den man sich vermutlich nicht antun will.

Gruß!

-- "Sometimes I define a nerd as somebody who thinks that the purpose of communication is to submit your ideas to peer review. And normal people understand that the primary purpose of communication is to negotiate alignment. And these purposes tend to conflict."

-- Joscha Bach

faiteanu commented 3 years ago

Das ist ja sehr schade. Habe jedoch auf die Schnelle die entsprechende Stelle im Forum nicht gefunden.

Tatsächlich, das Forum enthält nur noch Einträge ab Juni 2021. Dann wurde die Diskussion in der Zwischenzeit gelöscht.

In #2 geht es ja speziell um den Flickercode, hier bezieht es sich darauf dass unabhängig vom Flickercode auch beim manuellen Verfahren der Start-Code nicht durchgereicht wird. Magst Du die Stelle nennen, woraus hervorgeht, dass es hier um das allgemeine Probem geht? Dann kann ich ggf. im Forum auch nochmal nachhaken, wenn das Interesse größer wird kommt vllt. irgendwann doch was in Bewegung.

Das Problem und eine mögliche Lösung stehen hier weiter unten.

Das hibiscus-mashup-Projekt steht unter Creative Common-Lizenz CC BY-NC-ND 4.0. Damit darf das Material selber öffentlich verbreitet werden. Aber wenn bearbeitet, dann darf die Bearbeitung nicht weiter verbreitet werden .. :-(. Schade, so lebt und stirbt das Projekt mit dem Autor und es wird eine aktive Weiterverwendung guter Ideen verhindert, wenn forks ausgeschlossen werden.

Man könnte also einen patcher verbreiten, der das Material lokal abändert (also z.B. ein Buildskript, was das offizielle hibiscus-mashup runterlädt, und lokal daraus eine modifizierte Variante baut). Denn nach deutschem Recht darf ich Material, was ich selber habe, zum Eigengebrauch beliebig verändern.

Das ist zum Teil richtig. "Das Material" ist in diesem Fall hibiscus.mashup.jar in kompilierter Form. Eine Bearbeitung dessen ist nicht direkt möglich. Man müsste das Material dekompilieren, an einer passenden Stelle Anpassungen vornehmen, und es dann wieder kompilieren. Wenn du solch ein Skript erstellen kannst, bist du herzlich eingeladen.

Falls du (oder andersjemand) den Quellcode hast, würde folgende Änderung vermutlich reichen. In dem Konstruktor von TANAuthDialog gibt es eine Bedingung für ein Konto, aber der else-Zweig fehlt im Original:

if (konto != null)
 // ...
else {
  dialogText = secText;
}

Damit hätte man zwar nicht alles direkt "schön" gelöst, aber der Startcode wäre sichtbar und man könnte sich einloggen.

Man müsste also selber das "screen scrapen" neu implementieren. Was ein Aufwand ist, den man sich vermutlich nicht antun will.

Genau. Erstens ist es Aufwand, zweitens kann man es nur implementieren, wenn man selber die Möglichkeit hat, es auszuprobieren. Da ich kein Konto mit chipTAN habe, fehlt mir diese Möglichkeit.

Es würde mich freuen, wenn auch weitere Institute mit dem DocManager abgerufen werden könnten, aber da bin ich auf Mithilfe von Programmieren mit entsprechenden Bankkonten angewiesen.

dreirund commented 3 years ago

"Das Material" ist in diesem Fall hibiscus.mashup.jar in kompilierter Form. Eine Bearbeitung dessen ist nicht direkt möglich. Man müsste das Material dekompilieren,

das .jar scheint mir gar nicht so sehr kompilat zu sein, sondern nur irgend eine komprimierte Form des Quelltextes.

Zumindest hat der erste sog. Java-"Decompiler", den ich testete, was geliefert was sehr nach klarem Quelltext ausschaut.

Da fand' ich dann auch die von Dir gegebene Stelle.

In sofern dürfte es prinzipiell nicht so schwierig sein, die .jar-Datei in Klartext zu dekomprimieren, Patch rein, und wieder ein .jar draus machen.

Um nett zu sein noch einen Lizenztext dazu der sagt, dass das Resultat nicht verbreitet werden darf und dass es sich um auf der eigenen Maschine bearbeitetes Material von XYZ handelt.

Bei Gelegenheit mache ich mich mal dran :-), gibt sicherlich noch ein paar Hürden zu überwinden da ich von Java und Java-Tools so gar keine Ahnung habe (daher auch zum "decompilieren" erstmal jd-gui genommen, dessen Beschreibung "A standalone graphical utility that displays Java source codes of .class files" sich erstmal nach einem einfachen Einstieg las, wo ich aber natürlich erstmal nicht direkt produktiv weiterkomme).

Danke für die Stelle!

.. Um sicherzugehen: Meinst Du im Original folgende Stelle:

  public TANAuthDialog(String tanArt, String secText) {
    super(1);
    setLabelText(i18n.tr("TAN: "));
    setShowPassword(true);
    String titleText = null;
    String dialogText = null;
    if (secText.contains("Startcode ")) {
      int restOfStringIdx = secText.indexOf("Startcode ") + 10;
      restOfStringIdx = secText.indexOf(" ", restOfStringIdx);
      secText = secText.substring(0, restOfStringIdx) + "</b><br><br>" + secText.substring(restOfStringIdx);
      secText = secText.replace("Startcode ", "<br><br><u>Startcode</u> <b>");
    } 
    BeanService service = (BeanService)Application.getBootLoader().getBootable(BeanService.class);
    SynchronizeSession session = ((WebSynchronizeBackend)service.get(WebSynchronizeBackend.class)).getCurrentSession();
    Konto konto = (session != null) ? session.getKonto() : null;
    if (konto != null)
      try {
        String subAccountText = "";
        if (!StringCharUtils.isNullOrEmptyOrNothing(konto.getUnterkonto()))
          subAccountText = "<br>Unterkonto: <b>" + konto.getUnterkonto() + "</b>"; 
        titleText = konto.getBezeichnung() + " [" + konto.getBLZ() + "]";
        dialogText = "<b>" + konto.getBezeichnung() + "</b><br>Kontonummer: <b>" + konto.getKontonummer() + "</b>" + subAccountText + "</b><br>zur Anmeldekennung: <b>" + konto.getKundennummer() + "</b><br><br>" + secText;
      } catch (Exception exception) {} 
    if (dialogText != null) {
      setTitle(i18n.tr(tanArt + "-Abfrage zu Konto: {0}", titleText));
      setText(i18n.tr("Authentifizierungsanfrage mit TAN zu Konto:<br>{0}", dialogText));
    } else {
      setTitle(i18n.tr(tanArt + "-Abfrage non-HBCI"));
      setText(i18n.tr("Bitte geben Sie die generierte TAN zum Konto ein.<br>"));
    } 
  }

Und diese wäre zu ändern in

  public TANAuthDialog(String tanArt, String secText) {
    super(1);
    setLabelText(i18n.tr("TAN: "));
    setShowPassword(true);
    String titleText = null;
    String dialogText = null;
    if (secText.contains("Startcode ")) {
      int restOfStringIdx = secText.indexOf("Startcode ") + 10;
      restOfStringIdx = secText.indexOf(" ", restOfStringIdx);
      secText = secText.substring(0, restOfStringIdx) + "</b><br><br>" + secText.substring(restOfStringIdx);
      secText = secText.replace("Startcode ", "<br><br><u>Startcode</u> <b>");
    } 
    BeanService service = (BeanService)Application.getBootLoader().getBootable(BeanService.class);
    SynchronizeSession session = ((WebSynchronizeBackend)service.get(WebSynchronizeBackend.class)).getCurrentSession();
    Konto konto = (session != null) ? session.getKonto() : null;
    if (konto != null)
      try {
        String subAccountText = "";
        if (!StringCharUtils.isNullOrEmptyOrNothing(konto.getUnterkonto()))
          subAccountText = "<br>Unterkonto: <b>" + konto.getUnterkonto() + "</b>"; 
        titleText = konto.getBezeichnung() + " [" + konto.getBLZ() + "]";
        dialogText = "<b>" + konto.getBezeichnung() + "</b><br>Kontonummer: <b>" + konto.getKontonummer() + "</b>" + subAccountText + "</b><br>zur Anmeldekennung: <b>" + konto.getKundennummer() + "</b><br><br>" + secText;
      } catch (Exception exception) {} 
      else {
        dialogText = secText;
      }
    if (dialogText != null) {
      setTitle(i18n.tr(tanArt + "-Abfrage zu Konto: {0}", titleText));
      setText(i18n.tr("Authentifizierungsanfrage mit TAN zu Konto:<br>{0}", dialogText));
    } else {
      setTitle(i18n.tr(tanArt + "-Abfrage non-HBCI"));
      setText(i18n.tr("Bitte geben Sie die generierte TAN zum Konto ein.<br>"));
    } 
  }

oder der else-zweig vor den catch-Teil?

-- Wählt man eine der Antworten zu dieser Frage zufällig aus, wie hoch ist die Wahrscheinlichkeit, dass sie korrekt ist?

a) 25 % b) 0 % c) 50 % d) 25 %

faiteanu commented 3 years ago

das .jar scheint mir gar nicht so sehr kompilat zu sein, sondern nur irgend eine komprimierte Form des Quelltextes. Zumindest hat der erste sog. Java-"Decompiler", den ich testete, was geliefert was sehr nach klarem Quelltext ausschaut.

Das nennt man genau Dekompilieren :-)

Da fand' ich dann auch die von Dir gegebene Stelle. In sofern dürfte es prinzipiell nicht so schwierig sein, die .jar-Datei in Klartext zu dekomprimieren, Patch rein, und wieder ein .jar draus machen.

Ich glaube, du vertust dich ein wenig bei der Schwierigkeit. Möchte deinen Enthusiasmus jedoch nicht bremsen.

Um nett zu sein noch einen Lizenztext dazu der sagt, dass das Resultat nicht verbreitet werden darf und dass es sich um auf der eigenen Maschine bearbeitetes Material von XYZ handelt.

Dekompilieren liegt rechtlich schon etwas in einer Grauzone, bin aber kein Experte dafür. Natürlich ist das irrelevant, so lange man sich nicht erwischen lässt bzw. es "privat" verwendet. Dass man ein entsprechendes Patch-Programm öffentlich verbreitet, dürfte jedoch eher problematisch sein.

Um sicherzugehen: Meinst Du im Original folgende Stelle:

Ja, genau richtig.