Quote:
Originally Posted by mgpai
It also has an option to extract password protected archives, but it seems to be broken.
|
It's broken with password and rar5 but the source code is helpful, maybe.
Code:
github.com/vlovich/stream-unrar
And UnRAR.dll / UnRAR source under rarlabs.com/rar_add.htm
And for linux:
Script with RAR5/Password:
Code:
// Stream Archives
// Trigger : "Downloadlist Contextmenu Button"
// Note: Selection must be a finished link (not package)
// rarstreamer: **External links are only visible to Support Staff**// Source: **External links are only visible to Support Staff**//
// hashcat: **External links are only visible to Support Staff**// unrar: **External links are only visible to Support Staff**// rar2john: **External links are only visible to Support Staff**// mplayer for windows: **External links are only visible to Support Staff**
if (name == "Stream Archive") {
if (dlSelection.isLinkContext()) {
var link = dlSelection.getContextLink();
var file = link.getDownloadPath();
var downloadFolder = link.getPackage().getDownloadFolder();
var rarstreamer = "c:/portable/rarstreamer/stream_unrar.exe"; /* <- Set full path to rarstreamer */
var player = "c:/portable/videolan/vlc/vlc.exe"; /* <- Set full path to media player */
var mplayer = "c:/portable/videolan/MPlayer for Windows/mplayer.exe"; /* <- Set full path to media player (mplayer) */
var rar2john = "c:/portable/rar2john.exe"; /* <- Set full path to rar2john (and john) */
var hashcat = "c:/portable/hashcat64.exe"; /* <- Set full path to hashcat */
var unrar = "c:/portable/unrar.exe"; /* <- Set full path to unrar */
var streamFolder = downloadFolder + "/stream";
if (getPath(file).exists()) {
var my_rar = getPath(file);
var pwjson = JSON.parse(readFile(JD_HOME + "/cfg/org.jdownloader.extensions.extraction.ExtractionExtension.passwordlist.json"));
var res = "";
for (var i = 0; i < pwjson.length; i++) {
res += pwjson[i] + "\n";
}
deleteFile(JD_HOME + "/tmp/password.txt", false);
writeFile(JD_HOME + "/tmp/password.txt", res, false);
callAsync(function(exitCode, stdOut, errOut) {
if (errOut.match('not encrypted') || errOut == '' && stdOut == '') {
callAsync(function(exitCode2, stdOut2, errOut2) {
if (stdOut2.match('Details: RAR 4')) {
callAsync(function() {}, rarstreamer, "-a", file, "-d", streamFolder);
callAsync(function() {}, player, streamFolder);
} else {//RAR5
var stream_res = unrar + " p -inul -kb -x\"*sample*\" \"" + my_rar + "\" \"*.avi\" \"*.mkv\" \| \"" + mplayer + "\" -cache 20240 -noconsolecontrols -";
deleteFile(JD_HOME + "/tmp/stream.bat", false);
writeFile(JD_HOME + "/tmp/stream.bat", stream_res, false);
callAsync(function() {
deleteFile(JD_HOME + "/tmp/stream.bat", false);
}, JD_HOME + "/tmp/stream.bat");
}
}, unrar, "v", my_rar);
} else {
deleteFile(JD_HOME + "/tmp/z.txt", false);
deleteFile(JD_HOME + "/tmp/newhash.txt", false);
var rarversion;
if (errOut.match('RAR3')) {
rarversion = 12500;
writeFile(JD_HOME + "/tmp/newhash.txt", stdOut.split(':')[1], false);
} else {
rarversion = 13000;
writeFile(JD_HOME + "/tmp/newhash.txt", stdOut.split(':')[2], false);
}
callAsync(function(exitCode2, stdOut2, errOut2) {
if (stdOut2.match('Cracked')) {
var mypass = readFile(JD_HOME + '/tmp/z.txt');
var stream_res = unrar + " p -inul -kb -p\"" + mypass + "\" -x\"*sample*\" \"" + my_rar + "\" \"*.avi\" \"*.mkv\" \| \"" + mplayer + "\" -cache 20240 -noconsolecontrols -";
stream_res = stream_res.replace(/\n/, "");
stream_res = stream_res.replace(/\//g, "\\");
deleteFile(JD_HOME + "/tmp/stream.bat", false);
writeFile(JD_HOME + "/tmp/stream.bat", stream_res, false);
callAsync(function() {
deleteFile(JD_HOME + "/tmp/stream.bat", false);
}, JD_HOME + "/tmp/stream.bat");
} else {
alert("Password not found.\n\n" + stdOut2 + errOut2);
}
deleteFile(JD_HOME + "/tmp/password.txt", false);
deleteFile(JD_HOME + "/tmp/z.txt", false);
deleteFile(JD_HOME + "/tmp/newhash.txt", false);
}, hashcat, "-m", rarversion, "--potfile-disable", "--outfile-format", "2", "--logfile-disable", "--weak-hash-threshold", "0", "-o", JD_HOME + "/tmp/z.txt", "-a", "0", JD_HOME + "/tmp/newhash.txt", JD_HOME + "/tmp/password.txt");
}
}, rar2john, my_rar);
}
}
}
Two known issues:
1. No auto delete for the stream files
2. For rar5 and with password is only unrar possible. (incomplete video as preview/stream)
I hope for JD2 and/or stream_unrar (with rar5/pw) in the future.