Лайфхаки BAS

Pinned Moved LifeHacks
  • Вход в твитер по токену.
    Вставлять в функцию 'Загрузить cookies'

    {"cookies":[{"domain":".twitter.com","expires":1704067200,"httpOnly": false,"name":"auth_token","path":"/","priority":"Medium","sameParty":false,"secure":false,"session":false,"size":50,"sourcePort":80,"sourceScheme":"NonSecure","value":"[[TOKEN]]"}]}
    

    expires - выставлять на пару месяцев от текущей даты.

  • @hvrsh said in Лайфхаки BAS:

    Вход в твитер по токену.
    Вставлять в функцию 'Загрузить cookies'

    {"cookies":[{"domain":".twitter.com","expires":1704067200,"httpOnly": false,"name":"auth_token","path":"/","priority":"Medium","sameParty":false,"secure":false,"session":false,"size":50,"sourcePort":80,"sourceScheme":"NonSecure","value":"[[TOKEN]]"}]}
    

    expires - выставлять на пару месяцев от текущей даты.

    Этот способ будет работать до 1 января 2024 года :D Что бы работало дольше, нужно будет увеличить значение даты в unixtime в ключе "expires"

  • @Fox ну я уточнил что под себя нужно это менять. Там вроде на пол года только можно масимум посавить, и да, это должно быть первым кубиком так как функция перезаписывает кук всего браузера, поему ведь не сделать добавление по доменам... это же не сложно дложно быть.

  • Делюсь nodejs кодом для одноименного кубика в BAS.
    Требуется предварительно установить в бас nmp пакет socksv5
    Запуск его приводит к развертыванию на компе socks5 прокси , этот прокси сервер можно юзать как свой личный прокси.
    Авторизация по логину и паролю, в коде они указаны , можете те что вы хотите.
    Прокси открывается на рандомном свободном порту.
    Порт подключения к проксю будет сохранен в [[PORT]].
    Ip поднятого сервера - сами определите это не хитро сделать!

    Код:

    const socks = require('socksv5');
    const net = require('net');
    const auth = {
      login: 'qwerty123',
      password: 'aqwesdfg222'
    };
    const srv = socks.createServer(function(info, accept, deny) {
      accept();
    });
    // Аутентификация
    srv.useAuth(socks.auth.UserPassword(function(user, password, cb) {
      if (user === auth.login && password === auth.password) {
        cb(true);
      } else {
        cb(false);
      }
    }));
    // Поиск свободного порта и запуск SOCKS сервера
    const server = net.createServer();
    server.listen(0, () => {
      const port = server.address().port;
      server.close(() => {
        srv.listen(port, '0.0.0.0', function() {
            [[PORT]] = port;
          console.log(`SOCKS5 прокси сервер запущен на порту: ${port}`);
        });
      });
    });
    

    Следующий nodejs кубик отроет порт из [[PORT]] для внешних подключений на компе где запустился только что прокси-сервер, это выполняется создание правила в брандмауэре винды:

    const { exec } = require('child_process');
    // Указанный порт для правила брандмауэра
    const port = [[PORT]];
    const ruleName = `OpenPort${port}`;
    console.log(`Начинаем добавление правила в брандмауэр для порта ${port}.`);
    // Команда для добавления правила в брандмауэр
    const command = `netsh advfirewall firewall add rule name="${ruleName}" dir=in action=allow protocol=TCP localport=${port}`;
    // Выполнение команды для открытия порта
    exec(command, (error, stdout, stderr) => {
      if (error) {
        console.error(`Ошибка при добавлении правила в брандмауэр: ${error}`);
        return;
      }
      if (stderr) {
        console.error(`Ошибка в выводе команды: ${stderr}`);
        return;
      }
      console.log(`Правило для порта ${port} успешно добавлено в брандмауэр с именем '${ruleName}'.`);
      console.log(stdout);
    });
    

    Этот код останавливает работу прокси сервера. Нужно выполнять в среде cmd\bat , например в басе этот тут: Управление Процессами>Запустить Процесс
    Код:

    netstat -ano | findstr [[PORT]]
    
  • Логирование каждого пука баса в тхт попоточно.
    модернизировал уже бывалый на форуме кусок кода который делал это в лог.

    _sa = function (id)
    {
    ScriptWorker.SetCurrentAction(id);    
    native("filesystem", "writefile", JSON.stringify({path: VAR_PROJECT_DIRECTORY + "/log/" + VAR_DATE_NOW + "/thread_" + VAR_THREAD_INDEX + ".txt",value: (id).toString() + "\r\n",base64:false,append:true}));
    }
    
    

    f11787c4-b704-4a98-94d5-70acbf2d955f-image.png
    Это ставить в OnApplicationStart

    114a0328-7b98-4a5c-b93b-d1f951be01a7-image.png
    Это в main или в любую другую функцию что вызывается многопоточно.

  • Может кому то пригодится. Задался вопросом, как менять значение ресурсов, выставленные пользователем заранее в настройках, непосредственно при работе алгоритма. Прокатит, конечно не со всеми типами ресурсов, типа рандомного числа (иначе придется дополнительные костыли писать). Пример для ресурса типа fixedstring:

    image.png

    Результат лога:
    [575755268] [21:14:32] Поток №1 : Текст
    [341096640] [21:14:33] Поток №1 : Текст
    [313945351] [21:14:38] Поток №1 : Текст
    [106131420] [21:14:40] Поток №1 : 123
    [73431582] [21:14:49] Поток №1 : 123

    Параметр "notreuse", при обращении к вновь созданному ресурсу, будет выдавать - уже новое значение.
    Значение в Actual конфиге конечно не изменит, но изменит на лету для текущей работы скрипта.
    PS Во многопотоке не проверял.
    PPS Конечно, можно взять ресурс и передать глобальной переменной значение и с ней уже работать, но задача стояла именно изменить значение ресурса "на лету".

  • ModeratorM Moderator moved this topic from Off topic on
  • Всем привет

  • Решил поделится своей функцией которая позваляет класть логи в определенную папку
    Вам достаточно установить глобальную переменную LOGS_FILE_TXT перед выполнением этого кода в OnApplicationStart

    var getActionId = function() {
        return "[" + ScriptWorker.GetCurrentAction() + "]";
    }
    
    var getTime = function(){
        var checkTime = function(i) {
            return (i < 10) ? ("0" + i) : i;
        };
    
        var d = new Date();
        var hh = checkTime(d.getHours());
        var mm = checkTime(d.getMinutes());
        var ss = checkTime(d.getSeconds());
    
        return '[' + hh + ':' + mm + ':' + ss + ']';
    };
    
    var wrapLog = function(msg) {
        return getActionId() + ' ' + getTime() + ' [Thread #' + thread_number() + '] ' + msg;
    }
    
    var writeLogToFile = function(msg) {
        var wrappedMsg = wrapLog(msg);
    
        native("filesystem", "writefile", JSON.stringify({path: JSON.parse(P("basglobal", "LOGS_FILE_TXT") || '""'), value: (wrappedMsg).toString() + "\r\n", base64:false, append:true}));
    }
    
    original_log_fn = log;
    
    log = function(msg) {
        original_log_fn(msg);
        writeLogToFile(msg);
    }
    

    И через обычный блок лога вы сможете выводить лог сразу в ваш файл

  • @Fox моя функция после компиляции скидывается после любого браузерного действия, ты не шаришь как это обойти?

  • @qusav1n said in Лайфхаки BAS:

    @Fox моя функция после компиляции скидывается после любого браузерного действия, ты не шаришь как это обойти?

    Используй глобальные переменные js

  • Не понимаю, как реализовать? Можешь подробнее пояснить решение

  • @qusav1n said in Лайфхаки BAS:

    Не понимаю, как реализовать? Можешь подробнее пояснить решение

    getActionId = function() {
        return "[" + ScriptWorker.GetCurrentAction() + "]";
    }
    
    getTime = function(){
        var checkTime = function(i) {
            return (i < 10) ? ("0" + i) : i;
        };
    
        var d = new Date();
        var hh = checkTime(d.getHours());
        var mm = checkTime(d.getMinutes());
        var ss = checkTime(d.getSeconds());
    
        return '[' + hh + ':' + mm + ':' + ss + ']';
    };
    
    wrapLog = function(msg) {
        return getActionId() + ' ' + getTime() + ' [Thread #' + thread_number() + '] ' + msg;
    }
    
    writeLogToFile = function(msg) {
        var wrappedMsg = wrapLog(msg);
    
        native("filesystem", "writefile", JSON.stringify({path: JSON.parse(P("basglobal", "LOGS_FILE_TXT") || '""'), value: (wrappedMsg).toString() + "\r\n", base64:false, append:true}));
    }
    
    original_log_fn = log;
    
    log = function(msg) {
        original_log_fn(msg);
        writeLogToFile(msg);
    }