2
1

More than 1 year has passed since last update.

reCAPTCHA V3の突破方法

Posted at
  1. ウェブサイトのソースコードを調べて、grecaptcha.executeコールを検索します。このコールは、ウェブサイトのコードのどこにでも、含まれているJavaScriptファイル内のページの <script> 要素内にあります。例えば、デモページのソースコードではこちらです。:

    window.grecaptcha.ready(function() {
        grecaptcha.execute(
            '6LfB5_IbAAAAAMCtsjEHEHKqcB9iQocwwxTiihJu', 
            {action: 'demo_action'},
        ).then(function(token) {
            if (window.verifyRecaptcha) {
            window.verifyRecaptcha(token);
            }
        });
    });
    

こちらでは、APIを使用してCAPTCHAを突破するために必要なすべての値を見つけることができます。また、.then()メソッドコールも確認できます。これは、トークンが生成された後にトークンを処理するコードです。同じコードを呼び出して、API から受け取ったトークンを渡す必要があります。

  1. sitekeypageurlaction の値を API に送信します。

SDK を使用する場合 (推奨):

PHP
    // https://github.com/2captchacom/2captcha-php

    require(__DIR__ . '/../src/autoloader.php');

    $solver = new \TwoCaptcha\TwoCaptcha('YOUR_API_KEY');

    try {
        $result = $solver->recaptcha([
            'sitekey' => '6LfB5_IbAAAAAMCtsjEHEHKqcB9iQocwwxTiihJu',
            'url'     => 'https://{{ hostname }}/demo/recaptcha-v3',
            'version' => 'v3',
            'action'  => 'demo_action',
            'score'   => 0.9,
        ]);
    } catch (\Exception $e) {
        die($e->getMessage());
    }

    die('Captcha solved: ' . $result->code);
Python
    # https://github.com/2captchacom/2captcha-python

    import sys
    import os

    sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))

    from twocaptcha import TwoCaptcha

    api_key = os.getenv('APIKEY_2CAPTCHA', 'YOUR_API_KEY')

    solver = TwoCaptcha(api_key)

    try:
        result = solver.recaptcha(
            sitekey='6LfB5_IbAAAAAMCtsjEHEHKqcB9iQocwwxTiihJu',
            url='https://{{ hostname }}/demo/recaptcha-v3',
            version='v3',
            action='demo_action',
            score=0.9
        )

    except Exception as e:
        sys.exit(e)

    else:
        sys.exit('solved: ' + str(result))
Java
    // https://github.com/2captchacom/2captcha-java

    package examples;

    import com.twocaptcha.TwoCaptcha;
    import com.twocaptcha.captcha.reCAPTCHA;

    public class reCAPTCHAV2Example {
        public static void main(String[] args) {
            TwoCaptcha solver = new TwoCaptcha("YOUR_API_KEY");
            reCAPTCHA captcha = new reCAPTCHA();
            captcha.setSiteKey("6LfB5_IbAAAAAMCtsjEHEHKqcB9iQocwwxTiihJu");
            captcha.setUrl("https://{{ hostname }}/demo/recaptcha-v3");
            captcha.setVersion("v3");
            captcha.setAction("demo_action");
            captcha.setScore(0.9);
            try {
                solver.solve(captcha);
                System.out.println("Captcha solved: " + captcha.getCode());
            } catch (Exception e) {
                System.out.println("Error occurred: " + e.getMessage());
            }
        }
    }
C#
    // https://github.com/2captchacom/2captcha-csharp

    using System;
    using System.Linq;
    using TwoCaptcha.Captcha;

    namespace TwoCaptcha.Examples
    {
        public class reCAPTCHAV2Example
        {
            public void Main()
            {
                TwoCaptcha solver = new TwoCaptcha("YOUR_API_KEY");
                reCAPTCHA captcha = new reCAPTCHA();
                captcha.SetSiteKey("6LfB5_IbAAAAAMCtsjEHEHKqcB9iQocwwxTiihJu");
                captcha.SetUrl("https://{{ hostname }}/demo/recaptcha-v3");
                captcha.SetVersion("v3");
                captcha.SetAction("demo_action");
                captcha.SetScore(0.9);
                try
                {
                    solver.Solve(captcha).Wait();
                    Console.WriteLine("Captcha solved: " + captcha.Code);
                }
                catch (AggregateException e)
                {
                    Console.WriteLine("Error occurred: " + e.InnerExceptions.First().Message);
                }
            }
        }
    }
    ```
</details>

<details><summary>Go</summary>

```go
    // https://github.com/2captchacom/2captcha-go

    package main

    import (
        "fmt"
        "log"
        "github.com/2captcha/2captcha-go"
    )

    func main() {
        client := api2captcha.NewClient("API_KEY")
        cap := api2captcha.reCAPTCHA{
            SiteKey: "6LfB5_IbAAAAAMCtsjEHEHKqcB9iQocwwxTiihJu",
            Url: "https://{{ hostname }}/demo/recaptcha-v3",
            Version: "v3",
            Action: "demo_action",
            Score: 0.9,
        }
        code, err := client.Solve(cap.ToRequest())
        if err != nil {
            log.Fatal(err);
        }
        fmt.Println("code "+code)
    }
C++
    // https://github.com/2captchacom/2captcha-cpp

    #include <cstdio>

    #include "curl_http.hpp"
    #include "api2captcha.hpp"

    int main (int ac, char ** av)
    {
    api2captcha::curl_http_t http;
    http.set_verbose (true);

    api2captcha::client_t client;
    client.set_http_client (&http);
    client.set_api_key (API_KEY);

    api2captcha::recaptcha_t cap;
    cap.set_site_key ("6LfB5_IbAAAAAMCtsjEHEHKqcB9iQocwwxTiihJu");
    cap.set_url ("https://{{ hostname }}/demo/recaptcha-v3");
    cap.set_version ("v3");
    cap.set_action ("demo_action");
    cap.set_score (0.9);

    try
    {
        client.solve (cap);
        printf ("code '%s'\n", cap.code ().c_str ());
    }
    catch (std::exception & e)
    {
        fprintf (stderr, "Failed: %s\n", e.what ());
    }

    return 0;   
    }

結果は次のようになります。

`03AGdBq27lvCYmKkaqDdxWLfMe3ovADGfGlSyiR-fN_EJrZGniTAmdH1XSjK8ralsctfjOLX2K0T7dJfxPqqga8dtSG2Lmns8Gk2ckcU6PQzUFieBqrtpkr5PPwnngew0Rnot2ik1y8m202u6pHTIquExlEYSlzS8vfoyPPt8fCf-Zrbu8vWkiY8Ogj17ommHMgkguZbmEyOdfLTXzhRko-a655_jJdCMjEtMxva-b78DnGlXu9d0o6vEmrw9n8ABu4lLsWnIbYPH0beXRRIkUE3si64Xhwkh1aO3L1HaIR3sfR0vOs3GV1OBzry`

手動:

2.1 GETまたはPOSTリクエストをAPI URLに送信します: https://{{ hostname }}/in.phpmethoduserrecaptchaに設定、versionv3にし、前のステップで見つかった値をgooglekeyの値として、フルページURLをpageurlの値として提供します。

リクエストの例:

    `GET https://{{ hostname }}/in.php?key=YOUR_API_KEY&method=userrecaptcha&version=v3&min_score=0.9&action=demo_action&googlekey=6LfB5_IbAAAAAMCtsjEHEHKqcB9iQocwwxTiihJu&pageurl=http://{{ hostname }}/demo/recaptcha-v3`

2.1.1 何も問題がなければ、サーバーはCAPTCHAのIDを返します。

    `OK|2122988149`

それ以外の場合、サーバーは エラーコード を返します。

2.1.2 15-20 秒後にGETリクエストを送信して結果を取得します。

    `GET https://{{ hostname }}/res.php?key=YOUR_API_KEY&action=get&id=2122988149`

CAPTCHAが突破済みの場合、サーバーはトークンで応答します。

    `OK|03AGdBq27lvCYmKkaqDdxWLfMe3ovADGfGlSyiR-fN_EJrZGniTAmdH1XSjK8ralsctfjOLX2K0T7dJfxPqqga8dtSG2Lmns8Gk2ckcU6PQzUFieBqrtpkr5PPwnngew0Rnot2ik1y8m202u6pHTIquExlEYSlzS8vfoyPPt8fCf-Zrbu8vWkiY8Ogj17ommHMgkguZbmEyOdfLTXzhRko-a655_jJdCMjEtMxva-b78DnGlXu9d0o6vEmrw9n8ABu4lLsWnIbYPH0beXRRIkUE3si64Xhwkh1aO3L1HaIR3sfR0vOs3GV1OBzry`

CAPTCHAが未解決の場合、サーバーは「CAPCHA_NOT_READY」の結果を返します。 その後5秒以内にリクエストを繰り返します。何か問題が発生した場合、サーバーは エラーコードを返します。

  1. トークンを取得したら、.then() メソッドコール内で実行されるのと同じコードを実行し、関数呼び出しの引数としてトークンを渡すことができます。このデモケースでは、javacsriptを開いて、javascriptコンソールで次のコードを実行できます。

    window.verifyRecaptcha('03AGdBq27lvCYmKkaqDdxWLfMe3ovADGfGlSyiR-fN_EJrZGniTAmdH1XSjK8ralsctfjOLX2K0T7dJfxPqqga8dtSG2Lmns8Gk2ckcU6PQzUFieBqrtpkr5PPwnngew0Rnot2ik1y8m202u6pHTIquExlEYSlzS8vfoyPPt8fCf-Zrbu8vWkiY8Ogj17ommHMgkguZbmEyOdfLTXzhRko-a655_jJdCMjEtMxva-b78DnGlXu9d0o6vEmrw9n8ABu4lLsWnIbYPH0beXRRIkUE3si64Xhwkh1aO3L1HaIR3sfR0vOs3GV1OBzry')
    

特定のウェブサイトでの正確なCAPTCHAの実装は、ウェブサイトの作成者によって異なることに注意してください。私たちのデモページでは、非常に人気のある実装方法を1つだけ示しています。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1