VW Kaefer (01.07.2016)
Thema: Ressource + Tool
-
23.04.2011, 13:56 #1
- Registriert seit
- 12.12.2011
- Beiträge
- 39
Thanked 24 Times in 16 PostsRessource + Tool
Guten Tag,
Knuddels verwaltet seine Ressourcen in einer als Klasse getarnten Datei (aktuell za.class). Diese Datei ist allerdings keine Klasse, sondern eine verschlüsselte Textdatei.
Ihr kennt es sicherlich aus dem Applet, wenn ein String als xx.a(1234) dargestellt ist.
Die Datei ist in zwei Teile aufgebaut. Einmal in den kodierten Teil, der erste dekodiert werden muss und dann in den Raw-Teil, zu dem wir später kommen.
Teil 1 besteht aus 2 Teilen, dem Header und dem Content.
Header (3 bytes)
Die ersten drei Bytes ergeben als 24bit-Integer die Länge des Contents, also:
Code:int len = buffer[0] << 16 | buffer[1] << 8 | buffer[2];
Das dritte Byte hat noch eine Sonderfunktion, es stellt das Decodebyte der Datei da, welche mit einer sehr simplen xor-Kodierung verschlüsselt ist.
Content (len bytes)
Der Content setzt sich auch sehr einfach zusammen.
rLen (1 byte)
res (n bytes)
Also zB:Code:00000000 09 4b 45 59 5f 56 41 4c 55 45 .KEY_VALUE
Code:import java.io.InputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.FileOutputStream; class kRes { public static void main(String[] args) throws Exception { if(args.length == 0) { System.out.println("kRes-Analysor v1.0 by KrT @ banana-coding / k-script"); return; } String resFile = args[0]; try { if(!load(resFile)) System.err.println("[ERROR] unknown i/o error"); } catch(IOException ioe) { System.err.println("[ERROR] resfile isn't there"); } if(args[1].equals("get")) { System.out.println(getRes(Integer.parseInt(args[2]))); } else if(args[1].equals("put")) { System.out.println(setRes(resFile, args[2])); } } static byte[] buffer; static String[] stringBuffer = new String[256]; static int[] posBuffer = new int[256]; static String getRes(int pos) { int posByte = pos & 0xFF; // Auf 8 Bit trimmen // Wenns im buffer noch nicht vorhanden ist, adden. if(posBuffer[posByte] != pos) { posBuffer[posByte] = pos; pos = pos < 0 ? pos & 0xFFFF : pos; String returnStr = new String(buffer, 0, pos, buffer[pos - 1] & 0xFF).intern(); stringBuffer[posByte] = returnStr; } return stringBuffer[posByte]; } static int setRes(String fileName, String res) throws IOException{ FileOutputStream out = new FileOutputStream(fileName, false); int nLen = buffer.length + res.length() + 1; byte[] bLen = new byte[3]; bLen[2] = (byte) nLen; bLen[1] = (byte) (nLen >> 8); bLen[0] = (byte) (nLen >> 16); out.write(bLen); byte[] newBuffer = new byte[nLen]; System.arraycopy(buffer, 0, newBuffer, 0, buffer.length); System.arraycopy(new byte[] { (byte) res.length() }, 0, newBuffer, buffer.length, 1); System.arraycopy(res.getBytes(), 0, newBuffer, buffer.length + 1, res.length()); for(int i = 0; i < newBuffer.length; newBuffer[i] = (byte) (newBuffer[i++] ^ bLen[2])); out.write(newBuffer); out.flush(); out.close(); return buffer.length + 1; } static boolean load(String resFile) throws IOException { InputStream resourceStream = new FileInputStream(resFile); if(resourceStream != null) { // Die ersten drei Bytes geben die Länge des Puffers an (Puffergröße = Dateigröße) byte decodeByte; int len = resourceStream.read() << 16 | resourceStream.read() << 8 | (decodeByte = (byte) resourceStream.read()); len = len < 0 ? len & 0xFFFF : len; // signed fix buffer = new byte[len]; int offset = 0; while(len > 0) { int res; if((res = resourceStream.read(buffer, offset, len)) < 0) break; // Liest len bytes aus dem Stream (angefangen bei i) len -= res; res += offset; while(offset < res) { buffer[offset] = (byte) (buffer[offset++] ^ decodeByte); // simple xor } } return true; } return false; } }
MfG
-
The Following User Says Thank You to KrT For This Useful Post:
Ähnliche Themen
-
[Tool] K-Decoder
Von rVs14 im Forum RessourcenAntworten: 4Letzter Beitrag: 06.07.2012, 13:08 -
[Tool] Reminder
Von Grammatikfehler im Forum Sonstige Knuddels Bots/SoftwareAntworten: 2Letzter Beitrag: 30.06.2012, 23:30 -
Battlefield 3 Tool
Von Killerspider im Forum BattlefieldAntworten: 1Letzter Beitrag: 23.06.2012, 19:24 -
[C#] Config Tool
Von DeKaDeNz im Forum .NetAntworten: 0Letzter Beitrag: 06.01.2012, 15:03
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.