Неактуально Исходник Гайд Бот на обновление кодов HideMy VPN

Josski Molodoi

Активный
Автор темы
182
83
Суть проста - если вы юзаете HideMy OpenVPN то возможно вас заебало искать коды для однодневного периода. Этот скрипт поможет их больше не искать, да ещё и сам обновит их в программе.

Как она работает:

Парсит пачку кодов которую выкладывают в группе ВК каждые 6 утра.
При запуске скрипта каждый раз обновляет код (рандомный из полученного списка) активации в ini, из которого напрямую берёт код EXE самого VPN.

Всё.
Зависимости:
requests
datetime
shutil

configparser

Процесс:
Создаём config.py (название и расширение файла не меняем.)
записываем сюда этот код:​
cfg:
VK = "Ваш ключ Standalone-приложения"
V = "5.131"
DOMAIN = "hidemy_vpn_keys"
FOLDER = "HIDEMY"
CLEAN = "C:/Program Files (x86)/hidemy.name VPN/configs"
CLEAN_MAIN = "C:/Program Files (x86)/hidemy.name VPN"

DOWN = '#hideme #hidemekeys #ключихайдми #hidemynamekeys #hidemy.name #hidemy #hidemy keys #hidemy ключ #hidemy ключи #HidemyКлючи #VpnHidemy #HidemyKeys #Hidemyname #Hideme #Vpn #Proxy #анонимность #hidemekeys #ключихайдми #VPN #HideMe #keys #proxy #Анонимайзер #Прокси #ВПН'
UP = '🌎Бесплатные ключи для VPN Hidemyname (Hideme). Свежие на 24 часа!\n🔑Взял ключ - Жми "Мне нравится" [❤]\n👉Один код доступа позволяет подключать только 5 устройств!'

Вместо VK пишем серийный ключ доступа Standalone-приложения, которое создаёте через ВК по ссылке: LINK

Создаём любоеимяфайла.py (исполняемый)
записываем сюда этот код:​
main:
import requests
import config
import datetime
import os
import shutil
import random
from random import choice
import configparser

try:
    os.mkdir('HIDEMY')
except:
    pass

try:
    shutil.rmtree(config.CLEAN)
except:
    pass

access_codes = dict()
a = list()

dir_list = os.listdir(config.FOLDER)
vk_api = config.VK
version = config.V
domain = config.DOMAIN
replace_down = config.DOWN
replace_up = config.UP
directory_to_clean = config.CLEAN
directory_codes = config.FOLDER

response = requests.get('https://api.vk.com/method/wall.get', params=
                                                            {
                                                            'access_token':vk_api,
                                                            'v':version,
                                                            'domain':domain,
                                                            'count':1, #Count of get posts
                                                            'offset':1, #Count of skip posts
                                                            }

                                                            )

access_codes = response.json()['response']['items'][0]['text'].replace(replace_down, '').replace(replace_up, '').strip().split('\n')

def strip_(access_codes):
    for i in access_codes:
        try:
            index = access_codes.index(i)
            i.rstrip()
            i = int(i)
            access_codes[index] = i
        except:
            pass

strip_(access_codes)

def tryfind(dir_list):
    try:
        tryfindstr = dir_list[0].find('.txt')

        if tryfindstr == -1:
            pass
        else:
            os.remove('{}/{}'.format(config.FOLDER, dir_list[0]))
    except Exception as ex:
        pass

tryfind(dir_list)

def io_write(access_codes):
    now = datetime.datetime.now()
    time = now.strftime("%d_%m_%Y-%H_%M")

    with open("{}/{}.txt".format(config.FOLDER, time), 'w') as file:
        for i in access_codes:
            file.write("{}\n".format(str(i)))

io_write(access_codes)

### Second part of the programm

"""UPDATED"""
def autoclean():
    a = list()
    dirs = os.listdir(config.CLEAN_MAIN)

    while True:
        count = -1
        for i in dirs:
            finding = i.find('in_')
            if finding != -1:
                count += 1
                a.append(i)
        break

    del a[-1]

    if count > 5:
        for i in a:
            os.remove('{}/{}'.format(config.CLEAN_MAIN, i))

autoclean()
""""""

config = configparser.ConfigParser()
config.read('C:/Program Files (x86)/hidemy.name VPN/conf.ini')

file = os.listdir(directory_codes)
with open('{}/{}'.format(directory_codes, file[0])) as file:
    info = file.readlines()

for i in info:
    i = int(i.replace('\n', ''))
    a.append(i)

rnd = str(random.choice(a))

config['MAIN']['LastSavedCode'] = rnd
config['MAIN']['certfile'] = 'in_{}.crt'.format(rnd)
config['MAIN']['keyfile'] = 'in_{}.key'.format(rnd)
config['MAIN']['ikecertfile'] = 'in_{}.crt'.format(rnd)
config['MAIN']['ikekeyfile'] = 'in_{}.key'.format(rnd)
config['MAIN']['ikep12file'] = 'in_{}.p12'.format(rnd)

with open('C:/Program Files (x86)/hidemy.name VPN/conf.ini', 'w') as file:
    config.write(file)

os.startfile(r'C:\Program Files (x86)\hidemy.name VPN\Start.exe')

Дальше всё это дело можно обфусцировать через pyarmor и сохранить в EXE, либо напрямую через pyinstaller в EXE.

Коды которые парсятся используете не только вы, а примерно по 8-10+- человек на один код, так что если с первой попытки подключиться выходит ошибка(Too many connections) о большом кол-ве запросов - перезапускайте скрипт пока не найдёте рабочий код.
Работоспособность сам проверял, вроде всё ок.

UPD:
Обновил, теперь файлы от старых кодов будут чиститься.

Работоспособность:

Запускать только от имени администратора.
Если выходят ошибки - отправьте сюда, помогу.
 
Последнее редактирование:

Dimonster1997

Известный
138
14
Ты бы видео сделал как что создавать правильно. Было бы толку больше
 

_Денис_

Известный
11
1
Вроде всё вписал, собрал через pyinstaller, жмякаю на exe - мелькает окно консоли и всё, сразу закрывается
 

W.H.

Участник
25
65
Работа отличная. Самому бы в голову и не пришло бы, но есть пара моментов неясных
Для начала, зачем ты хранишь домен группы в cfg, ведь сам скрипт не подразумевает работу с другими группами, да и используется только 1 раз
Лучше будет удалить это с cfg и использовать сразу в функции requests.get()

Второе, что хочу сказать, зачем бедолаг нагружаешь? Не все понимают че таке standlone приложение, да и создание его чуток запарное
Легче будет юзать готовый vk_api. Обыденному юзеру придется лишь раз залогиниться и все. Стандартная и простая тема, да и код выглядит по-моему лучше.
Зачем создавать велосипед, когда он уже есть

Вот тебе пример с кодом:
8yRL6l6.png
 
  • Нравится
Реакции: Josski Molodoi

Josski Molodoi

Активный
Автор темы
182
83
Работа отличная. Самому бы в голову и не пришло бы, но есть пара моментов неясных
Для начала, зачем ты хранишь домен группы в cfg, ведь сам скрипт не подразумевает работу с другими группами, да и используется только 1 раз
Лучше будет удалить это с cfg и использовать сразу в функции requests.get()

Второе, что хочу сказать, зачем бедолаг нагружаешь? Не все понимают че таке standlone приложение, да и создание его чуток запарное
Легче будет юзать готовый vk_api. Обыденному юзеру придется лишь раз залогиниться и все. Стандартная и простая тема, да и код выглядит по-моему лучше.
Зачем создавать велосипед, когда он уже есть

Вот тебе пример с кодом:
8yRL6l6.png
Спасибо за отклик, сейчас отвечу на пару заданных тобой вопросов.
По поводу хранения домена в кфг - просто, как по мне, немного очищает код. Сразу передавать строку со ссылкой как-то некрасиво, имхо.
Насчёт vk_api - действительно проще сделать так, как ты сказал, но ты жертвуешь напрямую своими данными, а с помощью ключа ты не сможешь выкачать всю инфу со страницы. Логично, что если человек не может сделать это приложение, у него вряд ли стоит 2FA. Да и опыта конкретно с vk_api у меня крайне мало, разве что в Телеграме.
 

zKuk

Активный
150
57
line 43, in <module>
access_codes = response.json()['response']['items'][0]['text'].replace(replace_down, '').replace(replace_up, '').strip().split('\n')
KeyError: 'response'