1. #1

    Registriert seit
    28.10.2011
    Beiträge
    630
    Thanked 281 Times in 169 Posts

    Standard Aktueller Huffman-Tree

    Hey ho!

    Ich versuche aktuell den neusten Huffman-Tree zu verwenden, da er sich wohl minimal verändetr hat.
    Egal in welcher Form das Tree verwendet wird, das parsen habe ich erstmal gelassen und mache es aktuell auf anderem Wege:
    Ich lese den fertigen Tree direkt aus die StApp aus und speichere diese als JSON. So brauche ich den Baum nicht builden, sondern kann direkt den Decompressor verwenden:
    import java.awt.Font;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.lang.reflect.AccessFlag;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.nio.charset.Charset;
    import java.util.Arrays;
    import java.util.HashMap;
    import java.io.*;
    import java.nio.charset.Charset;
    import org.json.JSONArray;

    import javassist.ClassPool;
    import javassist.CtClass;
    import javassist.CtField;
    import javassist.CtMethod;
    import javassist.Modifier;
    import javassist.bytecode.CodeAttribute;
    import javassist.bytecode.CodeIterator;
    import javassist.bytecode.MethodInfo;
    import javassist.bytecode.analysis.Type;
    import java.util.Base64;

    public class Demo extends hn {
    private String HuffmanTree = null;
    private String GenericProtocol = null;
    private HashMap<String, String> data = new HashMap();

    public Demo(String hostname, int port) {
    super(hostname, port);

    try {
    ClassPool classPool = ClassPool.getDefault();
    Class<?> groupChat = this.getClass();
    Class<?> client = groupChat.getSuperclass();

    for(Field f : client.getDeclaredFields()) {
    f.setAccessible(true);

    if(f.getGenericType().getTypeName().equals("java.lang.String")) {
    String value = (String) f.get(this);

    if(value == null) {
    continue;
    }

    if(value.startsWith("\b") && value.length() > 10) {
    this.HuffmanTree = value;

    data.put("HUFFMAN", f.getName());
    } else if(value.startsWith("-") && value.length() > 10) {
    this.GenericProtocol = value;

    data.put("GENERIC_PROTOCOL", f.getName());
    }
    } else {
    //System.out.println(f.getGenericType().getTypeName());
    }
    }

    // private final void hn.v2(java.lang.String)
    Method found = null;
    int count = 0;

    for(Method m : client.getDeclaredMethods()) {
    if(found != null) {
    break;
    }

    if(m.accessFlags().contains(AccessFlag.PRIVATE) && m.accessFlags().contains(AccessFlag.FINAL)) {
    if(m.getGenericReturnType().getTypeName().equals("void")) {
    java.lang.reflect.Type[] params = m.getGenericParameterTypes();

    if(params.length == 1) {
    if(params[0].getTypeName().equals("java.lang.String")) {
    CtMethod method = classPool.get(client.getName()).getDeclaredMethod(m.getName());
    MethodInfo methodInfo = method.getMethodInfo();
    CodeAttribute codeAttribute = methodInfo.getCodeAttribute();
    CodeIterator codeIterator = codeAttribute.iterator();

    while (codeIterator.hasNext()) {
    int index = codeIterator.next();
    int opcode = codeIterator.byteAt(index);

    if(javassist.bytecode.Mnemonic.OPCODE[opcode] == "new") {
    ++count;

    if(count == 2) {
    found = m;
    break;
    }
    }
    }
    }
    }
    }
    }
    }

    /* Init Huffman */
    Method method = client.getDeclaredMethod(found.getName(), String.class);
    method.setAccessible(true);
    method.invoke(this, this.HuffmanTree);

    /* Get Decoder */
    Field field = client.getDeclaredField("ra");
    field.setAccessible(true);
    Object fieldValue = field.get(client);

    Class<? extends Object> Encoder = fieldValue.getClass();

    /* Call the Decoder */
    Method mm = Encoder.getDeclaredMethod("v", byte[].class);
    method.setAccessible(true);
    Object result = mm.invoke(fieldValue, new byte[] { (byte) 0xb4, (byte) 0x1b, (byte) 0xf8, (byte) 0x16,(byte) 0x8d, (byte) 0x51, (byte) 0xb5, (byte) 0x44, (byte) 0x5f, (byte) 0xb5, (byte) 0xa4 });
    System.out.println("Method Result: " + result);


    Field parsed = Encoder.getDeclaredField("o");
    parsed.setAccessible(true);
    Object[] parsedValue = (Object[]) parsed.get(fieldValue);
    String json = new JSONArray(parsedValue).toString();
    System.out.println(Base64.getEncoder().encodeToString(json.getBytes()));
    //System.out.println("o = " + new JSONArray(parsedValue).toString());

    try (FileOutputStream fos = new FileOutputStream("TreeJS.json")) {
    System.err.println("SAVE TREE");
    fos.write(json.getBytes());




    // Eingabestream mit Cp-1215 Encoding
    InputStream inputStream = new FileInputStream("TreeJS.json");
    Reader reader = new InputStreamReader(inputStream, Charset.forName("cp1252"));

    // Ausgabestream mit UTF-8 Encoding
    OutputStream outputStream = new FileOutputStream("TreeUC.json");
    Writer writer = new OutputStreamWriter(outputStream, Charset.forName("UTF-8"));

    // Puffer für die Daten
    char[] buffer = new char[1024];
    int bytesRead;
    while ((bytesRead = reader.read(buffer)) != -1) {
    writer.write(buffer, 0, bytesRead);
    }

    // Streams schließen
    reader.close();
    writer.close();



    } catch (IOException e) {
    e.printStackTrace();
    }
    Field e = Encoder.getDeclaredField("e");
    e.setAccessible(true);
    System.out.println("e = " + e.get(fieldValue));

    Field t = Encoder.getDeclaredField("t");
    t.setAccessible(true);
    System.out.println("t = " + t.get(fieldValue));

    Field p = Encoder.getDeclaredField("p");
    p.setAccessible(true);
    System.out.println("p = " + p.get(fieldValue));

    Field z = Encoder.getDeclaredField("z");
    z.setAccessible(true);
    System.out.println("z = " + z.get(fieldValue));

    Field k = Encoder.getDeclaredField("k");
    k.setAccessible(true);
    System.out.println("k = " + k.get(fieldValue));

    Field v = Encoder.getDeclaredField("v");
    v.setAccessible(true);
    System.out.println("v = " + v.get(fieldValue));

    Field r = Encoder.getDeclaredField("r");
    r.setAccessible(true);
    byte[] rVal = (byte[]) r.get(fieldValue);
    System.out.println("r = " + new JSONArray(rVal).toString());




    /*
    /* Get Encoder var
    for(Field dd : Encoder.getDeclaredFields()) {
    System.out.println(dd.getName());
    dd.setAccessible(true);

    System.out.println(dd.get(fieldValue));
    }
    */

    } catch (Exception e) {
    e.printStackTrace();
    }
    }


    public static void main(String[] args) {
    new Demo("chat.knuddels.de", 2710);
    }

    @Override
    public void n(String arg0) {}

    @Override
    public void nf() {}

    @Override
    public void oc() {}

    @Override
    public void ow(Font arg0, Font arg1, String arg2) {}

    @Override
    public void ro() {}

    @Override
    public void v(String arg0, String arg1) {}
    }


    Das Resultat schaut dann wie folgt aus:
    [[[[[[[[[null,"y"],[null,"|/serverpp \""]],[[[null,"tt"],[null,"D"]],[[[[[null,"ea"],[[null,"ud"],[[[null,"\u0083"],[[[null,"з"],[[null,"Ú"],[null,"Þ"]]],[null,"\u20ac"]]],[[null,"\u203e"],[null,"\u0085"]]]]],[[null,"ür"],[null,"È"]]],[[null,"Ste"],[null,"eck"]]],[[null,"06"],[[null,"Mafia"],[[[null,"67"],[null,"NI"]],[[null,"lb"],[null,"ou"]]]]]]]],[null,"#"]],[null,"\n"]],[null,"°"]],[[[[[[[[null,"si"],[null,"pla"]],[[null,"ti"],[null,"for"]]],[null,"\f"]],[[[[[null,"boy"],[null,"\r"]],[[null,"man"],[[null,"Kl"],[[null,"97"],[null,"ub"]]]]],[[[null,"urg"],[null,"kte"]],[[null,"OK"],[null,"ue"]]]],[null,"b"]]],[[[[[[null,"op"],[[null,"ev"],[null,"Ob"]]],[[[null,"per"],[null,"Ko"]],[null,"Mo"]]],[null,"_°>_h"]],[null,"m"]],[[[[null,"di"],[null,"ra"]],[[[null,"j"],[[[[[null,"\u0082"],[[[[null,"ÏŠ"],[null,"Ù"]],[null,"Æ"]],[null,"Å¡"]]],[[null,"¹"],[[null,"â–¬"],[[null,"É"],[null,"ø"]]]]],[null,"53"]],[[null,"lh"],[[null,"\u2022"],[null,"`"]]]]],[null,"py"]]],[[null,"13"],[null,"nn"]]]]],[[[null,"ã"],[[[[[null,"rc"],[null,"_nicklist_"]],[[null,"ef"],[null,"bra"]]],[[null,"ee"],[[null,"ten"],[null,"nc"]]]],[[[null,"?d="],[[null,"Wo"],[[[null,"77"],[null,"ú"]],[null,"94"]]]],[[null,"ing"],[[null,"\u000e"],[null,"02"]]]]]],[[[[[null,"De"],[null,"au"]],[[[[null,"Ru"],[[null,"oy"],[null,"km"]]],[null,"eig"]],[[null,"Es"],[[null,"ks"],[null,"Ol"]]]]],[null,"5"]],[[[null,"E"],[[null,"ii"],[[null,"\u0016"],[[[null,"mf"],[null,"Fo"]],[[null,"sk"],[[[[null,"²"],[[null,"â•�"],[null,"\u009e"]]],[[[[null,"ï*¼"],[null,"ﺡ"]],[[null,"ﺦ"],[null,"\u2019"]]],[[null,"Ä™"],[[null,"ﮎ"],[null,"ﻶ"]]]]],[null,"\u0015"]]]]]]],[[[[null,"Er"],[[null,"use"],[null,"On"]]],[[null,"ol"],[[null,"89"],[[null,"kö"],[null,"Ze"]]]]],[[null,"art"],[null,"ri"]]]]]]],[[[[[null,"w"],[[[[null,"co"],[[[[null,"\u0019"],[null,"Ä"]],[null,"Ct"]],[null,"va"]]],[null,"bi"]],[[null,"lin"],[[null,"hr"],[null,"id"]]]]],[[[[[null,"do"],[null,"nk"]],[[null,"xx"],[[[null,"wb"],[[null,"\u0018"],[[[null,"к"],[null,"Ã�"]],[null,"\u008b"]]]],[[null,"ph"],[null,"fw"]]]]],[[[null,"noc"],[null,"we"]],[null,"yer"]]],[[[null,"fe"],[[null,"ko"],[null,"ht"]]],[[null,"mi"],[[null,"100"],[null,"31"]]]]]],[[null,"3"],[null,"l"]]],[[[[[[null,"W"],[null,"fc"]],[[[[[null,"kü"],[[[null,"в"],[[null,"ù"],[[[null,"Ò“"],[null,"â„¢"]],[null,"а"]]]],[null,"´"]]],[null,"iz"]],[null,"09"]],[null,"BN"]]],[[null,"im"],[null,"\u0001"]]],[[null,"\u0000p\u0000"],[[[[[null,"Kr"],[[null,"Oo"],[null,"eg"]]],[null,"Pun"]],[[null,"yl"],[null,"eh"]]],[[[null,"Ro"],[null,"Su"]],[[[null,"xe"],[null,"hel"]],[null,"hlt"]]]]]],[[[[[null,"et"],[null,"sm"]],[[null,"M"],[[null,"pa"],[null,"38"]]]],[[null,"z"],[[[[null,"Fl"],[null,"48"]],[null,"uf"]],[[null,"Knu"],[null,"Ni"]]]]],[[[[[null,"hi"],[[[null,"lz"],[null,"Ãœ"]],[null,"her"]]],[[null,"So"],[[[null,"Sü"],[null,"uh"]],[[[[null,"→"],[null,"â–‘"]],[null,"н"]],[null,"rü"]]]]],[null,"Fh"]],[[[null,"Min"],[null,"ba"]],[[null,"pl"],[null,"0,0,0"]]]]]]]]],[[[[[[[[null,"17"],[null,"  "]],[[[[null,"bin"],[[null,"Gl"],[null,"Nu"]]],[null,"Mafia2"]],[[null,"da"],[[[null,"Rh"],[null,"ken"]],[null,"Sl"]]]]],[[[[null,"I"],[[null,"knuddel"],[null,"Fb"]]],[[null,"Bo"],[[[null,"To"],[[null,"za"],[[[[null,"Æ’"],[[null,"µ"],[null,"â–“"]]],[null,"\u0086"]],[null,"и"]]]],[[null,"Go"],[null,"56"]]]]],[[[[null,"ois"],[null,"ce"]],[null,"N"]],[[[null,"03"],[[null,"rb"],[null,"hn"]]],[[null,"rie"],[[null,"Je"],[null,"Dr"]]]]]]],[[[null,"4"],[[[[null,"Fuß"],[[null,"Ju"],[[null,"ny"],[null,"Yo"]]]],[null,"36"]],[[[null,"hei"],[[[null,"58"],[null,"ov"]],[null,"$"]]],[null,"BB"]]]],[[null,"&"],[[[null,"Bingo"],[[null,"lie"],[[null,"by"],[null,"Ig"]]]],[[null,"ste"],[null,"\u0011"]]]]]],[[[null,"2"],[[[[null,"G"],[[null,"ic"],[[null,"kle"],[[[[[[[null,"ï»»"],[null,"Я"]],[null,"Ñ’"]],[null,"Ã*"]],[[null,"Û—"],[[[null,"е"],[null,"Ã�"]],[[null,"Õ"],[null,"│"]]]]],[[[[null,"î"],[null,"â•”"]],[null,""]],[null,"Ö"]]],[null,"64"]]]]],[[null,"se"],[null,"23"]]],[[[null,"ng"],[[null,"wa"],[[null,"Dü"],[null,"fl"]]]],[[null,"ar"],[[null,"rs"],[null,"Bi"]]]]]],[null,"\u0000p\u0000B\u0000-\u0000"]]],[[[[null,"õ"],[null,","]],[[[null,"Â"],[[[null,"ute"],[null,"ve"]],[[null,"@"],[[[null,"sl"],[null,"ac"]],[null,"He"]]]]],[null,"B"]]],[[[[null,"20"],[[[[null,"Wi"],[[[null,"cl"],[null,"Mö"]],[null,"dm"]]],[null,"Ma"]],[null,"le"]]],[null,"i"]],[[[[[[null,"ot"],[[[null,"sc"],[null,"uu"]],[null,"\t"]]],[null,"S"]],[[[null,"geb"],[null,"Me"]],[[null,"female.b.my_4.gif"],[null,"tl"]]]],[[null,"16"],[[null,"cht"],[[[[null,"lä"],[null,"pu"]],[[null,"sb"],[null,"51"]]],[null,"Fif"]]]]],[[[[[null,"90"],[null,"erh"]],[null,"255"]],[[null,"K"],[null,"ig"]]],[null,"|"]]]]]],[[[[[[[null,"ma"],[[[null,"29"],[[[null,"Am"],[[[null,"♫"],[[null,"\u203a"],[[null,"\u009d"],[null," "]]]],[[[[null,"þ"],[null,"â†�"]],[[null,"\u0099"],[null,"Å�"]]],[null,"м"]]]],[null,"Kö"]]],[[null,"von"],[null,"Ki"]]]],[[[[[[null,"äu"],[null,"Ce"]],[[null,"78"],[null,"Gi"]]],[null,"nu"]],[null,"gen"]],[[[null,"du"],[[null,"Mar"],[null,"ru"]]],[[[null,"vo"],[null,"ju"]],[[[null,"â„“"],[null,"bs"]],[null,"uhp"]]]]]],[[[null,"FotoContest"],[[[null,"Cp"],[[null,"tor"],[null,"rea"]]],[[null,"zi"],[null,"kann"]]]],[[null,"ll"],[null,"?"]]]],[[[null,"û"],[null,"¾"]],[[[[[null,"mp"],[[null,"ln"],[null,"Spi"]]],[null,"us"]],[null,"st"]],[[[[[null,"rf"],[[null,"\u0006"],[null,"\u008f"]]],[null,"ff"]],[[null,"sh"],[[null,"44"],[null,"Ic"]]]],[[null,"hat"],[[null,"ja"],[[null,".w_"],[null,"\u0014"]]]]]]]],[[[[null,"g"],[[[[null,"27"],[[[null,"Ar"],[null,"Ñ”"]],[null,"üb"]]],[null,"ie"]],[null,"10"]]],[[[[[[null,"Und"],[null,"ies"]],[[null,"91"],[[[null,"¶"],[[null,"é"],[[null,"Ø"],[[[null,"Å‹"],[null,"â–€"]],[null,"ç"]]]]],[null,"II"]]]],[[null,"go"],[[null,"ob"],[null,"'"]]]],[null,"knuddels.de"]],[null,"x"]]],[[[[[null,"["],[[null,"nge"],[[null,"lt"],[[null,"88"],[null,"Zi"]]]]],[[[null,"Na"],[null,"Fa"]],[null,"]"]]],[null,"¼"]],[[[[null,"ä"],[[null,"aus"],[null,"sich"]]],[null,"icon"]],[[null,"6"],[[[[null,"â–ˆ"],[null,"Gr"]],[null,"po"]],[null,"30"]]]]]]],[[[[null,">"],[[[[null,"Sch"],[[[null,"par"],[null,"ey"]],[[null,"Ga"],[null,"Nor"]]]],[null,"mafia"]],[[null,"12"],[[[[null,"Ja"],[null,"sü"]],[[[[[null,"¸"],[null,"\u008a"]],[[null,"\u001b"],[null,"\u0087"]]],[null,"ön"]],[null,"mag"]]],[null,"ver"]]]]],[[[[[[null,"Ge"],[null,"¤"]],[null,"22"]],[[[[null,"ag"],[[null,"72"],[[null,"\u0090"],[[null,"ô"],[null,"\u0088"]]]]],[null,"hal"]],[null,"21"]]],[[[[null,"ro"],[[null,"Ps"],[[null,"59"],[null,"Fu"]]]],[null,"la"]],[[[null,"60"],[null,"P"]],[[null,"Stu"],[[null,"mu"],[[null,"Aa"],[null,"62"]]]]]]],[null,"n"]]],[[[null,":"],[[[[[null,"dt"],[[null,"ONL"],[null,"92"]]],[null,"|/go "]],[[null,"Channel"],[[null,"bei"],[null,"Hi"]]]],[[null,"\u0002"],[null,"8"]]]],[[[[null,"f"],[[null,"200"],[[[[null,"fo"],[null,"hm"]],[null,"ros"]],[null,"gl"]]]],[null,"0"]],[[[[[[null,"49"],[null,"ens"]],[null,"34"]],[[[null,"swh"],[null,"bt"]],[[[null,"HP"],[[[[[[null,"Ó"],[null,"â–’"]],[[null,"Ç"],[null,"Ñ"]]],[[null,"√"],[null,"↓"]]],[null,"â"]],[[[null,"±"],[null,"Ξ"]],[null,"\u0084"]]]],[null,"Bad"]]]],[[null,"ed"],[[[null,"\u000f"],[null,"tde"]],[null,".png"]]]],[[null,"d"],[[[[null,"mb"],[null,"kn"]],[null,"Da"]],[[null,"ir"],[[null,"Gir"],[null,"2009"]]]]]]]]]]]],[[[[[[[[null,"00"],[[[[null,"Pri"],[[null,"Bre"],[null,"Te"]]],[[[[null,"Ve"],[null,"54"]],[null,"Sh"]],[null,"Who"]]],[[[[null,"ft"],[null,"Ne"]],[null,"Xx"]],[null,"James"]]]],[[[[[null,"Cl"],[null,"mo"]],[[[null,"ang"],[null,"ÃŒ"]],[[null,"Wu"],[null,"04"]]]],[null,"9"]],[[[[null,"0065"],[[[null,"CH"],[null,"ci"]],[null,"gh"]]],[null,"ke"]],[[[[null,"ur"],[null,"ak"]],[[null,"ia"],[null,"wu"]]],[null,"pics/"]]]]],[[[[[null,"den"],[[null,"Lo"],[null,"sta"]]],[[[[[null,"GB"],[null,"sbu"]],[[null,"oh"],[null,"qu"]]],[null,"Sa"]],[null,"li"]]],[[null,"a"],[[null,"O"],[[[null,"Fe"],[[null,"xy"],[[[[[[null,"£"],[null,"о"]],[null,"\u009a"]],[null,"©"]],[[[null,"÷"],[null,"â•—"]],[[[null,"─"],[null,"\u201c"]],[[null,"Â*"],[null,"½"]]]]],[[null,"«"],[[[null,"â•š"],[[null,"Ë"],[null,"ò"]]],[[null,"Â¥"],[null,"ó"]]]]]]],[null,"nich"]]]]],[[[[[[null,"bes"],[null,"tc"]],[[null,"¬"],[null,"♥"]]],[[null,"men"],[null,"St"]]],[[null,"bur"],[null,"rt"]]],[[[[[null,"93"],[null,"Wa"]],[[null,"Ti"],[null,"07"]]],[[null,"ga"],[[null,"ds"],[[null,"99"],[null,"Mu"]]]]],[null,"sch"]]]]],[[[[[[[[null,"Jo"],[null,"Her"]],[[[null,"gg"],[null,"vb"]],[null,"ib"]]],[[null,"ent"],[[[null,"87"],[null,"ya"]],[null,"lf"]]]],[[[null,"or"],[[null,"eb"],[null,"aw"]]],[[null,"\u0012"],[null,"tz"]]]],[null,"ch"]],[[[[[[null,"rl"],[null,".shadow_"]],[null,"sp"]],[[[null,"to"],[null,"oo"]],[null,"*"]]],[null,"15"]],[[null,"o"],[[[[[null,"nf"],[null,"86"]],[null,"95"]],[[null,"INE"],[null,"Si"]]],[[null,"Foto"],[[null,"ys"],[[null,"96"],[[[null,"\u001a"],[null,"\u001f"]],[[null,"\u0098"],[[null,"á"],[[null,"Ô"],[[null,"Ñ—"],[null,"ì"]]]]]]]]]]]]],[[null,"r"],[[[[null,"ist"],[[[null,"Lad"],[null,"Mom"]],[[null,"Th"],[null,"Pro"]]]],[[[null,"ka"],[null,"Ch"]],[null,"ni"]]],[[null,"ss"],[[null,".my_"],[[null,"vi"],[[null,"Mon"],[null,"pi"]]]]]]]]],[[[[[[[[[null,"Qf"],[[null,"oc"],[null,"sg"]]],[[[null,"Ta"],[null,"tw"]],[[null,"if"],[null,"zz"]]]],[null,"na"]],[[[[null,"Au"],[null,"ai"]],[null,"Knuddels"]],[null,"X"]]],[null,"°>_h"]],[[[[[[[[null,"ug"],[null,"My"]],[null,"Pe"]],[[null,"ex"],[null,"No"]]],[null,"Ka"]],[[null,"no"],[[[null,"xt"],[null,"hp"]],[[null,"kr"],[null,"Pu"]]]]],[null,"18"]],[[null,"R"],[[[null,"Sin"],[null,"An"]],[[[[null,"Ri"],[null,"sel"]],[null,"bea"]],[[null,"Vo"],[[null,"ah"],[null,"Qu"]]]]]]]],[[null,"+"],[[[[null,"c"],[[[null,"ts"],[null,"Tr"]],[null,"We"]]],[[null,"L"],[null,"icon_gender_"]]],[[[null,"me"],[[null,".h_"],[[null,"www"],[[null,"yo"],[null,"hu"]]]]],[[null,"|/fotowhois \""],[[null,"mit"],[null,"so"]]]]]]],[[[[null,"\u000b"],[[[null,"Fre"],[[[null,"max"],[null,"reg"]],[[null,"Va"],[null,"wer"]]]],[[null,"u"],[[[null,"wie"],[null,"icons/"]],[[null,"En"],[[[[null,"â•�"],[[null,"\u0095"],[null,"×"]]],[null,"\u009f"]],[null,"jo"]]]]]]],[null,"%"]],[[[[[null,"255,255,255"],[[null,"ei"],[[null,"dr"],[null,"ip"]]]],[[[null,"Du"],[[[null,"kf"],[null,"57"]],[null,"Pl"]]],[null,"lo"]]],[[[[null,"Sta"],[[[[null,"α"],[[null,"\u001d"],[[[null,"Ï„"],[null,"Ã’"]],[null,"\u0091"]]]],[null,"ER"]],[null,"ku"]]],[[null,"ls"],[[null,"act"],[null,"Fr"]]]],[[null,"\\"],[[null,"fotos/knuddels.de?n="],[null,"H"]]]]],[[null,"   "],[[[[[null,"Lu"],[null,"dem"]],[null,"end"]],[[[[[null,"Bü"],[null,"ap"]],[null,"74"]],[null,"chl"]],[null,"gle"]]],[null,"40"]]]]]]],[[[[[[[null,"!"],[null,"32"]],[[[null,"ein"],[[null,"sei"],[[null,"Ke"],[null,"ß"]]]],[[[null,"fg"],[null,"bal"]],[null,"ta"]]]],[[[null,"19"],[[null,"nde"],[[[null,"Men"],[null,"Lie"]],[null,"ad"]]]],[[[null,"Sf"],[null,"§"]],[null,"in"]]]],[[[[[[[[[null,"ec"],[[null,"\u001e"],[[null,"\u2039"],[[null,"Ã�"],[[null,"¦"],[null,"ê"]]]]]],[[null,"ι"],[null,"Hü"]]],[null,"os"]],[null,"rn"]],[[null,".mx_"],[null,"wei"]]],[null,".."]],[[[[[null,"ler"],[null,"rk"]],[null,"q"]],[[[[null,"tf"],[null,"Un"]],[null,"Po"]],[null,"Ver"]]],[null,"p"]]],[null,"/"]]],[[[[[[[[null,"}"],[[[null,"dw"],[[null,"Ñ•"],[[null,"\u0092"],[null,"ë"]]]],[null,"az"]]],[[null,"lu"],[null,"Fi"]]],[[[null,"kl"],[null,"wo"]],[null,"80"]]],[null,"\u0000p\u0000B\u0000pics/icon_fullChannel.gif\u0000-\u0000"]],[[null,"el"],[[null,"ty"],[[[null,"Neu"],[[null,"52"],[null,"lm"]]],[null,"01"]]]]],[[null,"|/w \"<"],[[[[[null,".quadcut_"],[[[null,"69"],[null,"dä"]],[null,"tu"]]],[[null,"fre"],[[null,"ih"],[[null,"ez"],[null,"98"]]]]],[null,"te"]],[[[null,"gir"],[null,"cnt"]],[[null,".border_"],[null,"it"]]]]]],[[[[[[null,"Y"],[null,"fullChannel.gif"]],[[[[null,"zo"],[null,"kc"]],[[null,"Ab"],[[[null,"Ï…"],[[[[null,"â–ª"],[[null,"â•©"],[null,"â„®"]]],[null,"Ê"]],[null,"\u008d"]]],[null,"82"]]]],[null,"33"]]],[[null,"nd"],[null,"F"]]],[[[[null,"Sp"],[null,"^"]],[[[null,"ach"],[null,"uc"]],[null,"ki"]]],[[null,"ich"],[[[[null,"fel"],[[null,"83"],[[null,"¿"],[null,"Û"]]]],[null,"br"]],[[null,"Fri"],[null,"dor"]]]]]],[[[[null,"de"],[null,"50"]],[[[[null,"aa"],[[null,"gb"],[null,"lc"]]],[[null,"für"],[null,"75"]]],[[null,"th"],[null,"Ber"]]]],[[[[[null,"Bal"],[null,"70"]],[[null,"45"],[[null,"Sw"],[null,"41"]]]],[[null,"il"],[[null,"hfl"],[[null,"Ih"],[null,"~"]]]]],[[null,"pics/female.gif"],[[null,"htt"],[[[[[[null,"♪"],[[[null,"¡"],[null,"è"]],[[null,"ı"],[[null,"\u2014"],[[null,"\\\\\\"],[null,"Ó™"]]]]]],[null,"·"]],[null,"At"]],[[null,"LE"],[null,"Sk"]]],[null,"2010"]]]]]]]]],[[[[[null,".gif"],[[[[null,"foto"],[[null,"Lan"],[[null,"\u0013"],[null,"ik"]]]],[null,"°>gt.gif<°"]],[[[null,"Ho"],[[[null,"dy"],[null,"Pi"]],[null,"alt"]]],[[null,"28"],[null,".jpg"]]]]],[null,"e"]],[[[null,"s"],[[[[null,"El"],[[null,"mer"],[null,"male.b.my_3.gif"]]],[null,"\u0000Flirt "]],[[[[[[null,"Ñ�"],[null,"76"]],[null,"nb"]],[null,"La"]],[null,"ns"]],[[[null,"rg"],[null,"08"]],[null,"Be"]]]]],[[[[[null,"v"],[[[null,"ml"],[[null,"cd"],[null,"73"]]],[null,"Bu"]]],[[null,"tr"],[null,"wi"]]],[[null,"mm"],[[[null,"sf"],[null,"Die"]],[null,"nt"]]]],[[[[null,"ly"],[[null,"em"],[null,"tmu"]]],[[[[null,"od"],[null,"sd"]],[null,"Kis"]],[[[null,"DD"],[[[[null,"\u0097"],[[null,"¨"],[null,"ÃŽ"]]],[null,"η"]],[null,"68"]]],[null,"Q"]]]],[[null,"ge"],[[[[[null,"84"],[null,"FC"]],[null,"gs"]],[null,"Ra"]],[[null,"su"],[[null,"iv"],[[null,"hh"],[null,"Pr"]]]]]]]]]],[[[null,"<"],[[[[null,"ha"],[null,"on"]],[[null,"T"],[null,"che"]]],[null,"h"]]],[[null,"\""],[[[[[[null,"cloudsblue.gif"],[[null,"Ci"],[null,"\u0003"]]],[[[null,"lig"],[[null,"\u0017"],[[[null,"\u008e"],[null,"\u0096"]],[[[[null,"ñ"],[null,"ý"]],[[null,"®"],[null,"у"]]],[[[[null,"ή"],[null,"Ä°"]],[[null,"Å‚"],[null,"Å„"]]],[null,"Ï�"]]]]]],[null,"bb"]]],[[null,"ber"],[null,"Li"]]],[[[[null,"Di"],[[null,"¯"],[null,"lg"]]],[[null,"Al"],[null,"Out"]]],[[null,"24"],[null,"un"]]]],[[[[null,"39"],[[[null,"urt"],[[null,"Is"],[null,"Rf"]]],[null,"71"]]],[[[null,"hl"],[null,"Bl"]],[null,"Ba"]]],[[[null,"ear"],[[null,"ech"],[[null,"Us"],[null,"47"]]]],[[[null,"ipi"],[null,";"]],[null,"ze"]]]]]]]]]],[[[[[[null,"."],[[[null,"7"],[[null,"at"],[[[[null,"wä"],[[null,"Hu"],[[null,"∂"],[[null,"º"],[[null,"ð"],[null,"ﻹ"]]]]]],[null,"ße"]],[[null,"ut"],[null,"fu"]]]]],[[[null,">--<"],[null,"an"]],[[[null,"Le"],[null,"sa"]],[[[[null,"\u0004"],[null,"gt"]],[null,"je"]],[null,"pwd"]]]]]],[[[[[[null,"Re"],[null,"he"]],[[null,"ho"],[[[null,"om"],[null,"ok"]],[null,"55"]]]],[[null,"war"],[[null,"hen"],[[[null,"pe"],[[null,"ek"],[null,"LL"]]],[null,"bu"]]]]],[[[null,"re"],[[[[null,"wü"],[null,"66"]],[null,"Se"]],[null,"Z"]]],[[[[null,"üc"],[[null,"Cr"],[null,"gu"]]],[null,"zu"]],[[[null,"J"],[[null,"mä"],[null,"42"]]],[[null,"bo"],[null,"Ca"]]]]]],[[[[null,"es"],[[[null,"Tag"],[[[null,"RR"],[null,"ry"]],[null,"\u0005"]]],[null,"26"]]],[[[[[null,"rr"],[null,"of"]],[null,"Dor"]],[null,"res"]],[[null,"cgi"],[[null,"dd"],[null,"|http://www3.knuddels.de:8080/txtl/click?d=knuddels.de&id="]]]]],[[[[[null,"Sm"],[[null,"43"],[null,"af"]]],[null,"ine"]],[[[null,"Co"],[[[[[[[null,"ª"],[null,"³"]],[null,"Σ"]],[null,"\u0089"]],[null,"»"]],[null,"CE"]],[null,"lk"]]],[null,"am"]]],[[[null,"pp"],[[null,"sw"],[[[null,"63"],[null,"my"]],[[null,"pf"],[[[[null,"\u009c"],[null,"æ"]],[null,"\u008c"]],[null,"\u001c"]]]]]],[[[null,"fhe"],[[null,"\b"],[null,"Vi"]]],[null,"ter"]]]]]]],[[[[[[null,"ÿ"],[null,"11"]],[[[[null,"fa"],[[[null,"sr"],[null,"Mf"]],[null,"\u0010"]]],[[null,"°>sm_"],[null,"Anz"]]],[null,"A"]]],[[[[null,"as"],[[[[null,"NR"],[null,"lr"]],[[null,"NT"],[null,"61"]]],[null,"nz"]]],[[[null,"ab"],[null,"gi"]],[[null,"dpg"],[null,"gr"]]]],[null,"("]]],[[[[null,"pics/male.gif"],[[null,"pg"],[[[[null,"Cu"],[[[[[[null,"δ"],[null,"Ï‚"]],[[null,"Ûš"],[null,"↔"]]],[[null,"Ñ–"],[null,"â–º"]]],[[null,"Û–"],[[[null,"Ä‘"],[null,"ħ"]],[[null,"Ƨ"],[null,"Û™"]]]]],[[[[null,"ν"],[null,"Ñ�"]],[null,"Ã�"]],[[null,"Ã*"],[[null,"â—�"],[null,"\u201d"]]]]]],[null,"Os"]],[null,"ow"]]]],[[null,"ck"],[[null,"Ã¥"],[null,"Ha"]]]],[[[[[[[null,"gd"],[null,"It"]],[null,"kt"]],[null,"len"]],[[null,"Ei"],[[null,"\u0007"],[null,"fr"]]]],[null,"C"]],[null,")"]]]],[[[[[[[null,"min"],[null,"Sie"]],[[null,"{"],[[null,"65"],[null,"Mü"]]]],[[null,"ö"],[[[[null,"Nü"],[null,"Do"]],[null,"io"]],[null,"Pf"]]]],[[[[null,"das"],[null,"V"]],[null,"Flirt"]],[[null,"ü"],[[[null,"rz"],[[null,"Gu"],[null,"fm"]]],[null,"Ham"]]]]],[null,"t"]],[[null,"en"],[null,"er"]]]]],[null,"\u0000"]],[[[[[[[[null,"der"],[[[null,"Cc"],[null,"Alt"]],[null,"Mix"]]],[[[[[[null,"As"],[null,"tp"]],[null,"nen"]],[null,"ld"]],[null,"05"]],[null,"is"]]],[[[[null,"Ã"],[[[null,"Lü"],[[[null,"Û˜"],[null,"Û¡"]],[[null,"Û¢"],[null,"¢"]]]],[null,"Ges"]]],[[[null,"auf"],[null,"and"]],[[null,"blg"],[null,"pr"]]]],[[null,"und"],[null,"al"]]]],[[[[[[[null,"In"],[null,"Wü"]],[null,"hie"]],[[null,"ges"],[[null,"öß"],[null,"ps"]]]],[null,"be"]],[[[null,"25"],[[null,"140"],[[[null,"hs"],[[[null,"ω"],[null,"ï"]],[[null,"\u0093"],[null,"σ"]]]],[null,"46"]]]],[null,"\u0080"]]],[[[null,"14"],[[null,"35"],[[null,"Em"],[null,"ger"]]]],[[null,"cg"],[null,"k"]]]]],[null,"-"]],[[[[[[[[[null,"wh"],[[null,"rp"],[[[[null,"\u0094"],[[null,"Λ"],[null,"\u009b"]]],[null,"â•‘"]],[[null,"\u0081"],[[null,"Ã�"],[[[null,"ÄŸ"],[null,"Æ�"]],[[null,"â–*"],[null,"â—„"]]]]]]]],[null,"Pa"]],[null,"U"]],[[null,"bl"],[[null,"ca"],[null,"vat"]]]],[[[[null,"37"],[[null,"eu"],[null,"ms"]]],[[null,"Mi"],[null,"cs"]]],[[null,"die"],[[null,"ay"],[null,"fi"]]]]],[[[null,"À"],[[null,"um"],[null,"sen"]]],[null,"="]]],[[[[[[null,"Br"],[[null,"ul"],[null,"fy"]]],[null,"vor"]],[[[null,"Wl"],[null,"tsc"]],[null,"rd"]]],[[null,"ne"],[[[[null,"Ku"],[[[null,"ε"],[null,"Ñ‚"]],[null,"Rü"]]],[null,"Par"]],[[[[null,"85"],[null,"wc"]],[null,"cr"]],[null,"rm"]]]]],[null,"1"]]],[null,"_"]]],[null," "]]]]]
    


    Und so nun in Javascript mein Decompressor:
    import Tree from '../../../Data/Tree.json' with { type: 'json' };

    export default (new class Huffman {
    constructor() {
    this.compressedData = "\\\\\\";
    this.buffer = Tree; //new Array(2);
    this.totalBytesProcessed = 0;
    this.totalBytesWritten = 0;
    this.finished = false;
    this.rawData = undefined;
    this.readIndex = 0;
    this.writeIndex = 0;
    }

    decompress(buffer) {
    if(typeof(buffer) === 'undefined' || buffer === null) {
    return null;
    }

    let uncompressed = [];
    this.rawData = buffer;
    this.readIndex = 0;
    this.writeIndex = 0;
    this.finished = false;
    let ast = [ this.buffer ];

    do {
    try {
    ast = ast[this.getBitValue()];

    if(ast[0] == null) {
    if(ast[1] == this.compressedData) {
    let i = 0;

    for(let j = 0; j < 16; j++) {
    i += this.getBitValue() << j;
    }

    uncompressed.push(String.fromCharCode(i));
    } else {
    uncompressed.push(ast[1]);
    }

    ast = this.buffer;
    }
    } catch(e) {}
    } while(!this.finished);

    let result = uncompressed.join('');
    this.totalBytesWritten += result.length;
    this.totalBytesProcessed += buffer.length;

    return result;
    }


    getBitValue() {
    try {
    let result = 0;

    if((this.rawData[this.writeIndex] & 1 << this.readIndex) != 0) {
    result = 1;
    }

    this.readIndex++;

    if(this.readIndex > 7) {
    ++this.writeIndex;
    this.readIndex = 0;
    this.finished = (this.writeIndex === this.rawData.length);
    }

    return result;
    } catch(e) {
    return 0;
    }
    }
    }());


    Das Problem, was ich allerdings habe:
    Er ermittelt nicht richtig das Resultat.
    In dem Java-Crapper, der den Tree holt wird es korrekt dargestellt:
    5\0James\0Mentorsystem
    


    Über Javascript allerdings:
    i\0James\0Mentorsystem
    


    Im SYSTEM-BOT Packet "5", da es so klein ist, ist nur der Opcode betroffen.

    Das lesen des Paketes aus dem Stream scheint auch korrekt zu funktionieren:

    export default (new class Packet {
    DecodeKey = null;

    decode(buff) {
    let pos = 0;
    let first = buff[pos++];

    if(first === null) {
    return null;
    }

    if(first == -1) {
    return null;
    }

    let length = 0;

    if(first >= 0) {
    length = first + 1;
    } else {
    length = (first & 0x1F) + 1;
    let count = (first & 0x60) >>> 5;

    for(let i = 1; i < count; i++) {
    let nextByte = buff[pos++];

    if(nextByte == -1) {
    throw new IOException("Unexpected end of stream");
    }

    length += nextByte << (i - 1) * 8;
    }
    }

    let buffer = Buffer.alloc(length);

    for(let i = 0; i < length; i++) {
    let readByte = buff[pos++];

    if(readByte == -1) {
    throw new IOException("Unexpected end of stream");
    }

    buffer[i] = (readByte ^ (this.DecodeKey != null && i < this.DecodeKey.length ? this.DecodeKey[i] : 0));
    }

    //console.log('[Packet]', length, buffer.length);

    return new Uint8Array(buffer);
    }

    encode(message) {
    if(typeof(message) === 'undefined') {
    return null;
    }

    const length = message.length - 1;
    let len;

    if(length < 128) {
    len = Buffer.from([ length ]);
    } else {
    let count = 0;
    console.log("ZWO");
    while((32 << ((count + 1) << 3)) <= length) {
    //while(32 << (count + 1 << 3) <= length) {
    count++;
    }

    count++;

    len = Buffer.alloc(count + 1);
    len[0] = (count << 5) | 0x80 | (length & 0x1F);
    //len[0] = (count << 5 | 0x80 | length & 0x1F);

    for(let i = 1; i < len.length; i++) {
    len[i] = (length >>> (8 * (i - 1)) + 5) & 0xFF;
    //len[i] = (length >>> 8 * (i - 1) + 5);
    }
    }

    return Buffer.concat([ len, message ]);
    }
    }());


    Der Unterschied zwischen 32/64-bit-Behandlung zwischen Java und Node.js soll wohl keine Probleme bereiten, auch das bit-shifting & co soll wie gewohnt in Java funktionieren.

    Hat vielleicht jemand eine Idee, übersehe ich etwas?

  2. #2

    Registriert seit
    28.10.2011
    Beiträge
    630
    Thanked 281 Times in 169 Posts

    Standard AW: Aktueller Huffman-Tree

    Ich hab nun durch einige Änderungen ein besseres Ergebnis erzielt.
    Hier ist der aktualisierte Code:

    import Tree from '../../../Data/Tree.json' with { type: 'json' };

    export default (new class Huffman {
    constructor() {
    this.compressedData = "\\\\\\";
    this.buffer = Tree;
    this.totalBytesProcessed = 0;
    this.totalBytesWritten = 0;
    this.finished = false;
    this.rawData = undefined;
    this.readIndex = 0;
    this.writeIndex = 0;
    }

    decompress(buffer) {
    if (typeof (buffer) === 'undefined' || buffer === null) {
    return null;
    }

    let uncompressed = [];
    this.rawData = buffer;
    this.readIndex = 0;
    this.writeIndex = 0;
    this.finished = false;
    let ast = this.buffer;

    while (true) {
    if (this.finished) {
    let result = uncompressed.join('');
    this.totalBytesWritten += result.length;
    this.totalBytesProcessed += buffer.length;
    return result;
    }

    try {
    ast = ast[this.getBitValue()];

    if (ast[0] == null) {
    if (ast[1] != this.compressedData) {
    uncompressed.push(ast[1]);
    } else {
    let code = 0;

    for (let index = 0; index < 16; index++) {
    code |= this.getBitValue() << index;
    }

    uncompressed.push(String.fromCharCode(code));
    }

    ast = this.buffer; // Reset AST after finding a leaf
    }
    } catch (e) { }
    }
    }

    getBitValue() {
    if (!this.rawData || this.writeIndex >= this.rawData.length) {
    this.finished = true;
    return 0;
    }

    let result = (this.rawData[this.writeIndex] >> this.readIndex) & 1;
    this.readIndex++;

    if (this.readIndex > 7) {
    this.writeIndex++;
    this.readIndex = 0;
    this.finished = (this.writeIndex === this.rawData.length);
    }

    return result;
    }
    }());


    Es scheint aber immer noch an einigen Ecken zu hapern:
    Klicke auf die Grafik für eine größere Ansicht 

Name:	Bild_2025-01-18_141953120.png 
Hits:	34 
Größe:	231,3 KB 
ID:	9485

  3. #3

    Registriert seit
    17.12.2011
    Beiträge
    143
    Thanked 73 Times in 52 Posts

    Standard AW: Aktueller Huffman-Tree

    Ist das überhaupt noch notwendig? Warum nicht einfach direkt im Browser manipulieren (zum Beispiel per Userscript)? Wenn es sowieso auf dem PC ausgeführt werden muss, könnte man doch direkt den Browser-Tab offen lassen, den Token mitnehmen und über GraphQL kommunizieren oder geht es bei deinem Beispiel eher um einen Lernzweck?

    Per Userscript hast du halt auch viele Vorteile: Du kannst es plattformunabhängig nutzen, auch mobil über die Stay Safari-Erweiterung für iOS oder den Kiwi Browser mit Userscript-Erweiterung unter Android. So müsstest du dich gar nicht so tief mit dem Protokoll beschäftigen. Kannst halt direkt den DOM manipulieren und direkt auf beispielsweise HTML Elemente zugreifen bzw diese modifizieren

  4. #4

    Registriert seit
    28.10.2011
    Beiträge
    630
    Thanked 281 Times in 169 Posts

    Standard AW: Aktueller Huffman-Tree

    Es geht hier ausschließlich um die Java-Version.

    Über K3 mit GraphQL gibt es weder alle Chatbefehle, noch wurden alle Features implementiert (typisch Knuddels). Die Java-Version ist demnach viel umfangreicher und für so einige Zwecke besser geeignet.

  5. #5
    Avatar von Manipulate
    Registriert seit
    04.12.2011
    Beiträge
    522
    Thanked 505 Times in 356 Posts

    Standard AW: Aktueller Huffman-Tree

    Moin,
    ich verfolge deine Projekte immer gerne auf github, da ich einen ähnlichen Plan hatte und habe.
    Den Huffmantree hab ich auch vor Monaten mal aus der StApp gezogen, hat auch funktioniert gehabt. Keine Ahnung ob und wie stark er sich geändert hat

  6. #6

    Registriert seit
    28.10.2011
    Beiträge
    630
    Thanked 281 Times in 169 Posts

    Standard AW: Aktueller Huffman-Tree

    Ich könnte bei Gelegengeit die Sachen auf GitHub mal öffentlich stellen, das ganze sollte sowieso irgendwann OpenSource sein.

    Ich hab diverse Bot-Ansätze bereits umgesetzt, das sind alles aber teilweise schlecht funktionierende Skeletons (auch in verschiedenen Programmiersprachen).

  7. #7
    Avatar von Manipulate
    Registriert seit
    04.12.2011
    Beiträge
    522
    Thanked 505 Times in 356 Posts

    Standard AW: Aktueller Huffman-Tree

    Ich hab vor ca. eineinhalb Jahren in Java ne Library gebastelt, die die GraphQL API von Knuddels nutzt und sich mit dem Websocket verbindet um Nachrichten zu verarbeiten. Mit der StApp hab ich bisher noch keinen richtigen Erfolg gehabt.

    Würde mich auf jeden Fall interessieren, welche Ansätze du sonst noch verfolgt hast. Wenn Interesse deinerseits besteht, könnte man sich ja auch mal zusammensetzen?

  8. #8

    Registriert seit
    28.10.2011
    Beiträge
    630
    Thanked 281 Times in 169 Posts

    Standard AW: Aktueller Huffman-Tree

    Ich hab mal zwei Ansätze für K3 hochgeladen:

    https://github.com/Bizarrus/K3-Bot

    Das eine ist eine Browser-Extension, was sich nur im Netzwerk zwischenhängen soll und das andere ein Standalone-Clienten.

    Der Standalone-Client hat schon einige Features eingebaut, die ziemlich nice sind, steht aber auch in der Readme:
    Features
    Automatic response to ping-Events
    Subscriptionable Events
    Automatic Session-Renewing
    Automatic Keep-Online Events
    Full GraphQL fragments, querys, enums, subscriptions & mutations (See Protocol)

    Implemented Bots
    StayOnline (sends each 4 Minutes a random Text)
    DailyLogin (automatically collects the daily login)
    QuestSolver (automatically solve quests)
    Edit:
    Hier ist noch das Proxy-Projekt, wo ich Probleme mit dem Huffman habe:
    https://github.com/Bizarrus/Knoxy
    Geändert von Bubble Gum (Gestern um 09:16 Uhr)

Ähnliche Themen

  1. [C#] Huffman
    Von SeBi im Forum Sourcecode
    Antworten: 8
    Letzter Beitrag: 27.05.2020, 11:19
  2. [C#] Huffman
    Von Brainy im Forum Sourcecode
    Antworten: 2
    Letzter Beitrag: 27.05.2020, 09:59
  3. [Release] Huffman (Java Library)
    Von Flav im Forum Protokoll
    Antworten: 2
    Letzter Beitrag: 05.07.2013, 15:17
  4. Module Tree Viewer Tool - Wer war des? oÔ
    Von Bubble Gum im Forum Ressourcen
    Antworten: 8
    Letzter Beitrag: 20.05.2013, 15:41
  5. [Java] Huffman
    Von Flav im Forum Sourcecode
    Antworten: 2
    Letzter Beitrag: 14.04.2012, 10:27
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.