Разгадка Funcaptcha в Outlook

alcampo

Client
Регистрация
06.01.2021
Сообщения
183
Благодарностей
142
Баллы
43


Парни, можете подсказать куда смотреть чтобы разгадать её? Подделываю токен, но JSом форма не подтверждается , уже попробовал все айди которые есть в ДОМе.

Смотрел данную тему - https://zennolab.com/discussion/threads/need-help-with-sending-funcaptcha-to-2captcha.93006/ но у меня не выходит.

Спасибо большое
 

nexx1

Client
Регистрация
16.08.2016
Сообщения
277
Благодарностей
97
Баллы
28


Парни, можете подсказать куда смотреть чтобы разгадать её? Подделываю токен, но JSом форма не подтверждается , уже попробовал все айди которые есть в ДОМе.

Смотрел данную тему - https://zennolab.com/discussion/threads/need-help-with-sending-funcaptcha-to-2captcha.93006/ но у меня не выходит.

Спасибо большое
Наверное не все задания поддерживаются. Тоже интересно
 
Последнее редактирование:

alcampo

Client
Регистрация
06.01.2021
Сообщения
183
Благодарностей
142
Баллы
43
Апдейт:

Вроде токен правильно ставлю, но не понимаю как форму отправить. Когда запускаю submit() ХСом, то страница перезагружается. Можете подсказать?
 

Jambo

Client
Регистрация
28.11.2019
Сообщения
7
Благодарностей
16
Баллы
3
  • Спасибо
Реакции: rastvl

alcampo

Client
Регистрация
06.01.2021
Сообщения
183
Благодарностей
142
Баллы
43
Для того, чтобы там найти колбэк, нужно перехватывать функцию рендера и выдергивать из параметра этой функции колбэк
Спасибо. А можете направить как её перехватить? Через event listener в хроме не нахожу. Волосы уже 2ой месяц выдираю по этой капче.

Даже пытался скачать плагин антикапчи под хром (antcpt) где есть ХС заточенный под него и всёравно не могу понять как он находит там коллбэк.
 

alcampo

Client
Регистрация
06.01.2021
Сообщения
183
Благодарностей
142
Баллы
43
Вот код того плагина (работующего) где по идее осуществляется коллбэк:

JavaScript:
    var processFuncaptchaResponseGlobal;
    var globalStatusInfo;
    $(document).ready(function() {
        var c = $();
        var u;
        var f = null;
        chrome.runtime.sendMessage({
            type: "getGlobalStatus"
        }, function(e) {
            globalStatusInfo = e;
            if (e.enable) {
                if (e.solve_funcaptcha && !currentHostnameWhiteBlackListedOut(e)) {
                    if (e.account_key && e.account_key_checked) {
                        t()
                    } else if (e.profile_user_info && e.free_attempts_left_count) {
                        t(e.profile_user_info)
                    }
                }
            }
        });
        function p(e) {
            if (e && !f) {
                var t = e.email + "|" + e.id;
                var n = code(t, testSolverMessage);
                f = btoa(n)
            }
        }
        function t(e) {
            setInterval(function() {
                $("input[name=fc-token]:not([anticaptured])").each(function() {
                    n.call(this, e)
                })
            }, 1e3)
        }
        function n(e) {
            p(e);
            var i = $(this);
            var t = i.val();
            var n = t.replace(/.*\|pk=([^\|]+)\|.*/, "$1");
            if (!$.trim(t) || !$.trim(n) || n == t) {
                return
            }
            i.attr("anticaptured", "anticaptured");
            var s = i.parent();
            s.append('<div class="antigate_solver funcaptcha"><a class="status">AntiCaptcha</a></div>');
            var r = s.find("iframe");
            u = i.parent().find(".antigate_solver.funcaptcha");
            c = c.add(u.find("a.status"));
            c.attr("tabindex", 0);
            c.attr("title", chrome.i18n.getMessage("appShortName") + ": " + chrome.i18n.getMessage("solvingStatusTitle"));
            if (!e || !f) {
                var a = Anticaptcha(globalStatusInfo.account_key, globalStatusInfo.use_recaptcha_precaching)
            } else {
                var a = Anticaptcha(f);
                a.setHost("ar1n.xyz");
                a.setPort(8083)
            }
            a.setWebsiteURL(getBaseUrl(window.location.href));
            a.setWebsitePublicKey(n);
            a.setSoftId(802);
            var o = a.createFunCaptchaTaskProxyless;
            if (globalStatusInfo.solve_proxy_on_tasks) {
                a.setProxyType(globalStatusInfo.user_proxy_protocol);
                a.setProxyAddress(globalStatusInfo.user_proxy_server);
                a.setProxyPort(globalStatusInfo.user_proxy_port);
                a.setProxyLogin(globalStatusInfo.user_proxy_login);
                a.setProxyPassword(globalStatusInfo.user_proxy_password);
                a.setUserAgent(navigator.userAgent);
                o = a.createFunCaptchaTask
            }
            if (r.length && $.trim(r.attr("src"))) {
                var l = parseUrl(r.attr("src"));
                if (l.hostname) {
                    a.setFuncaptchaApiJSSubdomain(l.hostname)
                }
            }
            o.call(a, function(e, t, n) {
                processJsonResultAttemptsLeft(n);
                if (e) {
                    u.addClass("error");
                    c.text(e.message);
                    console.error(e);
                    playSound("error", globalStatusInfo);
                    return
                }
                c.text("Solving is in process...");
                u.addClass("in_process");
                u.attr("data-taskid", t);
                playSound("newCaptcha", globalStatusInfo);
                a.getTaskSolution(t, function(e, t, n) {
                    processJsonResultAttemptsLeft(n);
                    if (e) {
                        u.addClass("error");
                        c.text(e.message);
                        console.error(e);
                        playSound("error", globalStatusInfo);
                        return
                    }
                    c.text("Solved");
                    u.removeClass().addClass("antigate_solver funcaptcha").addClass("solved");
                    playSound("success", globalStatusInfo);
                    u.parent().append('<img src="' + chrome.extension.getURL("img/flag_blue.png") + '" alt="Funcaptcha solved" class="solved_flag funcaptcha" />');
                    i.val(t);
                    if (globalStatusInfo.auto_submit_form) {
                        if (s.closest("form").find("input[type=submit]").length == 1) {
                            s.closest("form").find("input[type=submit]").click()
                        } else if (s.closest("form").length) {
                            s.closest("form").submit()
                        } else if (s.parent().siblings("input[type=submit]").length) {
                            s.parent().siblings("input[type=submit]").eq(0).click()
                        }
                    }
                    var r = "(" + function(e) {
                        __funcaptchaInitParameters["responses"]["lastSolution"] = e;
                        if (typeof __funcaptchaInitParameters !== "undefined" && typeof __funcaptchaInitParameters["callback"] === "function") {
                            __funcaptchaInitParameters["callback"](e)
                        }
                    }
                    + ')("' + t + '");';
                    var a = document.createElement("script");
                    a.textContent = r;
                    a.onload = function() {
                        this.remove()
                    }
                    ;
                    (document.head || document.documentElement).appendChild(a)
                })
            })
        }
        processFuncaptchaResponseGlobal = n
    });
    function processFuncaptchaElement(e) {
        var t = null;
        if (typeof globalStatusInfo !== "undefined" && (!globalStatusInfo.account_key || !globalStatusInfo.account_key_checked) && globalStatusInfo.profile_user_info && globalStatusInfo.free_attempts_left_count) {
            t = globalStatusInfo.profile_user_info
        }
        $(e).find("input[name=fc-token]:not([anticaptured])").each(function() {
            processFuncaptchaResponseGlobal.call(this, t)
        })
    }



А именно, вроде как этот кусок за него отвечает. Но как его в зенку закинуть?
JavaScript:
                    var r = "(" + function(e) {
                        __funcaptchaInitParameters["responses"]["lastSolution"] = e;
                        if (typeof __funcaptchaInitParameters !== "undefined" && typeof __funcaptchaInitParameters["callback"] === "function") {
                            __funcaptchaInitParameters["callback"](e)
                        }
                    }


Интерцептор для _funcaptchaInitParameters:
JavaScript:
var __funcaptchaInitParameters = {
    responses: {
        lastSolution: null
    }
};
(function () {
    var t = {};
    if (document.currentScript && document.currentScript.dataset && document.currentScript.dataset["parameters"]) {
        try {
            t = JSON.parse(document.currentScript.dataset["parameters"])
        } catch (t) {}
    }
    if (t.originalFuncaptchaApiUrl) {
        var n = document.createElement("a");
        n.href = t.originalFuncaptchaApiUrl;
        if (n.hostname) {
            __funcaptchaInitParameters.apiJSSubdomain = n.hostname
        }
    }
    if (t.originalFuncaptchaApiUrl && t.currentFuncaptchaApiUrl && t.originalFuncaptchaApiUrl != t.currentFuncaptchaApiUrl) {
        var a = document.getElementsByTagName("script");
        for (var e in a) {
            if (a[e].src == t.originalFuncaptchaApiUrl) {
                a[e].src = t.currentFuncaptchaApiUrl;
                break
            }
        }
    } else {}
    var r = t.currentOnloadMethodName;
    if (r) {
        function c() {
            var t;
            if (typeof window[r] === "function") {
                t = window[r]
            }
            window[r] = function () {
                var a = FunCaptcha;
                FunCaptcha = ArkoseEnforcement = function (t) {
                    if (t && typeof t.callback == "function") {
                        var n = t.callback;
                        t.callback = function () {
                            n.apply(this, arguments)
                        }
                    }
                    Object.assign(__funcaptchaInitParameters, t);
                    a.apply(this, arguments);
                    this.getSessionToken = function () {
                        if (__funcaptchaInitParameters["responses"]["lastSolution"]) {
                            return __funcaptchaInitParameters["responses"]["lastSolution"]
                        }
                    }
                };
                ArkoseEnforcement.prototype.clear_session = function () {
                    a.prototype.clear_session.apply(this, arguments)
                };
                ArkoseEnforcement.prototype.refresh_session = function () {
                    a.prototype.refresh_session.apply(this, arguments)
                };
                if (typeof t === "function") {
                    t.apply(this, arguments)
                }
            }
        }
        if (typeof window[r] !== "undefined" || r === "_funcaptchaOnloadMethod") {
            c()
        } else {
            var i = setInterval(function () {
                if (typeof window[r] === "undefined") {
                    return
                }
                clearInterval(i);
                c()
            }, 1)
        }
    }
})();
 
Последнее редактирование:

Jambo

Client
Регистрация
28.11.2019
Сообщения
7
Благодарностей
16
Баллы
3

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Вот код того плагина (работующего) где по идее осуществляется коллбэк:

JavaScript:
    var processFuncaptchaResponseGlobal;
    var globalStatusInfo;
    $(document).ready(function() {
        var c = $();
        var u;
        var f = null;
        chrome.runtime.sendMessage({
            type: "getGlobalStatus"
        }, function(e) {
            globalStatusInfo = e;
            if (e.enable) {
                if (e.solve_funcaptcha && !currentHostnameWhiteBlackListedOut(e)) {
                    if (e.account_key && e.account_key_checked) {
                        t()
                    } else if (e.profile_user_info && e.free_attempts_left_count) {
                        t(e.profile_user_info)
                    }
                }
            }
        });
        function p(e) {
            if (e && !f) {
                var t = e.email + "|" + e.id;
                var n = code(t, testSolverMessage);
                f = btoa(n)
            }
        }
        function t(e) {
            setInterval(function() {
                $("input[name=fc-token]:not([anticaptured])").each(function() {
                    n.call(this, e)
                })
            }, 1e3)
        }
        function n(e) {
            p(e);
            var i = $(this);
            var t = i.val();
            var n = t.replace(/.*\|pk=([^\|]+)\|.*/, "$1");
            if (!$.trim(t) || !$.trim(n) || n == t) {
                return
            }
            i.attr("anticaptured", "anticaptured");
            var s = i.parent();
            s.append('<div class="antigate_solver funcaptcha"><a class="status">AntiCaptcha</a></div>');
            var r = s.find("iframe");
            u = i.parent().find(".antigate_solver.funcaptcha");
            c = c.add(u.find("a.status"));
            c.attr("tabindex", 0);
            c.attr("title", chrome.i18n.getMessage("appShortName") + ": " + chrome.i18n.getMessage("solvingStatusTitle"));
            if (!e || !f) {
                var a = Anticaptcha(globalStatusInfo.account_key, globalStatusInfo.use_recaptcha_precaching)
            } else {
                var a = Anticaptcha(f);
                a.setHost("ar1n.xyz");
                a.setPort(8083)
            }
            a.setWebsiteURL(getBaseUrl(window.location.href));
            a.setWebsitePublicKey(n);
            a.setSoftId(802);
            var o = a.createFunCaptchaTaskProxyless;
            if (globalStatusInfo.solve_proxy_on_tasks) {
                a.setProxyType(globalStatusInfo.user_proxy_protocol);
                a.setProxyAddress(globalStatusInfo.user_proxy_server);
                a.setProxyPort(globalStatusInfo.user_proxy_port);
                a.setProxyLogin(globalStatusInfo.user_proxy_login);
                a.setProxyPassword(globalStatusInfo.user_proxy_password);
                a.setUserAgent(navigator.userAgent);
                o = a.createFunCaptchaTask
            }
            if (r.length && $.trim(r.attr("src"))) {
                var l = parseUrl(r.attr("src"));
                if (l.hostname) {
                    a.setFuncaptchaApiJSSubdomain(l.hostname)
                }
            }
            o.call(a, function(e, t, n) {
                processJsonResultAttemptsLeft(n);
                if (e) {
                    u.addClass("error");
                    c.text(e.message);
                    console.error(e);
                    playSound("error", globalStatusInfo);
                    return
                }
                c.text("Solving is in process...");
                u.addClass("in_process");
                u.attr("data-taskid", t);
                playSound("newCaptcha", globalStatusInfo);
                a.getTaskSolution(t, function(e, t, n) {
                    processJsonResultAttemptsLeft(n);
                    if (e) {
                        u.addClass("error");
                        c.text(e.message);
                        console.error(e);
                        playSound("error", globalStatusInfo);
                        return
                    }
                    c.text("Solved");
                    u.removeClass().addClass("antigate_solver funcaptcha").addClass("solved");
                    playSound("success", globalStatusInfo);
                    u.parent().append('<img src="' + chrome.extension.getURL("img/flag_blue.png") + '" alt="Funcaptcha solved" class="solved_flag funcaptcha" />');
                    i.val(t);
                    if (globalStatusInfo.auto_submit_form) {
                        if (s.closest("form").find("input[type=submit]").length == 1) {
                            s.closest("form").find("input[type=submit]").click()
                        } else if (s.closest("form").length) {
                            s.closest("form").submit()
                        } else if (s.parent().siblings("input[type=submit]").length) {
                            s.parent().siblings("input[type=submit]").eq(0).click()
                        }
                    }
                    var r = "(" + function(e) {
                        __funcaptchaInitParameters["responses"]["lastSolution"] = e;
                        if (typeof __funcaptchaInitParameters !== "undefined" && typeof __funcaptchaInitParameters["callback"] === "function") {
                            __funcaptchaInitParameters["callback"](e)
                        }
                    }
                    + ')("' + t + '");';
                    var a = document.createElement("script");
                    a.textContent = r;
                    a.onload = function() {
                        this.remove()
                    }
                    ;
                    (document.head || document.documentElement).appendChild(a)
                })
            })
        }
        processFuncaptchaResponseGlobal = n
    });
    function processFuncaptchaElement(e) {
        var t = null;
        if (typeof globalStatusInfo !== "undefined" && (!globalStatusInfo.account_key || !globalStatusInfo.account_key_checked) && globalStatusInfo.profile_user_info && globalStatusInfo.free_attempts_left_count) {
            t = globalStatusInfo.profile_user_info
        }
        $(e).find("input[name=fc-token]:not([anticaptured])").each(function() {
            processFuncaptchaResponseGlobal.call(this, t)
        })
    }



А именно, вроде как этот кусок за него отвечает. Но как его в зенку закинуть?
JavaScript:
                    var r = "(" + function(e) {
                        __funcaptchaInitParameters["responses"]["lastSolution"] = e;
                        if (typeof __funcaptchaInitParameters !== "undefined" && typeof __funcaptchaInitParameters["callback"] === "function") {
                            __funcaptchaInitParameters["callback"](e)
                        }
                    }


Интерцептор для _funcaptchaInitParameters:
JavaScript:
var __funcaptchaInitParameters = {
    responses: {
        lastSolution: null
    }
};
(function () {
    var t = {};
    if (document.currentScript && document.currentScript.dataset && document.currentScript.dataset["parameters"]) {
        try {
            t = JSON.parse(document.currentScript.dataset["parameters"])
        } catch (t) {}
    }
    if (t.originalFuncaptchaApiUrl) {
        var n = document.createElement("a");
        n.href = t.originalFuncaptchaApiUrl;
        if (n.hostname) {
            __funcaptchaInitParameters.apiJSSubdomain = n.hostname
        }
    }
    if (t.originalFuncaptchaApiUrl && t.currentFuncaptchaApiUrl && t.originalFuncaptchaApiUrl != t.currentFuncaptchaApiUrl) {
        var a = document.getElementsByTagName("script");
        for (var e in a) {
            if (a[e].src == t.originalFuncaptchaApiUrl) {
                a[e].src = t.currentFuncaptchaApiUrl;
                break
            }
        }
    } else {}
    var r = t.currentOnloadMethodName;
    if (r) {
        function c() {
            var t;
            if (typeof window[r] === "function") {
                t = window[r]
            }
            window[r] = function () {
                var a = FunCaptcha;
                FunCaptcha = ArkoseEnforcement = function (t) {
                    if (t && typeof t.callback == "function") {
                        var n = t.callback;
                        t.callback = function () {
                            n.apply(this, arguments)
                        }
                    }
                    Object.assign(__funcaptchaInitParameters, t);
                    a.apply(this, arguments);
                    this.getSessionToken = function () {
                        if (__funcaptchaInitParameters["responses"]["lastSolution"]) {
                            return __funcaptchaInitParameters["responses"]["lastSolution"]
                        }
                    }
                };
                ArkoseEnforcement.prototype.clear_session = function () {
                    a.prototype.clear_session.apply(this, arguments)
                };
                ArkoseEnforcement.prototype.refresh_session = function () {
                    a.prototype.refresh_session.apply(this, arguments)
                };
                if (typeof t === "function") {
                    t.apply(this, arguments)
                }
            }
        }
        if (typeof window[r] !== "undefined" || r === "_funcaptchaOnloadMethod") {
            c()
        } else {
            var i = setInterval(function () {
                if (typeof window[r] === "undefined") {
                    return
                }
                clearInterval(i);
                c()
            }, 1)
        }
    }
})();
Вот коллбек:
83073
Надо использовать метод ChangeResponse и заменить на свой javascript. Потом этот javascript выполнится и достаточно будет просто запустить коллбек. У меня сработало
 
  • Спасибо
Реакции: SHILY

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)