💬 Off-Topic "We Can Always Tell" - Competitive Clocking

  • 🇵🇦 Nuestro primer dominio localizado está en español en kiwifarms.pa. Our first localized domain is on Spanish on kiwifarms.pa.
  • Want to keep track of this thread?
    Accounts can bookmark posts, watch threads for updates, and jump back to where you stopped reading.
    Create account
This has to be some sort of IP grab, I mean they even have a card code and date so the developer can get the IP of somebody by posting their card so they can get doxxed, or at least grab an IP.

Added onto the fact it’s a transgender developer, it only makes me wonder for the worst.

This shit glows.
 
these stats are largely impacted by pooners passing really well as 14-year-old boys trying to grow their first moustache.
This makes me recall an interview with CIA chief of disguise Jonna Mendez, who said that while it was possible to disguise a woman as a man in espionage, the reverse never worked.

It's almost like there's a biological explanation for this. :thinking:
 
I got 70%. I'll admit that I'm not great at clocking pooners via pictures.

Plus ya know...posed, static images of someone's face are very much an "ideal" scenario. IRL it's even easier to tell because of height, body size, posture, skin texture, vibe etc.

Also it's all troon logic. I don't deny the (very) rare HSTS like (younger) Blaire White exists. So what? Doesn't mean they're a woman.
 
This has to be some sort of IP grab, I mean they even have a card code and date so the developer can get the IP of somebody by posting their card so they can get doxxed, or at least grab an IP.

Added onto the fact it’s a transgender developer, it only makes me wonder for the worst.

This shit glows.
Ah yes, my IP address that points to my home network that I just changed by restarting the PPPoE session on my router so the IP the troon might've grabbed is now useless. Geolocation? You're getting my ISP's datacenter location, good luck finding out my home address with that.

IP grabbing is the dumbest form of getting back at someone imaginable. Shit's not static for everyone because of the IPv4 pool depletion, and VPN's exist. Even data hungry giants like Google and Facebook don't rely on them for tracking. Next time try phishing for personal information, maybe then you'll actually manage to dox someone.
 
I have not clicked on the website, not sure I will. These sorts of stunts are seen on twitter and elsewhere. As others have stated, pictures can be deceptive: filters, strategic angles, lack of height perception. I would have a near 100 percent accuracy seeing in real life, clothed, and 100 percent if I ever had to see one of these creatures nude.
 
Using the power of turbo-autism, here are the 52 pictures with the test results next to them, enjoy!
kf-patch.jpg
The Investigation Deptartment comes through again.
Troons/Pooners BTFO
Kiwifarms 41.gif
 
Ah yes, my IP address that points to my home network that I just changed by restarting the PPPoE session on my router so the IP the troon might've grabbed is now useless. Geolocation? You're getting my ISP's datacenter location, good luck finding out my home address with that.

IP grabbing is the dumbest form of getting back at someone imaginable. Shit's not static for everyone because of the IPv4 pool depletion, and VPN's exist. Even data hungry giants like Google and Facebook don't rely on them for tracking. Next time try phishing for personal information, maybe then you'll actually manage to dox someone.

Yeah but it still works for scaring those who don't know that. There are plenty of people who will freak out and delete their accounts if you tell them their IP.
 
This has to be some sort of IP grab, I mean they even have a card code and date so the developer can get the IP of somebody by posting their card so they can get doxxed, or at least grab an IP.

Added onto the fact it’s a transgender developer, it only makes me wonder for the worst.

This shit glows.
I'm sure it is. I did the test from my work computer/network, so good luck trying to find out who I am. Also AFAIK just knowing random ips is pretty useless in itself.
 
Oh no, static photos with filters foiled us!!

A reminder to troons:

You don’t pass.
And if you ‘pass’ in one photo you don’t pass in the others.
And if you ‘pass’ in photos you don’t pass in video.
And if you ‘pass’ in video you don’t pass speaking.
And if you ‘pass’ speaking you don’t pass walking.
And if you ‘pass’ walking you don’t pass in bed.
And if you ‘pass’ in bed they were just too horny to tell you the truth.
Everyone is lying to you.
Or scared of your reaction or scared of the consequences of telling the truth.
Or trying to be ‘nice’ and an ally.
Or another troon wanting you to pretend they pass too.
You’re a living, breathing lie and you force everyone around you to lie as well.
You don’t pass.
 
This has to be some sort of IP grab, I mean they even have a card code and date so the developer can get the IP of somebody by posting their card so they can get doxxed, or at least grab an IP.

Added onto the fact it’s a transgender developer, it only makes me wonder for the worst.

This shit glows.
Hope they enjoy a meaningless VPN IP.
Steganographically hidden info in the image could let someone link the account you post the image on to other accounts you have where they are admins on if your browser has a unique fingerprint.

Any recommendations for fingerprinting protection? I'm fine everywhere else.
 
Steganographically hidden info in the image could let someone link the account you post the image on to other accounts you have where they are admins on if your browser has a unique fingerprint.

I don't think that's really going to be an issue unless you're in some furry RP forum or something, in which case you deserve it.
 
Última edición:
Steganographically hidden info in the image could let someone link the account you post the image on to other accounts you have where they are admins on if your browser has a unique fingerprint.

Firstly, I doubt troons are inventive enough to get a browser fingerprinting system that's as complex as the one EFF uses for this test, and secondly, gee, I'm sure I'll be going to the websites these types of people are admins, register an account there and use the exact same browser to do gayops.

Have fun knowing that I use some Chromium browser with a 1080p screen and that I live in Poland, if I'm ever gonna engage in gayops with troons, be sure that I'll use a different browser with a VPN and your IP grabbing and fingerprinting will be powerless.

As for the fingerprinting in play with these cards, you have the random cat character that's also in the background of the results, there's the date, the name and the emoji code. Clearly a lot of data to make sure that if you post it somewhere they know exactly who you were.

Next up, what kind of data they can collect. I don't know if they grab it as soon as you load the page or after you're done with the test. I did the test in an incognito tab so that minimized the amount of data they've gathered assuming they haven't fingerprinted my browser beforehand. And besides the fingerprinting there's the IP address. What can you do with it? Not much, you could try and hack into someone's network, you could DDoS them, or at the very least snitch if someone was torrenting. In my case, it's a single PPPoE reload and I have a fresh IP.

It seems that just about everything is done in JS, because troons will be trooning. This time I took precautions and opened it via Tor. Here's the main .js script:

JavaScript:
"use strict";

var shown_image = "nothing";
var IMAGES = []
var progress = 0;
var timer = 30;
var TOTAL_TRIALS = 20;
var finished = false;
var started = false;
var paused = false;

function start() {
    changeImageRandom();
}

function changeImageRandom() {
    setTimeout(() => {
        if (paused) {
            loading.classList.remove("d-none");
        }
    }, 500);
 
    paused = true;
    timer = 30;
    // Generate a random number between 1 and IMAGES
    var randomNumber = Math.floor(Math.random() * (IMAGES.length - 1));

    // Format the number to have leading zeros and create the file path
    var img = IMAGES[randomNumber];

    // Remove that from the image list
    IMAGES.splice(randomNumber, 1);

    shown_image = img.uid;
 
    timer = 30;
    var progressBar = document.getElementById('progressBar');
    progressBar.style.width = "100%";

    var question = document.getElementById('question');
    question.innerText = "Q" + (progress + 1) + ". Assigned sex/gender at birth?";

    // Change the image source
    loadImage(img.url, 20, 3000)
        .catch(error => alert("Unable to load image. Are you connected to the internet?"));
}

function loadImage(url, retries, delay) {
    return new Promise((resolve, reject) => {
        const image = document.getElementById('picture');

        const onLoad = () => {
            resolve(image);
        };

        const onError = () => {
            if (retries > 0) {
                console.log(`Retrying to load image... attempts left: ${retries}`);
                setTimeout(() => {
                    // Force browser to attempt to reload the image
                    image.src = '';
                    image.src = url;
                    retries--;
                }, delay);
            } else {
                reject(new Error('Failed to load image after multiple attempts'));
            }
        };

        // Add event listeners
        image.onload = onLoad;
        image.onerror = onError;

        // Attempt to load the image
        image.src = url;
    });
}

function updateTimer() {
    var progressBar = document.getElementById('progressBar');

    progressBar.classList.remove("bg-info", "bg-warning", "bg-danger", "invisible");

    if (finished) {
        progressBar.classList.add("invisible");
        return;
    }
    if (!started) {
        progressBar.classList.add("invisible");
        return;
    }
    if (paused) {
        progressBar.classList.add("invisible");
        return;
    }


    // Increase the width
    var newWidth = 100 * Math.ceil(timer) / 30.0;

    // Ensure the width does not exceed 100%
    if (newWidth > 100) {
        newWidth = 100;
    }

    if (newWidth < 0) {
        newWidth = 0;
    }

    if (newWidth <= 66) {
        progressBar.classList.add("bg-warning")
    }

    if (newWidth <= 33) {
        progressBar.classList.add("bg-danger")
    }

    // Update the progress bar width and text
    progressBar.style.width = newWidth + '%';
    if (Math.ceil(timer) > 10) {
        progressBar.textContent = "Time left: " + Math.ceil(timer);
    } else {
        progressBar.textContent = Math.ceil(timer);
    }
    timer -= 0.1;

    if (timer <= 0) {
        submitAnswer(shown_image, "timeout");
        nextRound();
    }
}

document.addEventListener('contextmenu', function(event) {
    let target = event.target;
    while (target != null) {
        if (target.id === 'scorecard_img') {
            return;
        }
        target = target.parentElement;
    }
    event.preventDefault();
});

document.addEventListener('keydown', function(event) {
    event.preventDefault();
});

document.addEventListener("DOMContentLoaded", function() {
    fetch("images.json")
        .then(response => {
            if (!response.ok) {
                throw new Error('Network response was not ok');
            }
            return response.json();
        })
        .then(data => {
            IMAGES = data;
            start();
        })
        .catch(error => {
            alert("There was an error loading the image list.");
        })
});

var submissions = []

function submitAnswer(uid, answer) {
    submissions.push({
        "uid": uid,
        "answer": answer
    });
}

function gameDone() {
    var gameDiv = document.getElementById('game');
    var results = document.getElementById('results');

    finished = true;
    gameDiv.classList.add("d-none");
    results.classList.remove("d-none");

    let my_name = prompt("What name would you like on the scoreboard? (Max 12 characters)").substring(0, 12);
    if (!my_name) {
        my_name = "Unknown";
    }
    // Submit answers
    var url = "https://api.beth.lgbt/wcat?answers=1&name=" + my_name;
    for (let i = 0; i < submissions.length; i++) {
        url += "&" + submissions[i]["uid"] + "=" + submissions[i]["answer"];
    }

    fetch(url)
        .then(response => {
            if (!response.ok) {
                return response.json().then(json => {
                    if (json['error']) {
                        throw new Error(json['error']);
                    } else {
                        throw new Error('Network response was not ok');
                    }
                });
            }
            return response.json();
        })
        .then(scorecard => {
            setUpScorecard(scorecard);
        })
        .catch(error => {
            alert("There was an error submitting the answers: " + error.message);
            var wait = document.getElementById("wait");
            wait.innerText = error.message;
        })
}

function nextRound() {
    var image = document.getElementById('picture');
    var radioButtons = document.getElementsByName('transOption');
    var submitButton = document.getElementById('submitBtn');

    timer = 30;
    paused = true;

    // Disable radio buttons and submit button
    for (var i = 0; i < radioButtons.length; i++) {
        radioButtons[i].disabled = true;
    }
    submitButton.disabled = true;

    // Fade out the image
    image.style.transition = 'opacity 0.2s';
    image.style.opacity = '0';

    // Wait for the fade-out to complete
    setTimeout(function() {
        progress += 1;
        if (progress == TOTAL_TRIALS) {
            gameDone();
            return;
        }
        changeImageRandom();

        // Wait for image to finish loading
        function wait() {
            if (paused) {
                setTimeout(() => {
                    wait();
                }, 50);
            } else {
                // Reset the radio buttons
                for (var i = 0; i < radioButtons.length; i++) {
                    radioButtons[i].checked = false;
                    radioButtons[i].disabled = false;
                }

                // Fade the image back in
                image.style.opacity = '1';
            }
        }

        setTimeout(() => {
            wait();
        }, 10);
  
    }, 200);
}

function startGame() {
    var startButton = document.getElementById('startBtn');
    var gameDiv = document.getElementById('game');
    var instructions = document.getElementById('instructions');

    // Send start signal
    var url = "https://api.beth.lgbt/wcat?start=1";
    instructions.innerText = "Please wait...";

    startButton.classList.add("d-none");

    fetch(url)
        .then(response => {
            if (!response.ok) {
                return response.json().then(json => {
                    if (json['error']) {
                        throw new Error(json['error']);
                    } else {
                        throw new Error('Network response was not ok');
                    }
                });
            }
            return response.json();
        })
        .then(response => {
            gameDiv.classList.remove("d-none");
            instructions.classList.add("d-none");
            started = true;
        })
        .catch(error => {
            alert("There was an error starting the quiz: " + error.message);
            instructions.innerText = error.message;
        })
}

function checkSubmitButton() {
    // Function to unlock the submit button if something is selected.
    var radioButtons = document.getElementsByName('transOption');
    var selected_option = "nothing";

    for (var i = 0; i < radioButtons.length; i++) {
        if (radioButtons[i].checked && !radioButtons[i].disabled) {
            selected_option = radioButtons[i].value;
        }
    }

    if (selected_option == "nothing") {
        return;
    }

    document.getElementById('submitBtn').disabled = false;
}

function goToValidation() {
    if (started) {
        var image = document.getElementById('picture');
        image.style.opacity = "0";
        setTimeout(() => {
            if (confirm("You're currently in the middle of a quiz. Do you want to exit early and go to the validation page?")) {
                doValidationPage();
            } else {
                image.style.opacity = "1";
            }
        }, 50);
    } else {
        doValidationPage();
    }
}

function doValidationPage() {
    // reset in-quiz variables
    progress = 0;
    timer = 30;
    finished = false;
    started = false;
    paused = false;

    // hide quiz divs
    var startButton = document.getElementById('startBtn');
    var gameDiv = document.getElementById('game');
    var instructions = document.getElementById('instructions');
    startButton.classList.add("d-none");
    gameDiv.classList.add("d-none");
    instructions.classList.add("d-none");

    // hide scorecard
    var resultsDiv = document.getElementById('results');
    resultsDiv.classList.add("d-none");

    // reset code input
    var emojiInput = document.getElementById('emojiInput');
    emojiInput.value = "";

    var header = document.getElementById('header');
    var validateCodeDiv = document.getElementById('validateCode');
    header.innerText = "Validate Code";
    validateCodeDiv.classList.remove("d-none");
}

function setUpScorecard(score) {
    var scoreDiv = document.getElementById("score");
    var waitDiv = document.getElementById("wait");
    var scoreCardImage = document.getElementById("scorecard_img")

    scoreCardImage.src = "https://wecanalwaystell.com/" + score.scorecard_img;

    waitDiv.classList.add("d-none");
    scoreDiv.classList.remove("d-none");
}

function submitCode(code) {
    var url = "https://api.beth.lgbt/wcat?validate=1&code=" + code;
 
    var scoreDiv = document.getElementById("score");
    scoreDiv.classList.add("d-none");
    var waitDiv = document.getElementById("wait");
    waitDiv.classList.remove("d-none");
    var results = document.getElementById('results');
    results.classList.remove("d-none");

    waitDiv.innerText = "Please wait, loading scorecard...";

    fetch(url)
    .then(response => {
        if (!response.ok) {
            return response.json().then(json => {
                if (json['error']) {
                    throw new Error(json['error']);
                } else {
                    throw new Error('Network response was not ok');
                }
            });
        }
        return response.json();
    })
    .then(scorecard => {
        if (!scorecard.found) {
            waitDiv.innerText = "Invalid code";
            return;
        }
        // set up scorecard
        setUpScorecard(scorecard);
    })
    .catch(error => {
        alert("There was an error checking the code: " + error.message);
        waitDiv.innerText = error.message;
    })
}

document.addEventListener("DOMContentLoaded", function() {
    var submitButton = document.getElementById('submitBtn');
    var startButton = document.getElementById('startBtn');
    var radioButtons = document.getElementsByName('transOption');
    var image = document.getElementById('picture');
    var validateLink = document.getElementById('validateLink')

    // Start the game with the start button
    startButton.addEventListener('click', function() {
        startGame();
    });

    // Once the image is loaded, resume the game
    image.addEventListener("load", function() {
        if (paused) {
            paused = false;
        }

        var loading = document.getElementById("loading");
        loading.classList.add("d-none");
    })

    // Submit button
    submitButton.addEventListener('click', function() {
        var selected_option = "nothing";

        // Ensure something is selected
        for (var i = 0; i < radioButtons.length; i++) {
            if (radioButtons[i].checked) {
                selected_option = radioButtons[i].value;
            }
        }

        if (selected_option == "nothing") {
            return;
        }

        submitAnswer(shown_image, selected_option);
        nextRound();
    });

    // Enable the submit button once an option is selected
    radioButtons.forEach(radio => {
        radio.addEventListener('change', () => {
            document.getElementById('submitBtn').disabled = false;
        });
    });

    // Code for validation page
    const emojiInput = document.getElementById('emojiInput');
    const emojiButtons = document.querySelectorAll('.emoji-btn');
    const deleteEmojiButton = document.getElementById('deleteEmoji');
    const submitEmojiButton = document.getElementById('submitEmoji');

    // Function to update the submit button state
    const updateSubmitButtonState = () => {
        submitEmojiButton.disabled = countEmojis(emojiInput.value) !== 5;
    };

    // Function to count emojis/grapheme clusters in a string
    const countEmojis = (str) => {
        if (typeof Intl.Segmenter === "function") {
            const segmenter = new Intl.Segmenter("en", { granularity: "grapheme" });
            return Array.from(segmenter.segment(str)).length;
        }
        // Fallback if Intl.Segmenter is not supported
        return Array.from(str).length;
    };

    emojiButtons.forEach(button => {
        button.addEventListener('click', function() {
            if (countEmojis(emojiInput.value) < 5) {
                emojiInput.value += this.getAttribute('data-emoji');
                updateSubmitButtonState(); // Update submit button state after adding an emoji
            }
        });
    });

    // Delete the last emoji
    deleteEmojiButton.addEventListener('click', function() {
        let newValue = '';
        const segmenter = new Intl.Segmenter("en", { granularity: "grapheme" });
        const segments = Array.from(segmenter.segment(emojiInput.value));
        segments.pop(); // Remove the last segment

        segments.forEach(segment => {
            newValue += segment.segment;
        });
  
        emojiInput.value = newValue;
    });

    // Prevent manual editing of the emoji input field
    emojiInput.addEventListener('input', function(e) {
        if (countEmojis(this.value) > 5) {
            // If more than 5 emojis, trim the value to the first 5 grapheme clusters
            let trimmedValue = '';
            const segmenter = new Intl.Segmenter("en", { granularity: "grapheme" });
            const segments = segmenter.segment(this.value);
            for (const segment of segments) {
                if (countEmojis(trimmedValue) < 5) {
                    trimmedValue += segment.segment;
                } else {
                    break;
                }
            }
            this.value = trimmedValue;
        }
    });

    // Initialize submit button state
    updateSubmitButtonState();

    submitEmojiButton.addEventListener('click', function() {
        var validateCodeDiv = document.getElementById('validateCode');
        validateCodeDiv.classList.add("d-none");
        submitCode(emojiInput.value);
    });

    // Switch to validation mode when clicked
    validateLink.addEventListener('click', function() {
        goToValidation();
    });

    setInterval(updateTimer, 100);
    setInterval(checkSubmitButton, 100);
});

The only other two dependencies are crypto-js.min.js and bootstrap.bundle.min.js.

The main thing of note is the URL of https://api.beth.lgbt/wcat?validate=1&code=. I've done a test and looked at the network results.
1713305395055.png

This is the image that I've got. Enjoy it troons, it was done via Tor Browser, it's worth jackshit, as is everything I'm about to share.

It seems that the site fetches a list of images with UID's every time you start a test:

[
{
"uid": "img_uid_72a767ad-c503-1802-5d3d-3ff5756a660c",
"url": "images/fmt2_54acc660554280a5ea9d92f38e9bcb08.jpg"
},
{
"uid": "img_uid_95ac37ba-2627-3fb4-f6e7-696abc506502",
"url": "images/fmt2_2f07b20b918b191b837406459445b67a.jpg"
},
{
"uid": "img_uid_95d8b404-c2cf-a6b8-3670-c4e9924ff93a",
"url": "images/fmt2_73892fa0fe67eb09b789aa375f5b80ef.jpg"
},
{
"uid": "img_uid_b1f5f46c-ee2b-6999-8cb1-d26b7a4a4282",
"url": "images/fmt2_957386572efd57dda2777989a6b5062d.jpg"
},
{
"uid": "img_uid_32f1cd70-e9cf-fdd5-7dcd-8da39b9e564f",
"url": "images/fmt2_8d43f13b5987d9593efac4f931413f6e.jpg"
},
{
"uid": "img_uid_d8855b68-5701-58f0-b78e-3e2e53f3bb03",
"url": "images/fmt2_70ec3c321067fc672847f042f13e85d1.jpg"
},
{
"uid": "img_uid_0123c0ab-0e32-56c0-7f8f-5f00f17a93b4",
"url": "images/fmt2_d27acc520bd1f42b576f1163c8011959.jpg"
},
{
"uid": "img_uid_4f75e9af-100c-34ab-c2ca-a062de9948f9",
"url": "images/fmt2_e0df554d17c1195df4630e5615bfc457.jpg"
},
{
"uid": "img_uid_be7cbda5-d236-1a89-f6ce-f2bf857a043d",
"url": "images/fmt2_79090b7c33ce7f601957c3a90f658471.jpg"
},
{
"uid": "img_uid_580d775f-5083-6242-bdd6-4d48b839b612",
"url": "images/fmt2_e3a7f54191ebe5e695523c6c4a98708b.jpg"
},
{
"uid": "img_uid_8a44b484-a3a8-1352-7cc2-1989ce689c2b",
"url": "images/fmt2_80320f8852dace55d48a079bb9ffb41e.jpg"
},
{
"uid": "img_uid_51ed1e9c-b960-6ed0-20d7-6ee99f612e51",
"url": "images/fmt2_f9c382401b0ba8c5dbf42d09172c82d7.jpg"
},
{
"uid": "img_uid_ee97dff3-65d6-4636-7795-e3212687979f",
"url": "images/fmt2_6c9c2b8988d2475dad4aaa33149e25d1.jpg"
},
{
"uid": "img_uid_8e29da8b-be80-fa62-dc1e-e6c52b853ff0",
"url": "images/fmt2_29ed81845526edd5a983b44ffc592c2b.jpg"
},
{
"uid": "img_uid_c5146173-d42b-8357-4842-6d10a0c6411b",
"url": "images/fmt2_6d41a769a900a8ee155ca7272eccbef7.jpg"
},
{
"uid": "img_uid_03afee74-7516-56a6-b1e9-dfdceadfccba",
"url": "images/fmt2_932a730729ba97df8304b60352895380.jpg"
},
{
"uid": "img_uid_4b2573ac-2a01-41ec-fe93-5f149409851a",
"url": "images/fmt2_999699ede66f23229c1295ff7e0cf18b.jpg"
},
{
"uid": "img_uid_d64da809-f9ad-565a-eaab-47942dd5976f",
"url": "images/fmt2_012c715cf497da6fe10312ba59a7eb53.jpg"
},
{
"uid": "img_uid_a08cc79c-7511-89ca-5df9-dc50c6791102",
"url": "images/fmt2_57efab768a3fe346347ec8acfa558143.jpg"
},
{
"uid": "img_uid_c086dd63-10ea-1bda-4fbe-6292800a1172",
"url": "images/fmt2_9b909512e6596f75ea931d7b4fab07a9.jpg"
},
{
"uid": "img_uid_251cc5d6-c3f8-1976-e5a2-c3048ab6b216",
"url": "images/fmt2_193b36c884611c829d329c4cf8727aeb.jpg"
},
{
"uid": "img_uid_31576a65-865f-1ce0-5ce4-aa83e5ef3d2b",
"url": "images/fmt2_39e72488bc64c8016e6ee46c8d9b8c59.jpg"
},
{
"uid": "img_uid_3680fcf5-7bbc-910a-bdb8-2f28103f5cc8",
"url": "images/fmt2_3a0051d14d52a5b85182aa4cf937b08b.jpg"
},
{
"uid": "img_uid_7bd79aff-84f2-aa55-ad9c-b5eb9334865d",
"url": "images/fmt2_934419a5eaab28b65f1b48faf651a84f.jpg"
},
{
"uid": "img_uid_c97f2200-1d79-110d-b0bd-4801492a8da9",
"url": "images/fmt2_22f50990f4724b7557b79fd04b853a48.jpg"
},
{
"uid": "img_uid_f7c42c03-f2c2-d0ae-ba4c-2c28c36c37dc",
"url": "images/fmt2_5c90834dbe740bb5095ca969db922714.jpg"
},
{
"uid": "img_uid_505ac2eb-3813-ea19-226d-4d6069787ad0",
"url": "images/fmt2_dc5a7d78509f286aa71ff394f987a1a4.jpg"
},
{
"uid": "img_uid_807304c3-6e11-070a-a1ae-eff45148bc7c",
"url": "images/fmt2_7097f3848a7d3dd5dae3f23b6c9bed54.jpg"
},
{
"uid": "img_uid_ed20ff49-3cf4-7e8a-d019-9164e345cd57",
"url": "images/fmt2_fc9272e8b8a71e98bef8ffcea5c937ff.jpg"
},
{
"uid": "img_uid_f7409f23-8ace-3bd4-cc41-658c3f5bc202",
"url": "images/fmt2_a595c6342612db27893a9e0c4d9e3117.jpg"
},
{
"uid": "img_uid_58023af9-a430-3e8f-9dc4-d9a7abc6f519",
"url": "images/fmt2_d56c5a408ab5365d329a040927ce8d47.jpg"
},
{
"uid": "img_uid_317228f9-2752-8269-38bc-baef26295fd8",
"url": "images/fmt2_531a6fc3699d44167466e8bce2d8c987.jpg"
},
{
"uid": "img_uid_2dc9c13a-0504-7ec9-70d4-62dc9cc199f9",
"url": "images/fmt2_162a441a3edf3586d645e3f8ebc3f933.jpg"
},
{
"uid": "img_uid_c8212576-6e78-3c02-49ea-c1e57887cc3d",
"url": "images/fmt2_db981bbff2eccb8693408667b4e21d9c.jpg"
},
{
"uid": "img_uid_d726a9ec-0c5a-1d76-1909-425f541b2b4c",
"url": "images/fmt2_00ab3964fb860693f55b284681c799fa.jpg"
},
{
"uid": "img_uid_8655130d-daaf-307c-84a8-8c4dcabff102",
"url": "images/fmt2_e907d668a60fe2bc57437641ad2f09d9.jpg"
},
{
"uid": "img_uid_bfc3aa04-31fc-d06f-0bdd-b0e9e243969a",
"url": "images/fmt2_0fff8244baa90873868d7c8d4c171c57.jpg"
},
{
"uid": "img_uid_3c520ba4-c401-46e4-a72f-965201124e25",
"url": "images/fmt2_6f7cd0f8be1e46ea0046ac46d4434a1f.jpg"
},
{
"uid": "img_uid_482e9a81-6164-6298-3fa5-9dd6a5b65ab1",
"url": "images/fmt2_3765f4a902530883d75a57ec9bb5bee0.jpg"
},
{
"uid": "img_uid_299dd268-9b76-4d11-4484-b200ff8449ba",
"url": "images/fmt2_7005f7aee3c77648652106f122eb78e9.jpg"
},
{
"uid": "img_uid_0b683175-006d-bb38-7564-3e2566191916",
"url": "images/fmt2_484a1f31b6972ed9977da0e65b0b5870.jpg"
},
{
"uid": "img_uid_324661f5-a756-e71e-104c-7aebd92f16c0",
"url": "images/fmt2_1dbdf7f37368663bf64aab7f90e581c8.jpg"
},
{
"uid": "img_uid_3d5c2bd7-b5dd-ba8a-67ba-4d6f367abcb8",
"url": "images/fmt2_9c730d28c8e6e9995136413f67b7b7ef.jpg"
},
{
"uid": "img_uid_275aa3df-1e03-90be-2db0-b682ff889e93",
"url": "images/fmt2_6e7e21b2c1af6ca19027ec6409432a9a.jpg"
},
{
"uid": "img_uid_9cc94181-8813-f2db-8023-2aa98a056d33",
"url": "images/fmt2_196c885cac18c261c424a6e977be7750.jpg"
},
{
"uid": "img_uid_f57fe2c9-bb36-5d65-a8bb-d9c8825f7887",
"url": "images/fmt2_45ddaf845871292b4372f02283a632b8.jpg"
},
{
"uid": "img_uid_c94c6538-3ed6-4568-cbbc-4cf5d9b25a03",
"url": "images/fmt2_1bcc237a2f0452c0c1485dc68bdeff35.jpg"
},
{
"uid": "img_uid_24e32371-8dc3-ecba-01cd-085d50076baf",
"url": "images/fmt2_d932fc54b876516ae1b8fd6475eedb1e.jpg"
},
{
"uid": "img_uid_b2878d72-dbe2-c9e6-4770-f2c56851a381",
"url": "images/fmt2_7389fd7be7a7ea03031730747b98d586.jpg"
},
{
"uid": "img_uid_eca724e8-8d15-068f-ae69-f81c71cceda8",
"url": "images/fmt2_6698bcb39d6e6d0fefd00b8d74aefd46.jpg"
},
{
"uid": "img_uid_e32fb66c-ecff-4f08-056f-19501a668585",
"url": "images/fmt2_82cabdf980eb39b5b275614f3097b83f.jpg"
},
{
"uid": "img_uid_cf4b0fbb-10fc-407f-fa0e-346eeacf4771",
"url": "images/fmt2_441323e1f03acf26d20cd56a7173af8b.jpg"
}
]

Now, here's the interesting part, the request at the end of it:

GET /wcat?answers=1&name=KillAllTroon&img_uid_d726a9ec-0c5a-1d76-1909-425f541b2b4c=amab&img_uid_bfc3aa04-31fc-d06f-0bdd-b0e9e243969a=amab&img_uid_ee97dff3-65d6-4636-7795-e3212687979f=amab&img_uid_c8212576-6e78-3c02-49ea-c1e57887cc3d=amab&img_uid_31576a65-865f-1ce0-5ce4-aa83e5ef3d2b=amab&img_uid_a08cc79c-7511-89ca-5df9-dc50c6791102=amab&img_uid_b2878d72-dbe2-c9e6-4770-f2c56851a381=amab&img_uid_807304c3-6e11-070a-a1ae-eff45148bc7c=amab&img_uid_f7c42c03-f2c2-d0ae-ba4c-2c28c36c37dc=amab&img_uid_8e29da8b-be80-fa62-dc1e-e6c52b853ff0=amab&img_uid_8655130d-daaf-307c-84a8-8c4dcabff102=amab&img_uid_c086dd63-10ea-1bda-4fbe-6292800a1172=amab&img_uid_0123c0ab-0e32-56c0-7f8f-5f00f17a93b4=amab&img_uid_4f75e9af-100c-34ab-c2ca-a062de9948f9=amab&img_uid_c5146173-d42b-8357-4842-6d10a0c6411b=amab&img_uid_3d5c2bd7-b5dd-ba8a-67ba-4d6f367abcb8=amab&img_uid_482e9a81-6164-6298-3fa5-9dd6a5b65ab1=amab&img_uid_03afee74-7516-56a6-b1e9-dfdceadfccba=amab&img_uid_95ac37ba-2627-3fb4-f6e7-696abc506502=amab&img_uid_d64da809-f9ad-565a-eaab-47942dd5976f=amab HTTP/2
Host: api.beth.lgbt
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://wecanalwaystell.com/
Origin: https://wecanalwaystell.com
Connection: keep-alive
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: cross-site
TE: trailers

HTTP/2 200 OK
date: Tue, 16 Apr 2024 22:08:22 GMT
content-type: application/json
content-length: 378
x-amzn-requestid: 4a7f34fe-8302-463d-bc4a-cd1ea477ba35
access-control-allow-origin: *
access-control-allow-headers: *
x-amz-apigw-id: WVuBMG10vHcEZaw=
access-control-allow-methods: *
x-amzn-trace-id: Root=1-661ef6d4-211dcc687138377d097db09a;Parent=53bc2264a055a0bd;Sampled=0;lineage=ccee91f0:0
X-Firefox-Spdy: h2

{
"attempt": 1,
"correct": 11,
"name": "KillAllTroon",
"scorecard_img": "images/scorecards/attempt-8e63ab4366b39b8547e6feb2a9bdd78673d8df907af1e5901ea14b0af922c0d4-1.png",
"skipped": 0,
"token": "\ud83d\udc99\ud83d\udc8e\ud83c\udf44\ud83c\udfe0\ud83c\udf80",
"uid": "8e63ab4366b39b8547e6feb2a9bdd78673d8df907af1e5901ea14b0af922c0d4",
"wrong": 9
}

We can see that all the imagest that it loaded have UID's. Those, along with your name are sent to the API server of the troon alongside some basic fingerprinting data, and it spews out a JSON response to generate the card, also with a UID.

It seems that there is definitve fingerprinting at play, otherwise this amount of UID fingerprinting and reliance on an external API wouldn't be necessary for this. However the troon was too stupid to write all of it in PHP so that it never gets exposed to the end user. Now we know to what exact address the requests gets sent to. So why not look at some possibilities of fucking with the troon?

It seems that the beth.lgbt domain is registered with Gandi. If it rings a bell, it's because they've screwed over Kiwi Farms before. Now, depending on whether or not they're simply troon adjacent or because they are very susceptible to complaints. If it's the latter, we could do some malicious compliance and report the domain for being used for malicious data harvesting. We have the evidence of some form of fingerprinting going on, we could take the Alinsky pill and use the same tactics that Liz used to fuck over this troon just for fun.

Another interesting tidbit is that wecanalwaystell.com is registered with Amazon, and all the images on the site are processed by Amazon S3 services. IIRC you pay per traffic with those, so if you generate enough traffic and data usage you could generate a hefty bill for the troon, however it seems that the troon foresaw that and added that limit, so that the servers won't get overburdened, resulting in a massive service bill.

So, DO NOT DO THE TEST AS IT FINGERPRINTS YOUR BROWSER, or at least do it via Tor. However, if you're interested, consider engaging in a bit of malicious compliance to throw a wrench in this troon's plans, because hey, it's fun, it's legal, and the troons hate us anyway, so it's worth a shot. ;)

EDIT: Ooooooookay I've got DEFINITIVE proof this is all a troon psyop. That beth.lgbt URL? That redirects to https://bethylamine.github.io/. Guess what it is.
1713307100734.png
So yeah, they expect you to put a transphobic thing in that field, and all of that gets sent to the API server of someone who hosts this. I'm genuinely upset that I was none the wiser to be careful about this.
 
Última edición:
If anything the trannies will find out what state I live in. Then they can find out that my state also has castle doctrine laws.
 
Atrás
Top Abajo