👋

PythonでhCaptcha をバイパスする

2022/12/26に公開

ウェブマスターの多くは、自動化から保護する手立てとしてGoogle ReCaptchaを使用しています。しかし、これは市場で手に入る唯一のソリューションというわけではありません。最も一般的な代替手段の1つはhCaptchaです。現在、DDoS対策市場のリーダーであり、現時点では主要なCDNプロバイダーの1社であるCloudflareによって使用されています。これは、もしCloudflareがあなたを疑わしいと判断した場合、遅かれ早かれhCaptchaに遭遇することを意味します。

Cloudflareは、Google ReCaptchaからIntuition MachinesのhCaptchaに移行することを発表しました。この動きは、データの機密性に関する懸念とCAPTCHAの柔軟性に大きく貢献しました。現在、攻撃に対する保護はさらに適応的です。これは、Cloudflareのすべての顧客が影響を受けます。

また、 hCaptchaは

Googleとは異なり、個人データを収集しません。
CDNが世界中に分散されているため、CAPTCHAは高速かつ完璧に動作します。
ReCaptchaと互換性があるため、移行が非常に簡単です。
障害のある方に適しています。

素晴らしいことのように聞こえますよね?しかし、CloudflareでhCaptchaを迂回することについてはどうでしょうか?

hCaptchaの高速な自動化のために、2captcha-pythonモジュールを使用します。 Python 3.xが必要で、pipでインストールできます。

pip3 install 2captcha-python

​​または、リポジトリをクローンすることもできますが、事前にrequestsモジュールをインストールすることを忘れないでください。

git clone https://github.com/2captcha/2captcha-python.git

準備

APIキーを送信する2Captchaクラスの新しいインスタンスを作成する必要があります。

from twocaptcha import twoCaptcha #module import
solver = 2Captcha('YOUR_API_KEY') #your 2captcha API key

CAPTCHA突破

それでは、CAPTCHA解決アルゴリズムを作成しましょう。

result = solver.hcaptcha(sitekey='10000000-ffff-ffff-ffff-000000000001',
                            url='https://www.site.com/page/', 
                            proxy={
                                'type': 'HTTPS',
                                'uri': 'username:password@1.2.3.4:1234'
                            })

CloudflareはhCaptchaトークンの検証中にIPアドレスをチェックすることに注意してください。したがって、CAPTCHAは、送信元と同じIPアドレスから突破する必要があります。 CloudflareでhCaptchaを正常にバイパスするには、他のCAPTCHAパラメータとともにプロキシを送信する必要があります。

このコールは、CAPTCHAを迂回するトークンを返します。

{'captchaId': '64793693810', 'code': 'P0_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUz...'} 

ソリューションの使用

コードからのトークンは、h-captcha-responseフィールドとg-recaptcha-response フィールドでウェブサイトに送信されます。ブラウザを使用する場合にこれを行う最も簡単な方法は、JavaScriptを使うことです。それ以外の場合は、適切なHTTPリクエストでトークンを送信します。

let submitToken = (token) => {
   document.querySelector('[name=g-recaptcha-response]').innerText = token
   document.querySelector('[name=h-captcha-response]').innerText = token
   document.querySelector('.challenge-form').submit()
}
submitToken('TOKEN_STRING')

時間をかける価値はありそうですか?私たちは、絶対にそうだと断言します。数行のコードで多くの時間を節約できます。また、セルフホスト型ソリューションを実行することにした場合、2captchaはさらに収益性が高くなります。

Discussion