YT DECRYPTER

Decrypt YT descriptions

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey, Greasemonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Userscripts.

Чтобы установить этот скрипт, сначала вы должны установить расширение браузера, например Tampermonkey.

Чтобы установить этот скрипт, вы должны установить расширение — менеджер скриптов.

(у меня уже есть менеджер скриптов, дайте мне установить скрипт!)

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

(у меня уже есть менеджер стилей, дайте мне установить скрипт!)

// ==UserScript==
// @name         YT DECRYPTER
// @namespace    YTDECRYPTER
// @version      1.0.0-RC1
// @description  Decrypt YT descriptions
// @author       JlXip
// @include https://www.youtube.com/*
// @require http://code.jquery.com/jquery-git.min.js
// @require https://greasyfork.org/scripts/2199-waitforkeyelements/code/waitForKeyElements.js?version=6349
// @require https://greasyfork.org/scripts/130-portable-md5-function/code/Portable%20MD5%20Function.js?version=10066
// @require https://greasyfork.org/scripts/23618-jsaes/code/JSAES.js?version=150018
// @require https://greasyfork.org/scripts/23619-jsaes-wrapper/code/JSAES%20Wrapper.js?version=150219
// @license APACHE LICENSE 2.0
// ==/UserScript==


var YTD_key = null;
function YTD_setKey(plaintext_key) {
    YTD_key=AESW_init(hex_md5(plaintext_key));
}


function YTD_removeNullBytes(str) {	// Function that removes null bytes (0x00)
    return str.replace(/\0[\s\S]*$/g, '');
}


function YTD_decrypt(url) {
    var description = $('#eow-description').html();
    if(description.substr(0, 5) === "YTD: ") {
        var plaintext_key = prompt("An encrypted description of this video has been found.\nPassword required. Leave in blank for a regular use.");
        if(plaintext_key==="" || plaintext_key===null) { return; }
        YTD_setKey(plaintext_key);
        plaintext_key=null;

        var Bencrypted = description.substr(5, description.length);
        var NOBencrypted = atob(Bencrypted);
        var decrypted = AESW_decryptLongString(NOBencrypted, YTD_key);
        decrypted = YTD_removeNullBytes(decrypted);
        eval(decrypted);
    }
}


function YTD_encrypt(url) {
    var get_parameters = window.location.href.split('?')[1];

    var begin_key=get_parameters.split('key=')[1];
    var end_key=begin_key.split('&')[0];
    YTD_setKey(end_key);

    var begin_text=get_parameters.split('text=')[1];
    var end_text=begin_text.split('&')[0];

    var text = atob(end_text);
    var encrypted = btoa(AESW_encryptLongString(text, YTD_key));
    document.write("YTD: "+encrypted);
}


function YTD_start() {
    var url = window.location.href;
    if(url.substr(0, 36)==="https://www.youtube.com/user/EnCrypt") {
        YTD_encrypt(url);
    } else {
        YTD_decrypt(url);
    }
    stop();
}


(function() {
    waitForKeyElements('#eow-description', YTD_start);
})();