0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PythonでhCaptcha をバイパスする

Posted at

ウェブマスターの多くは、自動化から保護する手立てとして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はさらに収益性が高くなります。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?