CryptoJS - получить имя используемого шифра изнутри

Discussion in 'Javascript' started by fbidesign, 27 Dec 2018.

  1. fbidesign

    fbidesign Member

    Joined:
    13 Jul 2008
    Messages:
    79
    Likes Received:
    12
    Reputations:
    0
    Добрый вечер, товарищи!

    Есть crypto-js.min.js, вызываемый из обфусцированного Javascript файла, все это на сайте. Расшифровка чрезвычайно трудна (там что-то отдаленно напоминающее Brainfuck и отсутствие eval) потому решил пойти другим путем и подменил путь к CryptoJS на свой. Основная задача - достать ключ и прочие данные, необходимые для расшифровки некоторых данных. Для этого в crypto-js.min.js в блоке кода CryptoJS.lib.Cipher непосредственно после
    Code:
    _createHelper: (function () {
    нашел объявление функции decrypt и в нее добавил вывод всего что мне нужно в лог. Функция стала выглядеть следующим образом:
    Code:
    decrypt: function (ciphertext, key, cfg) {
        fucklog("decrypt: key=" + key + "\ncfg="+vardump(cfg)+"\n\nmsg="+ciphertext);
        var x=selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);
        fucklog("decrypted: " + x);
        return x;
    }
    Подскажите, пожалуйста, как достать имя самого алгоритма шифрования в этом месте?
    Т.е. скажем в обфусцированном файле вызывается CryptoJS.AES.decrypt() с параметрами, параметры я отлавливаю без проблем, а как понять AES там или 3DES например? Есть там объект-переменная cipher, но пройдясь по его полям я ничего такого не обнаружил.
    Спасибо.
     
  2. VY_CMa

    VY_CMa Green member

    Joined:
    6 Jan 2012
    Messages:
    917
    Likes Received:
    492
    Reputations:
    724
    _________________________
    fbidesign and altblitz like this.
  3. fbidesign

    fbidesign Member

    Joined:
    13 Jul 2008
    Messages:
    79
    Likes Received:
    12
    Reputations:
    0
    this.constructor в этом месте выдает тип объекта function и значение
    Code:
    function Object() { [native code] }
    Версия файла отсюда либо очень похож на него. Но идея хорошая, вот этот вариант
    Code:
    var err = new Error();
    fucklog("STACK2: "+err.stack);
    кое-что выдал включая 1 имя брейнфаковской функции, которой не было в сохраненном исходнике, а значит там либо 2 уровня шифрования исходника либо это полиморфный js. Но в принципе уже понял куда копать - нужно еще похукать функции генерации ключа из пароля типа PBKDF2()