Skip to content

JKLM.cheat

Le but de ce projet était de crée un cheat pour le site JKLM.fun, qui est un site qui propose de nombreux jeu dont PopSauce, un jeu de rapidité ou les joueurs doivent deviner le mot le plus rapidement possible via des images.

Le projet était basé sur TamperMonkey, un gestionnaire de script pour les navigateurs qui permet de modifier le comportement des sites web.

Pour cela, j'ai utilisé les technologies suivantes:

  • Axios pour faire des requêtes HTTP
  • Express.js pour le backend

Frontend

Pour le frontend, TamperMonkey lisez les images qui s'affichez sur le site, les envoies sur Express.js qui les enregistre dans un dossier. Express.js renvoie ensuite l'image dans Google Search pour récupérer le mot correspondant à l'image.

Backend

Lorsque le back-end à le mot il renvoie via des websockets le mot au frontend qui l'affiche sur le site. L'utilisateur n'a plus qu'a faire un copier coller du mot pour gagner la partie.

Code permettant de récupérer l'image, de la sauvegarder et de la renvoyer dans Google Search :

js
app.post('/image', async (req, res) => {
    const { imageData } = req.body;
    if (!imageData) {
        return res.status(400).send('No image data provided.');
    }

    const base64Data = imageData.replace(/^data:image\/\w+;base64,/, '');
    const imageBuffer = Buffer.from(base64Data, 'base64');
    const imageName = `image-${Date.now()}.png`;
    const imagePath = path.join(imagesFolder, imageName);

    deleteAllImagesInFolder(imagesFolder);

    try {
        console.log('Saving image to:', imagePath);
        fs.writeFileSync(imagePath, imageBuffer);
        
        const uploadResponse = await uploadToCustomService(imagePath);
        const imagePublicUrl = uploadResponse; 

        let googleLensUrl = 'https://lens.google.com/uploadbyurl?url=' + imagePublicUrl;
        console.log('Google Lens URL:', googleLensUrl);
        res.status(200).json({ googleLensUrl });



    } catch (error) {
        console.error('Error processing image:', error);
        res.status(500).send('Error processing image or Google Lens search');
    }
});

Code permettant d'envoyer l'image au backend :

js
    function sendImageData(base64) {
        const hash = btoa(base64).substring(0, 50);
        if (sentImages.has(hash)) return;
        sentImages.add(hash);

        GM_xmlhttpRequest({
            method: 'POST',
            url: 'http://localhost:7777/image',
            data: JSON.stringify({ imageData: `data:image/png;base64,${base64}` }),
            headers: {
                "Content-Type": "application/json"
            },
            onload: function(response) {
                if (response.status >= 200 && response.status < 300) {
                    console.log('Image data sent successfully:', hash);
                    const responseData = JSON.parse(response.responseText);
                    window.open(responseData.googleLensUrl, '_blank');
                } else {
                    console.error('Failed to send image data:', hash);
                }
            }
        });
    }