Hallo,

hier findet ihr ein paar nützliche Sources zum analysieren und arbeiten mit dem Knuddelsapplet.

Strings dekodieren [Java]:

Code:
import java.io.*;
import java.lang.reflect.Method;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class replace {
    public static void main(String[] args) {
        String fileName = args[1];
        try{
            FileInputStream fis2 = new FileInputStream(fileName);
            DataInputStream input = new DataInputStream (fis2);
            FileOutputStream fos2 = new FileOutputStream(fileName + ".fixxed");
            DataOutputStream output = new DataOutputStream (fos2);
            
            Class<?> c = Class.forName(args[2]);
            Class[] argTypes = new Class[] { int.class };
            Method main = c.getDeclaredMethod("a", argTypes);
            
         String str;
            while (null != ((str = input.readLine()))) {
                Pattern pattern = Pattern.compile(args[2] + ".a\\((\\d+)\\)");
                Matcher matcher = pattern.matcher(str);
                while (matcher.find()) {
                    int mainArg = Integer.parseInt(matcher.group(1));
                    String resp = (String) main.invoke(null, (Object)mainArg);
                    str  = str.replace(matcher.group(), """ + resp + """);
                }
                
                str += "\n";
                output.writeBytes(str);
            }

        } catch(Exception ex) { ex.printStackTrace(); }
    }
}
Aufruf:
Code:
java replace Source.java qJ
Source.java mit eurem dekompiliertem Knuddelscode ersetzen und qJ mit der aktuellen Resourcenklasse des Applets.

Aktuelle AppletVersion [Python]:
Code:
#!/usr/bin/python
import urllib

# Knuddels Version Grabber by KrT
# 02/15/2011

def main():
    print 'KnuddelsApplets:'
    
    srcDE = getString('http://knuddels.de')
    srcTS = getString('http://testserver.knuddels.de/applet.html')

    posTS = srcTS.find('?') + 1
    verTS = srcTS[posTS:posTS+5]
    
    posDE = srcDE.find('?v=') + 3
    verDE = srcDE[posDE:posDE+5]

    print '\tTestServer: %s\n\tMainServer: %s' % (verTS, verDE)

def getString(url):
    return urllib.urlopen(url).read()
    
main()
Wird immer mal erweitert.