View Single Post
  #47  
Old 05.12.2016, 10:50
thecoder2012's Avatar
thecoder2012 thecoder2012 is offline
Official 9kw.eu Support
 
Join Date: Feb 2013
Location: Internet
Posts: 1,324
Default

Quote:
Originally Posted by mgpai View Post
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:
Code:
github.com/m3t/urs
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.
__________________
Join 9kw.eu Captcha Service now and let your JD continue downloads while you sleep.

Last edited by thecoder2012; 14.07.2019 at 06:15.
Reply With Quote