• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Что такое чекеры и как же их писать?

germans

ripper
КИДАЛА
Регистрация
24.10.2023
Сообщения
119
Реакции
121
Гарант сделки
5
Пожалуйста, обратите внимание, что пользователь заблокирован
Авторство: germans

Источник: xss.pro

Статья ориентирована на новичков в Python, а может быть и нет.

К
ак понять, что такое чекер?!..- Зайдя в интернет, я понял, что там нет того значения слова, о котором я хочу рассказать вам сегодня. Чекеры - скрипт, проверяющий входящие данные, с целью узнать, что же там с этими самыми данными?..-
Обычно, имеют в виду чекер login:password - на валидность(рабочий аккаунт или нет), но нет, не стоит ограничиваться лишь этим, это не предел. Чекеры могут работать как на запросах(requests), так и на симуляции(playwright,selenium). Основная масса делается конечно же на запросах, в чём её преимущества над эмуляцией? Вот в чём:
- Скорость, и еще раз скорость, представьте один браузер, который ели-ели запускается и вынужден еще ручками вписывать данные, представили? А теперь представьте один верно составленный запрос, по которому ты клацнул, и хоп, у тебя уже все данные есть.
- Не зависит от сайта. Меня конечно могут начать сейчас душить, а вдруг компания проведет какие-либо поправки в запросах, апи?..- Честно, я ни разу не сталкивался с таким, а вот сайт же, изменив совсем немного свой дизайн(в случае поиска где требуются вводить данные по Xpath), у нас всё пойдет по одному не очень культурному месту..
- Нагрузка на ОС, это еще очень важный критерий, ведь проверять в 1 потоке браузера - 1 млн. данных, такое себе увлечение, думаю все согласны? Вы скажете, а может мы просто поставим 10000 потоков браузера?!!..- Нет, и еще раз нет. Машина на 32 ядрах вместе с 32гб RAM не вывезла даже и 100 браузеров.. В запросах же нагрузка конечно тоже есть, но не такая чтобы она отбивала все железки компьютера.


В каких случаях тогда нужно использовать эмуляцию? В случае тяжелой защиты сайта, такое было у меня на практике один раз относительно недавно. Сайт имел защиту cloudflare..- Люди, слышавшие про такую защиту и про Python, скажут: "Почему ты не использовал библиотеку cloudscrape?", она вымерла, подавно вымерла. В Cloudflare тоже сидят не дурачки и всё это отслеживают, сейчас же эта защита(по моему субъективному мнению) обходится лишь двумя способами первый - это использованием undetected-browser в связке с хорошими прокси, а так же нужно открывать тот самый сайт с защитой не сразу же как мы запустили эмулятор, а через js скрипт, чтобы CF не считал его сайт целевым. Второй способ - заключается в сниффинге трафика с мобильного приложения сайта, там может быть другое апи и запросы, проверено на примере - Alibaba.

Я думаю на сегодня хватит с теорией и стоит переходить к практике, предлагаю вам написать вместе со мной простенький чекер трек-кодов UPS. Не запускаем первым делом IDE, давайте вообще посмотрим с чем нам предстоит работать. Переходим по ссылке (привязана) и смотрим, что у нас происходит. Какая либо сторонняя защита на сайте отсутствует, а именно Cloudflare, это будем честны, очень сильно облегчает нам работу. Нам сразу же предлагают ввести трек-код, как это мило с их души, прямо подают нам всё на золотом блюдечке, не так ли?
1702558399088.png

Писать всё это дело мы будем на запросах. Давайте откроем инструменты разработчика и выберем там Network либо же сеть на русском. Требуется включить сохранение журнала, чтобы в случае редиректа нас на другую страницу мы видели все запросы(без этого дела, данные будут пропадать).
1702558578715.png

Теперь нам предстоит посмотреть, что же такого происходит если мы хотим узнать данные о нашей посылке. Заполняем поле треком и нажимаем трек, думаю тут ничего сложного..- Бум, по нажатию кнопки, у нас сразу происходит куча всяких действий и прочей лабуды, но нам то нужен только один единственный запрос, который расскажет нам всё о нашей посылочке.
1702558861505.png

Теперь нам стоит найти нужный нам запрос, вы скажете так много спама и прочего мусора, как искать то? Стоит знать и помнить, что запросы, когда мы отправляем данные на сервер - это POST запрос, а когда мы просто хотим получить данные c cервера- это GET запрос. Компании не идиоты(наверное), и не будут называть все скрипты как я, зачастую это выглядит будто я уронил стакан на клавиатуру. Нам нужен запрос, который отвечает за статус нашей посылки, чисто логически можем понять, что и название запроса должно содержать в себе Status, но как мы видим на скриншоте выше в спойлере, то у нас два действия в записи, которые содержат в себе Status, но чуть правее мы видим ответ 204(успешный запрос, но без ответа) и что это такое, нет, нам не нужен запрос, который вернул пустые данные. Смотрим еще чуть ниже и видим второй, и видим 200 ответ, то есть ответ есть, и это POST запрос на https://webapis.ups.com/track/api/Track/GetStatus?loc=en_CA ; Бамц, вот мы и нашли наш запрос, теперь ознакомимся с Header's
1702559469304.png

Куча циферок и неких данных, но не стоит пугаться этим набором символов, нас должен пугать лишь X-Xsrf-Token и где его доставать. Второе - это как выглядит тело запроса
1702559581358.png

Тут уже нет никаких проблем, теперь мы со спокойной душой можем открывать IDE после того как мы проанализировали сайт.

Как писать код, раз мы решили делать все через запросы, то мы можем использовать стандартную библиотеку requests или же asyncio-http (для асинхронной работы), я буду использовать requests. Давайте для начала создадим код, который будет отправлять запрос, а мы будем получать данные пришла посылка или нет. Не стоит нам забывать и про XSRF-TOKEN, про который я говорил ранее, где же нам его получать? Нам стоить проверить cookie-файлы нашей сессии на сайте UPS.
1702559857482.png

Такие данные могут храниться как в куках сайта, так и в самом html-коде сайта(microsoft отличный тому пример). Теперь нам остается получить этот самый X-XSRF-TOKEN и отправить запрос, мы думаем..- Но, не так уж всё и легко просто, вспоминаем так же про наличие cookies в Хедере нашего запроса, то есть мы вынуждены делать это всё в некой сессии, где будут сохраняться наши кукисы. Это не проблема, requests имеет возможность создавать сессию. Всё! Теперь точно всё, мы изучили сайт и понимаем что нам и откуда доставать и как, переходим к написанию кода.

Я приложу сразу весь рабочий код, и приложу в нём комментарии, проведем некое такое объяснение кода.

Python:
import requests # Импортирование нужных нам библиотек, requests - для работы с запросами, json - для работы с json-словарями
import json

url = "https://webapis.ups.com/track/api/Track/GetStatus?loc=en_US" # Задаем линк куда мы будем слать запрос

with open("track_code.txt", "r") as file: # Открываем все наши трек-коды из текстового документа track_code.txt в виде массива
    tracking_numbers = [line.strip() for line in file]

session = requests.Session() # Создаем сессию, в которой будут сохраняться кукисы и остальные данные

headers = {
      'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36',
    } # Хедеры для андетекта, что мы простой юзер сети интернета
  
initial_response = session.get('https://www.ups.com/track', headers=headers) # Гет запрос, получаем данные с этой страницы с целью получения кукисов
x = initial_response.cookies.get_dict() # Сохраняем кукисы в виде словарика ключ-значение
token = x['X-XSRF-TOKEN-ST'] # Получаем нужный нам XSRF токен

for tracking_number in tracking_numbers: # перебор всех трек-кодов из текстового документа, который мы загрузили в виде массива
    payload = json.dumps({
        "Locale": "en_US",
        "TrackingNumber": [tracking_number]
    }) # Грузим нашу дату, чтобы сайт понимал какой трек мы проверяем
    headersfortrack = {
        'authority': 'webapis.ups.com',
        'method': 'POST',
        'path': '/track/api/Track/GetStatus?loc=en_US',
        'scheme': 'https',
        'Accept': 'application/json, text/plain, */*',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'ru,en;q=0.9',
        'Cache-Control': 'no-cache',
        'Content-Length': '107',
        'Content-Type': 'application/json',
        'Origin': 'https://www.ups.com',
        'Pragma': 'no-cache',
        'Sec-Ch-Ua': '"Chromium";v="116", "Not)A;Brand";v="24", "YaBrowser";v="23"',
        'Sec-Ch-Ua-Mobile': '?0',
        'Sec-Ch-Ua-Platform': '"Windows"',
        'Sec-Fetch-Dest': 'empty',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Site': 'same-site',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.686 YaBrowser/23.9.5.686 Yowser/2.5 Safari/537.36',
        'X-Xsrf-Token': f'{token}'
    } #Заполняем хедеры, cookies сами подтянутся при запросе, XSRF токен так же не забываем указать


    try: # Блок try-except с целью ловить ошибки, и если на 1 треке случилась ошибка, то он не прекращал работу
        response = session.post(url, headers=headersfortrack, data=payload) # делаем пост запрос на апи сайта, указываем наши хедеры через headers = *, и аналогично data
        response_json = json.loads(response.text) # грузим ответ от апи в виде json
        package_status = response_json.get("trackDetails", [])[0].get("packageStatus", "") # получаем статус нашей посылки
        file_name = f"{package_status.replace(' ', '_')}.txt" # задаем имя текстовому документу в котором сохраняем результаты посылок

        with open(file_name, "a") as status_file: # открываем тхт документ, стоит 'a' с целью чтобы он добавлял текстовые данные, сам документ создастся сам
            status_file.write(tracking_number + "\n") # записываем наши данные

    except Exception as e: # в случае любой ошибки Exception(отвечает за именно любую ошибку) выводим её
        print("Ошибка:", e)

Код на этом заканчивается, можно по желанию прикрутить мультипоток, использование прокси. По окончанию работы сохранился текстовый документ Delivered.txt
1702560731398.png

Внутри нашего документа лежат треки, которые были доставлены.

Спасибо всем прочитавшим эту статью, но я не пока еще не особо понял что интересно контингенту сия форума. Пишите ваши пожелания на следующие статьи, и вопросы.
 
Последнее редактирование:
За материал спасибо.
НО.
Если не хотите ломать себе голову с питоном, то используйте готовые инструменты - Private Keeper, OpenBullet 1/2, BAS, создавать бруты/чекеры в них куда проще, и в разы функциональнее.


Еще раз спасибо за статью.:)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
За материал спасибо.
НО.
Если не хотите ломать себе голову с питоном, то используйте готовые инструменты - Private Keeper, OpenBullet 1/2, BAS, создавать бруты/чекеры в них куда проще, и в разы функциональнее.


Еще раз спасибо за статью.:)
пробовал BAS, не разобрался я в этом конструкторе, но я самоучка и у меня максимально дурацкий способ изучения языков программирования, я берусь сразу за что-то неизвестное и начинаю там менять что-либо, смотрю как меняется результат и тд.
 
у меня максимально дурацкий способ изучения языков программирования, я берусь сразу за что-то неизвестное и начинаю там менять что-либо, смотрю как меняется результат и тд.
да ты же... ХАКЕР! :D
 
Пожалуйста, обратите внимание, что пользователь заблокирован
да ты же... ХАКЕР! :D
не) спасибо, наверное буду заходить когда нибудь в эту сферу, но пока не горю желанием
 
в разы функциональнее.
лол. в кипере или бас будет функциональнее чем на ЯП? блядь, хотя бы читайте, что пишите......


запросы, когда мы хотим получить ответ от сервера - это POST запрос, а когда мы просто хотим получить данные страницы - это GET запрос
что за дурь ты тут написал?)
 
что за дурь ты тут написал?)
Все ошибаются..
Объяснил бы, что пост это отправка данных на сервер, а гет это запрос на получение файлов с сервера
 
Пожалуйста, обратите внимание, что пользователь заблокирован
что за дурь ты тут написал?)
поправил этот момент, но всё равно абсолютно всегда при отправке пост запроса в плане чекера, мы обязаны получить некий ответ.
 
поправил этот момент, но всё равно абсолютно всегда при отправке пост запроса в плане чекера, мы обязаны получить некий ответ.


SVG45qbVolk тебе правильно написал про запросы, и какой за что отвечает.
и get, и post, и patch и пут и тд, любой запрос получит ответ, ибо если ответ не пришел значит серв лежит.

почитай теорию http запросы, полезно будет
 
пробовал BAS, не разобрался я в этом конструкторе, но я самоучка и у меня максимально дурацкий способ изучения языков программирования, я берусь сразу за что-то неизвестное и начинаю там менять что-либо, смотрю как меняется результат и тд.
Не дуракцкий, а практичный и логичный) Это лучше, нежели запустить программу, предварительно не прочитав ее код, а после получить вирус или отстук на сервак) Спасибо за статью, познавательно)
 
Авторство: germans

Источник: xss.pro

Статья ориентирована на новичков в Python, а может быть и нет.

К
ак понять, что такое чекер?!..- Зайдя в интернет, я понял, что там нет того значения слова, о котором я хочу рассказать вам сегодня. Чекеры - скрипт, проверяющий входящие данные, с целью узнать, что же там с этими самыми данными?..-
Обычно, имеют в виду чекер login:password - на валидность(рабочий аккаунт или нет), но нет, не стоит ограничиваться лишь этим, это не предел. Чекеры могут работать как на запросах(requests), так и на симуляции(playwright,selenium). Основная масса делается конечно же на запросах, в чём её преимущества над эмуляцией? Вот в чём:
- Скорость, и еще раз скорость, представьте один браузер, который ели-ели запускается и вынужден еще ручками вписывать данные, представили? А теперь представьте один верно составленный запрос, по которому ты клацнул, и хоп, у тебя уже все данные есть.
- Не зависит от сайта. Меня конечно могут начать сейчас душить, а вдруг компания проведет какие-либо поправки в запросах, апи?..- Честно, я ни разу не сталкивался с таким, а вот сайт же, изменив совсем немного свой дизайн(в случае поиска где требуются вводить данные по Xpath), у нас всё пойдет по одному не очень культурному месту..
- Нагрузка на ОС, это еще очень важный критерий, ведь проверять в 1 потоке браузера - 1 млн. данных, такое себе увлечение, думаю все согласны? Вы скажете, а может мы просто поставим 10000 потоков браузера?!!..- Нет, и еще раз нет. Машина на 32 ядрах вместе с 32гб RAM не вывезла даже и 100 браузеров.. В запросах же нагрузка конечно тоже есть, но не такая чтобы она отбивала все железки компьютера.


В каких случаях тогда нужно использовать эмуляцию? В случае тяжелой защиты сайта, такое было у меня на практике один раз относительно недавно. Сайт имел защиту cloudflare..- Люди, слышавшие про такую защиту и про Python, скажут: "Почему ты не использовал библиотеку cloudscrape?", она вымерла, подавно вымерла. В Cloudflare тоже сидят не дурачки и всё это отслеживают, сейчас же эта защита(по моему субъективному мнению) обходится лишь двумя способами первый - это использованием undetected-browser в связке с хорошими прокси, а так же нужно открывать тот самый сайт с защитой не сразу же как мы запустили эмулятор, а через js скрипт, чтобы CF не считал его сайт целевым. Второй способ - заключается в сниффинге трафика с мобильного приложения сайта, там может быть другое апи и запросы, проверено на примере - Alibaba.

Я думаю на сегодня хватит с теорией и стоит переходить к практике, предлагаю вам написать вместе со мной простенький чекер трек-кодов UPS. Не запускаем первым делом IDE, давайте вообще посмотрим с чем нам предстоит работать. Переходим по ссылке (привязана) и смотрим, что у нас происходит. Какая либо сторонняя защита на сайте отсутствует, а именно Cloudflare, это будем честны, очень сильно облегчает нам работу. Нам сразу же предлагают ввести трек-код, как это мило с их души, прямо подают нам всё на золотом блюдечке, не так ли?

Писать всё это дело мы будем на запросах. Давайте откроем инструменты разработчика и выберем там Network либо же сеть на русском. Требуется включить сохранение журнала, чтобы в случае редиректа нас на другую страницу мы видели все запросы(без этого дела, данные будут пропадать).

Теперь нам предстоит посмотреть, что же такого происходит если мы хотим узнать данные о нашей посылке. Заполняем поле треком и нажимаем трек, думаю тут ничего сложного..- Бум, по нажатию кнопки, у нас сразу происходит куча всяких действий и прочей лабуды, но нам то нужен только один единственный запрос, который расскажет нам всё о нашей посылочке.

Теперь нам стоит найти нужный нам запрос, вы скажете так много спама и прочего мусора, как искать то? Стоит знать и помнить, что запросы, когда мы отправляем данные на сервер - это POST запрос, а когда мы просто хотим получить данные c cервера- это GET запрос. Компании не идиоты(наверное), и не будут называть все скрипты как я, зачастую это выглядит будто я уронил стакан на клавиатуру. Нам нужен запрос, который отвечает за статус нашей посылки, чисто логически можем понять, что и название запроса должно содержать в себе Status, но как мы видим на скриншоте выше в спойлере, то у нас два действия в записи, которые содержат в себе Status, но чуть правее мы видим ответ 204(успешный запрос, но без ответа) и что это такое, нет, нам не нужен запрос, который вернул пустые данные. Смотрим еще чуть ниже и видим второй, и видим 200 ответ, то есть ответ есть, и это POST запрос на https://webapis.ups.com/track/api/Track/GetStatus?loc=en_CA ; Бамц, вот мы и нашли наш запрос, теперь ознакомимся с Header's

Куча циферок и неких данных, но не стоит пугаться этим набором символов, нас должен пугать лишь X-Xsrf-Token и где его доставать. Второе - это как выглядит тело запроса

Тут уже нет никаких проблем, теперь мы со спокойной душой можем открывать IDE после того как мы проанализировали сайт.

Как писать код, раз мы решили делать все через запросы, то мы можем использовать стандартную библиотеку requests или же asyncio-http (для асинхронной работы), я буду использовать requests. Давайте для начала создадим код, который будет отправлять запрос, а мы будем получать данные пришла посылка или нет. Не стоит нам забывать и про XSRF-TOKEN, про который я говорил ранее, где же нам его получать? Нам стоить проверить cookie-файлы нашей сессии на сайте UPS.

Такие данные могут храниться как в куках сайта, так и в самом html-коде сайта(microsoft отличный тому пример). Теперь нам остается получить этот самый X-XSRF-TOKEN и отправить запрос, мы думаем..- Но, не так уж всё и легко просто, вспоминаем так же про наличие cookies в Хедере нашего запроса, то есть мы вынуждены делать это всё в некой сессии, где будут сохраняться наши кукисы. Это не проблема, requests имеет возможность создавать сессию. Всё! Теперь точно всё, мы изучили сайт и понимаем что нам и откуда доставать и как, переходим к написанию кода.

Я приложу сразу весь рабочий код, и приложу в нём комментарии, проведем некое такое объяснение кода.

Python:
import requests # Импортирование нужных нам библиотек, requests - для работы с запросами, json - для работы с json-словарями
import json

url = "https://webapis.ups.com/track/api/Track/GetStatus?loc=en_US" # Задаем линк куда мы будем слать запрос

with open("track_code.txt", "r") as file: # Открываем все наши трек-коды из текстового документа track_code.txt в виде массива
    tracking_numbers = [line.strip() for line in file]

session = requests.Session() # Создаем сессию, в которой будут сохраняться кукисы и остальные данные

headers = {
      'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36',
    } # Хедеры для андетекта, что мы простой юзер сети интернета
 
initial_response = session.get('https://www.ups.com/track', headers=headers) # Гет запрос, получаем данные с этой страницы с целью получения кукисов
x = initial_response.cookies.get_dict() # Сохраняем кукисы в виде словарика ключ-значение
token = x['X-XSRF-TOKEN-ST'] # Получаем нужный нам XSRF токен

for tracking_number in tracking_numbers: # перебор всех трек-кодов из текстового документа, который мы загрузили в виде массива
    payload = json.dumps({
        "Locale": "en_US",
        "TrackingNumber": [tracking_number]
    }) # Грузим нашу дату, чтобы сайт понимал какой трек мы проверяем
    headersfortrack = {
        'authority': 'webapis.ups.com',
        'method': 'POST',
        'path': '/track/api/Track/GetStatus?loc=en_US',
        'scheme': 'https',
        'Accept': 'application/json, text/plain, */*',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'ru,en;q=0.9',
        'Cache-Control': 'no-cache',
        'Content-Length': '107',
        'Content-Type': 'application/json',
        'Origin': 'https://www.ups.com',
        'Pragma': 'no-cache',
        'Sec-Ch-Ua': '"Chromium";v="116", "Not)A;Brand";v="24", "YaBrowser";v="23"',
        'Sec-Ch-Ua-Mobile': '?0',
        'Sec-Ch-Ua-Platform': '"Windows"',
        'Sec-Fetch-Dest': 'empty',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Site': 'same-site',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.686 YaBrowser/23.9.5.686 Yowser/2.5 Safari/537.36',
        'X-Xsrf-Token': f'{token}'
    } #Fill in the headers, cookies will be pulled up when requested, don’t forget to specify the XSRF token


    try: # Try-except block with the purpose of catching errors, and if an error occurred on 1 track, then it did not stop working
        response = session.post(url, headers=headersfortrack, data=payload) # make a post request to the site's API, specify our headers via headers = *, and similarly data
        response_json = json.loads(response.text) # load the response from the API as json
        package_status = response_json.get("trackDetails", [])[0].get("packageStatus", "") # get the status of our package
        file_name = f"{package_status.replace(' ', '_')}.txt" # set the name of the text document in which we save the sending results

        with open(file_name, "a") as status_file: # open a txt document, set to 'a' so that it adds text data, the document itself will be created automatically
            status_file.write(tracking_number + "\n") # write our data

    except Exception as e: # in case of any error Exception (responsible for any error) display it
        print("Error:", e)

The code ends here; you can optionally enable multi-streaming and use a proxy. At the end of the work, the text document Delivered.txt was saved

Inside our document are the tracks that were delivered.

Thanks to everyone who read this article, but I haven’t yet really understood what is interesting to the contingent of this forum. Write your wishes for the following articles and questions.
Can i use this method to get profile followers email addresses on instagram?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Can i use this method to get profile followers email addresses on instagram?
nope, u mean parser not checker, i think in 1-2 days, i write article for parser information
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх