LoginSignup
1
0

More than 1 year has passed since last update.

reCAPTCHA V2コールバックの突破方法

Posted at
  1. ブラウザでデベロッパーコンソールを開き、data-sitekey属性を持つ要素を見つけます。
    <div class="g-recaptcha" data-sitekey="6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u" id="recaptcha"></div>
  1. sitekeypageurlAPIに送信します。

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' => '6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u',
            'url'     => 'https://{{ hostname }}/demo/recaptcha-v2-callback',
        ]);
    } 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='6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u',
            url='https://{{ hostname }}/demo/recaptcha-v2-callback')

    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("6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u");
            captcha.setUrl("https://{{ hostname }}/demo/recaptcha-v2-callback");
            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("6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u");
                captcha.SetUrl("https://{{ hostname }}/demo/recaptcha-v2-callback");
                try
                {
                    solver.Solve(captcha).Wait();
                    Console.WriteLine("Captcha solved: " + captcha.Code);
                }
                catch (AggregateException e)
                {
                    Console.WriteLine("Error occurred: " + e.InnerExceptions.First().Message);
                }
            }
        }
    }
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: "6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u",
            Url: "https://{{ hostname }}/demo/recaptcha-v2-callback",
        }
        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 ("6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u");
    cap.set_url ("https://{{ hostname }}/demo/recaptcha-v2-callback");

    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_tFsZM0ZhSQovKJwjLlotrYajyTSRv3hgvXtLlLxXzbAwgeI91-wM7AFEte0uO_DhcNajxZr7E50wU9vuAe_drGWe4q-hNx4PQPenjaw`

Manually:

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

リクエストの例:

   `GET https://{{ hostname }}/in.php?key=YOUR_API_KEY&method=userrecaptcha&googlekey=6LfD3PIbAAAAAJs_eEHvoOl75_83eXSqpPSRFJ_u&pageurl=http://{{ hostname }}/demo/recaptcha-v2-callback`

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|03AHJ_Vuve5Asa4koK3KSMyUkCq0vUFCR5Im4CwB7PzO3dCxIo11i53epEraq-uBO5mVm2XRikL8iKOWr0aG50sCuej9bXx5qcviUGSm4iK4NC_Q88flavWhaTXSh0VxoihBwBjXxwXuJZ-WGN5Sy4dtUl2wbpMqAj8Zwup1vyCaQJWFvRjYGWJ_TQBKTXNB5CCOgncqLetmJ6B6Cos7qoQyaB8ZzBOTGf5KSP6e-K9niYs772f53Oof6aJeSUDNjiKG9gN3FTrdwKwdnAwEYX-F37sI_vLB1Zs8NQo0PObHYy0b0sf7WSLkzzcIgW9GR0FwcCCm1P8lB-50GQHPEBJUHNnhJyDzwRoRAkVzrf7UkV8wKCdTwrrWqiYDgbrzURfHc2ESsp020MicJTasSiXmNRgryt-gf50q5BMkiRH7osm4DoUgsjc_XyQiEmQmxl5sqZP7aKsaE-EM00x59XsPzD3m3YI6SRCFRUevSyumBd7KmXE8VuzIO9lgnnbka4-eZynZa6vbB9cO3QjLH0xSG3-egcplD1uLGh79wC34RF49Ui3eHwua4S9XHpH6YBe7gXzz6_mv-o-fxrOuphwfrtwvvi2FGfpTexWvxhqWICMFTTjFBCEGEgj7_IFWEKirXW2RTZCVF0Gid7EtIsoEeZkPbrcUISGmgtiJkJ_KojuKwImF0G0CsTlxYTOU2sPsd5o1JDt65wGniQR2IZufnPbbK76Yh_KI2DY4cUxMfcb2fAXcFMc9dcpHg6f9wBXhUtFYTu6pi5LhhGuhpkiGcv6vWYNxMrpWJW_pV7q8mPilwkAP-zw5MJxkgijl2wDMpM-UUQ_k37FVtf-ndbQAIPG7S469doZMmb5IZYgvcB4ojqCW3Vz6Q`

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

  1. "デベロッパーコ​​ンソールで、コールバック関数verifyDemoRecaptchaを実行し、次のようにトークン文字列を引数として渡します: verifyDemoRecaptcha('TOKEN')

各ウェブサイトには固有のコールバック定義を持つ独自のreCAPTCHA実装があり、コールバック関数の名前はデモとは異なるか、匿名関数を使用することもできます。 このコードスニペット は、コールバック定義を見つけるのに役立ちます。"This code snippet can help you to find the callback definition.

1
0
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
1
0