Mochi.js: اتوماسیون مرورگر که شبیه کاربر واقعیه
خلاصهٔ کاملتر
ابزارهای رایج اتوماسیون مرورگر مثل patchright، puppeteer-real-browser و undetected-chromedriver یه مشکل مشترک دارن: اثرانگشت مرورگر رو بهصورت تصادفی و مستقل جعل میکنن. یعنی ممکنه یه User-Agent مک بچینی کنار یه WebGL رندرر لینوکسی، یا یه مقدار hardwareConcurrency ناهماهنگ با بقیه سیگنالها انتخاب بشه. هر پروبی که دو سطح رو با هم مقایسه کنه، جعل رو لو میده. علاوه بر این، این ابزارها ترافیک HTTP رو از بیرون Chromium ارسال میکنن، که یعنی اثر TLS (شناختهشده با نام JA4) نشون میده این Chrome واقعی نیست.
Mochi.js این مشکل رو از ریشه حل میکنه. همه سطوح اثرانگشت — canvas، WebGL، audio، fonts، timing، MediaDevices و ... — از یه جفت (profile, seed) ثابت و از طریق یه گراف جهتدار بدون حلقه (DAG) با ۴۸ قانون مشتق میشن. اینطوری هیچوقت یه UA مک کنار یه WebGL لینوکسی نمیشینه. ترافیک شبکه هم — چه page.goto، چه session.fetch — مستقیم از Chromium رد میشه و JA4/JA3/H2 واقعاً Chromeاند، چون Chromium خودش کلاینته.
const session = await mochi.launch({ profile: "linux-chrome-stable", seed: "user-12345" });
const page = await session.newPage();
await page.goto("https://httpbin.org/headers");
console.log(session.profile.userAgent);
await session.close();رفتار کاربر هم فقط یه mouse helper ساده نیست. humanClick، humanType و humanScroll بر اساس مدلهای بیومکانیکی واقعی کار میکنن: مسیرهای بزیه با overshoot و correction، زمانبندی بر اساس قانون فیتس، تأخیرهای لگنرمال بین کلیدها، و jitter گاوسی — همه اینا بر اساس پارامترهای پروفایل مثل hand، tremor و wpm تنظیم میشن.
نتیجه عملی: Mochi v0.4.0 روی یه IP دیتاسنتر لینوکسی در برابر FingerprintJS Pro v4 نمره bot: not_detected و suspect_score: 8 گرفته. در مقایسه، Chrome پچشده معمولی نمره ۱۲ میگیره و CloakBrowser نمره ۱۸. نکته جالب اینه که mochi عمداً پروفایل لینوکس رو پیشفرض گذاشته، چون لینوکس بین توسعهدهها و محققان واقعاً رایجه و WAFها یاد گرفتن لینوکس رو فلگ نکنن — سیگنال اصلی همیشه HeadlessChrome بوده، نه لینوکس.
نکات کلیدی:
- همه اثرانگشتها از یه جفت
(profile, seed)مشترک ساخته میشن تا ناهماهنگی بین سطوح حذف بشه - ترافیک شبکه از Chromium رد میشه، نه لایه HTTP جداگانه، پس JA4/JA3 واقعیان
- رفتار انسانی با مدلهای بیومکانیکی واقعی شبیهسازی میشه
- روی FingerprintJS Pro v4 نمره
bot: not_detectedگرفته - روی Bun اجرا میشه و با TypeScript نوشته شده




