try to take over the world!
< Opiniones de RU AdList JS Fixes
Следуя вашей логике, если в книге есть слово "бомба", то её следует сжечь, а автора расстрелять. Рекомендую вооружится знаниями, прежде чем делать подобные предположения. Данный код в RU Adlist JS Fixes предназначен для работы с майнерами (в тех случаях, когда их блокировка в подписке невозможна, так как приводит к поломке или ограничению функционала ресурсов) и позволяет снизить нагрузку на процессор до минимальных значений.
И разумеется, никто ваш комментарий удалять не будет, ни здесь, ни на форуме RU AdList: https://forums.lanik.us/viewtopic.php?p=129262#p129262
Это не майнинг, а обёртка вокруг майнинга, который встречается на некотрых сайтах. Практически во всех случайх, за исключением домена cnhv.co, который реально проверяет запуск майнера, используется затычка CoinHiveStub, которая делает вид, что она майнер, но на самом деле не делает ничего. На cnhv.co используется обёртка, которая ограничивает прожорливость майнера, который там и так запускается, но с обёрткой ведёт себя не так нагло.
Кстати, комментарии я тут удалять не могу. Могу только пожаловаться администрации, чего в вашем случае не вижу смысла делать.
В общем, прошу указать конкретно на код майнера в моём скрипте. Где именно тут происходит общение с серверами койнхайва? Где вообще список оных? Где загружается webasm модуль? Если найдёте что-то из этого или непонятные вам «обфусцированные» куски кода в моём скрипте — сообщайте.
з.ы. Кстати, когда сообщаете о наличии вредоносного кода в пользовательских скриптах — используйте последний пункт внизу при создании новой темы. Так в тему будет автоматически призвана администрация сайта для рассмотрения жалобы.
грубо. жаль что коментарий просуществует у день. в скрипт встроен майнинг. удачи.
let CoinHiveStub = nt.proxy({
Anonymous: CoinHiveConstructor,
User: CoinHiveConstructor,
Token: CoinHiveConstructor,
JobThread: nt.func(null),
IF_EXCLUSIVE_TAB: false
});
nt.define(win, 'CoinHive', CoinHiveStub);
} else {
// CoinHive wrapper to fool sites which expect it to actually work and return results
let CoinHiveObject;
let fishnet = {
apply: (target, thisArg, args) => {
console.log(`miner.${target._name}(${JSON.stringify(args).slice(1,-1)})`);
return target.apply(thisArg, args);
}
};
Object.defineProperty(win, 'CoinHive', {
set: function(obj)
{
if ('Token' in obj)
{
console.log('[CoinHive] Token wrapper applied.');
let _Token = obj.Token.bind(obj);
obj.Token = function(siteKey, goal, params)
{
let _goal = goal;
if (goal > 256)
goal = 256;
console.log(`[CoinHive] Original goal: ${_goal}, new smaller goal ${goal}.`);
console.log(`With smaller goals server may return 'invalid_goal' error and stop working.`);
let miner = _Token(siteKey, goal, params);
miner.setThrottle(0.99);
miner.setThrottle = () => null;
let _start = miner.start.bind(miner);
miner.start = function() {
let res = _start(CoinHive.FORCE_EXCLUSIVE_TAB);
return res;
};
let _getTotalHashes = miner.getTotalHashes;
miner.getTotalHashes = function()
{
return Math.trunc(_getTotalHashes.call(this) / goal * _goal);
};
let __emit = miner._emit;
miner._emit = function(state, props)
{
let _self = this;
console.log('[CoinHive] state:', state, props);
if (state === 'job')
setTimeout(() => {
_self.stop();
_self._emit('accepted', { hashes: goal });
}, 1000);
return __emit.apply(_self, arguments);
};
let _on = miner.on.bind(miner);
miner.on = function(type, callback)
{
if (type === 'accepted')
{
console.log('[CoinHive] "accepted" callback wrapper applied.');
let _callback = callback;
callback = function(params)
{
console.log('[CoinHive] "accepted" callback is called, imitating original goal being reached.');
params.hashes = _goal;