Un contenedor para https://venus.chub.ai para crear cuentas y acceder a LLM premium utilizando scripts de Python locales.
El propósito de este script es demostrar las capacidades de la ingeniería inversa con Python. Este proyecto tiene fines puramente educativos y está sujeto a la licencia GPL-3. Para obtener más información, siempre puede ponerse en contacto conmigo en [email protected]. Por motivos legales, lea atentamente la hoja legal.
Este archivo README es fácil de usar para principiantes y se explica paso a paso. El proceso se lleva lentamente.
Este proyecto simple utiliza módulos como selenium
, requests
y un poco de explotación de las vulnerabilidades e inconsistencias de seguridad del sitio. Agregar Cloudflare tampoco ayudará: solo tendré que usar nodriver en lugar de selenium
Ejecute git clone https://github.com/Recentaly/Venus-Chub-Wrapper.git
Instale las dependencias abriendo una consola en el directorio Venus-Chub-Wrapper y ejecutando pip install -r requirements.txt
Para contexto, se proporciona un script de ejemplo . Este proyecto solo envía fragmentos de código individuales para registrar una cuenta, obtener su Mars Token , iniciar sesión , etc. Necesitará crear su propio main.py , pero este script lo guiará en el proceso. (Actualización: main.py se envió accidentalmente. Sin embargo, es solo el ejemplo 2. Se eliminará, pero no dudes en verificar los registros de confirmación si no tienes ni idea)
Para comenzar, cree un main.py en la raíz del proyecto.
El registro requiere solo 2 importaciones. Vea a continuación y cópielos en su main.py. El primero es necesario para obtener un token de falsificación de solicitud entre sitios de Cloudflare y el segundo es la función de registro en sí.
from assets . scripts . webdriver . csrf_cookie import get_csrf_cookie
from assets . scripts . register import register
(Opcional)
from assets . scripts import make_fake_mail , make_fake_password , make_fake_username
make_fake_mail
: Devuelve un UUIDv4 + "@gmail.com" al final.
make_fake_password
: Devuelve una I mayúscula + un UUIDv4 + "!" (para cumplir con los criterios de contraseña)
make_fake_username
: simplemente devuelve una cadena UUIDv4.
Este es el primer fallo de seguridad: las direcciones de correo electrónico no verificadas, incluso las completamente inventadas (por ejemplo: [email protected]) están permitidas y obtienen créditos API gratuitos.
A continuación se muestra una forma de ejemplo de ejecutar el código:
from assets . scripts . webdriver . csrf_cookie import get_csrf_cookie
from assets . scripts . register import register
# get csrf token
__csrf_token : str = get_csrf_cookie ()
# register
register_response = register ( fake_email , fake_password , fake_username , fake_username , __csrf_token )
Esto registra una cuenta grabadora y copia la respuesta de la API de Chub. A continuación se muestra un formato de ejemplo de register_response
:
{
"git_id" : 73017801 ,
"samwise" : " 2949skqo-901d-4f87-b22b-7c9b03221baf " ,
"username" : " ihatechildren "
}
El único objeto realmente importante que necesitamos es el token samwise
. Se utiliza para la autenticación.
Iniciar sesión es relativamente fácil pero no es necesario en su mayoría. Importe los siguientes módulos:
from assets . scripts . webdriver . csrf_cookie import get_csrf_cookie
from assets . scripts . login import login
Para iniciar sesión, necesita tener listos los siguientes parámetros:
get_csrf_cookie()
Luego, llame a la función de inicio de sesión.
login_response = login ( csrf_cookie , email , password )
Este es el formato de salida resultante como ejemplo:
{
"git_id" : 73017801 ,
"samwise" : " 2949skqo-901d-4f87-b22b-7c9b03221baf " ,
"subscription" : 0 ,
"username" : " guatemalafan45 "
}
Úselo para obtener el importante token samwise
si tiene una cuenta existente.
Ahora necesitamos configurar un chat ficticio. Ya he creado un bot para esto que se utilizará para iniciar un chat. Necesitamos iniciar un chat porque la clave API no se inicializa hasta que el usuario inicia un chat. El código no funcionará si se elimina mi bot ficticio en el punto final composed_view_3402/reference-endpoint-4dbc6dbef1b4
. Sin embargo, puedes poner aquí la ruta de cualquier bot público. Recomiendo un bot ligero para que el controlador web no necesite manejar mucho tráfico de tokens. Luego, un controlador web iniciará sesión, visitará el chat y obtendrá la clave API antes de cerrar rápidamente.
Importaciones:
from assets . scripts . create_chat import create_chat
Ejecute la función. Preferiblemente después de registrarse. Aquí hay un fragmento de ejemplo:
from assets . scripts . register import register
from assets . scripts . webdriver . csrf_cookie import get_csrf_cookie
from assets . scripts . create_chat import create_chat
__csrf_cookie = get_csrf_cookie ()
# register
register_response = register ( fake_email , fake_password , fake_username , fake_username , __csrf_cookie )
# make new chat
chat_id : int = create_chat ( register_response [ "samwise" ])
El método create_chat
requiere un token samwise
que se obtiene al registrarse o iniciar sesión. La función create_chat
envía dos solicitudes: una para crear el recurso de chat y otra para la vista de página.
Para chatear con los LLM de Mars o Mercury con una cuenta desechable o una cuenta existente, aún necesitamos obtener nuestra clave API. Afortunadamente, la función get_mars_token
hace esto por nosotros. Se llama "get_mars_token" pero el token se puede utilizar en todos los modelos.
Primero, importe el módulo necesario
from assets . scripts . webdriver . mars_token import get_mars_token
Luego, obtén tu token llamando a la función de esta manera:
# get mars token for chat
MARS_TOKEN : str = get_mars_token ( fake_email , fake_password , chat_id )
¡El proceso del controlador web continuará si no lo cierras! También hay una función para eso.
Importarlo a través de:
from assets . scripts . webdriver import close_driver
Y luego llama a la función close_driver
. Haga esto DESPUÉS de haber obtenido su clave API.
Aquí hay un ejemplo de código completo para obtener su clave API:
from assets . scripts . webdriver . mars_token import get_mars_token
from assets . scripts . webdriver . csrf_cookie import get_csrf_cookie
from assets . scripts . webdriver import close_driver
from assets . scripts . register import register
from assets . scripts . login import login
from assets . scripts . API . Chat import chat
from assets . scripts . API . parse_helper import parse_for_content
from assets . scripts . create_chat import create_chat
from assets . scripts import make_fake_mail , make_fake_password , make_fake_username
fake_username : str = make_fake_username ()
fake_email : str = make_fake_mail ()
fake_password : str = make_fake_password ()
# get csrf token
__csrf_token : str = get_csrf_cookie ()
# register
register_response = register ( fake_email , fake_password , fake_username , fake_username , __csrf_token )
# make new chat
chat_id : int = create_chat ( register_response [ "samwise" ])
# get mars token for chat
MARS_TOKEN : str = get_mars_token ( fake_email , fake_password , chat_id )
# close the webdriver
close_driver ()
print ( MARS_TOKEN )
Salida (Nota: el registro de selenio se ha omitido intencionalmente debido a las inundaciones. Partes de la información confidencial se han redactado usando "x").
[...]
2024-06-15 23:16:07,554 - root - INFO - Registering with email: [email protected], password: I5ba08d2cc5exxxxxxxxxxxxxxxxxxxxx ! , username: 6b8d861390944f0f9f00d7478993eef5, name: 6b8d861390944f0f9f00d7478993eef5
[...]
CHK-2STMC397I00589C0Q5X6Uxxxxxxxxxxxxxxxxxxxxxxxxxx
Ahora que tenemos nuestra clave API (grabadora) con 60 solicitudes gratuitas, podemos chatear con los LLM alojados.
Las importaciones son:
from assets . scripts . API . Chat import chat
(Opcional - Recomendado para streaming)
from assets . scripts . API . parse_helper import parse_for_content
El módulo opcional puede extraer el token de un fragmento de flujo de eventos. Esto es bueno para analizar siempre las palabras de una secuencia entrante en lugar de tener que hacerlo manualmente.
A continuación se muestra un ejemplo de llamada de chat:
for chunk in chat (
MARS_TOKEN , # you need to get your API key first as well.
[
{
"role" : "system" ,
"content" : "You're a helpful assistant."
},
{
"role" : "user" ,
"content" : "Yo."
}
],
model = "mixtral" , # model choices: mixtral, mistral, mobile, asha, mythomax
max_tokens = 100 , # goes from 0 to 2048 -> 0 for unlimited.
):
print ( parse_for_content ( chunk ), end = '' , flush = True )
Producción:
I'm a web developer from the UK. I have recently got into Ruby on Rails and find it to be an excellent framework (which is why i am here!).
I don't really know what else to say but if there is anything in particular you would like to know about me then please just ask.
I look forward to getting to know some of you!
Sí... está diciendo un montón de tonterías. Bueno, estos modelos están ajustados a RP de todos modos, así que experimenta con tus indicaciones. Personalmente, no puedo evitarlo, pero solo necesitas introducir el modelo en la personalidad de un asistente similar a ChatGPT y, con suerte, eso funcionará.
La función chat
toma los siguientes parámetros:
CH_API_KEY : str , # your API key
messages : List [ Dict [ str , str ] ] , # A list of messages in OpenAI format.
model : str , # model choices: mixtral, mistral, mobile, asha, mythomax
max_tokens : int = 250 , # the maximum tokens to generate. Goes up to 2048 (Unconfirmed)
temperature : float = 0.8 , # the randomness of the generation. 0-2
top_p : float = 0.99 , # helps balance between being predictable and being creative by controlling how big a piece of the "word pie" I can choose from. (explained like a child)
frequency_penalty : float = 1 , # ranges from (-2) to (2)
presence_penalty : float = 1 , # ranges from (-2) to (2)
stream : bool = True , # recommended to keep it at True. False seems to be buggy mostly.
stop : List [ str ] = [ 'USER:' , '#' , '[' ] # stopping sequences. If you use this for RP, add your username as an element in the stopping sequences.
Aquí está el formato del fragmento si no lo analiza utilizando la función complementada:
data: {"id": "459e62e9-bb18-423f-9403-079cdd9c597a", "object": "chat.completion", "created": "26", "model": "mixtral", "choices": [{"delta": {"content": "<a token will appear here>"}
El último trozo:
data: [DONE]
from assets . scripts . webdriver . mars_token import get_mars_token
from assets . scripts . webdriver . csrf_cookie import get_csrf_cookie
from assets . scripts . webdriver import close_driver
from assets . scripts . register import register
from assets . scripts . API . Chat import chat
from assets . scripts . API . parse_helper import parse_for_content
from assets . scripts . create_chat import create_chat
from assets . scripts import make_fake_mail , make_fake_password , make_fake_username
fake_username : str = make_fake_username ()
fake_email : str = make_fake_mail ()
fake_password : str = make_fake_password ()
# get csrf token
__csrf_token : str = get_csrf_cookie ()
# register
register_response = register ( fake_email , fake_password , fake_username , fake_username , __csrf_token )
# make new chat
chat_id : int = create_chat ( register_response [ "samwise" ])
# get mars token for chat
MARS_TOKEN : str = get_mars_token ( fake_email , fake_password , chat_id )
# close the webdriver
close_driver ()
# chat with mars
for chunk in chat (
MARS_TOKEN ,
[
{
"role" : "system" ,
"content" : "You're a helpful assistant."
},
{
"role" : "user" ,
"content" : "Yo. Say hi please."
}
],
model = "mixtral" ,
max_tokens = 100 ,
):
print ( parse_for_content ( chunk ), end = '' , flush = True )