stealtosvra / Moon Captcha v2 Solver

// ==UserScript==
// @name        Moon Captcha v2 Solver
// @namespace   moon.captcha.v2.solver
// @version     0.4
// @description Moon Captcha Captcha Solver by @satology @vikiweb @stealtosvra.
// @author      stealtosvra
// @match       *://*/*
// @resource    hashes https://stealtosvra.github.io/udImages/hashes32.json
// @require     https://unpkg.com/jimp@0.5.2/browser/lib/jimp.min.js
// @grant       GM_getResourceText
// @license     MIT
// ==/UserScript==
 
(function () {
    'use strict';
 
    const captchaImgs = document.querySelectorAll('.rscapimg, .captchaOptions');
    const hashes = JSON.parse(GM_getResourceText('hashes'));
 
    function readAsPng(base64Src) {
        return new Promise(resolve => {
            const base64Data = base64Src.replace(/^data:image\/png;base64,/, '');
            const buffer = Buffer.from(base64Data, 'base64');
            Jimp.read(buffer, (err, image) => {
                resolve(image);
            });
        });
    }
 
    async function checkImages() {
        const promises = Array.from(captchaImgs).map(async (img, i) => {
            const image = await readAsPng(img.src);
            const hash = image.hash(32);
            console.log(`IMG Hash : ${i}: ${hash}`);
            const resp = hashes.filter(x => x === hash);
            if (resp.length > 0) {
                console.log(`Matched Hash : ${i}! ${resp}`);
                img.click()
            } else {
                console.log(`Not Upside Down! ${i}!`);
            }
        });
        await Promise.all(promises);
        console.log('end');
    }
 
    checkImages();
})();