Good Carder
Professional
- Messages
- 531
- Reaction score
- 429
- Points
- 63
Introduction: The Last Line of Defense
Your IP is clean. Your canvas fingerprint is flawless. WebRTC isn't leaking. All the technical parameters of the antidetect are perfect. But the payment still fails with Fraudulent. You're confused. Where's the hole?The answer lies in the fact that you don't know how a real person moves.
Modern antifraud systems no longer simply collect static fingerprints — they analyze the dynamics of your behavior. They look at how you move your mouse, how quickly you fill out fields, how you scroll through the page, whether you pause before submitting a form. Using these microscopic patterns, they distinguish a bot from a human with 90–97% accuracy.
Behavioral biometrics has become the final frontier. If you don't emulate human behavior, you'll be identified in seconds.
In this article, we'll cover:
- What exactly do behavioral analysis systems track?
- How a real person moves - numerical measurements and patterns.
- Tools for emulating human behavior in automation.
- How to record and analyze your session to identify weaknesses.
- How to learn to distinguish scripted movement from real movement.
Part 1. What is behavioral fingerprinting and why has it become the main anti-fraud weapon?
Behavioral fingerprinting is a technology that analyzes unique patterns of user interaction with an interface: mouse movements, keystrokes, scrolling, taps (on mobile devices), and even micro-pauses between actions.Research shows that behavioral biometric scripts are already deployed on 15.8% of US banking websites and 1.79% of all web domains with detectable login pages. Leading providers include BioCatch, BehavioSec, NuData by Mastercard, Iovation by TransUnion, and others.
Why is behavioral fingerprinting so effective?
First, it's difficult to fake. Unlike IP addresses or user agents, which can be easily changed, behavioral patterns are unconscious and unique to each person. As experts note, "mouse movements offer a stronger and more difficult-to-fake signal for detecting bots, as they capture subtle motor patterns that are difficult for bots to authentically imitate."Second, it's passive. The system collects data without any user interaction — no captchas, no pop-ups. You don't even know you're being analyzed.
Third, it's continuous. The anti-fraud system monitors you from the moment the page loads until the transaction is completed, accumulating ever-increasing data for decision-making.
What exactly do behavioral analysis systems track?
| Type of behavior | What is being analyzed | Typical signs of a bot |
|---|---|---|
| Mouse movements | Trajectory, speed, acceleration, turning angles, pauses, microcorrections | Linear trajectories, constant speed, no "jitter" |
| Keystrokes | Key latency, rhythm, mistakes and corrections | Perfectly even spacing, no typos |
| Scroll | Speed, pauses, returns up | Perfectly smooth scrolling with constant speed |
| Clicks | Accuracy, hover time, pressure (on touchscreens) | Perfect hit on the center of the element, instant click without hovering |
| Touch gestures | Swipe trajectory, pressure, accidental touches | Too precise movements |
Modern machine learning platforms are trained on millions of real user sessions and can detect anomalies, even the most subtle ones. Neural networks analyze thousands of behavioral characteristics and classify interactions as "human" or "bot" with high accuracy.
Part 2. Real-World User Measurements: Speed, Mouse Patterns, and Scrolling
To emulate a human, you need to understand the numerical parameters of human behavior. Below are key metrics based on behavioral biometrics research.2.1. Form filling speed
Humans don't fill out forms instantly. There are pauses between keystrokes, depending on the complexity of the field (names are quick, addresses are slower, and card numbers require pauses between groups of digits). Research shows that even a highly experienced user spends about 21.6 seconds creating a simple contact form, and up to 306 seconds (5 minutes) on a more complex feedback form. An automated system completes the same task 8.8 times faster — in 34.8 seconds.What this means for you: Speed is the key indicator. If you fill out a 10-field form in 3 seconds, the anti-fraud system will instantly detect automation. Humans pause: they look at the field, think, and perhaps double-check what they've entered.
Recommended delays for manual or automated filling:
| Field type | Delay between characters | Delay before the field | Pause after the field |
|---|---|---|---|
| Name | 50-150 ms | 200-500 ms | 200-400 ms |
| Last name | 50-150 ms | 200-500 ms | 200-400 ms |
| 60-120 ms (faster) | 300-600 ms | 300-500 ms | |
| Card number | 80-200 ms + 300-600 ms pause after every 4 digits | 500-1000 ms | 500-800 ms |
| CVV | 100-250 ms | 400-800 ms | 200-400 ms |
| Address (street) | 70-150 ms | 500-1000 ms | 400-600 ms |
| City/Zip Code | 60-120 ms | 400-800 ms | 200-400 ms |
The total time to complete a typical payment form (8-10 fields) is 20-40 seconds. Less than 10 seconds is a red flag.
2.2 Mouse Movement Patterns
Humans don't move their mice in straight lines. Human mouse movements follow Bézier curves with natural acceleration and deceleration. When moving from point A to point B, humans don't travel in straight lines — they make micro-adjustments, small overshoots, and sometimes take indirect paths.Based on an analysis of the open DELBOT-Mouse dataset, which contains labeled mouse movement sessions from humans and bots, the following patterns were identified.
Visual patterns (scatter plots):
- Human: Movements appear organic, dense in central activity zones, and have circular/elliptical trajectories — indicating oscillation, hovering, or exploratory behavior.
- Bot: Displays sharp, linear, or geometric patterns; prominent convergence points (e.g., the center of a spiral); and dense activity along straight paths — indicating scripted or programmed behavior.
Heatmaps:
- Human: Wider, more diffuse focus, especially around the center of the screen; varied movement coverage.
- Bot: Tightly focused hot spots, often in corners and along straight lines - indicating repetitive, purposeful movements.
Displacement Distribution:
- Human: Gaussian curve centered around 300–400 pixels, indicating moderate, consistent movement lengths.
- Bot: Bimodal distribution - one peak at very small distances (micro-adjustments), another at large distances (>800 pixels), indicating sharp jumps.
Rotation angles (Angle Distribution):
- Human: Broad, nearly uniform distribution with minor peaks indicating a natural directional bias.
- Bot: Sharp peaks indicating a limited set of preferred directions of movement, which is typical for scripts.
2.3. Scroll patterns
The person scrolls unevenly:- Quickly scrolls through uninteresting sections.
- Reads important content slowly.
- Sometimes he stops and goes back up a little to reread.
- Scrolling speed varies depending on fatigue and interest.
The bot scrolls with unnatural smoothness or at perfectly equal intervals.
2.4. Click accuracy and hover time
The person doesn't click perfectly in the center of the button — they hit it with an offset of 3–15 pixels, sometimes they miss and have to adjust.- Hover-to-click: A person typically hovers over an element, pauses for 200-600 ms, and then clicks.
- Hit accuracy: even for an experienced user, the distribution of click coordinates has a variance of 5–10 pixels in either direction.
The bot clicks instantly and precisely at the target coordinates.
Part 3. Emulation Tools: Puppeteer + Stealth + Humanize
If you're automating your actions (and you need to for scaling), you'll need tools that emulate human behavior at the mouse, keyboard, and scrolling level.3.1. Puppeteer Extra + Stealth Plugin — Basic Stack
Puppeteer Extra is a wrapper for standard Puppeteer that supports plugins.Stealth Plugin is the most important plugin: it masks automated traces by removing HeadlessChrome headers and other bot-like features.
Installation and basic setup:
Bash:
npm install puppeteer puppeteer-extra puppeteer-extra-plugin-stealth
JavaScript:
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
(async () => {
const browser = await puppeteer.launch({
headless: false, // для тестов лучше visible
args: [
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-dev-shm-usage',
'--disable-accelerated-2d-canvas',
'--disable-gpu'
]
});
const page = await browser.newPage();
await page.goto('https://bot.sannysoft.com/'); // тестовый полигон
await page.screenshot({ path: 'result.png' });
await browser.close();
})();
What these arguments do: They reduce resource usage, avoid sandbox conflicts, and bypass potential detection triggers. A lighter, stealthier browser runs smoother and raises fewer suspicions.
Where to test after configuration:
- bot.sannysoft.com — a comprehensive bot behavior test.
- whatismybrowser.com — browser fingerprint details.
- httpbin.org/headers - what headers your bot sends.
3.2. Ghost Browser — TypeScript stealth layer for Puppeteer and Playwright
Ghost Browser is a more modern alternative to the basic Puppeteer Stealth. It's written in TypeScript and offers "human-like browsing: realistic mouse movements and interactions."Features:
- TypeScript-first with full typing.
- Plugin-oriented architecture, works with puppeteer-extra plugins.
- Compatibility with Docker.
- Playwright support in development.
Installation:
Bash:
npm install ghost-browser
javascript
import { launch } from 'ghost-browser';
const browser = await launch({
headless: false,
stealth: true
});
const page = await browser.newPage();
await page.goto('https://example.com');
3.3. Mouse movement emulation: from simple to complex
The simplest (but not sufficient) option is to use the standard page.mouse.move(x, y). This produces a straight line from the current position to the target — an instant sign of a bot.A better option is to add random points and Bézier curves.
JavaScript:
// Function for generating a Bezier curve between points
function bezierCurve(start, end, steps = 30) {
const cp1 = { x: start.x + (end.x - start.x) * 0.25 + (Math.random() - 0.5) * 50,
y: start.y + (end.y - start.y) * 0.25 + (Math.random() - 0.5) * 50 };
const cp2 = { x: start.x + (end.x - start.x) * 0.75 + (Math.random() - 0.5) * 50,
y: start.y + (end.y - start.y) * 0.75 + (Math.random() - 0.5) * 50 };
const points = [];
for (let t = 0; t <= steps; t++) {
const step = t / steps;
const x = Math.pow(1-step, 3) * start.x +
3 * Math.pow(1-step, 2) * step * cp1.x +
3 * (1-step) * Math.pow(step, 2) * cp2.x +
Math.pow(step, 3) * end.x;
const y = Math.pow(1-step, 3) * start.y +
3 * Math.pow(1-step, 2) * step * cp1.y +
3 * (1-step) * Math.pow(step, 2) * cp2.y +
Math.pow(step, 3) * end.y;
points.push({ x, y });
}
return points;
}
// Simulate variable-speed movement
async function humanMouseMove(page, targetX, targetY) {
const start = await page.evaluate(() => ({
x: window.mouseX || 500,
y: window.mouseY || 300
}));
const points = bezierCurve(start, { x: targetX, y: targetY }, 40);
for (const point of points) {
await page.mouse.move(point.x, point.y);
// Variable delay between points
await page.waitForTimeout(Math.random() * 20 + 5);
}
// Micro correction at the end
for (let i = 0; i < 3; i++) {
await page.mouse.move(
targetX + (Math.random() - 0.5) * 5,
targetY + (Math.random() - 0.5) * 5
);
await page.waitForTimeout(20 + Math.random() * 30);
}
await page.mouse.move(targetX, targetY);
}
Specialized libraries:
- @@extra /humanize — plugin for emulating human input (mouse movements) for Playwright and Puppeteer.
- Ghost Cursor is a tool that makes cursor movements more human-like, as opposed to the instant jump of a standard Puppeteer click.
3.4. Emulating keystrokes
JavaScript:
async function humanType(page, selector, text) {
await page.click(selector);
await page.waitForTimeout(200 + Math.random() * 300);
for (let i = 0; i < text.length; i++) {
const char = text[i];
// Random delay between characters
const delay = 50 + Math.random() * 100;
await page.keyboard.type(char, { delay });
// Sometimes we pause (the person watches)
if (Math.random() < 0.05) {
await page.waitForTimeout(300 + Math.random() * 700);
}
}
}
3.5. Selenium с Action Class
If you're using Selenium, the Action Class is used to emulate mouse movements and complex gestures — it gives you "granular control over actions such as mouse movements, key presses, hovers, drag-and-drops, and double-clicks."
Python:
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
actions = ActionChains(driver)
# Human-like movement to an element
element = driver.find_element(By.ID, "submit-button")
actions.move_to_element_with_offset(element, 5, 3) # offset from the center
actions.pause(0.3) # pause before click
actions.click()
actions.perform()
Part 4. How to Record and Analyze Your Session (rrweb, OpenReplay)
The best way to understand what a real human session is like is to record your own and then emulate it.4.1. rrweb — Record and Replay Web
rrweb is an open-source library for recording and replaying web sessions. Rather than taking screenshots, it records DOM events (DOM modifications, mouse movements, clicks, keyboard input) along with timestamps and then recreates the session in the browser.What can be recorded:
- Mouse movements (coordinates, trajectories).
- Clicks and hovers.
- Keyboard input with timings.
- Scroll.
- DOM changes (appearance/disappearance of elements).
Easy integration of rrweb on your test page:
HTML:
<!-- Install via CDN -->
<script src="https://cdn.jsdelivr.net/npm/rrweb@latest/dist/rrweb.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/rrweb-player@latest/dist/index.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/rrweb-player@latest/dist/style.css"/>
<script>
let events = [];
// Start recording
const stopFn = rrweb.record({
emit(event) {
events.push(event);
},
// Record mouse movements
recordMouseMove: true,
// Record scrolling
recordScroll: true,
// Record keyboard input (except passwords)
recordInput: true
});
// Stop recording after 60 seconds
setTimeout(() => {
stopFn();
// Save events to localStorage or send to the server
console.log('Events recorded:', events.length);
localStorage.setItem('session', JSON.stringify(events));
}, 60000);
// Replay a recorded session
function replaySession() {
const events = JSON.parse(localStorage.getItem('session'));
new rrwebPlayer({
target: document.body,
props: {
events,
width: 1024,
height: 768,
autoPlay: true
}
});
}
</script>
4.2. How to analyze your recorded session
Once you've recorded your form filling session, play it back and notice:- Total session time. How many seconds does it take from page load to clicking "Pay"? A person spends at least 20-40 seconds on even a simple form.
- Mouse movements. Is your trajectory chaotic or straight? Are there any micro-corrections or oscillations? Are you hovering over other elements or moving strictly toward your target?
- Delays between fields. Do you switch instantly or pause? Do you visually inspect the completed field?
- Scrolling. Do you scroll evenly or pause, occasionally returning to the top?
- Pauses before critical actions. Do you pause for 0.5-1 second before clicking "Submit" (like most people checking forms)?
4.3. OpenReplay – a more powerful alternative
If you need a ready-made platform for recording and analyzing sessions with advanced analytics, consider OpenReplay — an open-source alternative to FullStory and LogRocket. It offers integration with rrweb and professional tools for user behavior analysis.Part 5. Practice: How to Learn to Distinguish Scripted Movement from Real Movement
This section is a practical exercise. Take your recorded session (via rrweb) and compare it to how the scripts work.5.1. Visual Comparison – What to Watch in the Video
Signs of scripted movement (red flags):| Sign | What it looks like in the recording | Why is this bad? |
|---|---|---|
| Perfectly straight mouse line | The cursor moves from point A to point B in a straight line without deviations | A person never moves perfectly straight. |
| Constant speed of movement | Pixel by pixel, equal time intervals | A person's speed is constantly changing. |
| Instant clicks without hovering | The cursor jumps to the button and immediately clicks | A person first points, hovers, and then clicks. |
| Absolute accuracy of hit | Each click is strictly in the center of the element, without displacement | A person clicks with an offset of 5-15 pixels |
| Even intervals between keystrokes | time1=100ms, time2=100ms, time3=100ms | A person types at variable speeds. |
| No typos or corrections | Every character is perfect the first time | People sometimes make mistakes, erase and retype |
| Scroll at a constant speed | Smooth movement without stops | A man stops to read |
| The cursor never goes outside the form | The mouse "sticks" only to input fields | The person moves the mouse erratically, moving onto other parts of the screen |
Signs of human movement (green flags):
| Sign | What does it look like? |
|---|---|
| Curved trajectories | The movements resemble Bezier curves with natural accelerations and decelerations. |
| Microcorrections at the end of the movement | The cursor first comes slightly past the target, then turns further |
| Variable speed | Fast bursts are followed by slow pauses |
| Hover pauses | The cursor hovers over the button for 200-600 ms before clicking. |
| Random "exploratory" movements | The mouse sometimes goes to the side and comes back |
| Errors and corrections in the text | A few extra letters, then Backspace |
| Uneven scrolling with returns | The page scrolls down, then up a bit to reread. |
5.2. Test Exercise: "Guess the Bot"
Take two session recordings: one yours (a human), the other generated by a simple script without behavior emulation. Watch both in slow motion (0.5x) and try to guess which is the bot. Then do the same at normal speed.What you'll see: at normal speed, the differences aren't always obvious. But as soon as you slow down the recording, all the "seams" of automation become visible: perfectly straight lines, constant speed, instant clicks.
Advanced exercise: record your session, then try to emulate it exactly using a script — the same pauses, the same trajectory, the same speed. This will show how difficult (or, conversely, easy) it is to fake human behavior.
Part 6. A Beginner's Checklist: How to Test Your Behavior Before Carding
Before each important hit, go through this checklist. You can do this mentally or record the session via rrweb and analyze it.Before you begin (preparation):
- Allocate at least 2-3 minutes for the session. Accelerated hitting looks suspicious.
- Warm up your profile: visit the website 10-15 minutes before hitting, read the product description, and browse the pages.
When filling out the form (if done manually):
- Pause between fields: 0.5–1.5 seconds, as if you were looking at the next field.
- Don't fill in the fields in perfect order from top to bottom without stopping - occasionally return to the previous field.
- Move the mouse along curves, not straight lines. Aim at the buttons, slightly missing, and then turn.
- Scroll the page with stops. Don't scroll in one motion.
If you use automation:
- Add variable delays between characters (50–150 ms).
- Add pauses between fields (200–800 ms).
- Add random mouse micro movements (Bezier curves).
- Add a hover pause before clicking the button (200–600 ms).
- Add 1-2 errors and then correct them in the text fields (simulating typos).
- Scroll at varying speeds, pause, and occasionally move back up a bit.
After filling out (before sending):
- Pause for 0.5–1 second before clicking “Pay” (the person checks the entered data).
- Don't press Enter - people are more likely to click the button.
Conclusion: Behavior is the last mile
You can have a perfect IP address, flawless anti-detection, and a live map. But if your behavior betrays a bot, all these efforts are wasted.Modern antifraud systems are trained on millions of real user sessions. They know mouse movements, typing speed, scrolling patterns, and pauses. And they distinguish automation from real people with 90–97% accuracy.
The key findings of this article:
- Behavioral biometrics are already ubiquitous. 15.8% of banking websites use scripts to analyze behavior. This trend is only set to intensify.
- Humans aren't perfect machines. Mouse movements follow Bézier curves with micro-corrections. Typing speed varies. There are pauses and errors. Imitate this.
- The tools are there. Puppeteer Extra + Stealth + Ghost Cursor + @@extra /humanize provide everything you need for high-quality emulation.
- Record and analyze your sessions. rrweb is your best friend. Observe yourself from a distance and look for areas where you resemble a bot.
- Train your eye. Learn to distinguish scripted movement from human movement in video. It's a skill that pays off with every debug.
A quick one-liner:
"Bezier curves instead of straight lines, variable speed instead of constant, pauses and errors instead of perfect precision — that's the only way you look human."
