Выполнить код JS (опять)

Уже создавал такую тему, но вопрос там задал некорректно и получил неправильный ответ. Давайте попробуем снова :man_shrugging:
Вот есть код на питоне:


    def _parse_sig_js(self, jscode):
        funcname = self._search_regex(
            (r'\b[cs]\s*&&\s*[adf]\.set\([^,]+\s*,\s*encodeURIComponent\s*\(\s*(?P<sig>[a-zA-Z0-9$]+)\(',
             r'\b[a-zA-Z0-9]+\s*&&\s*[a-zA-Z0-9]+\.set\([^,]+\s*,\s*encodeURIComponent\s*\(\s*(?P<sig>[a-zA-Z0-9$]+)\(',
             r'\bm=(?P<sig>[a-zA-Z0-9$]{2,})\(decodeURIComponent\(h\.s\)\)',
             r'\bc&&\(c=(?P<sig>[a-zA-Z0-9$]{2,})\(decodeURIComponent\(c\)\)',
             r'(?:\b|[^a-zA-Z0-9$])(?P<sig>[a-zA-Z0-9$]{2,})\s*=\s*function\(\s*a\s*\)\s*{\s*a\s*=\s*a\.split\(\s*""\s*\);[a-zA-Z0-9$]{2}\.[a-zA-Z0-9$]{2}\(a,\d+\)',
             r'(?:\b|[^a-zA-Z0-9$])(?P<sig>[a-zA-Z0-9$]{2,})\s*=\s*function\(\s*a\s*\)\s*{\s*a\s*=\s*a\.split\(\s*""\s*\)',
             r'(?P<sig>[a-zA-Z0-9$]+)\s*=\s*function\(\s*a\s*\)\s*{\s*a\s*=\s*a\.split\(\s*""\s*\)',
             # Obsolete patterns
             r'(["\'])signature\1\s*,\s*(?P<sig>[a-zA-Z0-9$]+)\(',
             r'\.sig\|\|(?P<sig>[a-zA-Z0-9$]+)\(',
             r'yt\.akamaized\.net/\)\s*\|\|\s*.*?\s*[cs]\s*&&\s*[adf]\.set\([^,]+\s*,\s*(?:encodeURIComponent\s*\()?\s*(?P<sig>[a-zA-Z0-9$]+)\(',
             r'\b[cs]\s*&&\s*[adf]\.set\([^,]+\s*,\s*(?P<sig>[a-zA-Z0-9$]+)\(',
             r'\b[a-zA-Z0-9]+\s*&&\s*[a-zA-Z0-9]+\.set\([^,]+\s*,\s*(?P<sig>[a-zA-Z0-9$]+)\(',
             r'\bc\s*&&\s*a\.set\([^,]+\s*,\s*\([^)]*\)\s*\(\s*(?P<sig>[a-zA-Z0-9$]+)\(',
             r'\bc\s*&&\s*[a-zA-Z0-9]+\.set\([^,]+\s*,\s*\([^)]*\)\s*\(\s*(?P<sig>[a-zA-Z0-9$]+)\(',
             r'\bc\s*&&\s*[a-zA-Z0-9]+\.set\([^,]+\s*,\s*\([^)]*\)\s*\(\s*(?P<sig>[a-zA-Z0-9$]+)\('),
            jscode, 'Initial JS player signature function name', group='sig')
        print("func: " + funcname)
        jsi = JSInterpreter(jscode)
        initial_function = jsi.extract_function(funcname)
        print(initial_function)
        return lambda s: initial_function([s])

В результате находится и выполняется функция с названием Sqa (название меняется каждые 48 часов, но это не важно). Если выполнить поиск в блокноте, то можно найти такое:

Sqa = function (a) {
    a = a.split("");
    Xx.kg(a, 2);
    Xx.ti(a, 34);
    Xx.kg(a, 2);
    Xx.ti(a, 35);
    Xx.jl(a, 74);
    return a.join("")
};

Как видим, функция принимает неизвестный аргумент a. Но я в коде питона не вижу, чтобы в неё что-то передавалось.
Мне надо выполнить эту функцию на C#. А как? То есть, просто берём интерпретатор JInt, грузим в него весь обфускитированный код и выполняем функцию Sqa? Так? А как же аргумент? Не сам же он возникнет из ниоткуда :thinking: Я чёт не очень этот момент понимаю :man_shrugging:
Опишите по пунктам процесс того что нужно сделать.

А это что?)

_parse_sig_js возвращает функцию принимающую параметр

Если вы про код, то это мой наилюбимейший youtube-dl :grin:
А если про аргумент, то, скорее всего, это зашифрованная строка, которая в этой функции расшифровывается.

Видимо, да. Я просто не весь код выложил.
А с интерпретатором как быть? Просто передать ему имя функции с аргументом и она выполнится?

using System.IO;
using Jint;

namespace JS_test
{
    class Program
    {
        static void Main(string[] args)
        {
            string code = File.ReadAllText("code.js");
            Engine js = new Engine();
            js.Execute(code);//Jint.Runtime.JavaScriptException: "Uint8Array is not defined"
            object o = js.Execute("Sqa(somestring)");
            System.Diagnostics.Debug.WriteLine(o);
        }
    }
}

что делать?
а если так

            string code = File.ReadAllText("code.js");
            Engine js = new Engine();
            object o = js.Execute("let somestring='123456667890'; Sqa(somestring);");
            System.Diagnostics.Debug.WriteLine(o);

то пишет Sqa is not defined :man_shrugging:

Старая версия.

GitHub - sebastienros/jint: Javascript Interpreter for .NET

теперь document is not defined

В Jint не браузерный JS.

Я помню. И что делать? Написал

js.SetValue("document", new XmlDocument());

но теперь navigator is not defined

Добавить и этот объект (со всеми нужными свойствами)

Оно видимо хочет узнать что за браузер

image

а как именно? как создать этот нафигатор?

посмотреть к чему именно оно обращается, сделать класс с этим и

или не класс а в Execute засунуть что-нибудь типа

navigator = {
  hello: 'John',
}

кто оно? и где смотреть?

А это как? :thinking: Туда ведь весь код передаётся

Дык так же как

его ж можно много раз вызывать и остается результат предыдущего выполнения (созданные переменные и т.п.). Или в одну строку кода объединить.

Код, который выполняете.

Читать код или читать ошибки.

Читать код - не вариант. Там ведь обфускация.
Написал так:


            js.SetValue("document", new XmlDocument());
            js.Execute("navigator = {userAgent: 'Firefox 66.6'}");
            js.Execute(code);//Jint.Runtime.JavaScriptException: "Cannot read property 'hostname' of undefined"

но теперь Cannot read property 'hostname' of undefined. Что за undefined? :thinking:

Оно наверно document.location.hostname хочет получить, ну и location тут нет, вот и undefined.