Estás usando un navegador desactualizado. Es posible que no muestre este u otros sitios web correctamente. Deberías actualizar o usar un navegador alternativo.
💬 Off-Topic"We Can Always Tell" - Competitive Clocking
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 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.
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.
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.
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.
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.
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.
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.
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.
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 feel like this one's going to tell me to put my unruly child on the naughty step, then reprimand me for 'enterin' into a dialogue'. "Why're you enterin' into a dialogue?"
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.
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.
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:
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.
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.
It's an actual medical thing, apparently; Their delicate, lady-like blood vessels can't deal with the pharma testosterone, so it fucks with their blood pressure, making them permanently all pink and flushed. Poor lil doods.