Я уже писал статью о методе обхода проверочного кода Google ReCAPTCHA, в то время я вводил 2Captcha, но некоторые друзья говорили мне, что 2Captcha дороже и сложнее в использовании.
Сегодня я представлю еще один метод взлома Google ReCAPTCHA.
Введение в ReCAPTCHA
Возможно, вы не слышали о том, что такое ReCAPTCHA.Может быть, по какой-то причине этот проверочный код редко появляется в Китае, но вы, должно быть, видели или использовали его более или менее. Это выглядит так:
В настоящее время, пока мы устанавливаем флажок спереди, алгоритм кода проверки сначала будет использовать свой «механизм анализа рисков» для проверки безопасности.Если прямая проверка пройдет успешно, мы сразу получим следующие результаты:
Если алгоритм обнаружит, что в текущей системе существует риск, например, это может быть незнакомая сетевая среда или это может быть программа моделирования, потребуется повторная проверка. Далее будет всплывать что-то вроде этого:
Например, на картинке выше на странице кода подтверждения будет девять картинок, а вверху появится текст «деревья».Нам нужно нажать на картинки с «деревьями» на девяти картинках внизу. , может быть несколько новых картинок. , нам нужно снова завершить выбор, и, наконец, нажать кнопку «Проверить», чтобы завершить проверку. Или мы можем щелкнуть значок «Наушники» ниже, тогда он переключится в режим диктовки, и код подтверждения станет таким:
В настоящее время, если мы можем заполнить аудиоконтент кода подтверждения, мы также можем пройти проверку. Оба эти метода могут быть проверены.После завершения проверки мы можем завершить отправку формы, например, завершить вход, регистрацию и другие операции. Как называется этот проверочный код? Этот проверочный код представляет собой проверочный код Google ReCAPTCHA V2, который является своего рода проверочным кодом поведения. Эти действия включают в себя установку флажков, выбор соответствующих изображений, голосовую диктовку и т. д. Только в том случае, если эти действия подтверждены, этот проверочный код проходит проверку. По сравнению с обычным графическим проверочным кодом, этот проверочный код имеет лучший интерактивный интерфейс, более высокий уровень безопасности и большую сложность при взломе.
На самом деле описанный выше проверочный код является лишь формой проверочного кода ReCAPTCHA, который является явной версией V2. Кроме того, версия V2 также имеет неявную версию. Неявная версия не будет явно отображаться во время проверки. Страница проверки , который связывает код подтверждения с кнопкой отправки через JavaScript, автоматически завершает проверку при отправке формы. В дополнение к версии 2 компания Google выпустила последнюю версию 3. Код проверки reCAPTCHA V3 будет рассчитывать оценку на основе поведения пользователя. Эта оценка представляет собой вероятность того, что пользователь может быть роботом. Наконец, вероятность передается в определить, может ли проверка быть пройдена. Он имеет более высокую безопасность и лучший опыт.
опыт
Где вы можете испытать ReCAPTCHA? Мы можем открыть этот сайт:Уууу. Google.com/recap отстой/ааа…, рекомендуется просматривать Интернет с научной точки зрения и одновременно открывать его в анонимном окне, чтобы тест не был нарушен историческими файлами cookie, как показано на рисунке:
В это время мы видим, что внизу есть окно ReCAPTCHA, а после нажатия появляется блок проверки.
Вручную, конечно, можно решить, но для краулеров точно нет, как решить автоматически?
Далее мы представим простую и удобную в использовании платформу.
решение
Сервис взлома ReCAPTCHA, который мы представили на этот раз, называется YesCaptcha.yescaptcha.365world.com.cn/, теперь он поддерживает взлом версий V2 и V3.
Мы будем использовать его на этот раз, чтобы попытаться решить код подтверждения типа V2 на ReCAPTCHA прямо сейчас:Уууу. Google.com/recap отстой/ааа….
После простой регистрации вы можете найти токен на главной странице. Мы можем скопировать его для дальнейшего использования, как показано на рисунке:
Он имеет два ключевых API: один предназначен для создания задачи службы кода подтверждения, а другой — для запроса статуса задачи. API выглядит следующим образом:
-
Создайте задачу:API тоже сильно поцарапан. 365world.com. может предложить только /V3/recap...
-
Статус запроса:API тоже сильно поцарапан. 365world.com. может предложить только /V3/recap...
Документацию по API можно найти здесь:docs.yescaptcha.365world.com.cn/
Из документации по API видно, что при использовании можно настроить следующие параметры:
имя параметра | Это необходимо | инструкция |
---|---|---|
token | да | Пожалуйста, получите (Токен) в личном центре |
siteKey | да | ReCaptcha SiteKey (фиксированный параметр) |
siteReferer | да | ReCaptcha Referer (обычно фиксированный параметр) |
captchaType | нет | ReCaptchaV2 (по умолчанию) / ReCaptchaV3 |
siteAction | нет | ReCaptchaV3 Дополнительное действие Действие по умолчанию проверить |
minScore | нет | ReCaptchaV3 опционально Минимальный балл (0,1-0,9) |
Вот три ключевых элемента информации:
-
token: параметр, который мы только что скопировали на YesCaptcha
-
siteKey: это строка логотипа ReCAPACHA, мы покажем, как ее найти позже.
-
siteReferer обычно является реферером исходного веб-сайта ReCAPTCHA, например, в данном случае значение равноУууу. Google.com/recap отстой/ааа…
Как найти siteKey? На самом деле это очень просто, давайте взглянем на исходный HTML-код текущей ReCAPTCHA и найдем его в исходном коде:
Здесь вы можете видеть, что каждый ReCAPTCHA соответствует div. У div есть атрибут, называемый date-sitekey. Значение здесь:
6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-
ОК, все готово, только код!
Начало
Для его реализации воспользуемся простейшими запросами, для начала определим константы:
TOKEN = '50a07xxxxxxxxxxxxxxxxxxxxxxxxxf78' # 请替换成自己的TOKEN
REFERER = 'https://www.google.com/recaptcha/api2/demo'
BASE_URL = 'http://api.yescaptcha.365world.com.cn'
SITE_KEY = '6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-' # 请替换成自己的SITE_KEY
Здесь мы определяем несколько констант:
-
ТОКЕН: это токен, скопированный с веб-сайта.
-
REFERER: Это ссылка на демо-сайт.
-
API_BASE_URL: URL-адрес API YesCaptcha.
-
SITE_KEY: это ключ data-site, который мы только что нашли.
Затем мы определяем метод для создания задачи:
def create_task():
url = f"{BASE_URL}/v3/recaptcha/create?token={TOKEN}&siteKey={SITE_KEY}&siteReferer={REFERER}"
try:
response = requests.get(url)
if response.status_code == 200:
data = response.json()
print('response data:', data)
return data.get('data', {}).get('taskId')
except requests.RequestException as e:
print('create task failed', e)
Вот о вызове API для создания задач и говорить нечего.
Если создание прошло успешно, будет получен task_id, а затем нам нужно использовать этот task_id для опроса статуса задачи, и определить такой метод следующим образом:
def polling_task(task_id):
url = f"{BASE_URL}/v3/recaptcha/status?token={TOKEN}&taskId={task_id}"
count = 0
while count < 120:
try:
response = requests.get(url)
if response.status_code == 200:
data = response.json()
print('polling result', data)
status = data.get('data', {}).get('status')
print('status of task', status)
if status == 'Success':
return data.get('data', {}).get('response')
except requests.RequestException as e:
print('polling task failed', e)
finally:
count += 1
time.sleep(1)
Здесь установлено максимальное количество опросов, равное 120 раз. Запрошенный API — это API для запроса статуса задачи, и будет получен результат статуса задачи. Если результат — «Успех», это доказывает, что задача выполнена успешно, а результат парсинга ответа является проверочный код Токен, полученный после взлома.
Вызовите два метода:
if __name__ == '__main__':
task_id = create_task()
print('create task successfully', task_id)
response = polling_task(task_id)
print('get response:', response[0:40]+'...')
Результат аналогичен следующему:
response data: {'status': 0, 'msg': 'ok', 'data': {'taskId': '1479436991'}}
create task successfully 1479436991
polling result {'status': 0, 'msg': 'ok', 'data': {'status': 'Working'}}
status of task Working
polling result {'status': 0, 'msg': 'ok', 'data': {'status': 'Working'}}
status of task Working
polling result {'status': 0, 'msg': 'ok', 'data': {'status': 'Working'}}
status of task Working
polling result {'status': 0, 'msg': 'ok', 'data': {'status': 'Success', 'response': '03AGdBq27-ABqvNmgq96iuprN8Mvzfq6_8noknIed5foLb15oWvWVksq9KesDkDd7dgMMr-UmqULZduXTWr87scJXl3djhl2btPO721eFAYsVzSk7ftr4uHBdJWonnEemr9dNaFB9qx5pnxr3P24AC7cCfKlOH_XARaN4pvbPNxx_UY5G5fzKUPFDOV14nNkCWl61jwwC0fuwetH1q99r4hBQxyI6XICD3PiHyHJMZ_-wolcO1R9C90iGQyjzrSMiNqErezO24ODCiKRyX2cVaMwM9plbxDSuyKUVaDHqccz8UrTNNdJ4m2WxKrD9wZDWaSK10Ti1LgsqOWKjKwqBbuyRS_BkSjG6OJdHqJN4bpk_jAcPMO13wXrnHBaXdK4FNDR9-dUvupHEnr7QZEuNoRxwl8FnO2Fgwzp2sJbGeQkMbSVYWdAalE6fzJ8NwsFJxCdDyeyO817buBtvTJ4C06C1uZ92fpPTeYGJwbbicOuqbGfHNTyiSJeRNmt-5RKz0OUiPJOPnmVKGlWBOqwbwCW1WZt-E-hH4FEg4En5TITmmPb_feS9dWKUxudn1U0hHk2vV9PerjZLtI7F67KtgmcqRrARPbwnc6KyAi3Hy1hthP92lv4MRIcO2jx0Llvsja-G2nhjZB0ZoJwkb9106pmqldiwlXxky4Dcg7VPStiCYJvhQpRYol7Iq1_ltU2tyhMqsu_Xa8Z6Mr5ykRCLnmlLb8DV8isndrdwp84wo_vPARGRj7Up9ov-ycb5lDKTf1XRaHiMCa8d2WLy0Pjco9UnsRAPw0FW3MsBJah6ryHUUDho7ffhUUgV1k86ryJym6xbWch1sVC4D5owzrCFn6L-rSLc5SS1pza2zU5LK4kAZCmbXNRffiFrhUY8nP4T1xaR2KMhIaN8HhJQpR8sQh1Azc-QkDy4rwbYmxUrysYGMrAOnmDx9z7tWQXbJE4IgCVMx5wihSiE-T8nbF5y1aJ0Ru9zqg1nZ3GSqsucSnvJA8HV5t9v0QSG5cBC1x5HIceA-2uEGSjwcmYOMw8D_65Dl-d6yVk1YN2FZCgMWY5ewzB1RAFN1BMqKoITQJ64jq3lKATpkc5i7aTA2bRGQyXrbDyMRIrVXKnYMHegfMbDn0l4O81a8vxmevLspKkacVPiqLsAe-73jAxMvsOqaG7cKxMQO9CY3qbtD55YgN0W4p2jyNSVz3aEpffHRqYyWMsRI5LddLgaZQDoHHgGUhV580PSIdZJ5eKd0gOjxIYxKlr0IgbMWRmsG_TgDNImy1c5oey8ojl-zWpOQW7bnfq5Z4tZ10_sCTfoOZVLqRuOsqB1OOO9pLRQojLBP0HUiGhRAr_As9EIDu6F9NIQfdAmCaVvavJbi1CZITFjcywP-tBrHsxpwkCXlwl996MK_XyEDuyWnJVGiVSthUMY306tIh1Xxj93W3KQJCzsfJQcjN-3lGLLeDFddypHyG4yrpRqRHHBNyiNJHgxSk5SaShEhXvByjkepvhrKX3kJssCU04biqqmkrQ49GqBV9OsWIy0nN3OJTx8v05MP8aU8YYkYBF01UbSff4mTfLAhin6iWk84Y074mRbe2MbgFAdU58KnCrwYVxcAR8voZsFxbxNwZXdVeexNx5HlIlSgaAHLWm2kFWmGPPW-ZA7R8Wst-mc7oIKft5iJl8Ea0YFz8oXyVgQk1rd9nDR3xGe5mWL1co0MiW1yvHg'}}
Если он возвращает данные в указанном выше формате, это означает, что проверочный код ReCAPTCHA был успешно распознан, а содержимое возвращаемого поля ответа является распознанным токеном.Мы напрямую берем этот токен, помещаем его в форму и успешно отправляем. .
Как использовать этот токен? На самом деле, если мы используем браузер для проверки успешности проверки, когда мы нажимаем на форму для отправки, в форме будет назначено текстовое поле с именем g-recaptcha-response.Если проверка прошла успешно, ее значением будет токен, полученный после проверки, который отправляется на сервер для проверки в рамках отправки формы. Если проверка этого поля прошла успешно, то проблем нет.
Следовательно, описанный выше процесс эквивалентен для нас имитации процесса нажатия на код подтверждения, а полученный в итоге токен на самом деле является содержимым, которое мы должны присвоить имени g-recaptcha-response. Так как его назначить? Это легко, просто используйте JavaScript. Мы можем использовать JavaScript, чтобы выбрать эту текстовую область, а затем назначить ее напрямую Код выглядит следующим образом:
document.getElementById("g-recaptcha-response").innerHTML="TOKEN_FROM_YESCAPTCHA";
Обратите внимание, что TOKEN_FROM_YESCAPTCHA необходимо заменить значением токена, которое мы только что получили. Когда мы выполняем вход в систему с помощью симуляции сканера, если мы используем в программе моделирования такие программы, как Selenium, Puppeteer и т. д., нам нужно только смоделировать и выполнить этот код JavaScript, после чего задание может быть успешно выполнено. После выполнения отправьте форму напрямую, давайте посмотрим на сетевой запрос:
Вы видите, что он отправляет форму, и одно из полей — это g-recaptcha-response, который будет отправлен на сервер для проверки, если проверка проходит, значит, она успешна. Итак, если мы получим этот токен с помощью YesCaptcha и назначим его в текстовую область формы, форма будет отправлена, и если токен действителен, вход в систему можно будет успешно обойти без необходимости нажимать на кнопку код верификации. В итоге мы получаем следующую успешную страницу:
Конечно, мы также можем использовать запросы для имитации заполнения формы:
def verify(response):
url = "https://www.google.com/recaptcha/api2/demo"
data = {"g-recaptcha-response": response}
response = requests.post(url, data=data)
if response.status_code == 200:
return response.text
Наконец, завершите вызов:
if __name__ == '__main__':
task_id = create_task()
print('create task successfully', task_id)
response = polling_task(task_id)
print('get response:', response[0:40]+'...')
result = verify(response)
print(result)
Результаты приведены ниже:
response data: {'status': 0, 'msg': 'ok', 'data': {'taskId': '1479436991'}}
create task successfully 1479436991
polling result {'status': 0, 'msg': 'ok', 'data': {'status': 'Working'}}
status of task Working
polling result {'status': 0, 'msg': 'ok', 'data': {'status': 'Working'}}
status of task Working
polling result {'status': 0, 'msg': 'ok', 'data': {'status': 'Working'}}
status of task Working
polling result {'status': 0, 'msg': 'ok', 'data': {'status': 'Success', 'response': '03AGdBq27-ABqvNmgq96iuprN8Mvzfq6_8noknIed5foLb15oWvWVksq9KesDkDd7dgMMr-UmqULZduXTWr87scJXl3djhl2btPO721eFAYsVzSk7ftr4uHBdJWonnEemr9dNaFB9qx5pnxr3P24AC7cCfKlOH_XARaN4pvbPNxx_UY5G5fzKUPFDOV14nNkCWl61jwwC0fuwetH1q99r4hBQxyI6XICD3PiHyHJMZ_-wolcO1R9C90iGQyjzrSMiNqErezO24ODCiKRyX2cVaMwM9plbxDSuyKUVaDHqccz8UrTNNdJ4m2WxKrD9wZDWaSK10Ti1LgsqOWKjKwqBbuyRS_BkSjG6OJdHqJN4bpk_jAcPMO13wXrnHBaXdK4FNDR9-dUvupHEnr7QZEuNoRxwl8FnO2Fgwzp2sJbGeQkMbSVYWdAalE6fzJ8NwsFJxCdDyeyO817buBtvTJ4C06C1uZ92fpPTeYGJwbbicOuqbGfHNTyiSJeRNmt-5RKz0OUiPJOPnmVKGlWBOqwbwCW1WZt-E-hH4FEg4En5TITmmPb_feS9dWKUxudn1U0hHk2vV9PerjZLtI7F67KtgmcqRrARPbwnc6KyAi3Hy1hthP92lv4MRIcO2jx0Llvsja-G2nhjZB0ZoJwkb9106pmqldiwlXxky4Dcg7VPStiCYJvhQpRYol7Iq1_ltU2tyhMqsu_Xa8Z6Mr5ykRCLnmlLb8DV8isndrdwp84wo_vPARGRj7Up9ov-ycb5lDKTf1XRaHiMCa8d2WLy0Pjco9UnsRAPw0FW3MsBJah6ryHUUDho7ffhUUgV1k86ryJym6xbWch1sVC4D5owzrCFn6L-rSLc5SS1pza2zU5LK4kAZCmbXNRffiFrhUY8nP4T1xaR2KMhIaN8HhJQpR8sQh1Azc-QkDy4rwbYmxUrysYGMrAOnmDx9z7tWQXbJE4IgCVMx5wihSiE-T8nbF5y1aJ0Ru9zqg1nZ3GSqsucSnvJA8HV5t9v0QSG5cBC1x5HIceA-2uEGSjwcmYOMw8D_65Dl-d6yVk1YN2FZCgMWY5ewzB1RAFN1BMqKoITQJ64jq3lKATpkc5i7aTA2bRGQyXrbDyMRIrVXKnYMHegfMbDn0l4O81a8vxmevLspKkacVPiqLsAe-73jAxMvsOqaG7cKxMQO9CY3qbtD55YgN0W4p2jyNSVz3aEpffHRqYyWMsRI5LddLgaZQDoHHgGUhV580PSIdZJ5eKd0gOjxIYxKlr0IgbMWRmsG_TgDNImy1c5oey8ojl-zWpOQW7bnfq5Z4tZ10_sCTfoOZVLqRuOsqB1OOO9pLRQojLBP0HUiGhRAr_As9EIDu6F9NIQfdAmCaVvavJbi1CZITFjcywP-tBrHsxpwkCXlwl996MK_XyEDuyWnJVGiVSthUMY306tIh1Xxj93W3KQJCzsfJQcjN-3lGLLeDFddypHyG4yrpRqRHHBNyiNJHgxSk5SaShEhXvByjkepvhrKX3kJssCU04biqqmkrQ49GqBV9OsWIy0nN3OJTx8v05MP8aU8YYkYBF01UbSff4mTfLAhin6iWk84Y074mRbe2MbgFAdU58KnCrwYVxcAR8voZsFxbxNwZXdVeexNx5HlIlSgaAHLWm2kFWmGPPW-ZA7R8Wst-mc7oIKft5iJl8Ea0YFz8oXyVgQk1rd9nDR3xGe5mWL1co0MiW1yvHg'}}
status of task Success
get response: 03AGdBq27-ABqvNmgq96iuprN8Mvzfq6_8noknIe...
<!DOCTYPE HTML><html dir="ltr"><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"><meta name="viewport" content="width=device-width, user-scalable=yes"><title>ReCAPTCHA demo</title><link rel="stylesheet" href="https://www.gstatic.com/recaptcha/releases/TbD3vPFlUWKZD-9L4ZxB0HJI/demo__ltr.css" type="text/css"></head><body><div class="recaptcha-success">Verification Success... Hooray!</div></body></html>
Наконец, можно обнаружить, что после отправки симуляции результатом будетVerification Success... Hooray!
Текст означает, что проверка прошла успешно!
На данный момент мы успешно завершили взлом ReCAPTCHA.
Вышеупомянутая реализация запросов.Конечно, это также может быть реализовано с помощью таких инструментов, как Selenium.Конкретная демонстрация также написана в документе.Пожалуйста, обратитесь к инструкциям в документе, чтобы использовать его.
Небольшое благосостояние
Теперь я думаю, что цена YesCaptcha намного доступнее, чем 2Captcha, которую я представил ранее.Один раз взломать стоит 10 баллов, а 10 юаней - это 10 000 баллов, поэтому взлом проверочного кода в среднем стоит один пенни, а новые пользователи получить 1000 очков Взломать 100 раз. Лично мне очень доступно.
Вы можете попробовать, если вам это нужно!
ускользнуть
Для более интересного контента, пожалуйста, обратите внимание на мои публичные аккаунты «Coder of Attack» и «Cui Qingcai丨Jing Mi».