Grâce à Janembam, j'avance un petit peu (merci).
Je suis actuellement sur le bypass du launcher et j'ai remarqué plusieurs choses (vous me dîtes si j'ai tort).
Pour pouvoir bypass le launcher il faut :
- login
- password
- apikey
- certificat_id (sinon il nous dit qu'il manque des paramètres de sécurités)
- certificat_hash (sinon il nous dit qu'il manque des paramètres de sécurités)
A l'heure actuelle, j'ai énormément de mal a récupérer les informations via l'API, il me retourne toujours des erreurs du genre :
Erreur API: Statut 422, Réponse: {"status":422,"message":"Missing required parameters 'login'"}
Puis..
Erreur API: Statut 422, Réponse: {"status":422,"message":"Invalid conditions parameters 'game_id' with value '101' for condition 'in : 18;22;102'"}
Du coup, je ne sais pas comment bien paramétrer mon script pour récupérer les informations nécessaires via l'API (apikey, certificat_id et certificat_hash)
En rentrant les informations nécessaires en dur (que j'ai sniffé auparavant avec pyshark), ça fonctionne j'arrive a me connecter sans le launcher :

Du coup, je ne suis plus très loin, si quelqu'un sait comment récupérer correctement les données via l'api car le script ci-dessous me retourne des erreurs :
import http.client
import json
import socket
import ssl
# Informations de connexion chargées depuis des variables ou un fichier de configuration
login = "monnomdecompte"
password = "monmotdepasse"
launcherPort = 26117
def get_api_key(login, password):
context = ssl._create_unverified_context()
conn = http.client.HTTPSConnection("haapi.ankama.com", context=context)
payload = f"login={login}&password={password}&game_id=101"
headers = {"Content-Type": "application/json", "User-Agent": "Zaap 3.12.9"}
conn.request("POST", "/json/Ankama/v5/Api/CreateApiKey", body=payload, headers=headers)
response = conn.getresponse()
response_data = response.read().decode()
if response.status != 200:
print(f"Erreur lors de l'obtention de l'API Key: Statut {response.status}, Réponse: {response_data}")
conn.close()
return None
api_key = json.loads(response_data).get("key")
conn.close()
return api_key
def get_token():
api_key = get_api_key(login, password)
if not api_key:
print("Impossible d'obtenir l'API Key.")
return None
context = ssl._create_unverified_context()
conn = http.client.HTTPSConnection("haapi.ankama.com", context=context)
headers = {"Content-Type": "application/json", "User-Agent": "Zaap 3.12.9", "apikey": api_key}
conn.request("GET", "/json/Ankama/v5/Account/CreateToken?game=101", headers=headers)
response = conn.getresponse()
token = json.loads(response.read().decode()).get("token")
conn.close()
return token
def start_launcher_emulator():
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('127.0.0.1', launcherPort))
server_socket.listen(1)
print(f"Listening on port {launcherPort}...")
client_socket, addr = server_socket.accept()
print(f"Connection from {addr} has been established.")
token = get_token()
if token:
response = f"auth_getGameToken {token}\0"
client_socket.sendall(response.encode('utf-8'))
else:
print("Échec de l'obtention du token.")
client_socket.close()
server_socket.close()
if __name__ == "__main__":
start_launcher_emulator()
Résultat :
Listening on port 26117...
Connection from ('127.0.0.1', XXXXX) has been established.
Erreur lors de l'obtention de l'API Key: Statut 422, Réponse: {"status":422,"message":"Invalid conditions parameters 'game_id' with value '101' for condition 'in : 18;22;102'"}
Impossible d'obtenir l'API Key.
Échec de l'obtention du token.
Merci d'avance pour votre aide, bon week-end ! :)