Archives par mot-clé : clic

Exemple de Bot d’Authentification et de clic en Php

Bonjour à tous …

Aujourd’hui ze bot « cliqueur » ^^, il s’agit en fait d’un bot qui s’authentifie en POST, récupère le cookie et va en get sur un lien (le clic quoi).

A quoi ça peut bien servir ?

Pour ma part, c’était pour récupérer une clé pour la closed beta de HON (un Dota avec des binaires pour linux, fallait pas rater ça!!) sur le site de Alienware, le problème, c’est que les clés étaient censé être disponible soit très tard dans la soirée, soit très tôt dans la matinée, et comme je n’aimais pas l’idée de rester sur le site à poireauter, j’ai fait ce que tout programmeurs auraient fait ^^, un sympatique script …

Les actions à faire étaient :

  1. Regarder sur le site si le nombre de clés disponibles étaient supérieur à 0
  2. S’authentifier
  3. Récupérer les clés

Ce qui donne donc le script suivant en tâche Cron toutes les 5 minutes (fallait juste pas oublier de couper le script après réception des clés ^^) :

]*>Closed Beta Keys Remaining[\W\w]*]*>([0-9]+)|iU',$hon,$retour);

if($retour[1]!=0)
{
	$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
	if(socket_connect($socket,"www.alienwarearena.com","80"))
	{
	//La requete de post pour ce logger
		$postReq = "POST /cmd/account/login/ HTTP/1.1\r\n";
		$postReq.= "Host: www.alienwarearena.com\r\n";
		$postReq.= "Connection: Keep-Alive\r\n";//comme ça on se reconnecte direct 😉 Pipelinning ROXX!!
		$postReq.= "Content-type: application/x-www-form-urlencoded\r\n";
		$postReq.= "Content-Length: ".strlen($stringLoginPost)."\r\n\r\n";
		$postReq.= $stringLoginPost."\r\n";
		socket_write($socket,$postReq);
		socket_recv($socket,$retour,1024,0);
	//la récupération de la valeur du cookie
		preg_match("#Set-Cookie: PHPSESSID=([^;]*); path=/#",$retour,$tabRet);
	//On va à la page de récupération des clés ^^
		$getReq = "GET /cmd/account/get-beta-key/hon/ HTTP/1.1\r\n";
		$getReq.= "Host: www.alienwarearena.com\r\n";
		$getReq.= "Cookie: PHPSESSID=".$tabRet[1]."\r\n";
		$getReq.= "Connection: Close\r\n\r\n";
		socket_write($socket,$getReq);
		socket_recv($socket,$retour,1024,0);

		mail(MAILADRES,"HON KEY!!","You got an HON KEY : ".$retour);
	}
        socket_close($socket);
}
?>

Donc voilà … le script reste une idée (qui a fonctionné dans mon cas) à modifier selon les cas, avec curl ça aurait été plus court, mais faire mumuse avec les sockets ça n’a pas de prix …