DLC Decrypter Java Library
Ich möchte euch meine neue Java Library „DLC-Decrypter“ nicht vorenthalten. Diese kann verschlüsselte DLC-Container öffnen und entschlüsseln. Somit könnt Ihr eure Anwendung um eine DLC Funktion erweitern.
Was ist ein DLC-Container
Ein DLC-Container (Download Link Container) kann Downloadlinks aufnehmen und diese verschlüsseln. Dadurch können nahezu unendlich viele Links in einer Datei verteilt werden. Das DLC-Dateiformat wurde von den JDownloader Entwicklern eingeführt.
Der Vorteil einer Verschlüsselung ist, dass man nicht ohne Weiteres an die Download-Links im Klartext heran kommt, um so z.B. eine Urheberrechtsverletzung zu melden. Das Problem daran ist aber, dass es Drittanbieter erschwert das DLC-Dateiformat zu nutzen, da die Keys nicht öffentlich sind. Desweitern bietet der Container ohnehin wenig Schutz. Sobald man den Netzwerktraffic snifft, hat man die Downloadlinks eh im Klartext.
Wie funktioniert die DLC Entschlüsselung
Grundsätzlich kann man eine DLC-Datei nicht offline entschlüsseln, da immer der private Key des DLC-Servers gebraucht wird. Daher greift meine Library auch auf den DLC-Server zu.
Der Server bekommt einen Key, der aus den letzten 88 Bytes der DLC-Datei besteht. Dieser schickt dann wiederum einen Gegenkey, der dann mit dem privaten Key vom JDownloader Client entschlüsselt wird. Daraus entsteht wieder ein Key, der dann zum Entschlüsseln der DLC-Datei verwendet wird.
Um das etwas besser zu erklären, habe ich mal ein Schaubild erstellt.
Die DLC-Decrypter-Library
Die DLC-Decrypter-Library ist in Java geschrieben, OpenSource und steht unter der GNU LGPL. Sie kann ganz einfach in eure Projekte integriert werden.
Die Library geht die oben besprochenen Punkte durch und entschlüsselt somit die DLC-Datei und gibt dies zurück. Den privaten Key des JDownloaders habe ich durch Debuggen und Dekompilieren extrahiert. Zurzeit schickt aber auch der DLC-Server diesen Key einfach mit, keine Ahnung wieso. Der Key ist in meiner Lib aber fest integriert. Sollte dieser sich einmal ändern, stell ich hier eine neue Version zu Verfügung. Sollte der private Key nun immer auch vom DLC-Server mitgesendet werden, binde ich diesen dann natürlich dynamisch ein. Aber das beobachte ich erst einmal.
Beispiel:
Hier mal eine Beispiel wie die Library in euren Projekten verwendet werden kann:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | public static void main(String[] args) { /* * File */ DLCContent dlcContent = DLCDecrypter.decrypt(new File("G:\\Temp Downloads\\test.dlc")); /* * Base64 DLC String */ //DLCContent dlcContent = DLCDecrypter.decrypt("DLC String"); System.out.println("Generator APP: " + dlcContent.getGeneratorApp()); System.out.println("Generator Url: " + dlcContent.getGeneratorUrl()); System.out.println("Generator Version: " + dlcContent.getGeneratorVersion() + "\n"); System.out.println("Xml Version: " + dlcContent.getDlcXmlVersion() + "\n"); System.out.println("::Alle Dateien::\n"); /* * Listet alle Urls und Dateinamen des DLC Packetes auf */ ArrayList<DLCFile> dlcFiles = dlcContent.getDlcFiles(); for(int i = 0, c = dlcFiles.size(); i < c; i++) { System.out.println("URL: " + dlcFiles.get(i).getUrl()); System.out.println("Filename: " + dlcFiles.get(i).getFilename() + " \n"); } } |
In einer Konsolenanwendung könnte das Ergebnis etwa so aussehen:
Installation:
Es muss der komplette „libs“ Ordner in euer Projekt kopiert werden. Des Weiteren müssen die beiden jar Dateien (dlcDecrypter-X.X.jar & commons-codec-1.7.jar) in euer „Build Path“ aufgenommen werden.
Download:
- DLC-Decrypter-Library 0.03 (Lib + Source + Beispiele) (12.11.2012)
- DLC-Decrypter-Library 0.02 (Lib + Source + Beispiele) (16.10.2012)
- DLC-Decrypter-Library 0.01 (Lib + Source + Beispiele) (21.09.2012)
Changelog:
== 0.03 ==
- Exception „DLCException“ hinzugefügt
- Wird geworfen wenn bei der Entschlüsselung ein Fehler auftritt.
- Diverse Bugfixes und interne Änderungen
== 0.02 ==
- PKey wird nun aus dem response des DLC-Server extrahiert.
== 0.01 ==
- Release
Bei Fragen oder Anregungen steh ich euch gern zur Seite.
Schlagwörter: dlc, Java
Christoph sagt
am 28. September 2012 @ 13:34
Hallo,
das klingt durchaus interessant und könnte großes Problem von mir lösen.
Ich habe ein Tool entwickelt, dass JDownloader-Links an Synology-NAS schicken kann. Diese Links gibt es in zwei Formaten: Relativ primitiv verschlüsselt und ohne Webserviceaufruf und (vermutlich) in Form von DLCs, an deren Entschlüsselung ich bisher gescheitert bin (Ich habe mir den Code an der Stelle im JDownloader durchgelesen und bin dabei halb erblindet :D).
Mit Hilfe Ihrer library kann ich mein Tool hoffentlich um ein gutes Stück Funktionalität erweitern.
Gruß
Christoph
admin sagt
am 16. Oktober 2012 @ 12:52
Freut mich zu hören 🙂
Version 0.02 veröffentlicht.
PKey wird nun aus dem response des DLC-Server extrahiert.
Patschi sagt
am 17. Oktober 2012 @ 13:13
Würde mir das für PHP wünschen 🙂
admin sagt
am 19. Oktober 2012 @ 15:42
Steht auf meiner ToDo-Liste. 🙂
Ich schätze mal die Woche oder anfang nächster Woche werde ich es vorstellen.
LG
Julius
kirner sagt
am 18. Januar 2016 @ 15:03
Nice work!
i can get the link, but not filename, i hope you improve it!
Thx m8.
UED sagt
am 16. März 2017 @ 03:55
Gibt es noch Chancen, eine Web/PHP-Version zu bekommen?